aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-05-08 23:51:34 +0200
committerJonas Maier <jonas@x77.dev>2026-05-08 23:51:34 +0200
commitd602cc4ee2de8a99b15d2e0cf7fb26bb5c506a7f (patch)
tree4968d220100cfd8352cdb9834e85bdc4960152fc /src
parent365465ea66d68df515d8cbd66d4f1f0e4411cf29 (diff)
downloadpish-d602cc4ee2de8a99b15d2e0cf7fb26bb5c506a7f.tar.gz
an option to delete keybinds without having them trigger
Diffstat (limited to 'src')
-rw-r--r--src/run/builtin.rs61
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(());
}