From 110b179e3651570f6ede3090e2e8f304dac7024d Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Sun, 3 May 2026 11:29:42 +0200 Subject: keybinds seem to work somewhat --- src/run/mod.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/run/mod.rs') diff --git a/src/run/mod.rs b/src/run/mod.rs index a31ff1a..f727b01 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -202,6 +202,7 @@ impl Executor { ) -> SpawnedCmd { match cmd { CommandKind::Builtin(builtin) => { + let mut builtin = builtin.clone_box(); builtin.special(self.se.clone(), &args[1..]); let cloned_session = self.se.clone(); let handle = wait::spawn(move || { @@ -532,7 +533,7 @@ type BuiltinResult = Result<(), BuiltinError>; pub trait Builtin: Send + Sync { fn name(&self) -> &str; - fn special(&self, session: Arc>, args: &[BString]) {} + fn special(&mut self, session: Arc>, args: &[BString]) {} fn io( &self, @@ -543,7 +544,17 @@ pub trait Builtin: Send + Sync { ) -> BuiltinResult; } -const BUILTINS: &[&'static dyn Builtin] = &[ +pub trait BuiltinClone : Builtin { + fn clone_box(&self) -> Box; +} + +impl BuiltinClone for T { + fn clone_box(&self) -> Box { + Box::new(self.clone()) + } +} + +const BUILTINS: &[&'static dyn BuiltinClone] = &[ &builtin::cd, &builtin::clear, #[cfg(debug_assertions)] @@ -565,12 +576,12 @@ const BUILTINS: &[&'static dyn Builtin] = &[ #[cfg(debug_assertions)] &builtin::debug, &builtin::terminfo, - &builtin::bind, + &builtin::bind::new(), &builtin::exit, &builtin::ct, ]; -pub fn builtin_map() -> HashMap { +pub fn builtin_map() -> HashMap { let mut map = HashMap::new(); for &b in BUILTINS { map.insert(b.name().as_bytes().to_vec(), b); @@ -580,7 +591,7 @@ pub fn builtin_map() -> HashMap { #[derive(Clone)] pub enum CommandKind { - Builtin(&'static dyn Builtin), + Builtin(&'static dyn BuiltinClone), Fun(Block), Path(PathBuf), } -- cgit v1.2.3