Skip to content

Commit

Permalink
Add emacs keybindings for mark emulation (#22904)
Browse files Browse the repository at this point in the history
These keybindings extend the already selected text. This allows closer
emacs emulation where subsequent movement commands extend / shrink the
current selection instead of dismissing it.

This is a follow up on 
- #21927

Release Notes:

- Added emacs movement keybindings that extend/shrink the current
selection

---------

Co-authored-by: Peter Tripp <[email protected]>
  • Loading branch information
ozanmakes and notpeter authored Jan 13, 2025
1 parent c26553d commit 13405ed
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 4 deletions.
61 changes: 59 additions & 2 deletions assets/keymaps/linux/emacs.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
"ctrl-x b": "tab_switcher::Toggle", // switch-to-buffer
"alt-g g": "go_to_line::Toggle", // goto-line
"alt-g alt-g": "go_to_line::Toggle", // goto-line
//"ctrl-space": "editor::SetMark",
"ctrl-f": "editor::MoveRight", // forward-char
"ctrl-b": "editor::MoveLeft", // backward-char
"ctrl-n": "editor::MoveDown", // next-line
Expand Down Expand Up @@ -52,7 +51,65 @@
"alt->": "editor::MoveToEnd", // end-of-buffer
"ctrl-l": "editor::ScrollCursorCenterTopBottom", // recenter-top-bottom
"ctrl-s": "buffer_search::Deploy", // isearch-forward
"alt-^": "editor::JoinLines" // join-line
"alt-^": "editor::JoinLines", // join-line
"alt-/": "editor::ShowCompletions" // dabbrev-expand
}
},
// Extend selection with movement bindings
{
"context": "Editor && (mode == full) && selection",
"bindings": {
"right": "editor::SelectRight",
"left": "editor::SelectLeft",
"down": "editor::SelectDown",
"up": "editor::SelectUp",
"home": "editor::SelectToBeginningOfLine",
"end": "editor::SelectToEndOfLine",
"alt-left": "editor::SelectToPreviousWordStart",
"alt-right": "editor::SelectToNextWordEnd",
"pagedown": "editor::SelectPageDown",
"pageup": "editor::SelectPageUp",
"ctrl-f": "editor::SelectRight",
"ctrl-b": "editor::SelectLeft",
"ctrl-n": "editor::SelectDown",
"ctrl-p": "editor::SelectUp",
"ctrl-a": "editor::SelectToBeginningOfLine",
"ctrl-e": "editor::SelectToEndOfLine",
"alt-f": "editor::SelectToNextWordEnd",
"alt-b": "editor::SelectToPreviousSubwordStart",
"alt-<": "editor::SelectToBeginning",
"alt->": "editor::SelectToEnd",
"ctrl-space": "editor::Cancel" // clear mark
}
},
// Emacs set-mark-command emulation (ctrl-space + movement bindings)
{
"context": "Editor && (mode == full) && !selection",
"bindings": {
"ctrl-space right": "editor::SelectRight",
"ctrl-space left": "editor::SelectLeft",
"ctrl-space down": "editor::SelectDown",
"ctrl-space up": "editor::SelectUp",
"ctrl-space home": "editor::SelectToBeginningOfLine",
"ctrl-space end": "editor::SelectToEndOfLine",
"ctrl-space alt-left": "editor::SelectToPreviousWordStart",
"ctrl-space alt-right": "editor::SelectToNextWordEnd",
"ctrl-space pagedown": "editor::SelectPageDown",
"ctrl-space pageup": "editor::SelectPageUp",
"ctrl-space ctrl-f": "editor::SelectRight",
"ctrl-space ctrl-b": "editor::SelectLeft",
"ctrl-space ctrl-n": "editor::SelectDown",
"ctrl-space ctrl-p": "editor::SelectUp",
"ctrl-space ctrl-a": "editor::SelectToBeginningOfLine",
"ctrl-space ctrl-e": "editor::SelectToEndOfLine",
"ctrl-space alt-f": "editor::SelectToNextWordEnd",
"ctrl-space alt-b": "editor::SelectToPreviousWordStart",
"ctrl-space alt-<": "editor::SelectToBeginning",
"ctrl-space alt->": "editor::SelectToEnd",
"ctrl-space alt-v": "editor::SelectPageUp",
"ctrl-space ctrl-v": "editor::SelectPageDown",
"ctrl-space alt-{": "editor::SelectToStartOfParagraph",
"ctrl-space alt-}": "editor::SelectToEndOfParagraph"
}
},
{
Expand Down
61 changes: 59 additions & 2 deletions assets/keymaps/macos/emacs.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
"ctrl-x b": "tab_switcher::Toggle", // switch-to-buffer
"alt-g g": "go_to_line::Toggle", // goto-line
"alt-g alt-g": "go_to_line::Toggle", // goto-line
//"ctrl-space": "editor::SetMark",
"ctrl-f": "editor::MoveRight", // forward-char
"ctrl-b": "editor::MoveLeft", // backward-char
"ctrl-n": "editor::MoveDown", // next-line
Expand Down Expand Up @@ -52,7 +51,65 @@
"alt->": "editor::MoveToEnd", // end-of-buffer
"ctrl-l": "editor::ScrollCursorCenterTopBottom", // recenter-top-bottom
"ctrl-s": "buffer_search::Deploy", // isearch-forward
"alt-^": "editor::JoinLines" // join-line
"alt-^": "editor::JoinLines", // join-line
"alt-/": "editor::ShowCompletions" // dabbrev-expand
}
},
// Extend selection with movement bindings
{
"context": "Editor && (mode == full) && selection",
"bindings": {
"right": "editor::SelectRight",
"left": "editor::SelectLeft",
"down": "editor::SelectDown",
"up": "editor::SelectUp",
"home": "editor::SelectToBeginningOfLine",
"end": "editor::SelectToEndOfLine",
"alt-left": "editor::SelectToPreviousWordStart",
"alt-right": "editor::SelectToNextWordEnd",
"pagedown": "editor::SelectPageDown",
"pageup": "editor::SelectPageUp",
"ctrl-f": "editor::SelectRight",
"ctrl-b": "editor::SelectLeft",
"ctrl-n": "editor::SelectDown",
"ctrl-p": "editor::SelectUp",
"ctrl-a": "editor::SelectToBeginningOfLine",
"ctrl-e": "editor::SelectToEndOfLine",
"alt-f": "editor::SelectToNextWordEnd",
"alt-b": "editor::SelectToPreviousSubwordStart",
"alt-<": "editor::SelectToBeginning",
"alt->": "editor::SelectToEnd",
"ctrl-space": "editor::Cancel" // clear mark
}
},
// Emacs set-mark-command emulation (ctrl-space + movement bindings)
{
"context": "Editor && (mode == full) && !selection",
"bindings": {
"ctrl-space right": "editor::SelectRight",
"ctrl-space left": "editor::SelectLeft",
"ctrl-space down": "editor::SelectDown",
"ctrl-space up": "editor::SelectUp",
"ctrl-space home": "editor::SelectToBeginningOfLine",
"ctrl-space end": "editor::SelectToEndOfLine",
"ctrl-space alt-left": "editor::SelectToPreviousWordStart",
"ctrl-space alt-right": "editor::SelectToNextWordEnd",
"ctrl-space pagedown": "editor::SelectPageDown",
"ctrl-space pageup": "editor::SelectPageUp",
"ctrl-space ctrl-f": "editor::SelectRight",
"ctrl-space ctrl-b": "editor::SelectLeft",
"ctrl-space ctrl-n": "editor::SelectDown",
"ctrl-space ctrl-p": "editor::SelectUp",
"ctrl-space ctrl-a": "editor::SelectToBeginningOfLine",
"ctrl-space ctrl-e": "editor::SelectToEndOfLine",
"ctrl-space alt-f": "editor::SelectToNextWordEnd",
"ctrl-space alt-b": "editor::SelectToPreviousWordStart",
"ctrl-space alt-<": "editor::SelectToBeginning",
"ctrl-space alt->": "editor::SelectToEnd",
"ctrl-space alt-v": "editor::SelectPageUp",
"ctrl-space ctrl-v": "editor::SelectPageDown",
"ctrl-space alt-{": "editor::SelectToStartOfParagraph",
"ctrl-space alt-}": "editor::SelectToEndOfParagraph"
}
},
{
Expand Down

0 comments on commit 13405ed

Please sign in to comment.