diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-03 02:05:27 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-03 02:05:27 +0300 |
| commit | 10eb0bc744165ae91dfce9fd731fe170410b34ec (patch) | |
| tree | 8622d429d9453c2e8d06630322804a702973d94a /src/app | |
| parent | cbc31d34a1fb3da64415737de57ad10fe6af5ba5 (diff) | |
fix: propagate host color scheme to pane apps (#2214)
refs #714
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/actions.rs | 1 | ||||
| -rw-r--r-- | src/app/agent_resume.rs | 1 | ||||
| -rw-r--r-- | src/app/api.rs | 3 | ||||
| -rw-r--r-- | src/app/api/layouts.rs | 6 | ||||
| -rw-r--r-- | src/app/api/panes.rs | 3 | ||||
| -rw-r--r-- | src/app/api/plugins/panes.rs | 2 | ||||
| -rw-r--r-- | src/app/api/tabs.rs | 2 | ||||
| -rw-r--r-- | src/app/creation.rs | 2 | ||||
| -rw-r--r-- | src/app/input/mod.rs | 1 | ||||
| -rw-r--r-- | src/app/input/mouse.rs | 4 | ||||
| -rw-r--r-- | src/app/input/navigate.rs | 3 | ||||
| -rw-r--r-- | src/app/input/terminal.rs | 1 | ||||
| -rw-r--r-- | src/app/popup.rs | 2 | ||||
| -rw-r--r-- | src/app/theme_sync.rs | 8 |
14 files changed, 39 insertions, 0 deletions
diff --git a/src/app/actions.rs b/src/app/actions.rs index 9ef4af68..51f71877 100644 --- a/src/app/actions.rs +++ b/src/app/actions.rs @@ -3704,6 +3704,7 @@ mod tests { live_cwd.clone(), 0, crate::terminal_theme::TerminalTheme::default(), + None, crate::pane::PaneShellConfig::new("/bin/sh", crate::config::ShellModeConfig::NonLogin), &crate::pane::PaneLaunchEnv::default(), events, diff --git a/src/app/agent_resume.rs b/src/app/agent_resume.rs index 45a2e3fa..1b459628 100644 --- a/src/app/agent_resume.rs +++ b/src/app/agent_resume.rs @@ -239,6 +239,7 @@ impl App { cwd, self.state.pane_scrollback_limit_bytes, host_terminal_theme, + self.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&self.state.default_shell, self.state.shell_mode), &launch_env, self.event_tx.clone(), diff --git a/src/app/api.rs b/src/app/api.rs index 76087e2d..5f81a5cb 100644 --- a/src/app/api.rs +++ b/src/app/api.rs @@ -545,6 +545,7 @@ impl App { cwd, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&self.state.default_shell, self.state.shell_mode), &launch_env, self.event_tx.clone(), @@ -1712,6 +1713,7 @@ mod tests { live_cwd.clone(), 0, crate::terminal_theme::TerminalTheme::default(), + None, crate::pane::PaneShellConfig::new("/bin/sh", crate::config::ShellModeConfig::NonLogin), &crate::pane::PaneLaunchEnv::default(), events, @@ -1804,6 +1806,7 @@ mod tests { live_cwd.clone(), 0, crate::terminal_theme::TerminalTheme::default(), + None, crate::pane::PaneShellConfig::new("/bin/sh", crate::config::ShellModeConfig::NonLogin), &crate::pane::PaneLaunchEnv::default(), events, diff --git a/src/app/api/layouts.rs b/src/app/api/layouts.rs index 34795474..9d2756b8 100644 --- a/src/app/api/layouts.rs +++ b/src/app/api/layouts.rs @@ -93,6 +93,7 @@ impl App { let default_shell = self.state.default_shell.clone(); let scrollback_limit_bytes = self.state.pane_scrollback_limit_bytes; let host_terminal_theme = self.state.host_terminal_theme; + let host_terminal_appearance = self.state.host_terminal_appearance; let extra_env = match super::env::normalize_launch_env(root_leaf.env.clone()) { Ok(env) => env, Err((code, message)) => return encode_error(id, &code, message), @@ -115,6 +116,7 @@ impl App { extra_env, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, ) } else { ws.create_tab( @@ -123,6 +125,7 @@ impl App { first_cwd, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, crate::pane::PaneShellConfig::new(&default_shell, self.state.shell_mode), extra_env, ) @@ -397,6 +400,7 @@ impl App { let default_shell = self.state.default_shell.clone(); let scrollback_limit_bytes = self.state.pane_scrollback_limit_bytes; let host_terminal_theme = self.state.host_terminal_theme; + let host_terminal_appearance = self.state.host_terminal_appearance; let cwd = pane .cwd .as_ref() @@ -425,6 +429,7 @@ impl App { extra_env, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, false, ) } else { @@ -437,6 +442,7 @@ impl App { cwd, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, crate::pane::PaneShellConfig::new(&default_shell, self.state.shell_mode), extra_env, false, diff --git a/src/app/api/panes.rs b/src/app/api/panes.rs index 86e019ac..72798a1b 100644 --- a/src/app/api/panes.rs +++ b/src/app/api/panes.rs @@ -57,6 +57,7 @@ impl App { let default_shell = self.state.default_shell.clone(); let scrollback_limit_bytes = self.state.pane_scrollback_limit_bytes; let host_terminal_theme = self.state.host_terminal_theme; + let host_terminal_appearance = self.state.host_terminal_appearance; let previous_focus = self.state.current_pane_focus_target(); let Some(ws) = self.state.workspaces.get_mut(ws_idx) else { return encode_error(id, "pane_not_found", "pane not found"); @@ -76,6 +77,7 @@ impl App { split_cwd, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, shell_config, extra_env, params.focus, @@ -88,6 +90,7 @@ impl App { split_cwd, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, shell_config, extra_env, params.focus, diff --git a/src/app/api/plugins/panes.rs b/src/app/api/plugins/panes.rs index 74a5df23..8b0749e3 100644 --- a/src/app/api/plugins/panes.rs +++ b/src/app/api/plugins/panes.rs @@ -126,6 +126,7 @@ impl App { extra_env, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, params.focus || placement == PluginPanePlacement::Zoomed, ); let (tab_idx, new_pane) = match result { @@ -202,6 +203,7 @@ impl App { extra_env, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, ) { Ok(result) => result, Err(err) => return encode_error(id, "plugin_pane_open_failed", err.to_string()), diff --git a/src/app/api/tabs.rs b/src/app/api/tabs.rs index 2a2f3cdb..42d2b029 100644 --- a/src/app/api/tabs.rs +++ b/src/app/api/tabs.rs @@ -69,6 +69,7 @@ impl App { let default_shell = self.state.default_shell.clone(); let scrollback_limit_bytes = self.state.pane_scrollback_limit_bytes; let host_terminal_theme = self.state.host_terminal_theme; + let host_terminal_appearance = self.state.host_terminal_appearance; let extra_env = match super::env::normalize_launch_env(env) { Ok(env) => env, Err((code, message)) => return encode_error(id, &code, message), @@ -85,6 +86,7 @@ impl App { cwd, scrollback_limit_bytes, host_terminal_theme, + host_terminal_appearance, crate::pane::PaneShellConfig::new(&default_shell, self.state.shell_mode), extra_env, ) diff --git a/src/app/creation.rs b/src/app/creation.rs index fc01710e..d531e733 100644 --- a/src/app/creation.rs +++ b/src/app/creation.rs @@ -196,6 +196,7 @@ impl App { initial_cwd, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&self.state.default_shell, self.state.shell_mode), Vec::new(), )?; @@ -249,6 +250,7 @@ impl App { cols, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&self.state.default_shell, self.state.shell_mode), self.event_tx.clone(), self.render_notify.clone(), diff --git a/src/app/input/mod.rs b/src/app/input/mod.rs index f22c7994..7eca40b6 100644 --- a/src/app/input/mod.rs +++ b/src/app/input/mod.rs @@ -772,6 +772,7 @@ impl AppState { cwd, self.pane_scrollback_limit_bytes, self.host_terminal_theme, + self.host_terminal_appearance, crate::pane::PaneShellConfig::new(&self.default_shell, self.shell_mode), Vec::new(), ) { diff --git a/src/app/input/mouse.rs b/src/app/input/mouse.rs index 2c32c95a..d43dcfc4 100644 --- a/src/app/input/mouse.rs +++ b/src/app/input/mouse.rs @@ -2945,6 +2945,7 @@ mod tests { 80, app.state.pane_scrollback_limit_bytes, app.state.host_terminal_theme, + app.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&app.state.default_shell, app.state.shell_mode), app.event_tx.clone(), app.render_notify.clone(), @@ -3373,6 +3374,7 @@ mod tests { mouse_protocol_encoding: crate::input::MouseProtocolEncoding::Sgr, mouse_alternate_scroll: true, modify_other_keys: false, + color_scheme_reporting: false, }; assert_eq!(wheel_routing(input_state), WheelRouting::MouseReport); @@ -4049,6 +4051,7 @@ mod tests { mouse_protocol_encoding: crate::input::MouseProtocolEncoding::Default, mouse_alternate_scroll: true, modify_other_keys: false, + color_scheme_reporting: false, }; assert_eq!(wheel_routing(input_state), WheelRouting::AlternateScroll); @@ -4065,6 +4068,7 @@ mod tests { mouse_protocol_encoding: crate::input::MouseProtocolEncoding::Default, mouse_alternate_scroll: true, modify_other_keys: false, + color_scheme_reporting: false, }; assert_eq!(wheel_routing(input_state), WheelRouting::HostScroll); diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs index 6d0f7f22..68941e66 100644 --- a/src/app/input/navigate.rs +++ b/src/app/input/navigate.rs @@ -1005,6 +1005,7 @@ impl App { env, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, )?; let new_pane_id = new_pane.pane_id; self.terminal_runtimes @@ -1091,6 +1092,7 @@ impl App { extra_env, self.state.pane_scrollback_limit_bytes, self.state.host_terminal_theme, + self.state.host_terminal_appearance, true, ); let (tab_idx, new_pane) = match result { @@ -3282,6 +3284,7 @@ navigate_pane_down = "ctrl+j" 80, app.state.pane_scrollback_limit_bytes, app.state.host_terminal_theme, + app.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&app.state.default_shell, app.state.shell_mode), app.event_tx.clone(), app.render_notify.clone(), diff --git a/src/app/input/terminal.rs b/src/app/input/terminal.rs index f0e10d9c..36d60e41 100644 --- a/src/app/input/terminal.rs +++ b/src/app/input/terminal.rs @@ -425,6 +425,7 @@ mod tests { 80, app.state.pane_scrollback_limit_bytes, app.state.host_terminal_theme, + app.state.host_terminal_appearance, crate::pane::PaneShellConfig::new(&app.state.default_shell, app.state.shell_mode), app.event_tx.clone(), app.render_notify.clone(), diff --git a/src/app/popup.rs b/src/app/popup.rs index f3d2e459..c5877987 100644 --- a/src/app/popup.rs +++ b/src/app/popup.rs @@ -71,6 +71,7 @@ impl App { crate::pane::AgentDetection::Disabled, app.state.pane_scrollback_limit_bytes, app.state.host_terminal_theme, + app.state.host_terminal_appearance, app.event_tx.clone(), app.render_notify.clone(), app.render_dirty.clone(), @@ -102,6 +103,7 @@ impl App { crate::pane::AgentDetection::Disabled, app.state.pane_scrollback_limit_bytes, app.state.host_terminal_theme, + app.state.host_terminal_appearance, app.event_tx.clone(), app.render_notify.clone(), app.render_dirty.clone(), diff --git a/src/app/theme_sync.rs b/src/app/theme_sync.rs index e4284f69..32716ced 100644 --- a/src/app/theme_sync.rs +++ b/src/app/theme_sync.rs @@ -50,6 +50,7 @@ impl App { } self.state.host_terminal_appearance = Some(appearance); self.state.host_terminal_appearance_explicit = explicit; + self.apply_host_terminal_appearance_to_panes(); self.refresh_effective_app_theme() } @@ -65,6 +66,7 @@ impl App { } self.state.host_terminal_appearance = appearance; self.state.host_terminal_appearance_explicit = explicit; + self.apply_host_terminal_appearance_to_panes(); self.refresh_effective_app_theme() } @@ -95,6 +97,12 @@ impl App { true } + fn apply_host_terminal_appearance_to_panes(&self) { + for runtime in self.terminal_runtimes.values() { + runtime.apply_host_terminal_appearance(self.state.host_terminal_appearance); + } + } + fn apply_host_terminal_theme_to_panes(&self) { for runtime in self.terminal_runtimes.values() { runtime.apply_host_terminal_theme(self.state.host_terminal_theme); |
