aboutsummaryrefslogtreecommitdiffstats
path: root/src/run/builtin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/run/builtin.rs')
-rw-r--r--src/run/builtin.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index e69de29..feba7f9 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -0,0 +1,50 @@
+use super::Builtin;
+use crate::*;
+
+pub struct Cd;
+impl Builtin for Cd {
+ fn name(&self) -> &str {
+ "cd"
+ }
+ fn mod_session(&self, _: &mut Session, args: &[BString]) {
+ let target: &Path = match args.get(0).map(|v| &v[..]) {
+ Some(b"-") => todo!("prev"),
+ Some(path) => OsStr::from_bytes(path).as_ref(),
+ None => todo!("homedir"),
+ };
+
+ // TODO: let mod_session builtins return nonzero exit code
+ let _ = std::env::set_current_dir(target);
+ }
+}
+
+pub struct Clear;
+impl Builtin for Clear {
+ fn name(&self) -> &str {
+ "clear"
+ }
+ fn mod_session(&self, _: &mut Session, _: &[BString]) {
+ print!("\x1B[2J\x1B[1;1H");
+ }
+}
+
+/// restart shell
+pub struct Re;
+impl Builtin for Re {
+ fn name(&self) -> &str {
+ "re"
+ }
+
+ fn mod_session(&self, session: &mut Session, _args: &[BString]) {
+ session.raw.disable();
+ let _ = Command::new("cargo").arg("run").status();
+ session.raw.disable();
+ std::process::exit(0);
+ }
+}
+
+
+// TODO
+// from" => todo!("read from file"),
+// to" | b"into" => todo!("write into file"),
+// append" => todo!("append to file"),