diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-04 21:59:13 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-04 21:59:13 +0300 |
| commit | a2b128978a154c02311b90da778ca115758f75d7 (patch) | |
| tree | 429d5ea3f44c91b85ed54138a1b4a6ad7ea1e1a4 /src/app | |
| parent | 6045fe6a8735609507ec8600fa07205227546e8b (diff) | |
feat: enable kitty graphics by default
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/api/pane_graphics.rs | 2 | ||||
| -rw-r--r-- | src/app/mod.rs | 49 | ||||
| -rw-r--r-- | src/app/pane_graphics.rs | 1 |
3 files changed, 42 insertions, 10 deletions
diff --git a/src/app/api/pane_graphics.rs b/src/app/api/pane_graphics.rs index 3dddccc9..649282b5 100644 --- a/src/app/api/pane_graphics.rs +++ b/src/app/api/pane_graphics.rs @@ -536,7 +536,7 @@ fn require_enabled(app: &App, id: &str) -> Result<(), String> { encode_error( id.to_owned(), "feature_disabled", - "pane graphics require experimental.kitty_graphics", + "pane graphics are disabled by terminal.kitty_graphics", ) }) } diff --git a/src/app/mod.rs b/src/app/mod.rs index 02175481..ed2c5fd9 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -359,7 +359,7 @@ impl App { event_hub: crate::api::EventHub, ) -> Self { let (prefix_code, prefix_mods) = config.prefix_key(); - crate::kitty_graphics::set_enabled(config.experimental.kitty_graphics); + crate::kitty_graphics::set_enabled(config.kitty_graphics_enabled()); let (event_tx, event_rx) = mpsc::channel::<AppEvent>(APP_EVENT_CHANNEL_CAPACITY); let render_notify = Arc::new(Notify::new()); let render_dirty = Arc::new(crate::render_signal::RenderSignal::new()); @@ -494,7 +494,7 @@ impl App { cjk_ime_agent_filter_configured: !config.experimental.cjk_ime_agents.is_empty(), cjk_ime_agents: parse_cjk_ime_agents(&config.experimental.cjk_ime_agents), cjk_ime_cursor_shape: config.experimental.cjk_ime_cursor_shape.to_decscusr(), - kitty_graphics_enabled: config.experimental.kitty_graphics, + kitty_graphics_enabled: config.kitty_graphics_enabled(), default_shell: config.terminal.default_shell.clone(), shell_mode: config.terminal.shell_mode, new_terminal_cwd: config.terminal.new_cwd.clone(), @@ -841,14 +841,18 @@ impl App { } } + let graphics_config_valid = !invalid_section("terminal") + && (config.terminal.kitty_graphics.is_some() || !invalid_section("experimental")); + if graphics_config_valid + && config.kitty_graphics_enabled() != self.state.kitty_graphics_enabled + { + diagnostics.push( + "terminal.kitty_graphics changes require restarting Herdr; kept current setting" + .into(), + ); + } + if !invalid_section("experimental") { - let was_kitty_graphics_enabled = self.state.kitty_graphics_enabled; - self.state.kitty_graphics_enabled = config.experimental.kitty_graphics; - crate::kitty_graphics::set_enabled(config.experimental.kitty_graphics); - if was_kitty_graphics_enabled && !config.experimental.kitty_graphics { - self.pane_graphics.clear(); - self.state.host_cell_size = crate::kitty_graphics::HostCellSize::default(); - } self.state.reveal_hidden_cursor_for_cjk_ime = config.experimental.reveal_hidden_cursor_for_cjk_ime; self.state.cjk_ime_agent_filter_configured = @@ -1722,6 +1726,33 @@ mod tests { } #[test] + fn reload_config_keeps_kitty_graphics_until_restart() { + let _guard = config_env_lock().lock().unwrap(); + let path = temp_config_path("reload-config-kitty-graphics"); + std::fs::create_dir_all(path.parent().unwrap()).unwrap(); + std::fs::write(&path, "[terminal]\nkitty_graphics = false\n").unwrap(); + std::env::set_var(crate::config::CONFIG_PATH_ENV_VAR, &path); + + let mut app = test_app(); + assert!(app.state.kitty_graphics_enabled); + + let report = app.reload_config(); + + assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial); + assert!(app.state.kitty_graphics_enabled); + assert_eq!( + report.diagnostics, + vec![ + "terminal.kitty_graphics changes require restarting Herdr; kept current setting" + .to_owned() + ] + ); + + std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR); + let _ = std::fs::remove_dir_all(path.parent().unwrap()); + } + + #[test] fn reload_config_requests_client_reload_for_key_only_change() { let _guard = config_env_lock().lock().unwrap(); let path = temp_config_path("reload-config-key-only"); diff --git a/src/app/pane_graphics.rs b/src/app/pane_graphics.rs index e6c43fa1..40081cd3 100644 --- a/src/app/pane_graphics.rs +++ b/src/app/pane_graphics.rs @@ -108,6 +108,7 @@ impl Runtime { self.revision = self.revision.wrapping_add(1); } + #[cfg(test)] pub(crate) fn clear(&mut self) { self.slots.clear(); self.mark_changed(); |
