Handle `NotFound` and `Cancelled` for keymap lookup

pull/997/head
Omnikar 3 years ago
parent 592fa1d756
commit 43c1704fb2
No known key found for this signature in database
GPG Key ID: 7DE6694CDA7885ED

@ -2829,10 +2829,11 @@ pub mod cmd {
{
(STATIC_HELP_DIR, arg)
} else {
let arg = arg.to_owned().into_owned();
let keys = arg
.parse::<KeyEvent>()
.map(|key| vec![key])
.or_else(|_| helix_view::input::parse_macro(arg))?;
.or_else(|_| helix_view::input::parse_macro(&arg))?;
let callback = Box::pin(async move {
let call: job::Callback =
Box::new(move |editor: &mut Editor, compositor: &mut Compositor| {
@ -2845,16 +2846,23 @@ pub mod cmd {
keymap.get(*key);
});
let result = keymap.get(*last_key);
let (help_dir, command): (&str, &str) = match &result.kind {
let res: anyhow::Result<(&str, &str)> = match &result.kind {
KeymapResultKind::Matched(command) => match command {
MappableCommand::Static { name, .. } => (STATIC_HELP_DIR, name),
MappableCommand::Static { name, .. } => {
Ok((STATIC_HELP_DIR, name))
}
MappableCommand::Typable { name, .. } => {
(TYPABLE_HELP_DIR, name)
Ok((TYPABLE_HELP_DIR, name))
}
},
KeymapResultKind::NotFound | KeymapResultKind::Cancelled(_) => {
Err(anyhow!("No command found for '{}'", arg))
}
_ => todo!(),
};
if let Err(e) = open_help(help_dir, command, editor) {
if let Err(e) = res.and_then(|(help_dir, command)| {
open_help(help_dir, command, editor)
}) {
editor.set_error(e.to_string());
}
});

Loading…
Cancel
Save