diff options
| author | Steven Xu <stevenxxiu@users.noreply.github.com> | 2023-03-06 05:49:09 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-05 18:49:09 +0000 |
| commit | 2e79e73af32793f7fe103b81246a5ef5a6e1cfbe (patch) | |
| tree | 1916278c4aa294f5fca3b7bcf29802eecf81e1fa /src/command/client/search/interactive.rs | |
| parent | Up arrow filter_mode setting default to global filter mode (#758) (diff) | |
| download | atuin-2e79e73af32793f7fe103b81246a5ef5a6e1cfbe.zip | |
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
Diffstat (limited to 'src/command/client/search/interactive.rs')
| -rw-r--r-- | src/command/client/search/interactive.rs | 24 |
1 files changed, 24 insertions, 0 deletions
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)); + } _ => {} }; |
