feat: use readable keybinding notation

This commit is contained in:
Valdemar Lorenzen
2026-10-05 16:07:24 +02:00
parent 3fd89fcbed
commit bb242b35b6
4 changed files with 138 additions and 49 deletions
+11 -4
View File
@@ -59,14 +59,21 @@ By default, vamp loads `$XDG_CONFIG_HOME/vamp/config.rb`, or `~/.config/vamp/con
Vamp.configure do |config|
config.plugin "plugins/greeting.rb"
config.bind "g", "greet"
config.bind "<C-r>", "core.redo"
config.bind "<C-c>", "core.normal", mode: "insert"
config.bind "ctrl+r", "core.redo"
config.bind "shift+j", "core.join_lines"
config.bind "ctrl+c", "core.normal", mode: "insert"
end
```
Plugin paths resolve relative to the config file, not the shell's working directory. `config.bind key, target, mode: "normal"` overrides one key in `normal`, `insert`, or `command` mode; the mode defaults to `normal`. Targets are the built-in actions below or exact registered Ex/plugin command names (`"w"`, `"greet"`, etc., without `:` or arguments). Ex/plugin commands can only be bound in Normal mode.
Keys are single non-control Unicode characters (case-sensitive), `<Esc>`, `<Enter>`, `<Backspace>`, `<Delete>`, `<Left>`, `<Right>`, `<Up>`, `<Down>`, `<Home>`, `<End>`, `<Tab>`, `<Space>`, or `<C-a>` through `<C-z>`. Ctrl letters are case-insensitive. Terminals share `<C-h>` with Backspace, `<C-i>` with Tab, and `<C-j>`/`<C-m>` with Enter; these names address the same binding. Key sequences and Alt/Super combinations are not supported.
Key notation follows [Herdr's readable style](https://herdr.dev/docs/configuration/#keybindings). Literal non-control Unicode characters are case-sensitive (`n`, `J`, `+`); named keys and modifiers are case-insensitive:
- Named keys: `esc`, `enter`, `backspace`, `delete`, `left`, `right`, `up`, `down`, `home`, `end`, `tab`, `space`.
- Modifiers: `ctrl+a` through `ctrl+z`, and `shift+a` through `shift+z`. `shift+j` and `J` address the same key.
- Named punctuation: `minus`, `comma`, `ampersand`, `plus`, `backtick`. Each addresses the same binding as its literal character.
Terminals share `ctrl+h` with `backspace`, `ctrl+i` with `tab`, and `ctrl+j`/`ctrl+m` with `enter`; these names address the same binding. Only a single modifier on an ASCII letter is supported. Key sequences, prefix mode, Alt/Cmd/Super, combined modifiers, modified special keys, and Vim-style angle-bracket notation are rejected rather than silently treated as another key.
| Available modes | Built-in targets |
| --- | --- |
@@ -83,7 +90,7 @@ Adding a binding keeps the original key. Pass `nil` to disable a key, including
Vamp.configure do |config|
config.bind "n", "core.insert"
config.bind "i", nil
config.bind "<Space>", "core.command"
config.bind "space", "core.command"
config.bind ":", nil
end
```