diff options
author | rabite <rabite@posteo.de> | 2019-03-18 02:04:07 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-03-18 02:04:07 +0100 |
commit | c719ec7a3cb6ca3d2346f48dc11d2e0d5ee10d36 (patch) | |
tree | a01c9421041a59006a0d0236adcad95085b58f7d /src/file_browser.rs | |
parent | 6bb16d2638a48ebaad3ebe475df6587c29cb774c (diff) |
running subshells in the foreground
Diffstat (limited to 'src/file_browser.rs')
-rw-r--r-- | src/file_browser.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/file_browser.rs b/src/file_browser.rs index abf144f..831f96b 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -652,6 +652,34 @@ impl FileBrowser { Ok(()) } + pub fn run_subshell(&mut self) -> HResult<()> { + self.core.get_sender().send(Events::InputEnabled(false))?; + + self.core.screen.cursor_show().log(); + self.core.screen.drop_screen(); + + let shell = std::env::var("SHELL").unwrap_or("bash".into()); + let status = std::process::Command::new(&shell).status(); + + self.core.screen.reset_screen(); + + + self.core.get_sender().send(Events::InputEnabled(true))?; + + match status { + Ok(status) => + self.show_status(&format!("\"{}\" exited with {}", + shell, status)).log(), + Err(err) => + self.show_status(&format!("Can't run this \"{}\": {}", + shell, err)).log() + } + + + + Ok(()) + } + pub fn get_footer(&self) -> HResult<String> { let xsize = self.get_coordinates()?.xsize(); let ypos = self.get_coordinates()?.position().y(); @@ -759,6 +787,7 @@ impl Widget for FileBrowser { Key::Char('m') => { self.add_bookmark()?; }, Key::Char('w') => { self.proc_view.lock()?.popup()?; }, Key::Char('l') => self.log_view.lock()?.popup()?, + Key::Char('z') => self.run_subshell()?, _ => { self.main_widget_mut()?.on_key(key)?; }, } self.update_preview()?; |