aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-03-06 21:07:22 +0100
committerJonas Maier <jonas@x77.dev>2026-03-06 21:07:22 +0100
commit41dbb877cade868137360d2e676f4c2ad4594317 (patch)
treed2f2fb0be2ff9f546b073756055d45ca985f6281
parentf4091ae5235115f6b75ec13e41afa7ed94d0856a (diff)
downloadpish-41dbb877cade868137360d2e676f4c2ad4594317.tar.gz
builtin command to display escape characters
-rw-r--r--src/run/builtin.rs20
-rw-r--r--src/run/mod.rs1
2 files changed, 21 insertions, 0 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 7a60017..5c7cffd 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -177,3 +177,23 @@ impl Builtin for history {
todo!("need session")
}
}
+
+pub struct escape;
+impl Builtin for escape {
+ fn name(&self) -> &str {
+ "escape"
+ }
+ fn io(
+ &self,
+ args: &[BString],
+ _stdin: &mut dyn Read,
+ stdout: &mut dyn Write,
+ ) -> std::io::Result<()> {
+ for arg in args.iter() {
+ let escaped = arg.escape_ascii().to_string();
+ stdout.write_all(escaped.as_bytes())?;
+ stdout.write_all(b" ")?;
+ }
+ Ok(())
+ }
+}
diff --git a/src/run/mod.rs b/src/run/mod.rs
index c9a156d..8c629b0 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -286,6 +286,7 @@ const BUILTINS: &[&'static dyn Builtin] = &[
&builtin::builtins,
&builtin::_type,
&builtin::history,
+ &builtin::escape,
];
pub struct CommandDispatch {