From 62474ff6bcbd78745a66a753cb5d3578ba52bc05 Mon Sep 17 00:00:00 2001 From: rabite Date: Sun, 7 Apr 2019 13:43:41 +0200 Subject: fix crash when running commands in unloaded directory --- src/file_browser.rs | 24 +++++++++++++++--------- src/proclist.rs | 6 ++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/file_browser.rs b/src/file_browser.rs index b9646aa..779c47a 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -148,9 +148,7 @@ impl Tabbable for TabView { .widgets .iter() .map(|w| { - w.selected_files() - .map_err(|_| Vec::::new()) - .unwrap() + w.selected_files().unwrap_or(vec![]) }).collect(); self.widgets[self.active].exec_cmd(tab_dirs, selected_files) @@ -838,21 +836,29 @@ impl FileBrowser { tab_files: Vec>) -> HResult<()> { let cwd = self.cwd()?.clone(); - let selected_file = self.selected_file()?; - let selected_files = self.selected_files()?; + let selected_file = self.selected_file().ok(); + let selected_files = self.selected_files().ok(); let cmd = self.minibuffer("exec")?.trim_start().to_string() + " "; - let cwd_files = if selected_files.len() == 0 { - vec![selected_file] - } else { selected_files }; + let cwd_files = selected_files.map(|selected_files| { + if selected_files.len() == 0 { + if selected_file.is_some() { + vec![selected_file.unwrap()] + } else { + selected_files + } + } else { + selected_files + } + }); let cmd = crate::proclist::Cmd { cmd: OsString::from(cmd), short_cmd: None, args: None, cwd: cwd, - cwd_files: Some(cwd_files), + cwd_files: cwd_files, tab_files: Some(tab_files), tab_paths: Some(tab_dirs) }; diff --git a/src/proclist.rs b/src/proclist.rs index d712c33..b8e0524 100644 --- a/src/proclist.rs +++ b/src/proclist.rs @@ -51,6 +51,8 @@ impl Cmd { } fn substitute_cwd_files(&mut self, cmd: Vec) -> Vec { + if self.cwd_files.is_none() { return cmd; } + let cwd_pat = OsString::from("$s"); let cwd_files = self.cwd_files .take() @@ -66,6 +68,8 @@ impl Cmd { } fn substitute_tab_files(&mut self, cmd: Vec) -> Vec { + if self.tab_files.is_none() { return cmd; } + let tab_files = self.tab_files.take().unwrap(); tab_files.into_iter() @@ -84,6 +88,8 @@ impl Cmd { } fn substitute_tab_paths(&mut self, cmd: Vec) -> Vec { + if self.tab_paths.is_none() { return cmd; } + let tab_paths = self.tab_paths.take().unwrap(); tab_paths.into_iter() -- cgit v1.2.3