fix(tiles): no tile onto an empty slot, header focus on click, arrow chords skip text fields

The owner's answers on moving tiles:

- "dont move the tile": an empty slot no longer takes a tile. A slot is
  always the last cell, so a move there shifted every tile after it.
  Each drop target now says what it accepts (_acceptTabDrops'
  `accepts`): a tile takes any session but its own, an empty slot only a
  session not tiled yet. A refused drag is still held (dropEffect none,
  no highlight), and dropSessionOnSlot refuses a tiled session too, its
  tab included. A session not tiled yet still joins on a slot.
- A cancelled drag changes nothing, focus included (best practice): the
  header focuses its tile on click, never on press, so a drag that ends
  with Escape or outside leaves focus and the idle alert alone. The body
  keeps press-to-focus, so focus still moves before a press reaches
  xterm. The rename input stops its own clicks.
- A tiled tab dropped on the zoomed tile stays refused (confirmed).
- The Alt+Shift+Arrow focus chords skip a text field too (best
  practice), as the move chords already did: shifted arrows select
  there. Toggle and zoom are not text-editing keys and are unchanged.

Docs: the wiki, the spec's as-built bullet (with the owner's answers),
the invariants and CLAUDE.md say so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer
2026-10-08 01:28:20 +02:00
parent adeb22d7b2
commit aecada8c56
9 changed files with 217 additions and 84 deletions
+8 -6
View File
@@ -65,8 +65,10 @@ whose agent exited inside its pane says so instead; close that session from `⋯
## Moving tiles
Drag a tile by its header (anywhere but its buttons) onto another tile and the two trade
places. Drop it on an empty slot and it moves there, to the end of the grid. Press `Escape`
or let go anywhere else and nothing moves. The dropped tile takes the focus.
places; the dropped tile takes the focus. Empty slots are for adding sessions (drop a tab
there), so a tile cannot be dropped on one. Press `Escape` or let go anywhere else and nothing
changes, not even which tile has the focus: a header focuses its tile when you click it, not
when you press it.
With the keyboard, `Ctrl+Shift+Arrows` moves the focused tile left, right, up or down: it
trades places with the tile next to it (the one `Alt+Shift+Arrows` would focus) and keeps the
@@ -90,10 +92,10 @@ saved with the grid.
All of them can be rebound in App Settings → Shortcuts, where **Remove Focused Tile** can
also get a key. Outside the grid, `Alt+Shift+Arrows`, `Ctrl+Shift+Arrows` and
`Alt+Shift+Enter` go to the terminal as usual. While it is open, `Ctrl+Shift+Arrows` in a text
field (renaming a tile, the file editor) still selects by word; inside a tile it moves the tile,
so a terminal editor there (nano, micro, emacs) does not get it. With the Tiles setting off,
`Ctrl+Shift+G` does nothing.
`Alt+Shift+Enter` go to the terminal as usual. While it is open, `Alt+Shift+Arrows` and
`Ctrl+Shift+Arrows` in a text field (renaming a tile, the file editor) still select text there;
inside a tile they focus and move tiles, so a terminal editor there (nano, micro, emacs) does
not get them. With the Tiles setting off, `Ctrl+Shift+G` does nothing.
## Leaving the grid