aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonas Maier <>2026-03-07 11:32:59 +0100
committerJonas Maier <>2026-03-07 11:32:59 +0100
commitb3ea0f7580a41f0c7769ba610a6219a5fc7c9eb6 (patch)
tree62a95cdc8e34272c59734a6869d9c9fab29d3d21 /src
parent6d396041ed8c00f6ac58a1b90473ec7ea5db43d8 (diff)
downloadpish-b3ea0f7580a41f0c7769ba610a6219a5fc7c9eb6.tar.gz
fix reloading
Diffstat (limited to 'src')
-rw-r--r--src/run/builtin.rs13
-rw-r--r--src/run/mod.rs6
2 files changed, 13 insertions, 6 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 0b2b3bc..56de6b1 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -69,16 +69,19 @@ impl Builtin for re {
"re"
}
+ fn special(&self, session: Arc<Mutex<Session>>, _args: &[BString]) {
+ session.lock().unwrap().raw.disable();
+ crate::reload::begin_reload();
+ session.lock().unwrap().raw.enable(); // something went wrong, let's restore raw mode
+ }
+
fn io(
&self,
- session: Arc<Mutex<Session>>,
+ _session: Arc<Mutex<Session>>,
_args: &[BString],
_stdin: &mut dyn Read,
_stdout: &mut dyn Write,
) -> Result {
- session.lock().unwrap().raw.disable();
- crate::reload::begin_reload();
- session.lock().unwrap().raw.enable(); // something went wrong, let's restore raw mode
Ok(())
}
}
@@ -264,7 +267,7 @@ impl Builtin for parse {
write!(stdout, "ok ")?;
parsed.cdisplay(stdout)?;
writeln!(stdout)?;
- },
+ }
Err(err) => {
is_ok = false;
writeln!(stdout, "err {err:?}")?;
diff --git a/src/run/mod.rs b/src/run/mod.rs
index c0a108a..18d3f0a 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -143,8 +143,10 @@ impl Executor {
None => Box::new(io::stdout()),
};
- let cloned_session = self.se.clone();
+ // currently only required for `re`, cannot happen in background thread
+ builtin.special(self.se.clone(), &cmd.args);
+ let cloned_session = self.se.clone();
let handle = std::thread::spawn(move || {
builtin.io(cloned_session, &cmd.args, &mut input, &mut output)
});
@@ -283,6 +285,8 @@ type BuiltinResult = Result<(), BuiltinError>;
pub trait Builtin: Send + Sync {
fn name(&self) -> &str;
+ fn special(&self, session: Arc<Mutex<Session>>, args: &[BString]) {}
+
fn io(
&self,
session: Arc<Mutex<Session>>,