diff --git a/src/command/client/search/history_list.rs b/src/command/client/search/history_list.rs index cf195a3..f4725b0 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 fb60b47..903c336 100644 --- a/src/command/client/search/interactive.rs +++ b/src/command/client/search/interactive.rs @@ -95,6 +95,7 @@ impl State { len: usize, ) -> Option { 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(); }