summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2023-02-24 15:49:05 +0000
committerGitHub <noreply@github.com>2023-02-24 15:49:05 +0000
commit5f2db5b93e5a311cbd361e9c396b094ed094dc32 (patch)
tree9ae8386893077e1d4240e05f51a8dd45acfc96a1
parent3fdd4f4591bc573906480c1c700df91ba866a2cb (diff)
Revert "Remove shortcut numbers (#708)" (#724)
-rw-r--r--src/command/client/search/history_list.rs13
-rw-r--r--src/command/client/search/interactive.rs5
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();
}