Compare commits

..
Author SHA1 Message Date
Robby RussellandClaude Opus 5.5 4c184381d0 fix(key-bindings): make numeric keypad work in application mode
We switch the terminal into application keypad mode (smkx) so terminfo
key bindings are valid, but that also makes the numeric keypad send
escape sequences (\eOp..\eOy, \eOM, ...) that were never bound. Keypad
Enter rang the bell instead of running the command.

Map each keypad sequence back to the plain key with `bindkey -s`, so it
behaves exactly like the main keyboard key in emacs, viins and vicmd.

Fixes #13928

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:03:38 -07:00
3 changed files with 17 additions and 2 deletions
+17
View File
@@ -110,6 +110,23 @@ bindkey -M emacs '^[[1;5D' backward-word
bindkey -M viins '^[[1;5D' backward-word
bindkey -M vicmd '^[[1;5D' backward-word
# [Keypad] - application mode (enabled above) makes the keypad send escape
# sequences instead of characters, so map them back to the plain keys
() {
local seq key
local -A keypad=(
'^[Op' '0' '^[Oq' '1' '^[Or' '2' '^[Os' '3' '^[Ot' '4'
'^[Ou' '5' '^[Ov' '6' '^[Ow' '7' '^[Ox' '8' '^[Oy' '9'
'^[On' '.' '^[Ol' ',' '^[Ok' '+' '^[Om' '-' '^[Oj' '*'
'^[Oo' '/' '^[OX' '=' '^[OM' '^M'
)
for seq key in "${(@kv)keypad}"; do
bindkey -M emacs -s "$seq" "$key"
bindkey -M viins -s "$seq" "$key"
bindkey -M vicmd -s "$seq" "$key"
done
}
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark
bindkey -s '\el' '^q ls\n' # [Esc-l] - run command: ls
-1
View File
@@ -156,7 +156,6 @@ plugins=(... git)
| `grba` | `git rebase --abort` |
| `grbc` | `git rebase --continue` |
| `grbi` | `git rebase --interactive` |
| `grbia` | `git rebase --interactive --autosquash` |
| `grbmi` | `git rebase $(git_main_branch) --interactive` |
| `grbmia` | `git rebase $(git_main_branch) --interactive --autosquash` |
| `grbo` | `git rebase --onto` |
-1
View File
@@ -357,7 +357,6 @@ alias grb='git rebase'
alias grba='git rebase --abort'
alias grbc='git rebase --continue'
alias grbi='git rebase --interactive'
alias grbia='git rebase --interactive --autosquash'
alias grbo='git rebase --onto'
alias grbs='git rebase --skip'
alias grbd='git rebase $(git_develop_branch)'