aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-13 13:43:12 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-13 13:43:12 +0100
commitdd739c9f47b11950d0fde6a19c5c36a499be5bd4 (patch)
treeb4ee77968d0f55606299299b47adb619e4a246d0
parentcb37af5837bcb9c48505abdf5f015ba96f77c320 (diff)
downloaddotfiles-dd739c9f47b11950d0fde6a19c5c36a499be5bd4.tar.gz
dotfiles-dd739c9f47b11950d0fde6a19c5c36a499be5bd4.tar.bz2
dotfiles-dd739c9f47b11950d0fde6a19c5c36a499be5bd4.zip
feat(zellij): relocate mode-entry keys to Alt+Shift+* to stop shadowing shell/nvim
Zellij's default Ctrl+* mode-entry keys (Ctrl+p/t/r/s/o/g/b/q) were intercepted before reaching the inner shell/editor, shadowing zsh fzf bindings (Ctrl+t), history navigation (Ctrl+p/n), nvim jumps (Ctrl+o), save (Ctrl+s), etc. Unbind all conflicting Ctrl+* entries and relocate mode-entry to Alt+Shift+<first-letter-of-mode>: Alt+Shift+P Pane Alt+Shift+T Tab Alt+Shift+R Resize Alt+Shift+S Scroll Alt+Shift+O Session Alt+Shift+Z Locked (Z avoids Treewalker Alt+Shift+h/j/k/l swap) Alt+Shift+Q Quit TMUX-compat mode dropped. Only Ctrl+h/j/k/l remain bound in zellij (for vim-zellij-navigator); every other Ctrl+* now passes through. Requires fresh zellij session (kill-all-sessions -y) to take effect.
-rw-r--r--KEYBINDS.md9
-rw-r--r--dot_config/zellij/config.kdl14
2 files changed, 23 insertions, 0 deletions
diff --git a/KEYBINDS.md b/KEYBINDS.md
index d36daaa..18129da 100644
--- a/KEYBINDS.md
+++ b/KEYBINDS.md
@@ -207,6 +207,15 @@ All binds are in `shared_except "locked"` mode (active everywhere except locked
| `Alt-q` | Detach session |
| `Alt--` / `Alt-=` | Resize decrease / increase |
| `Ctrl-h/j/k/l` | Move focus (vim-zellij-navigator) |
+| `Alt-Shift-P` | Enter Pane mode |
+| `Alt-Shift-T` | Enter Tab mode |
+| `Alt-Shift-R` | Enter Resize mode |
+| `Alt-Shift-S` | Enter Scroll mode |
+| `Alt-Shift-O` | Enter Session mode |
+| `Alt-Shift-Z` | Enter Locked mode |
+| `Alt-Shift-Q` | Quit zellij |
+
+Mode-entry keys are relocated from their zellij defaults (`Ctrl-p/t/r/s/o/g/q`, `Ctrl-b` TMUX dropped) to `Alt-Shift-*` so the `Ctrl-*` keys pass through to zsh and nvim. Only `Ctrl-h/j/k/l` remain intercepted (for pane navigation).
## Zsh
diff --git a/dot_config/zellij/config.kdl b/dot_config/zellij/config.kdl
index 5f7e193..569a52e 100644
--- a/dot_config/zellij/config.kdl
+++ b/dot_config/zellij/config.kdl
@@ -23,6 +23,20 @@ pane_frames false
// Custom keybindings (merged with defaults)
keybinds {
shared_except "locked" {
+ // Free up Ctrl+* keys so they pass through to zsh / nvim.
+ // Mode-entry relocated to Alt+Shift+* below. Ctrl+h/j/k/l are kept
+ // by the vim-zellij-navigator binds further down.
+ unbind "Ctrl b" "Ctrl g" "Ctrl n" "Ctrl o" "Ctrl p" "Ctrl q" "Ctrl s" "Ctrl t"
+
+ // Mode entry (Alt+Shift+<first-letter-of-mode>)
+ bind "Alt Shift P" { SwitchToMode "Pane"; }
+ bind "Alt Shift T" { SwitchToMode "Tab"; }
+ bind "Alt Shift R" { SwitchToMode "Resize"; }
+ bind "Alt Shift S" { SwitchToMode "Scroll"; }
+ bind "Alt Shift O" { SwitchToMode "Session"; }
+ bind "Alt Shift Z" { SwitchToMode "Locked"; }
+ bind "Alt Shift Q" { Quit; }
+
// Direct tab access (Alt+number)
bind "Alt 1" { GoToTab 1; }
bind "Alt 2" { GoToTab 2; }