diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/run/builtin.rs | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index d060911..cfaef1e 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -630,7 +630,10 @@ impl bind { } fn is_interactive(args: &[BString]) -> bool { - matches!(args.get(0).map(|x| &x[..]), Some(b"i" | b"interactive")) + matches!( + args.get(0).map(|x| &x[..]), + Some(b"i" | b"interactive" | b"del" | b"delete") + ) } } @@ -658,7 +661,7 @@ impl Builtin for bind { let mut usage = || { writeln!( stdout, - "usage: bind | bind ti NAMED_KEYBIND COMMAND | bind key KEY COMMAND | bind [i|interactive]" + "usage: bind | bind ti NAMED_KEYBIND COMMAND | bind key KEY COMMAND | bind [i|interactive] | bind [del|delete]" )?; Err(Error::Exit(1)) }; @@ -686,7 +689,7 @@ impl Builtin for bind { return Ok(()); } - if args.len() < 2 { + if args.len() < 1 { return usage(); } @@ -714,24 +717,46 @@ impl Builtin for bind { return Err(Error::Exit(-1)); }; - let x = match key { - ansi::KbInput::Escape(e) => { - bind0(&mut se.ti_keybinds, e.keys[0].as_bytes(), &args[1..]); - format!("ti {}", e.keys[0]) - } - _ => { - bind0(&mut se.ascii_keybinds, key.as_bytes(), &args[1..]); - format!("key {}", key.as_bytes().escape_ascii()) + if kind.starts_with(b"del") { + match key { + ansi::KbInput::Escape(e) => { + se.ti_keybinds.remove(e.keys[0].as_bytes()); + writeln!( + stdout, + "deleting keybind ti {}", + e.keys[0].as_bytes().escape_ascii() + )?; + } + _ => { + se.ascii_keybinds.remove(key.as_bytes()); + writeln!( + stdout, + "deleting keybind key {}", + key.as_bytes().escape_ascii() + )?; + } } - }; + } else { + let x = match key { + ansi::KbInput::Escape(e) => { + bind0(&mut se.ti_keybinds, e.keys[0].as_bytes(), &args[1..]); + format!("ti {}", e.keys[0]) + } + _ => { + bind0(&mut se.ascii_keybinds, key.as_bytes(), &args[1..]); + format!("key {}", key.as_bytes().escape_ascii()) + } + }; - // print what gets bound - write!(stdout, "bind {x} ")?; - for arg in args.iter().skip(1) { - stdout.write(&arg[..])?; - write!(stdout, " ")?; + // print what gets bound + write!(stdout, "bind {x} ")?; + for arg in args.iter().skip(1) { + stdout.write(&arg[..])?; + write!(stdout, " ")?; + } + writeln!(stdout)?; } - writeln!(stdout)?; + return Ok(()); } |
