aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-08-03 02:05:27 +0300
committerGitHub <noreply@github.com>2026-08-03 02:05:27 +0300
commit10eb0bc744165ae91dfce9fd731fe170410b34ec (patch)
tree8622d429d9453c2e8d06630322804a702973d94a /src/app
parentcbc31d34a1fb3da64415737de57ad10fe6af5ba5 (diff)
fix: propagate host color scheme to pane apps (#2214)
refs #714
Diffstat (limited to 'src/app')
-rw-r--r--src/app/actions.rs1
-rw-r--r--src/app/agent_resume.rs1
-rw-r--r--src/app/api.rs3
-rw-r--r--src/app/api/layouts.rs6
-rw-r--r--src/app/api/panes.rs3
-rw-r--r--src/app/api/plugins/panes.rs2
-rw-r--r--src/app/api/tabs.rs2
-rw-r--r--src/app/creation.rs2
-rw-r--r--src/app/input/mod.rs1
-rw-r--r--src/app/input/mouse.rs4
-rw-r--r--src/app/input/navigate.rs3
-rw-r--r--src/app/input/terminal.rs1
-rw-r--r--src/app/popup.rs2
-rw-r--r--src/app/theme_sync.rs8
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);