From 6312f17edb890dbdb03c8a29ec1dfa2fc4299d89 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Sat, 12 Aug 2023 23:49:01 +0800 Subject: [PATCH] .. --- app/src/executor.rs | 2 +- config/docs/keymap.md | 2 ++ core/src/manager/manager.rs | 18 ++++++++---------- core/src/tasks/scheduler.rs | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/executor.rs b/app/src/executor.rs index 56a082ce..3b965e6d 100644 --- a/app/src/executor.rs +++ b/app/src/executor.rs @@ -107,9 +107,9 @@ impl Executor { "create" => cx.manager.create(), "rename" => cx.manager.rename(), "shell" => cx.manager.shell( + exec.args.get(0).map(|e| e.as_str()).unwrap_or(""), exec.named.contains_key("block"), exec.named.contains_key("confirm"), - exec.args.get(0).map(|s| s.as_str()).unwrap_or(""), ), "hidden" => cx.manager.current_mut().hidden(match exec.args.get(0).map(|s| s.as_str()) { Some("show") => Some(true), diff --git a/config/docs/keymap.md b/config/docs/keymap.md index 4a12bc9c..b3dad095 100644 --- a/config/docs/keymap.md +++ b/config/docs/keymap.md @@ -62,7 +62,9 @@ - rename: Rename a file or directory. - shell: Run a shell command. + - `exec`: Optional, command template to be run. - `--block`: Block the UI until the command finishes. + - `--confirm`: When the template is provided, run it directly, no input UI was shown. - hidden: Set the visibility of hidden files. diff --git a/core/src/manager/manager.rs b/core/src/manager/manager.rs index 20face77..9a55ef1a 100644 --- a/core/src/manager/manager.rs +++ b/core/src/manager/manager.rs @@ -225,22 +225,20 @@ impl Manager { pub fn bulk_rename(&self) -> bool { false } - pub fn shell(&self, block: bool, confirm: bool, arg: &str) -> bool { - let mut command = arg.to_string(); - + pub fn shell(&self, exec: &str, block: bool, confirm: bool) -> bool { + let mut exec = exec.to_owned(); tokio::spawn(async move { - if confirm || command.is_empty() { - let opt = InputOpt::top("Shell:").with_value(command.as_str()).with_highlight(); - let result = emit!(Input(opt)); - - if let Ok(exec) = result.await { - command = exec; + if !confirm || exec.is_empty() { + let result = emit!(Input(InputOpt::top("Shell:").with_value(&exec).with_highlight())); + match result.await { + Ok(e) => exec = e, + Err(_) => return, } } emit!(Open( Default::default(), - Some(Opener { exec: command, block, display_name: Default::default(), spread: true }) + Some(Opener { exec, block, display_name: Default::default(), spread: true }) )); }); diff --git a/core/src/tasks/scheduler.rs b/core/src/tasks/scheduler.rs index ae12a259..e00dd537 100644 --- a/core/src/tasks/scheduler.rs +++ b/core/src/tasks/scheduler.rs @@ -302,7 +302,7 @@ impl Scheduler { }) }); - let args = args.into_iter().map(|a| a.as_ref().to_os_string()).collect::>(); + let args = args.iter().map(|a| a.as_ref().to_os_string()).collect::>(); tokio::spawn({ let process = self.process.clone(); let opener = opener.clone();