on master help sign in
feat(term): uniformize word-wise movement and deletion (#2500)

Ctrl-based shortcuts are common in numerous applications. This change: - Adds Ctrl+{Left/Right/Backspace/Delete} for word-wise movement/deletion in prompt, picker, … - Removes Alt-Left and Alt-Right in prompt, picker, … - Adds Alt-Delete in insert mode for forward word deletion In some terminals, Alt-Backspace might not work because it is ambigous. See: https://github.com/helix-editor/helix/pull/2193#issuecomment-1105042501 Hence, Alt alternative is not removed.

commit333ab278374863296ebef5154340f33482e13edb authorBenoît Cortier <bcortier@pm.me> dateFri 15 Jul 2022, 09:59 (4 years ago) parent8681fb6
4 files changed+52−52
book/src/keymap.md+46−47 helix-term/src/application.rs+1−1 helix-term/src/keymap/default.rs+1 helix-term/src/ui/prompt.rs+4−4
book/src/keymap.md+46−47
@@ -298,30 +298,30 @@ convenience. These can be helpful for making simple modifications
298298without escaping to normal mode, but beware that you will not have an
299299undo-able "save point" until you return to normal mode.
300300
301−| Key | Description | Command |
302−| ----- | ----------- | ------- |
303−| `Escape` | Switch to normal mode | `normal_mode` |
304−| `Ctrl-x` | Autocomplete | `completion` |
305−| `Ctrl-r` | Insert a register content | `insert_register` |
306−| `Ctrl-w`, `Alt-Backspace` | Delete previous word | `delete_word_backward` |
307−| `Alt-d` | Delete next word | `delete_word_forward` |
308−| `Alt-b`, `Ctrl-Left` | Backward a word | `move_prev_word_end` |
309−| `Ctrl-b`, `Left` | Backward a char | `move_char_left` |
310−| `Alt-f`, `Ctrl-Right` | Forward a word | `move_next_word_start` |
311−| `Ctrl-f`, `Right` | Forward a char | `move_char_right` |
312−| `Ctrl-e`, `End` | Move to line end | `goto_line_end_newline` |
313−| `Ctrl-a`, `Home` | Move to line start | `goto_line_start` |
314−| `Ctrl-u` | Delete to start of line | `kill_to_line_start` |
315−| `Ctrl-k` | Delete to end of line | `kill_to_line_end` |
316−| `Ctrl-j`, `Enter` | Insert new line | `insert_newline` |
317−| `Backspace`, `Ctrl-h` | Delete previous char | `delete_char_backward` |
318−| `Delete`, `Ctrl-d` | Delete next char | `delete_char_forward` |
319−| `Ctrl-p`, `Up` | Move to previous line | `move_line_up` |
320−| `Ctrl-n`, `Down` | Move to next line | `move_line_down` |
321−| `PageUp` | Move one page up | `page_up` |
322−| `PageDown` | Move one page down | `page_down` |
323−| `Alt->` | Go to end of buffer | `goto_file_end` |
324−| `Alt-<` | Go to start of buffer | `goto_file_start` |
301+| Key | Description | Command |
302+| ----- | ----------- | ------- |
303+| `Escape` | Switch to normal mode | `normal_mode` |
304+| `Ctrl-x` | Autocomplete | `completion` |
305+| `Ctrl-r` | Insert a register content | `insert_register` |
306+| `Ctrl-w`, `Alt-Backspace`, `Ctrl-Backspace` | Delete previous word | `delete_word_backward` |
307+| `Alt-d`, `Alt-Delete`, `Ctrl-Delete` | Delete next word | `delete_word_forward` |
308+| `Alt-b`, `Ctrl-Left` | Backward a word | `move_prev_word_end` |
309+| `Ctrl-b`, `Left` | Backward a char | `move_char_left` |
310+| `Alt-f`, `Ctrl-Right` | Forward a word | `move_next_word_start` |
311+| `Ctrl-f`, `Right` | Forward a char | `move_char_right` |
312+| `Ctrl-e`, `End` | Move to line end | `goto_line_end_newline` |
313+| `Ctrl-a`, `Home` | Move to line start | `goto_line_start` |
314+| `Ctrl-u` | Delete to start of line | `kill_to_line_start` |
315+| `Ctrl-k` | Delete to end of line | `kill_to_line_end` |
316+| `Ctrl-j`, `Enter` | Insert new line | `insert_newline` |
317+| `Backspace`, `Ctrl-h` | Delete previous char | `delete_char_backward` |
318+| `Delete`, `Ctrl-d` | Delete next char | `delete_char_forward` |
319+| `Ctrl-p`, `Up` | Move to previous line | `move_line_up` |
320+| `Ctrl-n`, `Down` | Move to next line | `move_line_down` |
321+| `PageUp` | Move one page up | `page_up` |
322+| `PageDown` | Move one page down | `page_down` |
323+| `Alt->` | Go to end of buffer | `goto_file_end` |
324+| `Alt-<` | Go to start of buffer | `goto_file_start` |
325325
326326## Select / extend mode
327327
@@ -358,26 +358,25 @@ Keys to use within picker. Remapping currently not supported.
358358
359359Keys to use within prompt, Remapping currently not supported.
360360
361−| Key | Description |
362−| ----- | ------------- |
363−| `Escape`, `Ctrl-c` | Close prompt |
364−| `Alt-b`, `Alt-Left` | Backward a word |
365−| `Ctrl-b`, `Left` | Backward a char |
366−| `Alt-f`, `Alt-Right` | Forward a word |
367−| `Ctrl-f`, `Right` | Forward a char |
368−| `Ctrl-e`, `End` | Move prompt end |
369−| `Ctrl-a`, `Home` | Move prompt start |
370−| `Ctrl-w` | Delete previous word |
371−| `Alt-d` | Delete next word |
372−| `Ctrl-u` | Delete to start of line |
373−| `Ctrl-k` | Delete to end of line |
374−| `backspace`, `Ctrl-h` | Delete previous char |
375−| `delete`, `Ctrl-d` | Delete next char |
376−| `Ctrl-s` | Insert a word under doc cursor, may be changed to Ctrl-r Ctrl-w later |
377−| `Ctrl-p`, `Up` | Select previous history |
378−| `Ctrl-n`, `Down` | Select next history |
379−| `Ctrl-r` | Insert the content of the register selected by following input char |
380−| `Tab` | Select next completion item |
381−| `BackTab` | Select previous completion item |
382−| `Enter` | Open selected |
383−
361+| Key | Description |
362+| ----- | ------------- |
363+| `Escape`, `Ctrl-c` | Close prompt |
364+| `Alt-b`, `Ctrl-Left` | Backward a word |
365+| `Ctrl-b`, `Left` | Backward a char |
366+| `Alt-f`, `Ctrl-Right` | Forward a word |
367+| `Ctrl-f`, `Right` | Forward a char |
368+| `Ctrl-e`, `End` | Move prompt end |
369+| `Ctrl-a`, `Home` | Move prompt start |
370+| `Ctrl-w`, `Alt-Backspace`, `Ctrl-Backspace` | Delete previous word |
371+| `Alt-d`, `Alt-Delete`, `Ctrl-Delete` | Delete next word |
372+| `Ctrl-u` | Delete to start of line |
373+| `Ctrl-k` | Delete to end of line |
374+| `backspace`, `Ctrl-h` | Delete previous char |
375+| `delete`, `Ctrl-d` | Delete next char |
376+| `Ctrl-s` | Insert a word under doc cursor, may be changed to Ctrl-r Ctrl-w later |
377+| `Ctrl-p`, `Up` | Select previous history |
378+| `Ctrl-n`, `Down` | Select next history |
379+| `Ctrl-r` | Insert the content of the register selected by following input char |
380+| `Tab` | Select next completion item |
381+| `BackTab` | Select previous completion item |
382+| `Enter` | Open selected |
helix-term/src/application.rs+1−1
@@ -350,7 +350,7 @@ impl Application {
350350 }
351351
352352 fn refresh_config(&mut self) {
353− let config = Config::load(helix_loader::config_file()).unwrap_or_else(|err| {
353+ let config = Config::load_default().unwrap_or_else(|err| {
354354 self.editor.set_error(err.to_string());
355355 Config::default()
356356 });
helix-term/src/keymap/default.rs+1
@@ -351,6 +351,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
351351 "C-w" => delete_word_backward,
352352 "A-backspace" => delete_word_backward,
353353 "A-d" => delete_word_forward,
354+ "A-del" => delete_word_forward,
354355 "C-s" => commit_undo_checkpoint,
355356
356357 "left" => move_char_left,
helix-term/src/ui/prompt.rs+4−4
@@ -477,14 +477,14 @@ impl Component for Prompt {
477477 (self.callback_fn)(cx, &self.line, PromptEvent::Abort);
478478 return close_fn;
479479 }
480− alt!('b') | alt!(Left) => self.move_cursor(Movement::BackwardWord(1)),
481− alt!('f') | alt!(Right) => self.move_cursor(Movement::ForwardWord(1)),
480+ alt!('b') | ctrl!(Left) => self.move_cursor(Movement::BackwardWord(1)),
481+ alt!('f') | ctrl!(Right) => self.move_cursor(Movement::ForwardWord(1)),
482482 ctrl!('b') | key!(Left) => self.move_cursor(Movement::BackwardChar(1)),
483483 ctrl!('f') | key!(Right) => self.move_cursor(Movement::ForwardChar(1)),
484484 ctrl!('e') | key!(End) => self.move_end(),
485485 ctrl!('a') | key!(Home) => self.move_start(),
486− ctrl!('w') => self.delete_word_backwards(cx),
487− alt!('d') => self.delete_word_forwards(cx),
486+ ctrl!('w') | alt!(Backspace) | ctrl!(Backspace) => self.delete_word_backwards(cx),
487+ alt!('d') | alt!(Delete) | ctrl!(Delete) => self.delete_word_forwards(cx),
488488 ctrl!('k') => self.kill_to_end_of_line(cx),
489489 ctrl!('u') => self.kill_to_start_of_line(cx),
490490 ctrl!('h') | key!(Backspace) => {