diff options
author | Ellie Huxtable <ellie@elliehuxtable.com> | 2023-02-24 15:49:05 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-24 15:49:05 +0000 |
commit | 5f2db5b93e5a311cbd361e9c396b094ed094dc32 (patch) | |
tree | 9ae8386893077e1d4240e05f51a8dd45acfc96a1 | |
parent | 3fdd4f4591bc573906480c1c700df91ba866a2cb (diff) |
Revert "Remove shortcut numbers (#708)" (#724)
This reverts commit 3fdd4f4591bc573906480c1c700df91ba866a2cb.
-rw-r--r-- | src/command/client/search/history_list.rs | 13 | ||||
-rw-r--r-- | src/command/client/search/interactive.rs | 5 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/command/client/search/history_list.rs b/src/command/client/search/history_list.rs index cf195a33..f4725b02 100644 --- a/src/command/client/search/history_list.rs +++ b/src/command/client/search/history_list.rs @@ -112,11 +112,14 @@ pub const PREFIX_LENGTH: u16 = " > 123ms 59s ago".len() as u16; impl DrawState<'_> { fn index(&mut self) { - if self.y as usize + self.state.offset == self.state.selected { - self.draw(" >> ", Style::default()); - } else { - self.draw(" ", Style::default()); - } + // these encode the slices of `" > "`, `" {n} "`, or `" "` in a compact form. + // Yes, this is a hack, but it makes me feel happy + static SLICES: &str = " > 1 2 3 4 5 6 7 8 9 "; + + let i = self.y as usize + self.state.offset; + let i = i.checked_sub(self.state.selected); + let i = i.unwrap_or(10).min(10) * 2; + self.draw(&SLICES[i..i + 3], Style::default()); } fn duration(&mut self, h: &History) { diff --git a/src/command/client/search/interactive.rs b/src/command/client/search/interactive.rs index fb60b47b..903c3362 100644 --- a/src/command/client/search/interactive.rs +++ b/src/command/client/search/interactive.rs @@ -95,6 +95,7 @@ impl State { len: usize, ) -> Option<usize> { let ctrl = input.modifiers.contains(KeyModifiers::CONTROL); + let alt = input.modifiers.contains(KeyModifiers::ALT); match input.code { KeyCode::Char('c' | 'd' | 'g') if ctrl => return Some(RETURN_ORIGINAL), KeyCode::Esc => { @@ -106,6 +107,10 @@ impl State { KeyCode::Enter => { return Some(self.results_state.selected()); } + KeyCode::Char(c @ '1'..='9') if alt => { + let c = c.to_digit(10)? as usize; + return Some(self.results_state.selected() + c); + } KeyCode::Left => { self.input.left(); } |