From 2e79e73af32793f7fe103b81246a5ef5a6e1cfbe Mon Sep 17 00:00:00 2001 From: Steven Xu Date: Mon, 6 Mar 2023 05:49:09 +1100 Subject: feat: add common default keybindings (#719) * feat: add common default keybindings * feat: add `WORD_SEPARATORS` to config as `word_chars`, as this is what *Zsh* calls it * feat: add option for *Emacs* word jumping * feat: scroll with `PageUp` and `PageDown`, cf #374 --- src/command/client/search/interactive.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/command/client/search/interactive.rs') diff --git a/src/command/client/search/interactive.rs b/src/command/client/search/interactive.rs index 01175b52..c5c983ac 100644 --- a/src/command/client/search/interactive.rs +++ b/src/command/client/search/interactive.rs @@ -111,19 +111,33 @@ impl State { let c = c.to_digit(10)? as usize; return Some(self.results_state.selected() + c); } + KeyCode::Left if ctrl => self + .input + .prev_word(&settings.word_chars, settings.word_jump_mode), KeyCode::Left => { self.input.left(); } KeyCode::Char('h') if ctrl => { self.input.left(); } + KeyCode::Right if ctrl => self + .input + .next_word(&settings.word_chars, settings.word_jump_mode), KeyCode::Right => self.input.right(), KeyCode::Char('l') if ctrl => self.input.right(), KeyCode::Char('a') if ctrl => self.input.start(), + KeyCode::Home => self.input.start(), KeyCode::Char('e') if ctrl => self.input.end(), + KeyCode::End => self.input.end(), + KeyCode::Backspace if ctrl => self + .input + .remove_prev_word(&settings.word_chars, settings.word_jump_mode), KeyCode::Backspace => { self.input.back(); } + KeyCode::Delete if ctrl => self + .input + .remove_next_word(&settings.word_chars, settings.word_jump_mode), KeyCode::Delete => { self.input.remove(); } @@ -168,6 +182,16 @@ impl State { self.results_state.select(i.min(len - 1)); } KeyCode::Char(c) => self.input.insert(c), + KeyCode::PageDown => { + let scroll_len = self.results_state.max_entries() - settings.scroll_context_lines; + let i = self.results_state.selected().saturating_sub(scroll_len); + self.results_state.select(i); + } + KeyCode::PageUp => { + let scroll_len = self.results_state.max_entries() - settings.scroll_context_lines; + let i = self.results_state.selected() + scroll_len; + self.results_state.select(i.min(len - 1)); + } _ => {} }; -- cgit v1.3.1