Add support for various action keys to Linux keymap (#22997)

Adds support for Cut, Copy, Paste, Undo, Redo, New, Open, Save, and Find
keys to the default keymap. These keys can be found on old keyboards,
but also custom layouts like
[Extend](https://dreymar.colemak.org/layers-extend.html).

Release Notes:

- Added support for the Cut, Copy, Paste, Undo, Redo, New, Open, Save,
and Find keys to the default keymap.
This commit is contained in:
Jules Bertholet 2025-01-20 14:28:34 -05:00 committed by GitHub
parent 4b4876d48a
commit a22d8ef78f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 48 additions and 4 deletions

View file

@ -23,6 +23,7 @@
"ctrl-shift-w": "workspace::CloseWindow", "ctrl-shift-w": "workspace::CloseWindow",
"shift-escape": "workspace::ToggleZoom", "shift-escape": "workspace::ToggleZoom",
"ctrl-o": "workspace::Open", "ctrl-o": "workspace::Open",
"open": "workspace::Open",
"ctrl-=": "zed::IncreaseBufferFontSize", "ctrl-=": "zed::IncreaseBufferFontSize",
"ctrl-+": "zed::IncreaseBufferFontSize", "ctrl-+": "zed::IncreaseBufferFontSize",
"ctrl--": "zed::DecreaseBufferFontSize", "ctrl--": "zed::DecreaseBufferFontSize",
@ -62,11 +63,16 @@
"ctrl-backspace": "editor::DeleteToPreviousWordStart", "ctrl-backspace": "editor::DeleteToPreviousWordStart",
"ctrl-delete": "editor::DeleteToNextWordEnd", "ctrl-delete": "editor::DeleteToNextWordEnd",
"shift-delete": "editor::Cut", "shift-delete": "editor::Cut",
"cut": "editor::Cut",
"ctrl-insert": "editor::Copy", "ctrl-insert": "editor::Copy",
"copy": "editor::Copy",
"shift-insert": "editor::Paste", "shift-insert": "editor::Paste",
"ctrl-y": "editor::Redo", "paste": "editor::Paste",
"ctrl-z": "editor::Undo", "ctrl-z": "editor::Undo",
"undo": "editor::Undo",
"ctrl-y": "editor::Redo",
"ctrl-shift-z": "editor::Redo", "ctrl-shift-z": "editor::Redo",
"redo": "editor::Redo",
"up": "editor::MoveUp", "up": "editor::MoveUp",
"ctrl-up": "editor::LineUp", "ctrl-up": "editor::LineUp",
"ctrl-down": "editor::LineDown", "ctrl-down": "editor::LineDown",
@ -133,6 +139,7 @@
"ctrl-k ctrl-z": "editor::ToggleSoftWrap", "ctrl-k ctrl-z": "editor::ToggleSoftWrap",
"ctrl-k z": "editor::ToggleSoftWrap", "ctrl-k z": "editor::ToggleSoftWrap",
"ctrl-f": "buffer_search::Deploy", "ctrl-f": "buffer_search::Deploy",
"find": "buffer_search::Deploy",
"ctrl-h": ["buffer_search::Deploy", { "replace_enabled": true }], "ctrl-h": ["buffer_search::Deploy", { "replace_enabled": true }],
// "cmd-e": ["buffer_search::Deploy", { "focus": false }], // "cmd-e": ["buffer_search::Deploy", { "focus": false }],
"ctrl->": "assistant::QuoteSelection", "ctrl->": "assistant::QuoteSelection",
@ -165,7 +172,8 @@
{ {
"context": "Markdown", "context": "Markdown",
"bindings": { "bindings": {
"ctrl-c": "markdown::Copy" "ctrl-c": "markdown::Copy",
"copy": "markdown::Copy"
} }
}, },
{ {
@ -178,13 +186,15 @@
"ctrl-alt-/": "assistant::ToggleModelSelector", "ctrl-alt-/": "assistant::ToggleModelSelector",
"ctrl-k h": "assistant::DeployHistory", "ctrl-k h": "assistant::DeployHistory",
"ctrl-k l": "assistant::DeployPromptLibrary", "ctrl-k l": "assistant::DeployPromptLibrary",
"ctrl-n": "assistant::NewContext" "ctrl-n": "assistant::NewContext",
"new": "assistant::NewContext"
} }
}, },
{ {
"context": "PromptLibrary", "context": "PromptLibrary",
"bindings": { "bindings": {
"ctrl-n": "prompt_library::NewPrompt", "ctrl-n": "prompt_library::NewPrompt",
"new": "prompt_library::NewPrompt",
"ctrl-shift-s": "prompt_library::ToggleDefaultPrompt" "ctrl-shift-s": "prompt_library::ToggleDefaultPrompt"
} }
}, },
@ -197,6 +207,7 @@
"shift-enter": "search::SelectPrevMatch", "shift-enter": "search::SelectPrevMatch",
"alt-enter": "search::SelectAllMatches", "alt-enter": "search::SelectAllMatches",
"ctrl-f": "search::FocusSearch", "ctrl-f": "search::FocusSearch",
"find": "search::FocusSearch",
"ctrl-h": "search::ToggleReplace", "ctrl-h": "search::ToggleReplace",
"ctrl-l": "search::ToggleSelection" "ctrl-l": "search::ToggleSelection"
} }
@ -220,6 +231,7 @@
"bindings": { "bindings": {
"escape": "project_search::ToggleFocus", "escape": "project_search::ToggleFocus",
"ctrl-shift-f": "search::FocusSearch", "ctrl-shift-f": "search::FocusSearch",
"shift-find": "search::FocusSearch",
"ctrl-shift-h": "search::ToggleReplace", "ctrl-shift-h": "search::ToggleReplace",
"alt-ctrl-g": "search::ToggleRegex", "alt-ctrl-g": "search::ToggleRegex",
"alt-ctrl-x": "search::ToggleRegex" "alt-ctrl-x": "search::ToggleRegex"
@ -266,6 +278,7 @@
"ctrl-k u": ["pane::CloseCleanItems", { "close_pinned": false }], "ctrl-k u": ["pane::CloseCleanItems", { "close_pinned": false }],
"ctrl-k w": ["pane::CloseAllItems", { "close_pinned": false }], "ctrl-k w": ["pane::CloseAllItems", { "close_pinned": false }],
"ctrl-shift-f": "pane::DeploySearch", "ctrl-shift-f": "pane::DeploySearch",
"shift-find": "pane::DeploySearch",
"ctrl-alt-g": "search::SelectNextMatch", "ctrl-alt-g": "search::SelectNextMatch",
"ctrl-alt-shift-g": "search::SelectPrevMatch", "ctrl-alt-shift-g": "search::SelectPrevMatch",
"ctrl-alt-shift-h": "search::ToggleReplace", "ctrl-alt-shift-h": "search::ToggleReplace",
@ -275,6 +288,7 @@
"alt-w": "search::ToggleWholeWord", "alt-w": "search::ToggleWholeWord",
"alt-r": "search::ToggleRegex", "alt-r": "search::ToggleRegex",
"alt-ctrl-f": "project_search::ToggleFilters", "alt-ctrl-f": "project_search::ToggleFilters",
"alt-find": "project_search::ToggleFilters",
"ctrl-alt-shift-r": "search::ToggleRegex", "ctrl-alt-shift-r": "search::ToggleRegex",
"ctrl-alt-shift-x": "search::ToggleRegex", "ctrl-alt-shift-x": "search::ToggleRegex",
"ctrl-k shift-enter": "pane::TogglePinTab" "ctrl-k shift-enter": "pane::TogglePinTab"
@ -368,7 +382,8 @@
"ctrl-alt-_": "pane::GoForward", "ctrl-alt-_": "pane::GoForward",
"f3": "search::SelectNextMatch", "f3": "search::SelectNextMatch",
"shift-f3": "search::SelectPrevMatch", "shift-f3": "search::SelectPrevMatch",
"ctrl-shift-f": "project_search::ToggleFocus" "ctrl-shift-f": "project_search::ToggleFocus",
"shift-find": "project_search::ToggleFocus"
} }
}, },
{ {
@ -377,14 +392,20 @@
// Change the default action on `menu::Confirm` by setting the parameter // Change the default action on `menu::Confirm` by setting the parameter
// "alt-ctrl-o": ["projects::OpenRecent", { "create_new_window": true }], // "alt-ctrl-o": ["projects::OpenRecent", { "create_new_window": true }],
"alt-ctrl-o": "projects::OpenRecent", "alt-ctrl-o": "projects::OpenRecent",
"alt-open": "projects::OpenRecent",
"alt-ctrl-shift-o": "projects::OpenRemote", "alt-ctrl-shift-o": "projects::OpenRemote",
"alt-shift-open": "projects::OpenRemote",
"alt-ctrl-shift-b": "branches::OpenRecent", "alt-ctrl-shift-b": "branches::OpenRecent",
"ctrl-~": "workspace::NewTerminal", "ctrl-~": "workspace::NewTerminal",
"ctrl-s": "workspace::Save", "ctrl-s": "workspace::Save",
"save": "workspace::Save",
"ctrl-k s": "workspace::SaveWithoutFormat", "ctrl-k s": "workspace::SaveWithoutFormat",
"ctrl-shift-s": "workspace::SaveAs", "ctrl-shift-s": "workspace::SaveAs",
"shift-save": "workspace::SaveAs",
"ctrl-n": "workspace::NewFile", "ctrl-n": "workspace::NewFile",
"new": "workspace::NewFile",
"ctrl-shift-n": "workspace::NewWindow", "ctrl-shift-n": "workspace::NewWindow",
"shift-new": "workspace::NewWindow",
"ctrl-`": "terminal_panel::ToggleFocus", "ctrl-`": "terminal_panel::ToggleFocus",
"alt-1": ["workspace::ActivatePane", 0], "alt-1": ["workspace::ActivatePane", 0],
"alt-2": ["workspace::ActivatePane", 1], "alt-2": ["workspace::ActivatePane", 1],
@ -400,6 +421,7 @@
"ctrl-j": "workspace::ToggleBottomDock", "ctrl-j": "workspace::ToggleBottomDock",
"ctrl-alt-y": "workspace::CloseAllDocks", "ctrl-alt-y": "workspace::CloseAllDocks",
"ctrl-shift-f": "pane::DeploySearch", "ctrl-shift-f": "pane::DeploySearch",
"shift-find": "pane::DeploySearch",
"ctrl-shift-h": ["pane::DeploySearch", { "replace_enabled": true }], "ctrl-shift-h": ["pane::DeploySearch", { "replace_enabled": true }],
"ctrl-shift-t": "pane::ReopenClosedItem", "ctrl-shift-t": "pane::ReopenClosedItem",
"ctrl-k ctrl-s": "zed::OpenKeymap", "ctrl-k ctrl-s": "zed::OpenKeymap",
@ -416,6 +438,7 @@
"ctrl-shift-b": "outline_panel::ToggleFocus", "ctrl-shift-b": "outline_panel::ToggleFocus",
"ctrl-?": "assistant::ToggleFocus", "ctrl-?": "assistant::ToggleFocus",
"ctrl-alt-s": "workspace::SaveAll", "ctrl-alt-s": "workspace::SaveAll",
"alt-save": "workspace::SaveAll",
"ctrl-k m": "language_selector::Toggle", "ctrl-k m": "language_selector::Toggle",
"escape": "workspace::Unfollow", "escape": "workspace::Unfollow",
"ctrl-k ctrl-left": ["workspace::ActivatePaneInDirection", "Left"], "ctrl-k ctrl-left": ["workspace::ActivatePaneInDirection", "Left"],
@ -559,6 +582,7 @@
"ctrl-enter": "assistant::Assist", "ctrl-enter": "assistant::Assist",
"ctrl-shift-enter": "assistant::Edit", "ctrl-shift-enter": "assistant::Edit",
"ctrl-s": "workspace::Save", "ctrl-s": "workspace::Save",
"save": "workspace::Save",
"ctrl->": "assistant::QuoteSelection", "ctrl->": "assistant::QuoteSelection",
"ctrl-<": "assistant::InsertIntoEditor", "ctrl-<": "assistant::InsertIntoEditor",
"shift-enter": "assistant::Split", "shift-enter": "assistant::Split",
@ -571,6 +595,7 @@
"context": "AssistantPanel2", "context": "AssistantPanel2",
"bindings": { "bindings": {
"ctrl-n": "assistant2::NewThread", "ctrl-n": "assistant2::NewThread",
"new": "assistant2::NewThread",
"ctrl-shift-h": "assistant2::OpenHistory", "ctrl-shift-h": "assistant2::OpenHistory",
"ctrl-alt-/": "assistant2::ToggleModelSelector", "ctrl-alt-/": "assistant2::ToggleModelSelector",
"ctrl-shift-a": "assistant2::ToggleContextPicker", "ctrl-shift-a": "assistant2::ToggleContextPicker",
@ -624,7 +649,9 @@
"left": "outline_panel::CollapseSelectedEntry", "left": "outline_panel::CollapseSelectedEntry",
"right": "outline_panel::ExpandSelectedEntry", "right": "outline_panel::ExpandSelectedEntry",
"ctrl-alt-c": "outline_panel::CopyPath", "ctrl-alt-c": "outline_panel::CopyPath",
"alt-copy": "outline_panel::CopyPath",
"alt-ctrl-shift-c": "outline_panel::CopyRelativePath", "alt-ctrl-shift-c": "outline_panel::CopyRelativePath",
"alt-shift-copy": "outline_panel::CopyRelativePath",
"alt-ctrl-r": "outline_panel::RevealInFileManager", "alt-ctrl-r": "outline_panel::RevealInFileManager",
"space": "outline_panel::Open", "space": "outline_panel::Open",
"shift-down": "menu::SelectNext", "shift-down": "menu::SelectNext",
@ -639,11 +666,18 @@
"left": "project_panel::CollapseSelectedEntry", "left": "project_panel::CollapseSelectedEntry",
"right": "project_panel::ExpandSelectedEntry", "right": "project_panel::ExpandSelectedEntry",
"ctrl-n": "project_panel::NewFile", "ctrl-n": "project_panel::NewFile",
"new": "project_panel::NewFile",
"alt-ctrl-n": "project_panel::NewDirectory", "alt-ctrl-n": "project_panel::NewDirectory",
"alt-new": "project_panel::NewDirectory",
"cut": "project_panel::Cut",
"ctrl-insert": "project_panel::Copy", "ctrl-insert": "project_panel::Copy",
"copy": "project_panel::Copy",
"shift-insert": "project_panel::Paste", "shift-insert": "project_panel::Paste",
"paste": "project_panel::Paste",
"ctrl-alt-c": "project_panel::CopyPath", "ctrl-alt-c": "project_panel::CopyPath",
"alt-copy": "project_panel::CopyPath",
"alt-ctrl-shift-c": "project_panel::CopyRelativePath", "alt-ctrl-shift-c": "project_panel::CopyRelativePath",
"alt-shift-copy": "project_panel::CopyRelativePath",
"enter": "project_panel::Rename", "enter": "project_panel::Rename",
"backspace": ["project_panel::Trash", { "skip_prompt": false }], "backspace": ["project_panel::Trash", { "skip_prompt": false }],
"shift-delete": ["project_panel::Delete", { "skip_prompt": false }], "shift-delete": ["project_panel::Delete", { "skip_prompt": false }],
@ -652,6 +686,7 @@
"alt-ctrl-r": "project_panel::RevealInFileManager", "alt-ctrl-r": "project_panel::RevealInFileManager",
"ctrl-shift-enter": "project_panel::OpenWithSystem", "ctrl-shift-enter": "project_panel::OpenWithSystem",
"ctrl-shift-f": "project_panel::NewSearchInDirectory", "ctrl-shift-f": "project_panel::NewSearchInDirectory",
"shift-find": "project_panel::NewSearchInDirectory",
"shift-down": "menu::SelectNext", "shift-down": "menu::SelectNext",
"shift-up": "menu::SelectPrev", "shift-up": "menu::SelectPrev",
"escape": "menu::Cancel" "escape": "menu::Cancel"
@ -745,12 +780,15 @@
"bindings": { "bindings": {
"ctrl-alt-space": "terminal::ShowCharacterPalette", "ctrl-alt-space": "terminal::ShowCharacterPalette",
"ctrl-insert": "terminal::Copy", "ctrl-insert": "terminal::Copy",
"copy": "terminal::Copy",
"shift-insert": "terminal::Paste", "shift-insert": "terminal::Paste",
"paste": "terminal::Paste",
"ctrl-enter": "assistant::InlineAssist", "ctrl-enter": "assistant::InlineAssist",
// Overrides for conflicting keybindings // Overrides for conflicting keybindings
"ctrl-w": ["terminal::SendKeystroke", "ctrl-w"], "ctrl-w": ["terminal::SendKeystroke", "ctrl-w"],
"ctrl-shift-a": "editor::SelectAll", "ctrl-shift-a": "editor::SelectAll",
"ctrl-shift-f": "buffer_search::Deploy", "ctrl-shift-f": "buffer_search::Deploy",
"find": "buffer_search::Deploy",
"ctrl-shift-l": "terminal::Clear", "ctrl-shift-l": "terminal::Clear",
"ctrl-shift-w": "pane::CloseActiveItem", "ctrl-shift-w": "pane::CloseActiveItem",
"ctrl-e": ["terminal::SendKeystroke", "ctrl-e"], "ctrl-e": ["terminal::SendKeystroke", "ctrl-e"],

View file

@ -698,6 +698,12 @@ impl crate::Keystroke {
Keysym::KP_Next => "pagedown".to_owned(), Keysym::KP_Next => "pagedown".to_owned(),
Keysym::XF86_Back => "back".to_owned(), Keysym::XF86_Back => "back".to_owned(),
Keysym::XF86_Forward => "forward".to_owned(), Keysym::XF86_Forward => "forward".to_owned(),
Keysym::XF86_Cut => "cut".to_owned(),
Keysym::XF86_Copy => "copy".to_owned(),
Keysym::XF86_Paste => "paste".to_owned(),
Keysym::XF86_New => "new".to_owned(),
Keysym::XF86_Open => "open".to_owned(),
Keysym::XF86_Save => "save".to_owned(),
Keysym::comma => ",".to_owned(), Keysym::comma => ",".to_owned(),
Keysym::period => ".".to_owned(), Keysym::period => ".".to_owned(),