98a28017
docs: a split arrow key closes the picker — the trade-off, and the fix if it's ever wrong
a73x 2026-08-28 19:53
Commit message
README.md
| Old | New | ||
|---|---|---|---|
| @@ -91,7 +91,7 @@ The focused tile has the terminal, and only the prefix is held back: | |||
| 91 | | `Ctrl-\` `1`-`9` | focus tile N — the digit on that tile's label bar. A new tile takes the lowest free digit, so end 2 of 1 2 3 and the next session is 2 again | | 91 | | `Ctrl-\` `1`-`9` | focus tile N — the digit on that tile's label bar. A new tile takes the lowest free digit, so end 2 of 1 2 3 and the next session is 2 again | |
| 92 | | `Ctrl-\` `x` | end the focused session — the daemon hangs up its shell and every attached client sees the exit. With other clients on it the daemon refuses the first press and says how many; a second `x` within 3 seconds forces it | | 92 | | `Ctrl-\` `x` | end the focused session — the daemon hangs up its shell and every attached client sees the exit. With other clients on it the daemon refuses the first press and says how many; a second `x` within 3 seconds forces it | |
| 93 | | `Ctrl-\` `w` | zoom out to the wall | | 93 | | `Ctrl-\` `w` | zoom out to the wall | |
| 94 | | `Ctrl-\` `s` | the host picker: a popup listing every daemon on the wall with what its last poll said — `N sessions`, `no sessions`, `unreachable`, `connecting`. `j`/`k` or the arrows move, `1`-`9` pick a row, Enter or `c` starts a session on the selected machine and closes, `x` forgets it (the file line goes, the sessions keep running), `a` adds one by spelling — `HOST`, `quic://HOST[:PORT]` or `--sock PATH`, Enter adds and Esc returns to the rows. Esc or `s` closes. The spelling editor takes printable ASCII only, so a path or hostname with any other byte in it goes in the hosts file or on argv instead. While the picker is open every key is its own: nothing reaches a session | | 94 | | `Ctrl-\` `s` | the host picker: a popup listing every daemon on the wall with what its last poll said — `N sessions`, `no sessions`, `unreachable`, `connecting`. `j`/`k` or the arrows move, `1`-`9` pick a row, Enter or `c` starts a session on the selected machine and closes, `x` forgets it (the file line goes, the sessions keep running), `a` adds one by spelling — `HOST`, `quic://HOST[:PORT]` or `--sock PATH`, Enter adds and Esc returns to the rows. Esc or `s` closes — and an arrow key split across two reads reads as a bare Escape, so it closes too. The spelling editor takes printable ASCII only, so a path or hostname with any other byte in it goes in the hosts file or on argv instead. While the picker is open every key is its own: nothing reaches a session | |
| 95 | | `Shift+PageUp` / `Shift+PageDown` | scrollback, a screen at a time (any other key returns to live) | | 95 | | `Shift+PageUp` / `Shift+PageDown` | scrollback, a screen at a time (any other key returns to live) | |
| 96 | | mouse wheel | scrollback, three rows a notch (arrow keys to a full-screen app) | | 96 | | mouse wheel | scrollback, three rows a notch (arrow keys to a full-screen app) | |
| 97 | | drag with the left button | select what it crosses, copy on release | | 97 | | drag with the left button | select what it crosses, copy on release | |
docs/decisions.md
| Old | New | ||
|---|---|---|---|
| @@ -7346,6 +7346,14 @@ is mux's, because a script reads that code — so `Tile.keeps_wall` does, set | |||
| 7346 | by `pickBirth` and read by `endAction` before the exit arm. A piped `mux` has | 7346 | by `pickBirth` and read by `endAction` before the exit arm. A piped `mux` has |
| 7347 | no wall to leave standing and still exits with the code. | 7347 | no wall to leave standing and still exits with the code. |
| 7348 | 7348 | ||
| 7349 | Nothing is held across reads, so a SPLIT arrow closes the popup: an Esc that | ||
| 7350 | arrives alone is a bare Escape, and the `[A` behind it lands in the next read | ||
| 7351 | with `picking` already false and goes to the focused session. Holding the Esc | ||
| 7352 | back would make every real Escape wait for the next keystroke, which is worse | ||
| 7353 | — terminals write an arrow as one three-byte write, and the `:` prompt has | ||
| 7354 | taken the same trade since it existed. A hold buffer is the fix if a terminal | ||
| 7355 | that splits is ever found. | ||
| 7356 | |||
| 7349 | ## 2026-08-28 — a new tile takes the lowest free digit | 7357 | ## 2026-08-28 — a new tile takes the lowest free digit |
| 7350 | 7358 | ||
| 7351 | Reuse, not renumbering. `Ctrl-\ 1-9` addresses digits, so a digit an ended | 7359 | Reuse, not renumbering. `Ctrl-\ 1-9` addresses digits, so a digit an ended |