Add emacs keymap (#19605)

Douglas Ronne created

Release Notes:

- Added Emacs (beta) base keymap

Change summary

assets/keymaps/linux/emacs.json           | 63 +++++++++++++++++++++++++
assets/keymaps/macos/emacs.json           | 63 +++++++++++++++++++++++++
crates/welcome/src/base_keymap_setting.rs | 10 +++
3 files changed, 134 insertions(+), 2 deletions(-)

Detailed changes

assets/keymaps/linux/emacs.json 🔗

@@ -0,0 +1,63 @@
+// documentation: https://zed.dev/docs/key-bindings
+//
+// To see the default key bindings run `zed: open default keymap`
+// from the command palette.
+[
+  {
+    "context": "Editor",
+    "bindings": {
+      "ctrl-g": "editor::Cancel",
+      "ctrl-shift-g": "go_to_line::Toggle",
+      //"ctrl-space": "editor::SetMark",
+      "ctrl-x u": "editor::Undo",
+      "ctrl-x ctrl-u": "editor::Redo",
+      "ctrl-f": "editor::MoveRight",
+      "ctrl-b": "editor::MoveLeft",
+      "ctrl-n": "editor::MoveDown",
+      "ctrl-p": "editor::MoveUp",
+      "ctrl-a": "editor::MoveToBeginningOfLine",
+      "ctrl-e": "editor::MoveToEndOfLine",
+      "alt-f": "editor::MoveToNextSubwordEnd",
+      "alt-b": "editor::MoveToPreviousSubwordStart",
+      "ctrl-d": "editor::Delete",
+      "alt-d": "editor::DeleteToNextWordEnd",
+      "ctrl-k": "editor::CutToEndOfLine",
+      "ctrl-w": "editor::Cut",
+      "alt-w": "editor::Copy",
+      "ctrl-y": "editor::Paste",
+      "ctrl-_": "editor::Undo",
+      "ctrl-v": "editor::MovePageDown",
+      "alt-v": "editor::MovePageUp",
+      "ctrl-x ]": "editor::MoveToEnd",
+      "ctrl-x [": "editor::MoveToBeginning",
+      "ctrl-l": "editor::ScrollCursorCenterTopBottom",
+      "ctrl-s": "buffer_search::Deploy",
+      "ctrl-x ctrl-f": "file_finder::Toggle",
+      "ctrl-shift-r": "editor::Rename"
+    }
+  },
+  {
+    "context": "Workspace",
+    "bindings": {
+      "ctrl-x k": "pane::CloseActiveItem",
+      "ctrl-x ctrl-c": "workspace::CloseWindow",
+      "ctrl-x o": "workspace::ActivateNextPane",
+      "ctrl-x b": "tab_switcher::Toggle",
+      "ctrl-x 0": "pane::CloseActiveItem",
+      "ctrl-x 1": "pane::CloseInactiveItems",
+      "ctrl-x 2": "pane::SplitVertical",
+      "ctrl-x ctrl-f": "file_finder::Toggle",
+      "ctrl-x ctrl-s": "workspace::Save",
+      "ctrl-x ctrl-w": "workspace::SaveAs",
+      "ctrl-x s": "workspace::SaveAll",
+      "shift shift": "file_finder::Toggle"
+    }
+  },
+  {
+    "context": "Pane",
+    "bindings": {
+      "ctrl-alt-left": "pane::GoBack",
+      "ctrl-alt-right": "pane::GoForward"
+    }
+  }
+]

assets/keymaps/macos/emacs.json 🔗

@@ -0,0 +1,63 @@
+// documentation: https://zed.dev/docs/key-bindings
+//
+// To see the default key bindings run `zed: open default keymap`
+// from the command palette.
+[
+  {
+    "context": "Editor",
+    "bindings": {
+      "ctrl-g": "editor::Cancel",
+      "ctrl-shift-g": "go_to_line::Toggle",
+      //"ctrl-space": "editor::SetMark",
+      "ctrl-x u": "editor::Undo",
+      "ctrl-x ctrl-u": "editor::Redo",
+      "ctrl-f": "editor::MoveRight",
+      "ctrl-b": "editor::MoveLeft",
+      "ctrl-n": "editor::MoveDown",
+      "ctrl-p": "editor::MoveUp",
+      "ctrl-a": "editor::MoveToBeginningOfLine",
+      "ctrl-e": "editor::MoveToEndOfLine",
+      "alt-f": "editor::MoveToNextSubwordEnd",
+      "alt-b": "editor::MoveToPreviousSubwordStart",
+      "ctrl-d": "editor::Delete",
+      "alt-d": "editor::DeleteToNextWordEnd",
+      "ctrl-k": "editor::CutToEndOfLine",
+      "ctrl-w": "editor::Cut",
+      "alt-w": "editor::Copy",
+      "ctrl-y": "editor::Paste",
+      "ctrl-_": "editor::Undo",
+      "ctrl-v": "editor::MovePageDown",
+      "alt-v": "editor::MovePageUp",
+      "ctrl-x ]": "editor::MoveToEnd",
+      "ctrl-x [": "editor::MoveToBeginning",
+      "ctrl-l": "editor::ScrollCursorCenterTopBottom",
+      "ctrl-s": "buffer_search::Deploy",
+      "ctrl-x ctrl-f": "file_finder::Toggle",
+      "ctrl-shift-r": "editor::Rename"
+    }
+  },
+  {
+    "context": "Workspace",
+    "bindings": {
+      "ctrl-x k": "pane::CloseActiveItem",
+      "ctrl-x ctrl-c": "workspace::CloseWindow",
+      "ctrl-x o": "workspace::ActivateNextPane",
+      "ctrl-x b": "tab_switcher::Toggle",
+      "ctrl-x 0": "pane::CloseActiveItem",
+      "ctrl-x 1": "pane::CloseInactiveItems",
+      "ctrl-x 2": "pane::SplitVertical",
+      "ctrl-x ctrl-f": "file_finder::Toggle",
+      "ctrl-x ctrl-s": "workspace::Save",
+      "ctrl-x ctrl-w": "workspace::SaveAs",
+      "ctrl-x s": "workspace::SaveAll",
+      "shift shift": "file_finder::Toggle"
+    }
+  },
+  {
+    "context": "Pane",
+    "bindings": {
+      "ctrl-alt-left": "pane::GoBack",
+      "ctrl-alt-right": "pane::GoForward"
+    }
+  }
+]

crates/welcome/src/base_keymap_setting.rs 🔗

@@ -15,6 +15,7 @@ pub enum BaseKeymap {
     SublimeText,
     Atom,
     TextMate,
+    Emacs,
     None,
 }
 
@@ -26,6 +27,7 @@ impl Display for BaseKeymap {
             BaseKeymap::SublimeText => write!(f, "Sublime Text"),
             BaseKeymap::Atom => write!(f, "Atom"),
             BaseKeymap::TextMate => write!(f, "TextMate"),
+            BaseKeymap::Emacs => write!(f, "Emacs (beta)"),
             BaseKeymap::None => write!(f, "None"),
         }
     }
@@ -33,20 +35,22 @@ impl Display for BaseKeymap {
 
 impl BaseKeymap {
     #[cfg(target_os = "macos")]
-    pub const OPTIONS: [(&'static str, Self); 5] = [
+    pub const OPTIONS: [(&'static str, Self); 6] = [
         ("VSCode (Default)", Self::VSCode),
         ("Atom", Self::Atom),
         ("JetBrains", Self::JetBrains),
         ("Sublime Text", Self::SublimeText),
+        ("Emacs (beta)", Self::Emacs),
         ("TextMate", Self::TextMate),
     ];
 
     #[cfg(not(target_os = "macos"))]
-    pub const OPTIONS: [(&'static str, Self); 4] = [
+    pub const OPTIONS: [(&'static str, Self); 5] = [
         ("VSCode (Default)", Self::VSCode),
         ("Atom", Self::Atom),
         ("JetBrains", Self::JetBrains),
         ("Sublime Text", Self::SublimeText),
+        ("Emacs (beta)", Self::Emacs),
     ];
 
     pub fn asset_path(&self) -> Option<&'static str> {
@@ -56,6 +60,7 @@ impl BaseKeymap {
             BaseKeymap::SublimeText => Some("keymaps/macos/sublime_text.json"),
             BaseKeymap::Atom => Some("keymaps/macos/atom.json"),
             BaseKeymap::TextMate => Some("keymaps/macos/textmate.json"),
+            BaseKeymap::Emacs => Some("keymaps/macos/emacs.json"),
             BaseKeymap::VSCode => None,
             BaseKeymap::None => None,
         }
@@ -65,6 +70,7 @@ impl BaseKeymap {
             BaseKeymap::JetBrains => Some("keymaps/linux/jetbrains.json"),
             BaseKeymap::SublimeText => Some("keymaps/linux/sublime_text.json"),
             BaseKeymap::Atom => Some("keymaps/linux/atom.json"),
+            BaseKeymap::Emacs => Some("keymaps/linux/emacs.json"),
             BaseKeymap::TextMate => None,
             BaseKeymap::VSCode => None,
             BaseKeymap::None => None,