Keybindings Skill
Create or modify ~/.claude/keybindings.json to customize keyboard shortcuts.
CRITICAL: Read Before Write
Always read ~/.claude/keybindings.json first (it may not exist yet). Merge changes with existing bindings — never replace the entire file.
- Use Edit tool for modifications to existing files
- Use Write tool only if the file does not exist yet
File Format
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor"
}
}
]
}
Always include the $schema and $docs fields.
Keystroke Syntax
Modifiers (combine with +):
ctrl (alias: control)
alt (aliases: opt, option) — note: alt and meta are identical in terminals
shift
meta (aliases: cmd, command)
Special keys: escape/esc, enter/return, tab, space, backspace, delete, up, down, left, right
Chords: Space-separated keystrokes, e.g. ctrl+k ctrl+s (1-second timeout between keystrokes)
Examples: ctrl+shift+p, alt+enter, ctrl+k ctrl+n
Unbinding Default Shortcuts
Set a key to null to remove its default binding:
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
How User Bindings Interact with Defaults
- User bindings are additive — they are appended after the default bindings
- To move a binding to a different key: unbind the old key (
null) AND add the new binding
- A context only needs to appear in the user's file if they want to change something in that context
Common Patterns
Rebind a key
To change the external editor shortcut from ctrl+g to ctrl+e:
{
"context": "Chat",
"bindings": {
"ctrl+g": null,
"ctrl+e": "chat:externalEditor"
}
}
Add a chord binding
{
"context": "Global",
"bindings": {
"ctrl+k ctrl+t": "app:toggleTodos"
}
}
Behavioral Rules
- Only include contexts the user wants to change (minimal overrides)
- Validate that actions and contexts are from the known lists below
- Warn the user proactively if they choose a key that conflicts with reserved shortcuts or common tools like tmux (
ctrl+b) and screen (ctrl+a)
- When adding a new binding for an existing action, the new binding is additive (existing default still works unless explicitly unbound)
- To fully replace a default binding, unbind the old key AND add the new one
Validation
Claude Code validates ~/.claude/keybindings.json when it loads; warnings go to the debug log. After editing the file, re-check it against the rules below and fix anything that matches.
Common Issues and Fixes
| Issue |
Cause |
Fix |
keybindings.json must have a "bindings" array |
Missing wrapper object |
Wrap bindings in { "bindings": [...] } |
"bindings" must be an array |
bindings is not an array |
Set "bindings" to an array: [{ context: ..., bindings: ... }] |
Unknown context "X" |
Typo or invalid context name |
Use exact context names from the Available Contexts table |
Duplicate key "X" in Y bindings |
Same key defined twice in one context |
Remove the duplicate; JSON uses only the last value |
"X" may not work: ... |
Key conflicts with terminal/OS reserved shortcut |
Choose a different key (see Reserved Shortcuts section) |
Invalid action for "X" |
Action value is not a string or null |
Actions must be strings like "app:help" or null to unbind |
Example validation warnings (debug log)
[keybindings] Found 2 validation issue(s)
[keybindings] [error] Unknown context "chat" — Valid contexts: Global, Chat, Autocomplete, ...
[keybindings] [warning] "ctrl+c" may not work: Terminal interrupt (SIGINT)
Errors prevent bindings from working and must be fixed. Warnings indicate potential conflicts but the binding may still work.
Reserved Shortcuts
Non-rebindable (errors)
ctrl+c — Cannot be rebound - used for interrupt/exit (hardcoded)
ctrl+d — Cannot be rebound - used for exit (hardcoded)
ctrl+m — Cannot be rebound - identical to Enter in terminals (both send CR)
ctrl+[ — Cannot be rebound - identical to Escape in terminals
ctrl+i — Cannot be rebound - identical to Tab in terminals
ctrl+h — Cannot be rebound - identical to Backspace in terminals
capslock — Caps Lock is not delivered to terminal applications
Terminal reserved (errors/warnings)
ctrl+z — Unix process suspend (SIGTSTP) (may conflict)
ctrl+\ — Terminal quit signal (SIGQUIT) (will not work)
macOS reserved (errors)
cmd+c — macOS system copy
cmd+v — macOS system paste
cmd+x — macOS system cut
cmd+q — macOS quit application
cmd+w — macOS close window/tab
cmd+tab — macOS app switcher
cmd+space — macOS Spotlight
Available Contexts
| Context |
Description |
Global |
Active everywhere, regardless of focus |
Chat |
When the chat input is focused |
Autocomplete |
When autocomplete menu is visible |
Confirmation |
When a confirmation/permission dialog is shown |
Help |
When the help overlay is open |
Transcript |
When viewing the transcript |
HistorySearch |
When searching command history (ctrl+r) |
Task |
When a task/agent is running in the foreground |
ThemePicker |
When the theme picker is open |
Settings |
When the settings menu is open |
Tabs |
When tab navigation is active |
Attachments |
When navigating image attachments in a select dialog |
Footer |
When footer indicators are focused |
MessageSelector |
When the message selector (rewind) is open |
DiffDialog |
When the diff dialog is open |
DiffPanel |
When the diff sidebar panel is open |
ModelPicker |
When the model picker is open |
Select |
When a select/list component is focused |
Plugin |
When the plugin dialog is open |
Scroll |
When a scrollable view is focused (fullscreen layout) |
Available Actions
| Action |
Default Key(s) |
Context |
app:interrupt |
ctrl+c |
Global |
app:exit |
ctrl+d |
Global |
app:toggleTodos |
ctrl+t |
Global |
app:toggleTranscript |
ctrl+o |
Global |
app:toggleBrief |
ctrl+shift+b |
Global |
app:toggleReplTab |
(none) |
Global |
app:toggleDiffNoiseFilter |
(none) |
Global |
app:diffFileListUp |
ctrl+up, meta+up |
Global |
app:diffFileListDown |
ctrl+down, meta+down |
Global |
app:toggleDiffPreSession |
(none) |
Global |
app:cycleDiffBase |
ctrl+x b |
DiffPanel |
app:toggleTerminal |
(none) |
Global |
app:redraw |
(none) |
Global |
app:openArtifact |
ctrl+] |
Global |
history:search |
ctrl+r |
Global |
history:previous |
up |
Chat |
history:next |
down |
Chat |
chat:cancel |
escape |
Chat |
chat:killAgents |
ctrl+x ctrl+k |
Chat |
chat:cycleMode |
shift+tab |
Chat |
chat:modelPicker |
meta+p |
Chat |
chat:fastMode |
meta+o |
Chat |
chat:thinkingToggle |
meta+t |
Chat |
chat:workflowKeywordToggle |
meta+w |
Chat |
chat:submit |
enter |
Chat |
chat:newline |
ctrl+j |
Chat |
chat:undo |
ctrl+_, ctrl+-, ctrl+shift+-, ctrl+shift+_ |
Chat |
chat:externalEditor |
ctrl+x ctrl+e, ctrl+g |
Chat |
chat:stash |
ctrl+s |
Chat |
chat:imagePaste |
ctrl+v |
Chat |
chat:clearInput |
ctrl+l |
Chat |
chat:clearScreen |
cmd+k |
Chat |
autocomplete:accept |
tab |
Autocomplete |
autocomplete:dismiss |
escape |
Autocomplete |
autocomplete:previous |
up |
Autocomplete |
autocomplete:next |
down |
Autocomplete |
confirm:yes |
y, enter |
Confirmation |
confirm:no |
escape, n, escape |
Settings |
confirm:previous |
up |
Confirmation |
confirm:next |
down |
Confirmation |
confirm:nextField |
tab |
Confirmation |
confirm:previousField |
(none) |
Confirmation |
confirm:cycleMode |
shift+tab |
Confirmation |
confirm:toggle |
space |
Confirmation |
confirm:toggleExplanation |
ctrl+e |
Confirmation |
tabs:next |
tab, right |
Tabs |
tabs:previous |
shift+tab, left |
Tabs |
transcript:toggleShowAll |
ctrl+e |
Transcript |
transcript:exit |
ctrl+c, escape, q |
Transcript |
historySearch:next |
ctrl+r |
HistorySearch |
historySearch:accept |
escape, tab |
HistorySearch |
historySearch:cancel |
ctrl+c |
HistorySearch |
historySearch:execute |
enter |
HistorySearch |
historySearch:cycleScope |
ctrl+s |
HistorySearch |
task:background |
ctrl+x ctrl+b, ctrl+b |
Task |
theme:toggleSyntaxHighlighting |
ctrl+t |
ThemePicker |
theme:editCustom |
ctrl+e |
ThemePicker |
help:dismiss |
escape |
Help |
attachments:next |
right |
Attachments |
attachments:previous |
left |
Attachments |
attachments:remove |
backspace, delete |
Attachments |
attachments:exit |
down, escape |
Attachments |
footer:up |
up, ctrl+p |
Footer |
footer:down |
down, ctrl+n |
Footer |
footer:next |
right |
Footer |
footer:previous |
left |
Footer |
footer:openSelected |
enter |
Footer |
footer:clearSelection |
escape |
Footer |
footer:close |
x |
Footer |
footer:dismiss |
backspace, delete |
Footer |
messageSelector:up |
up, k, ctrl+p |
MessageSelector |
messageSelector:down |
down, j, ctrl+n |
MessageSelector |
messageSelector:top |
ctrl+up, shift+up, meta+up, shift+k |
MessageSelector |
messageSelector:bottom |
ctrl+down, shift+down, meta+down, shift+j |
MessageSelector |
messageSelector:select |
enter |
MessageSelector |
diff:dismiss |
escape |
DiffDialog |
diff:previousSource |
left |
DiffDialog |
diff:nextSource |
right |
DiffDialog |
diff:back |
(none) |
DiffDialog |
diff:viewDetails |
enter |
DiffDialog |
diff:previousFile |
up, k |
DiffDialog |
diff:nextFile |
down, j |
DiffDialog |
modelPicker:decreaseEffort |
left |
ModelPicker |
modelPicker:increaseEffort |
right |
ModelPicker |
modelPicker:thisSessionOnly |
s |
ModelPicker |
select:next |
down, j, ctrl+n, down, j, ctrl+n |
Settings |
select:previous |
up, k, ctrl+p, up, k, ctrl+p |
Settings |
select:pageUp |
pageup |
Select |
select:pageDown |
pagedown |
Select |
select:first |
home |
Select |
select:last |
end |
Select |
select:accept |
space, enter, enter |
Settings |
select:cancel |
escape |
Select |
plugin:toggle |
space |
Plugin |
plugin:install |
i |
Plugin |
plugin:favorite |
f |
Plugin |
permission:toggleDebug |
(none) |
Confirmation |
settings:search |
/ |
Settings |
settings:retry |
r |
Settings |
settings:periodDay |
d |
Settings |
settings:periodWeek |
w |
Settings |
settings:sortByTokens |
t |
Settings |
voice:pushToTalk |
space |
Chat |
scroll:pageUp |
pageup, pageup |
Scroll |
scroll:pageDown |
pagedown, pagedown |
Scroll |
scroll:lineUp |
ctrl+p, k, up, wheelup |
Transcript |
scroll:lineDown |
ctrl+n, j, down, wheeldown |
Transcript |
scroll:top |
g, home, ctrl+home, g, home |
Transcript |
scroll:bottom |
shift+g, end, ctrl+end, shift+g, end |
Transcript |
scroll:halfPageUp |
ctrl+u, ctrl+u |
Settings |
scroll:halfPageDown |
ctrl+d, ctrl+d |
Settings |
scroll:fullPageUp |
ctrl+b, b, shift+space, b |
Transcript |
scroll:fullPageDown |
ctrl+f, space, space |
Transcript |
selection:copy |
ctrl+shift+c, cmd+c |
Scroll |
selection:clear |
(none) |
Unknown |
selection:extendLeft |
shift+left |
Scroll |
selection:extendRight |
shift+right |
Scroll |
selection:extendUp |
shift+up |
Scroll |
selection:extendDown |
shift+down |
Scroll |
selection:extendLineStart |
shift+home |
Scroll |
selection:extendLineEnd |
shift+end |
Scroll |
1---2name: keybindings-help3description: Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".4---5
6# Keybindings Skill
7
8Create or modify `~/.claude/keybindings.json` to customize keyboard shortcuts.
9
10## CRITICAL: Read Before Write
11
12**Always read `~/.claude/keybindings.json` first** (it may not exist yet). Merge changes with existing bindings — never replace the entire file.
13
14- Use **Edit** tool for modifications to existing files
15- Use **Write** tool only if the file does not exist yet
16
17## File Format
18
19```json
20{
21 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",
22 "$docs": "https://code.claude.com/docs/en/keybindings",
23 "bindings": [
24 {
25 "context": "Chat",
26 "bindings": {
27 "ctrl+e": "chat:externalEditor"
28 }
29 }
30 ]
31}
32```
33
34Always include the `$schema` and `$docs` fields.
35
36## Keystroke Syntax
37
38**Modifiers** (combine with `+`):
39- `ctrl` (alias: `control`)
40- `alt` (aliases: `opt`, `option`) — note: `alt` and `meta` are identical in terminals
41- `shift`
42- `meta` (aliases: `cmd`, `command`)
43
44**Special keys**: `escape`/`esc`, `enter`/`return`, `tab`, `space`, `backspace`, `delete`, `up`, `down`, `left`, `right`
45
46**Chords**: Space-separated keystrokes, e.g. `ctrl+k ctrl+s` (1-second timeout between keystrokes)
47
48**Examples**: `ctrl+shift+p`, `alt+enter`, `ctrl+k ctrl+n`
49
50## Unbinding Default Shortcuts
51
52Set a key to `null` to remove its default binding:
53
54```json
55{
56 "context": "Chat",
57 "bindings": {
58 "ctrl+s": null
59 }
60}
61```
62
63## How User Bindings Interact with Defaults
64
65- User bindings are **additive** — they are appended after the default bindings
66- To **move** a binding to a different key: unbind the old key (`null`) AND add the new binding
67- A context only needs to appear in the user's file if they want to change something in that context
68
69## Common Patterns
70
71### Rebind a key
72To change the external editor shortcut from `ctrl+g` to `ctrl+e`:
73```json
74{
75 "context": "Chat",
76 "bindings": {
77 "ctrl+g": null,
78 "ctrl+e": "chat:externalEditor"
79 }
80}
81```
82
83### Add a chord binding
84```json
85{
86 "context": "Global",
87 "bindings": {
88 "ctrl+k ctrl+t": "app:toggleTodos"
89 }
90}
91```
92
93## Behavioral Rules
94
951. Only include contexts the user wants to change (minimal overrides)
962. Validate that actions and contexts are from the known lists below
973. Warn the user proactively if they choose a key that conflicts with reserved shortcuts or common tools like tmux (`ctrl+b`) and screen (`ctrl+a`)
984. When adding a new binding for an existing action, the new binding is additive (existing default still works unless explicitly unbound)
995. To fully replace a default binding, unbind the old key AND add the new one
100
101## Validation
102
103Claude Code validates `~/.claude/keybindings.json` when it loads; warnings go to the debug log. After editing the file, re-check it against the rules below and fix anything that matches.
104
105### Common Issues and Fixes
106
107| Issue | Cause | Fix |
108| --- | --- | --- |
109| `keybindings.json must have a "bindings" array` | Missing wrapper object | Wrap bindings in `{ "bindings": [...] }` |
110| `"bindings" must be an array` | `bindings` is not an array | Set `"bindings"` to an array: `[{ context: ..., bindings: ... }]` |
111| `Unknown context "X"` | Typo or invalid context name | Use exact context names from the Available Contexts table |
112| `Duplicate key "X" in Y bindings` | Same key defined twice in one context | Remove the duplicate; JSON uses only the last value |
113| `"X" may not work: ...` | Key conflicts with terminal/OS reserved shortcut | Choose a different key (see Reserved Shortcuts section) |
114| `Invalid action for "X"` | Action value is not a string or null | Actions must be strings like `"app:help"` or `null` to unbind |
115
116### Example validation warnings (debug log)
117
118```
119[keybindings] Found 2 validation issue(s)
120[keybindings] [error] Unknown context "chat" — Valid contexts: Global, Chat, Autocomplete, ...
121[keybindings] [warning] "ctrl+c" may not work: Terminal interrupt (SIGINT)
122```
123
124**Errors** prevent bindings from working and must be fixed. **Warnings** indicate potential conflicts but the binding may still work.
125
126## Reserved Shortcuts
127
128### Non-rebindable (errors)
129- `ctrl+c` — Cannot be rebound - used for interrupt/exit (hardcoded)
130- `ctrl+d` — Cannot be rebound - used for exit (hardcoded)
131- `ctrl+m` — Cannot be rebound - identical to Enter in terminals (both send CR)
132- `ctrl+[` — Cannot be rebound - identical to Escape in terminals
133- `ctrl+i` — Cannot be rebound - identical to Tab in terminals
134- `ctrl+h` — Cannot be rebound - identical to Backspace in terminals
135- `capslock` — Caps Lock is not delivered to terminal applications
136
137### Terminal reserved (errors/warnings)
138- `ctrl+z` — Unix process suspend (SIGTSTP) (may conflict)
139- `ctrl+\` — Terminal quit signal (SIGQUIT) (will not work)
140
141### macOS reserved (errors)
142- `cmd+c` — macOS system copy
143- `cmd+v` — macOS system paste
144- `cmd+x` — macOS system cut
145- `cmd+q` — macOS quit application
146- `cmd+w` — macOS close window/tab
147- `cmd+tab` — macOS app switcher
148- `cmd+space` — macOS Spotlight
149
150## Available Contexts
151
152| Context | Description |
153| --- | --- |
154| `Global` | Active everywhere, regardless of focus |
155| `Chat` | When the chat input is focused |
156| `Autocomplete` | When autocomplete menu is visible |
157| `Confirmation` | When a confirmation/permission dialog is shown |
158| `Help` | When the help overlay is open |
159| `Transcript` | When viewing the transcript |
160| `HistorySearch` | When searching command history (ctrl+r) |
161| `Task` | When a task/agent is running in the foreground |
162| `ThemePicker` | When the theme picker is open |
163| `Settings` | When the settings menu is open |
164| `Tabs` | When tab navigation is active |
165| `Attachments` | When navigating image attachments in a select dialog |
166| `Footer` | When footer indicators are focused |
167| `MessageSelector` | When the message selector (rewind) is open |
168| `DiffDialog` | When the diff dialog is open |
169| `DiffPanel` | When the diff sidebar panel is open |
170| `ModelPicker` | When the model picker is open |
171| `Select` | When a select/list component is focused |
172| `Plugin` | When the plugin dialog is open |
173| `Scroll` | When a scrollable view is focused (fullscreen layout) |
174
175## Available Actions
176
177| Action | Default Key(s) | Context |
178| --- | --- | --- |
179| `app:interrupt` | `ctrl+c` | Global |
180| `app:exit` | `ctrl+d` | Global |
181| `app:toggleTodos` | `ctrl+t` | Global |
182| `app:toggleTranscript` | `ctrl+o` | Global |
183| `app:toggleBrief` | `ctrl+shift+b` | Global |
184| `app:toggleReplTab` | (none) | Global |
185| `app:toggleDiffNoiseFilter` | (none) | Global |
186| `app:diffFileListUp` | `ctrl+up`, `meta+up` | Global |
187| `app:diffFileListDown` | `ctrl+down`, `meta+down` | Global |
188| `app:toggleDiffPreSession` | (none) | Global |
189| `app:cycleDiffBase` | `ctrl+x b` | DiffPanel |
190| `app:toggleTerminal` | (none) | Global |
191| `app:redraw` | (none) | Global |
192| `app:openArtifact` | `ctrl+]` | Global |
193| `history:search` | `ctrl+r` | Global |
194| `history:previous` | `up` | Chat |
195| `history:next` | `down` | Chat |
196| `chat:cancel` | `escape` | Chat |
197| `chat:killAgents` | `ctrl+x ctrl+k` | Chat |
198| `chat:cycleMode` | `shift+tab` | Chat |
199| `chat:modelPicker` | `meta+p` | Chat |
200| `chat:fastMode` | `meta+o` | Chat |
201| `chat:thinkingToggle` | `meta+t` | Chat |
202| `chat:workflowKeywordToggle` | `meta+w` | Chat |
203| `chat:submit` | `enter` | Chat |
204| `chat:newline` | `ctrl+j` | Chat |
205| `chat:undo` | `ctrl+_`, `ctrl+-`, `ctrl+shift+-`, `ctrl+shift+_` | Chat |
206| `chat:externalEditor` | `ctrl+x ctrl+e`, `ctrl+g` | Chat |
207| `chat:stash` | `ctrl+s` | Chat |
208| `chat:imagePaste` | `ctrl+v` | Chat |
209| `chat:clearInput` | `ctrl+l` | Chat |
210| `chat:clearScreen` | `cmd+k` | Chat |
211| `autocomplete:accept` | `tab` | Autocomplete |
212| `autocomplete:dismiss` | `escape` | Autocomplete |
213| `autocomplete:previous` | `up` | Autocomplete |
214| `autocomplete:next` | `down` | Autocomplete |
215| `confirm:yes` | `y`, `enter` | Confirmation |
216| `confirm:no` | `escape`, `n`, `escape` | Settings |
217| `confirm:previous` | `up` | Confirmation |
218| `confirm:next` | `down` | Confirmation |
219| `confirm:nextField` | `tab` | Confirmation |
220| `confirm:previousField` | (none) | Confirmation |
221| `confirm:cycleMode` | `shift+tab` | Confirmation |
222| `confirm:toggle` | `space` | Confirmation |
223| `confirm:toggleExplanation` | `ctrl+e` | Confirmation |
224| `tabs:next` | `tab`, `right` | Tabs |
225| `tabs:previous` | `shift+tab`, `left` | Tabs |
226| `transcript:toggleShowAll` | `ctrl+e` | Transcript |
227| `transcript:exit` | `ctrl+c`, `escape`, `q` | Transcript |
228| `historySearch:next` | `ctrl+r` | HistorySearch |
229| `historySearch:accept` | `escape`, `tab` | HistorySearch |
230| `historySearch:cancel` | `ctrl+c` | HistorySearch |
231| `historySearch:execute` | `enter` | HistorySearch |
232| `historySearch:cycleScope` | `ctrl+s` | HistorySearch |
233| `task:background` | `ctrl+x ctrl+b`, `ctrl+b` | Task |
234| `theme:toggleSyntaxHighlighting` | `ctrl+t` | ThemePicker |
235| `theme:editCustom` | `ctrl+e` | ThemePicker |
236| `help:dismiss` | `escape` | Help |
237| `attachments:next` | `right` | Attachments |
238| `attachments:previous` | `left` | Attachments |
239| `attachments:remove` | `backspace`, `delete` | Attachments |
240| `attachments:exit` | `down`, `escape` | Attachments |
241| `footer:up` | `up`, `ctrl+p` | Footer |
242| `footer:down` | `down`, `ctrl+n` | Footer |
243| `footer:next` | `right` | Footer |
244| `footer:previous` | `left` | Footer |
245| `footer:openSelected` | `enter` | Footer |
246| `footer:clearSelection` | `escape` | Footer |
247| `footer:close` | `x` | Footer |
248| `footer:dismiss` | `backspace`, `delete` | Footer |
249| `messageSelector:up` | `up`, `k`, `ctrl+p` | MessageSelector |
250| `messageSelector:down` | `down`, `j`, `ctrl+n` | MessageSelector |
251| `messageSelector:top` | `ctrl+up`, `shift+up`, `meta+up`, `shift+k` | MessageSelector |
252| `messageSelector:bottom` | `ctrl+down`, `shift+down`, `meta+down`, `shift+j` | MessageSelector |
253| `messageSelector:select` | `enter` | MessageSelector |
254| `diff:dismiss` | `escape` | DiffDialog |
255| `diff:previousSource` | `left` | DiffDialog |
256| `diff:nextSource` | `right` | DiffDialog |
257| `diff:back` | (none) | DiffDialog |
258| `diff:viewDetails` | `enter` | DiffDialog |
259| `diff:previousFile` | `up`, `k` | DiffDialog |
260| `diff:nextFile` | `down`, `j` | DiffDialog |
261| `modelPicker:decreaseEffort` | `left` | ModelPicker |
262| `modelPicker:increaseEffort` | `right` | ModelPicker |
263| `modelPicker:thisSessionOnly` | `s` | ModelPicker |
264| `select:next` | `down`, `j`, `ctrl+n`, `down`, `j`, `ctrl+n` | Settings |
265| `select:previous` | `up`, `k`, `ctrl+p`, `up`, `k`, `ctrl+p` | Settings |
266| `select:pageUp` | `pageup` | Select |
267| `select:pageDown` | `pagedown` | Select |
268| `select:first` | `home` | Select |
269| `select:last` | `end` | Select |
270| `select:accept` | `space`, `enter`, `enter` | Settings |
271| `select:cancel` | `escape` | Select |
272| `plugin:toggle` | `space` | Plugin |
273| `plugin:install` | `i` | Plugin |
274| `plugin:favorite` | `f` | Plugin |
275| `permission:toggleDebug` | (none) | Confirmation |
276| `settings:search` | `/` | Settings |
277| `settings:retry` | `r` | Settings |
278| `settings:periodDay` | `d` | Settings |
279| `settings:periodWeek` | `w` | Settings |
280| `settings:sortByTokens` | `t` | Settings |
281| `voice:pushToTalk` | `space` | Chat |
282| `scroll:pageUp` | `pageup`, `pageup` | Scroll |
283| `scroll:pageDown` | `pagedown`, `pagedown` | Scroll |
284| `scroll:lineUp` | `ctrl+p`, `k`, `up`, `wheelup` | Transcript |
285| `scroll:lineDown` | `ctrl+n`, `j`, `down`, `wheeldown` | Transcript |
286| `scroll:top` | `g`, `home`, `ctrl+home`, `g`, `home` | Transcript |
287| `scroll:bottom` | `shift+g`, `end`, `ctrl+end`, `shift+g`, `end` | Transcript |
288| `scroll:halfPageUp` | `ctrl+u`, `ctrl+u` | Settings |
289| `scroll:halfPageDown` | `ctrl+d`, `ctrl+d` | Settings |
290| `scroll:fullPageUp` | `ctrl+b`, `b`, `shift+space`, `b` | Transcript |
291| `scroll:fullPageDown` | `ctrl+f`, `space`, `space` | Transcript |
292| `selection:copy` | `ctrl+shift+c`, `cmd+c` | Scroll |
293| `selection:clear` | (none) | Unknown |
294| `selection:extendLeft` | `shift+left` | Scroll |
295| `selection:extendRight` | `shift+right` | Scroll |
296| `selection:extendUp` | `shift+up` | Scroll |
297| `selection:extendDown` | `shift+down` | Scroll |
298| `selection:extendLineStart` | `shift+home` | Scroll |
299| `selection:extendLineEnd` | `shift+end` | Scroll |