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:
33
src/main.rs
33
src/main.rs
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user