aboutsummaryrefslogtreecommitdiffstats
path: root/src/run
diff options
context:
space:
mode:
authorJonas Maier <>2026-04-20 10:27:04 +0200
committerJonas Maier <>2026-04-20 10:27:04 +0200
commit97a6a281fd9780ecdccfcf30079f339e305fdc78 (patch)
tree7a8ef069e742bd36f287bd4b8244d65bb9d2e296 /src/run
parent8fa52302ae6d0cb15daff9384f43744d4201d8ee (diff)
downloadpish-97a6a281fd9780ecdccfcf30079f339e305fdc78.tar.gz
move ansi escape code parsing into own module
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> {