aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonas Maier <>2026-05-03 11:57:14 +0200
committerJonas Maier <>2026-05-03 11:57:14 +0200
commitd8eee55eda8f1b083367c8cb8c2956612847ce5f (patch)
tree0902d2636b8728fa864a4d9d8682ad04ddc81ac9 /src
parent110b179e3651570f6ede3090e2e8f304dac7024d (diff)
downloadpish-d8eee55eda8f1b083367c8cb8c2956612847ce5f.tar.gz
command to dump keybinds
Diffstat (limited to 'src')
-rw-r--r--src/run/builtin.rs29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 2886d71..56dda97 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -658,11 +658,34 @@ impl Builtin for bind {
let mut usage = || {
writeln!(
stdout,
- "usage: 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]"
)?;
Err(Error::Exit(1))
};
+ if args.len() == 0 {
+ let mut dump = |map: &HashMap<BString, crate::parse::Command<PostExpansion>>,
+ category: &str|
+ -> std::io::Result<()> {
+ let mut entries: Vec<_> = map.iter().collect();
+ entries.sort_by_key(|x| x.0);
+ for (key, cmd) in entries.iter() {
+ write!(stdout, "bind {category} {} ", key.escape_ascii())?;
+ stdout.write_all(&cmd.cmd)?;
+ for arg in cmd.args.iter() {
+ stdout.write_all(b" ")?;
+ stdout.write_all(arg)?;
+ }
+ writeln!(stdout)?;
+ }
+ Ok(())
+ };
+ let se = session.lock().unwrap();
+ dump(&se.ti_keybinds, "ti ")?;
+ dump(&se.ascii_keybinds, "key")?;
+ return Ok(());
+ }
+
if args.len() < 2 {
return usage();
}
@@ -693,11 +716,11 @@ impl Builtin for bind {
let x = match key {
ansi::KbInput::Escape(e) => {
- bind0(&mut se.ascii_keybinds, e.keys[0].as_bytes(), &args[1..]);
+ bind0(&mut se.ti_keybinds, e.keys[0].as_bytes(), &args[1..]);
format!("ti {}", e.keys[0])
}
_ => {
- bind0(&mut se.ti_keybinds, key.as_bytes(), &args[1..]);
+ bind0(&mut se.ascii_keybinds, key.as_bytes(), &args[1..]);
format!("key {}", key.as_bytes().escape_ascii())
}
};