aboutsummaryrefslogtreecommitdiffstats
path: root/src/run
diff options
context:
space:
mode:
Diffstat (limited to 'src/run')
-rw-r--r--src/run/builtin.rs27
-rw-r--r--src/run/mod.rs2
2 files changed, 28 insertions, 1 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 7ca1e5e..c080c93 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -487,7 +487,8 @@ impl Builtin for alias {
let mut parse_fail = false;
let mut alias_args = Vec::new();
for arg in args {
- match <Vec<crate::parse::ExpString> as crate::parse::Parse>::parse_from_bytes(&arg[..]) {
+ match <Vec<crate::parse::ExpString> as crate::parse::Parse>::parse_from_bytes(&arg[..])
+ {
Ok(mut parsed) => {
alias_args.append(&mut parsed);
}
@@ -539,3 +540,27 @@ impl Builtin for unalias {
Ok(())
}
}
+
+pub struct debug;
+impl Builtin for debug {
+ fn name(&self) -> &str {
+ "debug"
+ }
+
+ fn io(
+ &self,
+ session: Arc<Mutex<Session>>,
+ args: &[BString],
+ _stdin: &mut dyn Read,
+ stdout: &mut dyn Write,
+ ) -> Result {
+ let mut se = session.lock().unwrap();
+ for arg in args {
+ match &arg[..] {
+ b"keys" | b"keystrokes" => se.debug_keystrokes = !se.debug_keystrokes,
+ _ => writeln!(stdout, "debug: unknown option {}", arg.escape_ascii())?,
+ }
+ }
+ Ok(())
+ }
+}
diff --git a/src/run/mod.rs b/src/run/mod.rs
index 36cd454..6fe0d45 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -539,6 +539,8 @@ const BUILTINS: &[&'static dyn Builtin] = &[
&builtin::completion,
&builtin::alias,
&builtin::unalias,
+ #[cfg(debug_assertions)]
+ &builtin::debug,
];
pub fn builtin_map() -> HashMap<BString, &'static dyn Builtin> {