diff --git a/src/config.rs b/src/config.rs index ecddbf93..95a175d1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -11,6 +11,7 @@ use std::process::Command; use std::{env, fs}; use structopt::StructOpt; use strum::{EnumIter, EnumString, EnumVariantNames, IntoEnumIterator, VariantNames}; +use which_crate::which; #[allow(unused_macros)] macro_rules! str_value { @@ -243,8 +244,11 @@ impl ConfigFile { let config_path = Self::ensure(base_dirs)?; let editor = editor(); - debug!("Editing {} with {}", config_path.display(), editor); - Command::new(editor) + let command = which(&editor[0])?; + let args: Vec<&String> = editor.iter().skip(1).collect(); + + Command::new(command) + .args(args) .arg(config_path) .spawn() .and_then(|mut p| p.wait())?; diff --git a/src/utils.rs b/src/utils.rs index 1852c392..ad68129f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -92,8 +92,12 @@ pub fn sudo() -> Option { which("sudo").or_else(|| which("pkexec")) } -pub fn editor() -> String { - env::var("EDITOR").unwrap_or_else(|_| String::from(if cfg!(windows) { "notepad" } else { "vi" })) +pub fn editor() -> Vec { + env::var("EDITOR") + .unwrap_or_else(|_| String::from(if cfg!(windows) { "notepad" } else { "vi" })) + .split_whitespace() + .map(|s| s.to_owned()) + .collect() } pub fn require + Debug>(binary_name: T) -> Result {