From 9c627c65e55ab71e236d70406feb5d55bd8703bb Mon Sep 17 00:00:00 2001 From: A-Walrus <58790821+A-Walrus@users.noreply.github.com> Date: Sat, 10 Sep 2022 16:32:49 +0300 Subject: [PATCH] Improve error handling for config-reload (#3668) * Don't change config to default when refreshing invalid config * Propely handle theme errors with config-reload * Extract refresh theme into seperate function --- helix-term/src/application.rs | 48 +++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 9653b3733..ec698321c 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -366,29 +366,39 @@ impl Application { self.editor.refresh_config(); } - fn refresh_config(&mut self) { - let config = Config::load_default().unwrap_or_else(|err| { - self.editor.set_error(err.to_string()); - Config::default() - }); - - // Refresh theme + /// Refresh theme after config change + fn refresh_theme(&mut self, config: &Config) { if let Some(theme) = config.theme.clone() { let true_color = self.true_color(); - self.editor.set_theme( - self.theme_loader - .load(&theme) - .map_err(|e| { - log::warn!("failed to load theme `{}` - {}", theme, e); - e - }) - .ok() - .filter(|theme| (true_color || theme.is_16_color())) - .unwrap_or_else(|| self.theme_loader.default_theme(true_color)), - ); + match self.theme_loader.load(&theme) { + Ok(theme) => { + if true_color || theme.is_16_color() { + self.editor.set_theme(theme); + } else { + self.editor + .set_error("theme requires truecolor support, which is not available"); + } + } + Err(err) => { + let err_string = format!("failed to load theme `{}` - {}", theme, err); + self.editor.set_error(err_string); + } + } } + } - self.config.store(Arc::new(config)); + fn refresh_config(&mut self) { + match Config::load_default() { + Ok(config) => { + self.refresh_theme(&config); + + // Store new config + self.config.store(Arc::new(config)); + } + Err(err) => { + self.editor.set_error(err.to_string()); + } + } } fn true_color(&self) -> bool {