mirror of
https://github.com/atuinsh/atuin.git
synced 2024-11-25 09:44:03 +01:00
Implement 'quick access' via Alt-<n> (#79)
* Implement 'quick access' via numbers Puts numbers 0-9 next to commands *above* current selection. Ctrl-<number> should activate them - but since Ctrl-<num> are reserved by terminal, this does not currently work. Need to find different sets of keyboard shortcuts. Numbers are *above* current selection, since the user must use the arrow keys to go over the commands below current selection before reaching selection. * Use Alt+<n> to select last nth command * Don't print Opt+0 Same as <Enter> * Run rustfmt * Simplify code - Use ? operator for getting selected item - Use RangeInclusive to check if character pressed is a number
This commit is contained in:
parent
f0463326fa
commit
c02934d184
@ -97,6 +97,23 @@ impl State {
|
||||
ago = format!(" {}", ago);
|
||||
}
|
||||
|
||||
let selected_index = match self.results_state.selected() {
|
||||
None => Span::raw(" "),
|
||||
Some(selected) => match i.checked_sub(selected) {
|
||||
None => Span::raw(" "),
|
||||
Some(diff) => {
|
||||
if 0 < diff && diff < 10 {
|
||||
Span::styled(
|
||||
format!(" {} ", diff),
|
||||
Style::default().fg(Color::DarkGray),
|
||||
)
|
||||
} else {
|
||||
Span::raw(" ")
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
let duration = Span::styled(
|
||||
duration,
|
||||
Style::default().fg(if m.exit == 0 || m.duration == -1 {
|
||||
@ -115,8 +132,14 @@ impl State {
|
||||
}
|
||||
}
|
||||
|
||||
let spans =
|
||||
Spans::from(vec![duration, Span::raw(" "), ago, Span::raw(" "), command]);
|
||||
let spans = Spans::from(vec![
|
||||
selected_index,
|
||||
duration,
|
||||
Span::raw(" "),
|
||||
ago,
|
||||
Span::raw(" "),
|
||||
command,
|
||||
]);
|
||||
|
||||
ListItem::new(spans)
|
||||
})
|
||||
@ -171,6 +194,16 @@ async fn key_handler(
|
||||
.map_or(app.input.clone(), |h| h.command.clone()),
|
||||
);
|
||||
}
|
||||
Key::Alt(c) if ('1'..='9').contains(&c) => {
|
||||
let c = c.to_digit(10)? as usize;
|
||||
let i = app.results_state.selected()? + c;
|
||||
|
||||
return Some(
|
||||
app.results
|
||||
.get(i)
|
||||
.map_or(app.input.clone(), |h| h.command.clone()),
|
||||
);
|
||||
}
|
||||
Key::Char(c) => {
|
||||
app.input.push(c);
|
||||
query_results(app, search_mode, db).await.unwrap();
|
||||
|
Loading…
Reference in New Issue
Block a user