aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/mod.rs14
-rw-r--r--src/backends/zenity.rs4
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");