diff options
Diffstat (limited to 'src/backends')
| -rw-r--r-- | src/backends/mod.rs | 14 | ||||
| -rw-r--r-- | src/backends/zenity.rs | 4 | 
2 files changed, 18 insertions, 0 deletions
diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 20cb8c1..f5af7ef 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -7,6 +7,9 @@ mod zenity;  pub use crate::backends::dialog::Dialog;  pub use crate::backends::zenity::Zenity; +use std::env; +use std::path; +  use crate::Result;  /// A dialog backend. @@ -32,6 +35,17 @@ pub trait Backend {      fn show_question(&self, question: &super::Question) -> Result<super::Choice>;  } +pub(crate) fn is_available(name: &str) -> bool { +    if let Ok(path) = env::var("PATH") { +        for part in path.split(":") { +            if path::Path::new(part).join(name).exists() { +                return true; +            } +        } +    } +    false +} +  pub(crate) fn from_str(s: &str) -> Option<Box<dyn Backend>> {      match s.to_lowercase().as_ref() {          "dialog" => Some(Box::new(Dialog::new())), diff --git a/src/backends/zenity.rs b/src/backends/zenity.rs index 4bf862b..0730c64 100644 --- a/src/backends/zenity.rs +++ b/src/backends/zenity.rs @@ -59,6 +59,10 @@ impl Zenity {          self.timeout = Some(timeout.to_string());      } +    pub(crate) fn is_available() -> bool { +        super::is_available("zenity") +    } +      fn execute(&self, args: Vec<&str>, title: &Option<String>) -> Result<process::Output> {          let mut command = process::Command::new("zenity");  | 
