summaryrefslogtreecommitdiffstats
path: root/src/file_browser.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-03-18 02:04:07 +0100
committerrabite <rabite@posteo.de>2019-03-18 02:04:07 +0100
commitc719ec7a3cb6ca3d2346f48dc11d2e0d5ee10d36 (patch)
treea01c9421041a59006a0d0236adcad95085b58f7d /src/file_browser.rs
parent6bb16d2638a48ebaad3ebe475df6587c29cb774c (diff)
running subshells in the foreground
Diffstat (limited to 'src/file_browser.rs')
-rw-r--r--src/file_browser.rs29
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()?;