diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2019-01-08 02:21:32 +0000 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2019-01-08 04:54:07 +0100 |
commit | 9fc28c2099b50484a4b3154f64f764904d57334e (patch) | |
tree | 5fe0a5f914f1c536d6839cf6bb26ad8525bd8a5d | |
parent | a0b0a3c6a57097d56c5c471e5cb72bbde8198da8 (diff) | |
download | dialog-rs-9fc28c2099b50484a4b3154f64f764904d57334e.tar.gz dialog-rs-9fc28c2099b50484a4b3154f64f764904d57334e.tar.bz2 |
backends/Dialog: Add support for output handling
dialog(1) uses stdin to display the dialog boxes and prints output to
stderr (if applicable). This patch changes the command invocation in
the Dialog backend to capture stderr. stdin and stdout are inherited
from the main process so that dialog can display the dialog boxes and
receive user input.
-rw-r--r-- | src/backends/dialog.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/backends/dialog.rs b/src/backends/dialog.rs index b448c05..d50be43 100644 --- a/src/backends/dialog.rs +++ b/src/backends/dialog.rs @@ -28,14 +28,18 @@ impl Dialog { } } - fn execute(&self, args: Vec<&str>) -> Result<process::ExitStatus> { + fn execute(&self, args: Vec<&str>) -> Result<process::Output> { let mut args = args; if let Some(ref backtitle) = self.backtitle { args.insert(0, "--backtitle"); args.insert(1, backtitle); } println!("{:?}", args); - process::Command::new("dialog").args(args).status() + process::Command::new("dialog") + .args(args) + .stdin(process::Stdio::inherit()) + .stdout(process::Stdio::inherit()) + .output() } /// Sets the backtitle for the dialog boxes. @@ -61,7 +65,7 @@ impl Dialog { self.width = width.to_string(); } - fn show_box(&self, args: Vec<&str>, title: &Option<String>) -> Result<process::ExitStatus> { + fn show_box(&self, args: Vec<&str>, title: &Option<String>) -> Result<process::Output> { let mut args = args; if let Some(ref title) = title { args.insert(0, "--title"); @@ -85,6 +89,7 @@ impl super::Backend for Dialog { fn show_message(&self, message: &Message) -> Result<()> { let args = vec!["--msgbox", &message.text]; self.show_box(args, &message.title) - .and_then(require_success) + .and_then(|output| require_success(output.status)) + .map(|_| ()) } } |