summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2019-02-03 16:44:39 +0000
committerGitHub <noreply@github.com>2019-02-03 16:44:39 +0000
commit20f319860908c2fa86bba25bb1e7bf8ba1a464e1 (patch)
tree3ea38a62a60692d5329d1e53d573928390d57a73 /src
parent53e491709d75477f8efe181315fe9301c6e845ba (diff)
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.rs30
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 {