aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-09-04 21:59:13 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-09-04 21:59:13 +0300
commita2b128978a154c02311b90da778ca115758f75d7 (patch)
tree429d5ea3f44c91b85ed54138a1b4a6ad7ea1e1a4 /src/app
parent6045fe6a8735609507ec8600fa07205227546e8b (diff)
feat: enable kitty graphics by default
Diffstat (limited to 'src/app')
-rw-r--r--src/app/api/pane_graphics.rs2
-rw-r--r--src/app/mod.rs49
-rw-r--r--src/app/pane_graphics.rs1
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();