Vim like search (#279)

* add quick search within a list

* vim like search navigation

* close cmd line with esc

* format

* document changes in README
This commit is contained in:
Moshe Sherman
2020-10-05 14:50:12 +03:00
committed by GitHub
parent fc79889665
commit f2b4f01242
6 changed files with 121 additions and 12 deletions

View File

@@ -74,6 +74,7 @@ mod ui;
#[cfg(feature = "mpris")]
mod mpris;
use crate::command::{Command, JumpMode};
use crate::commands::CommandManager;
use crate::events::{Event, EventManager};
use crate::library::Library;
@@ -279,6 +280,22 @@ fn main() {
}
});
cursive.add_global_callback('/', move |s| {
if s.find_name::<ContextMenu>("contextmenu").is_none() {
s.call_on_name("main", |v: &mut ui::layout::Layout| {
v.enable_jump();
});
}
});
cursive.add_global_callback(cursive::event::Key::Esc, move |s| {
if s.find_name::<ContextMenu>("contextmenu").is_none() {
s.call_on_name("main", |v: &mut ui::layout::Layout| {
v.clear_cmdline();
});
}
});
layout.cmdline.set_on_edit(move |s, cmd, _| {
s.call_on_name("main", |v: &mut ui::layout::Layout| {
if cmd.is_empty() {
@@ -294,11 +311,19 @@ fn main() {
let mut main = s.find_name::<ui::layout::Layout>("main").unwrap();
main.clear_cmdline();
}
let c = &cmd[1..];
let parsed = command::parse(c);
if let Some(parsed) = parsed {
if cmd.starts_with("/") {
let query = &cmd[1..];
let command = Command::Jump(JumpMode::Query(query.to_string()));
if let Some(data) = s.user_data::<UserData>().cloned() {
data.cmd.handle(s, parsed)
data.cmd.handle(s, command);
}
} else {
let c = &cmd[1..];
let parsed = command::parse(c);
if let Some(parsed) = parsed {
if let Some(data) = s.user_data::<UserData>().cloned() {
data.cmd.handle(s, parsed)
}
}
}
ev.trigger();