vim ctrl+w window-command family + global multi-chord matcher (T-404)
The structural piece: a global SequenceMatcher in root_shell, at the HardwareKeyboard level so a focused editor/pane can't swallow the second chord. It only STARTS on a modified chord that prefixes a sequence (ctrl+w), so bare-key sequences (gg, dd) stay editor/pane-local and single-chord presets are untouched; bare ctrl+w still fires editor.close after the D-82 timeout. vim.yaml binds the window family under vim.normal||vim.visual: ctrl+w h/l → panel.focus.left/right, j → dock.toggle, w / ctrl+w → focus.nextPanel, shift+w → focus.previousPanel, o → panel.focusMode, q/c → editor.close. Tests: ctrl+w sequence resolution at the keymap layer, plus app-level integration (ctrl+w o toggles focus mode; bare ctrl+w closes the editor after the timeout; a bare g is not grabbed globally). This is the global matcher T-405 part 2 (gt/gT) was waiting on — though bare-g sequences need more thought (g is editor-local), noted for that follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -100,6 +100,34 @@ bindings:
|
||||
keys: [o, enter]
|
||||
when: "vim.normal && !editor.focused"
|
||||
|
||||
# ---- ctrl+w window-command family (T-404) ----------------------------
|
||||
# Multi-chord sequences resolved by the GLOBAL matcher (root_shell), so they
|
||||
# work from any focus. Bare ctrl+w still closes the editor after the ambiguity
|
||||
# timeout (the editor.close binding below / contributions layer). The 3-column
|
||||
# clide layout approximates vim's window grid: h/l focus left/right panels,
|
||||
# j toggles the dock, o is "only" (focus mode), q/c close the editor.
|
||||
- intent: command:panel.focus.left
|
||||
keys: ctrl+w h
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: command:panel.focus.right
|
||||
keys: ctrl+w l
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: command:dock.toggle
|
||||
keys: ctrl+w j
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: focus.nextPanel
|
||||
keys: [ctrl+w w, ctrl+w ctrl+w]
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: focus.previousPanel
|
||||
keys: ctrl+w shift+w # ctrl+w W
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: command:panel.focusMode
|
||||
keys: ctrl+w o
|
||||
when: "vim.normal || vim.visual"
|
||||
- intent: command:editor.close
|
||||
keys: [ctrl+w q, ctrl+w c]
|
||||
when: "vim.normal || vim.visual"
|
||||
|
||||
# ---- Mode transitions ------------------------------------------------
|
||||
- intent: command:vim.mode.visual
|
||||
keys: v
|
||||
|
||||
Reference in New Issue
Block a user