feat(cli): disable ctrl-s shortcut outside of alternate buffer mode (#18887)

This commit is contained in:
Jacob Richman
2026-02-12 15:00:13 -08:00
committed by GitHub
parent 44bcba323f
commit 55ec0f043c
4 changed files with 39 additions and 33 deletions
+25 -25
View File
@@ -96,31 +96,31 @@ available combinations.
#### App Controls #### App Controls
| Action | Keys | | Action | Keys |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | | ----------------------------------------------------------------------------------------------------- | ---------------- |
| Toggle detailed error information. | `F12` | | Toggle detailed error information. | `F12` |
| Toggle the full TODO list. | `Ctrl + T` | | Toggle the full TODO list. | `Ctrl + T` |
| Show IDE context details. | `Ctrl + G` | | Show IDE context details. | `Ctrl + G` |
| Toggle Markdown rendering. | `Alt + M` | | Toggle Markdown rendering. | `Alt + M` |
| Toggle copy mode when in alternate buffer mode. | `Ctrl + S` | | Toggle copy mode when in alternate buffer mode. | `Ctrl + S` |
| Toggle YOLO (auto-approval) mode for tool calls. | `Ctrl + Y` | | Toggle YOLO (auto-approval) mode for tool calls. | `Ctrl + Y` |
| Cycle through approval modes: default (prompt), auto_edit (auto-approve edits), and plan (read-only). | `Shift + Tab` | | Cycle through approval modes: default (prompt), auto_edit (auto-approve edits), and plan (read-only). | `Shift + Tab` |
| Expand a height-constrained response to show additional lines when not in alternate buffer mode. | `Ctrl + O`<br />`Ctrl + S` | | Expand and collapse blocks of content when not in alternate buffer mode. | `Ctrl + O` |
| Expand or collapse a paste placeholder when cursor is over placeholder. | `Ctrl + O` | | Expand or collapse a paste placeholder when cursor is over placeholder. | `Ctrl + O` |
| Toggle current background shell visibility. | `Ctrl + B` | | Toggle current background shell visibility. | `Ctrl + B` |
| Toggle background shell list. | `Ctrl + L` | | Toggle background shell list. | `Ctrl + L` |
| Kill the active background shell. | `Ctrl + K` | | Kill the active background shell. | `Ctrl + K` |
| Confirm selection in background shell list. | `Enter` | | Confirm selection in background shell list. | `Enter` |
| Dismiss background shell list. | `Esc` | | Dismiss background shell list. | `Esc` |
| Move focus from background shell to Gemini. | `Shift + Tab` | | Move focus from background shell to Gemini. | `Shift + Tab` |
| Move focus from background shell list to Gemini. | `Tab (no Shift)` | | Move focus from background shell list to Gemini. | `Tab (no Shift)` |
| Show warning when trying to move focus away from background shell. | `Tab (no Shift)` | | Show warning when trying to move focus away from background shell. | `Tab (no Shift)` |
| Show warning when trying to move focus away from shell input. | `Tab (no Shift)` | | Show warning when trying to move focus away from shell input. | `Tab (no Shift)` |
| Move focus from Gemini to the active shell. | `Tab (no Shift)` | | Move focus from Gemini to the active shell. | `Tab (no Shift)` |
| Move focus from the shell back to Gemini. | `Shift + Tab` | | Move focus from the shell back to Gemini. | `Shift + Tab` |
| Clear the terminal screen and redraw the UI. | `Ctrl + L` | | Clear the terminal screen and redraw the UI. | `Ctrl + L` |
| Restart the application. | `R` | | Restart the application. | `R` |
| Suspend the CLI and move it to the background. | `Ctrl + Z` | | Suspend the CLI and move it to the background. | `Ctrl + Z` |
<!-- KEYBINDINGS-AUTOGEN:END --> <!-- KEYBINDINGS-AUTOGEN:END -->
+2 -5
View File
@@ -286,10 +286,7 @@ export const defaultKeyBindings: KeyBindingConfig = {
[Command.SHOW_SHELL_INPUT_UNFOCUS_WARNING]: [{ key: 'tab', shift: false }], [Command.SHOW_SHELL_INPUT_UNFOCUS_WARNING]: [{ key: 'tab', shift: false }],
[Command.BACKGROUND_SHELL_SELECT]: [{ key: 'return' }], [Command.BACKGROUND_SHELL_SELECT]: [{ key: 'return' }],
[Command.BACKGROUND_SHELL_ESCAPE]: [{ key: 'escape' }], [Command.BACKGROUND_SHELL_ESCAPE]: [{ key: 'escape' }],
[Command.SHOW_MORE_LINES]: [ [Command.SHOW_MORE_LINES]: [{ key: 'o', ctrl: true }],
{ key: 'o', ctrl: true },
{ key: 's', ctrl: true },
],
[Command.EXPAND_PASTE]: [{ key: 'o', ctrl: true }], [Command.EXPAND_PASTE]: [{ key: 'o', ctrl: true }],
[Command.FOCUS_SHELL_INPUT]: [{ key: 'tab', shift: false }], [Command.FOCUS_SHELL_INPUT]: [{ key: 'tab', shift: false }],
[Command.UNFOCUS_SHELL_INPUT]: [{ key: 'tab', shift: true }], [Command.UNFOCUS_SHELL_INPUT]: [{ key: 'tab', shift: true }],
@@ -501,7 +498,7 @@ export const commandDescriptions: Readonly<Record<Command, string>> = {
[Command.CYCLE_APPROVAL_MODE]: [Command.CYCLE_APPROVAL_MODE]:
'Cycle through approval modes: default (prompt), auto_edit (auto-approve edits), and plan (read-only).', 'Cycle through approval modes: default (prompt), auto_edit (auto-approve edits), and plan (read-only).',
[Command.SHOW_MORE_LINES]: [Command.SHOW_MORE_LINES]:
'Expand a height-constrained response to show additional lines when not in alternate buffer mode.', 'Expand and collapse blocks of content when not in alternate buffer mode.',
[Command.EXPAND_PASTE]: [Command.EXPAND_PASTE]:
'Expand or collapse a paste placeholder when cursor is over placeholder.', 'Expand or collapse a paste placeholder when cursor is over placeholder.',
[Command.BACKGROUND_SHELL_SELECT]: [Command.BACKGROUND_SHELL_SELECT]:
+8
View File
@@ -1620,6 +1620,14 @@ Logging in with Google... Restarting Gemini CLI to continue.
return true; return true;
} else if (keyMatchers[Command.SUSPEND_APP](key)) { } else if (keyMatchers[Command.SUSPEND_APP](key)) {
handleSuspend(); handleSuspend();
} else if (
keyMatchers[Command.TOGGLE_COPY_MODE](key) &&
!isAlternateBuffer
) {
showTransientMessage({
text: 'Use Ctrl+O to expand and collapse blocks of content.',
type: TransientMessageType.Warning,
});
return true; return true;
} }
+4 -3
View File
@@ -344,11 +344,12 @@ describe('keyMatchers', () => {
}, },
{ {
command: Command.SHOW_MORE_LINES, command: Command.SHOW_MORE_LINES,
positive: [ positive: [createKey('o', { ctrl: true })],
negative: [
createKey('s', { ctrl: true }), createKey('s', { ctrl: true }),
createKey('o', { ctrl: true }), createKey('s'),
createKey('l', { ctrl: true }),
], ],
negative: [createKey('s'), createKey('l', { ctrl: true })],
}, },
// Shell commands // Shell commands