diff options
author | Christian Duerr <chrisduerr@users.noreply.github.com> | 2019-02-03 16:44:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-03 16:44:39 +0000 |
commit | 20f319860908c2fa86bba25bb1e7bf8ba1a464e1 (patch) | |
tree | 3ea38a62a60692d5329d1e53d573928390d57a73 /src | |
parent | 53e491709d75477f8efe181315fe9301c6e845ba (diff) | |
download | alacritty-20f319860908c2fa86bba25bb1e7bf8ba1a464e1.tar.gz alacritty-20f319860908c2fa86bba25bb1e7bf8ba1a464e1.zip |
Fix regression in the URL launcher config
Due to the merging of configuration files on all platforms, it has been
made impossible to completely disable URL launching without still
executing some kind of program like `true`.
Setting the launcher to `None` in the config, will now disable it
completely.
This fixes #2058.
Diffstat (limited to 'src')
-rw-r--r-- | src/config/mod.rs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index d9717704..c487ceb7 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -116,7 +116,7 @@ pub struct Mouse { #[derive(Clone, Debug, Deserialize, PartialEq, Eq)] pub struct Url { // Program for opening links - #[serde(deserialize_with = "failure_default")] + #[serde(deserialize_with = "deserialize_launcher")] pub launcher: Option<CommandWrapper>, // Modifier used to open links @@ -124,6 +124,34 @@ pub struct Url { pub modifiers: ModifiersState, } +fn deserialize_launcher<'a, D>(deserializer: D) -> ::std::result::Result<Option<CommandWrapper>, D::Error> + where D: de::Deserializer<'a> +{ + let default = Url::default().launcher; + + // Deserialize to generic value + let val = match serde_yaml::Value::deserialize(deserializer) { + Ok(val) => val, + Err(err) => { + error!("Problem with config: {}; using {}", err, default.clone().unwrap().program()); + return Ok(default); + }, + }; + + // Accept `None` to disable the launcher + if val.as_str().filter(|v| v.to_lowercase() == "none").is_some() { + return Ok(None); + } + + match <Option<CommandWrapper>>::deserialize(val) { + Ok(launcher) => Ok(launcher), + Err(err) => { + error!("Problem with config: {}; using {}", err, default.clone().unwrap().program()); + Ok(default) + }, + } +} + impl Default for Url { fn default() -> Url { Url { |