Hello, I am having a great time setting up the editor, but with a few problems related to the Emacs keymap. In this PR I have compiled changes in the default `emacs.json` that I believe make the onboarding smoother for incoming emacs users. This includes points that may need further discussion and some breaking changes, although nothing that cannot be reverted with a quick `keymap.json` overwrite. (Please let me know if it is better to split up the PR) ### 1. Avoid fallbacks to the default keymap all platforms: - `ctrl-g` activating `go_to_line::Toggle` when there is nothing to cancel linux / windows: - `ctrl-x` activating `editor::Cut` on the 1 second timeout - `ctrl-p` activating `file_finder::Toggle` when the cursor is on the first character of the buffer - `ctrl-n` activating `workspace::NewFile` when the cursor is on the last character of the buffer ### 2. Make all move commands operate on full words In the current Zed implementation some commands run on full words and others on subwords. Although ultimately a matter of user preference, I think it is sensible to use full words as the default, since that is what is shipped with emacs. ### ~~3. Cancel selections after copy/cut commands~~ Moved to #40904 Canceling the selection is the default emacs behavior, but the way to achieve it might need some brushing. Currently I am using `workspace::SendKeystrokes` to copy -> cancel(`ctrl-g`), but this has the following problems: - can only be used in the main buffer (since `editor::Cancel` would typically close secondary buffers) - may cause problems downstream if the user overwrites the `ctrl-g` binding ### ~~4. Replace killring with normal cut/paste commands~~ Moved to #40905 Ideally Zed would support emacs-like killrings (#25270 and #22490). However, I understand that making an emacs emulator is not a project goal, and the Zed team should have a bunch of tasks with higher priority. By using a unified clipboard and standard cut/paste commands, we can provide an experience that is closer to the out-of-the-box emacs behavior (#33351) while also avoiding some pitfalls of the current killring implementation (#28715). ### 5. Promote some bindings to workspace commands - `alt-x` as `command_palette::Toggle` - `ctrl-x b` and `ctrl-x ctrl-b` as `tab_switcher::Toggle` --- Release Notes: - emacs: Fixed a problem where keys would fallback to their default keymap binding on certain conditions - emacs: Changed `alt-f` and `alt-b` to operate on full words, as in the emacs default - emacs: `alt-x`, `ctrl-x b`, and `ctrl-x ctrl-b` are now Workspace bindings
9.7 KiB
Executable File
9.7 KiB
Executable File