diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/run/builtin.rs | 29 |
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()) } }; |
