aboutsummaryrefslogtreecommitdiffstats
path: root/src/command/client/search/interactive.rs
diff options
context:
space:
mode:
authorSteven Xu <stevenxxiu@users.noreply.github.com>2023-03-06 05:49:09 +1100
committerGitHub <noreply@github.com>2023-03-05 18:49:09 +0000
commit2e79e73af32793f7fe103b81246a5ef5a6e1cfbe (patch)
tree1916278c4aa294f5fca3b7bcf29802eecf81e1fa /src/command/client/search/interactive.rs
parentUp arrow filter_mode setting default to global filter mode (#758) (diff)
downloadatuin-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.rs24
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));
+ }
_ => {}
};