aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Bunch <karlbunch@users.noreply.github.com>2026-03-04 08:26:26 -0500
committerGitHub <noreply@github.com>2026-03-04 14:26:26 +0100
commitf77cdec298576164f34baf0456e4b986bde269e6 (patch)
treeaf9fb93cfc6edf465378952c0aff38d48820e142
parentdocs(changelog): native Windows support (!!) (diff)
downloadsl0ppij-f77cdec298576164f34baf0456e4b986bde269e6.tar.gz
sl0ppij-f77cdec298576164f34baf0456e4b986bde269e6.tar.xz
sl0ppij-f77cdec298576164f34baf0456e4b986bde269e6.zip
feat: add per-pane default foreground/background color support (#4737)
* feat: add per-pane default foreground/background color support Add per-pane default foreground and background colors, configurable through four surfaces: - OSC 10/11 escape sequences (set/query) and OSC 110/111 (reset) - CLI action: zellij action set-pane-color --pane-id <id> --fg/--bg - Layout config: default_fg/default_bg properties on pane nodes - Plugin API: set_pane_color() SDK function and PaneInfo read-side Colors are applied at render time as a fallback when cells have no explicit foreground/background, without mutating stored grid data. Closes #4712 * refactor: address review feedback for pane color support - Extract adjust_styles_for_custom_bg_fg in output/mod.rs - Move color parsing (xparse_color) from tab into Grid - Move color serialization (ansi_code_to_color_string) into Grid - Pane trait now uses Option<String> for color getters/setters - Add colors to session serialization (dump-layout) - Add default_fg/default_bg to protobuf IPC schema to fix layout-in-session color loss - Update example layout with tab-bar and status-bar * fix stack overflow and ordering * rustfmt * update e2e snapshots --------- Co-authored-by: Karl Bunch <karl@karlbunch.com> Co-authored-by: Aram Drevekenin <aram@poor.dev>
-rw-r--r--docs/MANPAGE.md3
-rw-r--r--example/layouts/pane_colors_layout.kdl13
-rw-r--r--src/main.rs4
-rw-r--r--xtask/src/build.rs3
-rw-r--r--zellij-server/src/output/mod.rs62
-rw-r--r--zellij-server/src/output/unit/output_tests.rs78
-rw-r--r--zellij-server/src/panes/grid.rs88
-rw-r--r--zellij-server/src/panes/terminal_pane.rs7
-rw-r--r--zellij-server/src/panes/unit/grid_tests.rs194
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command-2.snap6
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command.snap6
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__override_layout_plugin_command.snap180
-rw-r--r--zellij-server/src/plugins/zellij_exports.rs10
-rw-r--r--zellij-server/src/route.rs10
-rw-r--r--zellij-server/src/screen.rs23
-rw-r--r--zellij-server/src/session_layout_metadata.rs12
-rw-r--r--zellij-server/src/tab/layout_applier.rs9
-rw-r--r--zellij-server/src/tab/mod.rs24
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_default_params.snap7
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_with_name_and_layout.snap9
-rw-r--r--zellij-tile/src/shim.rs13
-rw-r--r--zellij-utils/assets/prost/api.event.rs4
-rw-r--r--zellij-utils/assets/prost/api.plugin_command.rs17
-rw-r--r--zellij-utils/assets/prost_ipc/client_server_contract.rs256
-rw-r--r--zellij-utils/src/cli.rs25
-rw-r--r--zellij-utils/src/client_server_contract/common_types.proto11
-rw-r--r--zellij-utils/src/data.rs5
-rw-r--r--zellij-utils/src/errors.rs1
-rw-r--r--zellij-utils/src/input/actions.rs38
-rw-r--r--zellij-utils/src/input/layout.rs6
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap11
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap11
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap73
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap25
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap25
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap35
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap41
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap15
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap13
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap13
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap7
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap13
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap13
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap5
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap5
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap41
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap23
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap17
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap23
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap5
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap45
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap15
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap17
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap9
-rw-r--r--zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap9
-rw-r--r--zellij-utils/src/ipc/protobuf_conversion.rs27
-rw-r--r--zellij-utils/src/ipc/tests/roundtrip_tests.rs60
-rw-r--r--zellij-utils/src/kdl/kdl_layout_parser.rs16
-rw-r--r--zellij-utils/src/kdl/mod.rs6
-rw-r--r--zellij-utils/src/plugin_api/action.rs7
-rw-r--r--zellij-utils/src/plugin_api/event.proto2
-rw-r--r--zellij-utils/src/plugin_api/event.rs8
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto8
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs21
-rw-r--r--zellij-utils/src/session_serialization.rs41
84 files changed, 1825 insertions, 163 deletions
diff --git a/docs/MANPAGE.md b/docs/MANPAGE.md
index 50c37d80..404f4fff 100644
--- a/docs/MANPAGE.md
+++ b/docs/MANPAGE.md
@@ -88,6 +88,8 @@ Each node has following fields:
* __plugin: /path/to/plugin.wasm__ - optional path to a compiled Zellij plugin.
If indicated loads a plugin into the created space. For more information see
PLUGINS section.
+* __default_fg: \<color\>__ - set the default foreground color for a pane (e.g. `"#00e000"`).
+* __default_bg: \<color\>__ - set the default background color for a pane (e.g. `"#001a3a"`).
KEYBINDINGS
===========
@@ -176,6 +178,7 @@ ACTIONS
on the current tab and normal mode.
* __UndoRenameTab__ - undoes the changed tab name and reverts to the previous name.
* __UndoRenamePane__ - undoes the changed pane name and reverts to the previous name.
+* __SetPaneColor__ - sets the default foreground and/or background color of a pane.
KEYS
diff --git a/example/layouts/pane_colors_layout.kdl b/example/layouts/pane_colors_layout.kdl
new file mode 100644
index 00000000..ad5b3705
--- /dev/null
+++ b/example/layouts/pane_colors_layout.kdl
@@ -0,0 +1,13 @@
+layout {
+ pane size=1 borderless=true {
+ plugin location="tab-bar"
+ }
+ pane split_direction="Vertical" {
+ pane name="dark-blue-bg" default_bg="#001a3a"
+ pane name="green-on-black" default_fg="#00e000" default_bg="#0a0a0a"
+ }
+ pane name="default-colors"
+ pane size=1 borderless=true {
+ plugin location="status-bar"
+ }
+}
diff --git a/src/main.rs b/src/main.rs
index 581fff52..1a0db7e1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -21,8 +21,8 @@ fn main() {
{
let config = Config::try_from(&opts).ok();
- if let Some(Command::Sessions(Sessions::Action(cli_action))) = opts.command {
- commands::send_action_to_session(cli_action, opts.session, config);
+ if let Some(Command::Action(cli_action)) = opts.command {
+ commands::send_action_to_session(*cli_action, opts.session, config);
std::process::exit(0);
}
if let Some(Command::Sessions(Sessions::Run {
diff --git a/xtask/src/build.rs b/xtask/src/build.rs
index c5c54fca..e8baee09 100644
--- a/xtask/src/build.rs
+++ b/xtask/src/build.rs
@@ -77,6 +77,7 @@ pub fn build(sh: &Shell, flags: flags::Build) -> anyhow::Result<()> {
}
}
}
+ proto_files.sort();
if needs_regeneration {
prost
.compile_protos(&proto_files, &[protobuf_source_dir])
@@ -122,6 +123,7 @@ pub fn build(sh: &Shell, flags: flags::Build) -> anyhow::Result<()> {
}
}
}
+ proto_files.sort();
if needs_regeneration {
prost
.compile_protos(&proto_files, &[client_server_contract_dir])
@@ -166,6 +168,7 @@ pub fn build(sh: &Shell, flags: flags::Build) -> anyhow::Result<()> {
}
}
}
+ proto_files.sort();
if needs_regeneration {
prost
.compile_protos(&proto_files, &[web_server_contract_dir])
diff --git a/zellij-server/src/output/mod.rs b/zellij-server/src/output/mod.rs
index 6d9c2185..9297be11 100644
--- a/zellij-server/src/output/mod.rs
+++ b/zellij-server/src/output/mod.rs
@@ -61,6 +61,27 @@ fn adjust_styles_for_possible_selection(
.unwrap_or(character_styles)
}
+fn adjust_styles_for_custom_bg_fg(
+ character_styles: CharacterStyles,
+ pane_default_fg: Option<AnsiCode>,
+ pane_default_bg: Option<AnsiCode>,
+) -> CharacterStyles {
+ let mut character_styles = character_styles;
+ if character_styles.foreground.is_none() || character_styles.foreground == Some(AnsiCode::Reset)
+ {
+ if let Some(fg) = pane_default_fg {
+ character_styles.foreground = Some(fg);
+ }
+ }
+ if character_styles.background.is_none() || character_styles.background == Some(AnsiCode::Reset)
+ {
+ if let Some(bg) = pane_default_bg {
+ character_styles.background = Some(bg);
+ }
+ }
+ character_styles
+}
+
fn write_changed_styles(
character_styles: &mut CharacterStyles,
current_character_styles: CharacterStyles,
@@ -113,6 +134,8 @@ fn serialize_chunks_with_newlines(
}
let chunk_changed_colors = character_chunk.changed_colors();
+ let pane_default_fg = character_chunk.pane_default_fg;
+ let pane_default_bg = character_chunk.pane_default_bg;
let mut character_styles = DEFAULT_STYLES.enable_styled_underlines(styled_underlines);
vte_output.push_str("\n\r");
let mut chunk_width = character_chunk.x;
@@ -124,11 +147,15 @@ fn serialize_chunks_with_newlines(
}
}
- let current_character_styles = adjust_styles_for_possible_selection(
- character_chunk.selection_and_colors(),
- *t_character.styles,
- character_chunk.y,
- chunk_width,
+ let current_character_styles = adjust_styles_for_custom_bg_fg(
+ adjust_styles_for_possible_selection(
+ character_chunk.selection_and_colors(),
+ *t_character.styles,
+ character_chunk.y,
+ chunk_width,
+ ),
+ pane_default_fg,
+ pane_default_bg,
);
write_changed_styles(
&mut character_styles,
@@ -171,6 +198,8 @@ fn serialize_chunks(
}
let chunk_changed_colors = character_chunk.changed_colors();
+ let pane_default_fg = character_chunk.pane_default_fg;
+ let pane_default_bg = character_chunk.pane_default_bg;
let mut character_styles = DEFAULT_STYLES.enable_styled_underlines(styled_underlines);
vte_goto_instruction(character_chunk.x, character_chunk.y, &mut vte_output)
.with_context(err_context)?;
@@ -183,11 +212,15 @@ fn serialize_chunks(
}
}
- let current_character_styles = adjust_styles_for_possible_selection(
- character_chunk.selection_and_colors(),
- *t_character.styles,
- character_chunk.y,
- chunk_width,
+ let current_character_styles = adjust_styles_for_custom_bg_fg(
+ adjust_styles_for_possible_selection(
+ character_chunk.selection_and_colors(),
+ *t_character.styles,
+ character_chunk.y,
+ chunk_width,
+ ),
+ pane_default_fg,
+ pane_default_bg,
);
write_changed_styles(
&mut character_styles,
@@ -745,6 +778,9 @@ impl FloatingPanesStack {
let right_chunk_x = pane_right_edge + 1;
let mut left_chunk =
CharacterChunk::new(left_chunk_characters, left_chunk_x, c_chunk.y);
+ left_chunk.pane_default_fg = c_chunk.pane_default_fg;
+ left_chunk.pane_default_bg = c_chunk.pane_default_bg;
+ left_chunk.changed_colors = c_chunk.changed_colors;
if !c_chunk.selection_and_colors.is_empty() {
left_chunk.selection_and_colors = c_chunk.selection_and_colors.clone();
}
@@ -947,6 +983,8 @@ pub struct CharacterChunk {
pub y: usize,
pub changed_colors: Option<[Option<AnsiCode>; 256]>,
selection_and_colors: Vec<(Selection, AnsiCode, Option<AnsiCode>)>, // Selection, background color, optional foreground color
+ pub pane_default_fg: Option<AnsiCode>,
+ pub pane_default_bg: Option<AnsiCode>,
}
#[derive(Debug, Clone, Copy, Default)]
@@ -990,6 +1028,10 @@ impl CharacterChunk {
pub fn add_changed_colors(&mut self, changed_colors: Option<[Option<AnsiCode>; 256]>) {
self.changed_colors = changed_colors;
}
+ pub fn add_pane_defaults(&mut self, fg: Option<AnsiCode>, bg: Option<AnsiCode>) {
+ self.pane_default_fg = fg;
+ self.pane_default_bg = bg;
+ }
pub fn changed_colors(&self) -> Option<[Option<AnsiCode>; 256]> {
self.changed_colors
}
diff --git a/zellij-server/src/output/unit/output_tests.rs b/zellij-server/src/output/unit/output_tests.rs
index bb0bb664..2328376c 100644
--- a/zellij-server/src/output/unit/output_tests.rs
+++ b/zellij-server/src/output/unit/output_tests.rs
@@ -1,5 +1,6 @@
use super::super::{CharacterChunk, FloatingPanesStack, Output, OutputBuffer, SixelImageChunk};
use crate::panes::sixel::SixelImageStore;
+use crate::panes::terminal_character::AnsiCode;
use crate::panes::{LinkHandler, Row, TerminalCharacter};
use crate::ClientId;
use std::cell::RefCell;
@@ -1033,3 +1034,80 @@ fn test_output_buffer_changed_chunks_in_viewport_partial() {
assert_eq!(chunks[1].y, 5, "Second chunk should be at line 5");
assert_eq!(chunks[2].y, 7, "Third chunk should be at line 7");
}
+
+#[test]
+fn test_pane_defaults_preserved_when_middle_covered() {
+ let pane_geom = create_pane_geom(5, 5, 3, 1);
+ let stack = FloatingPanesStack {
+ layers: vec![pane_geom],
+ };
+
+ let pane_bg = Some(AnsiCode::RgbCode((0, 26, 58)));
+ let pane_fg = Some(AnsiCode::RgbCode((0, 224, 0)));
+
+ let mut chunk = create_character_chunk_from_str("0123456789", 0, 5);
+ chunk.pane_default_bg = pane_bg;
+ chunk.pane_default_fg = pane_fg;
+
+ let visible = stack
+ .visible_character_chunks(vec![chunk], Some(0))
+ .unwrap();
+
+ assert_eq!(visible.len(), 2, "Middle split should produce two chunks");
+ for (i, chunk) in visible.iter().enumerate() {
+ assert_eq!(
+ chunk.pane_default_bg, pane_bg,
+ "Chunk {i} should preserve pane_default_bg"
+ );
+ assert_eq!(
+ chunk.pane_default_fg, pane_fg,
+ "Chunk {i} should preserve pane_default_fg"
+ );
+ }
+}
+
+#[test]
+fn test_pane_defaults_preserved_when_left_covered() {
+ let pane_geom = create_pane_geom(0, 5, 5, 1);
+ let stack = FloatingPanesStack {
+ layers: vec![pane_geom],
+ };
+
+ let pane_bg = Some(AnsiCode::RgbCode((0, 26, 58)));
+
+ let mut chunk = create_character_chunk_from_str("0123456789", 0, 5);
+ chunk.pane_default_bg = pane_bg;
+
+ let visible = stack
+ .visible_character_chunks(vec![chunk], Some(0))
+ .unwrap();
+
+ assert_eq!(visible.len(), 1, "Left-covered should produce one chunk");
+ assert_eq!(
+ visible[0].pane_default_bg, pane_bg,
+ "Remaining chunk should preserve pane_default_bg"
+ );
+}
+
+#[test]
+fn test_pane_defaults_preserved_when_right_covered() {
+ let pane_geom = create_pane_geom(5, 5, 10, 1);
+ let stack = FloatingPanesStack {
+ layers: vec![pane_geom],
+ };
+
+ let pane_bg = Some(AnsiCode::RgbCode((0, 26, 58)));
+
+ let mut chunk = create_character_chunk_from_str("0123456789", 0, 5);
+ chunk.pane_default_bg = pane_bg;
+
+ let visible = stack
+ .visible_character_chunks(vec![chunk], Some(0))
+ .unwrap();
+
+ assert_eq!(visible.len(), 1, "Right-covered should produce one chunk");
+ assert_eq!(
+ visible[0].pane_default_bg, pane_bg,
+ "Remaining chunk should preserve pane_default_bg"
+ );
+}
diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs
index 092e5689..c7eee368 100644
--- a/zellij-server/src/panes/grid.rs
+++ b/zellij-server/src/panes/grid.rs
@@ -404,6 +404,31 @@ pub struct Grid {
// disabled by user config?
click: Click,
hyperlink_tracker: HyperlinkTracker,
+ pub pane_default_fg: Option<AnsiCode>,
+ pub pane_default_bg: Option<AnsiCode>,
+}
+
+impl Grid {
+ pub fn set_pane_default_colors(&mut self, fg: Option<String>, bg: Option<String>) {
+ self.pane_default_fg = fg.as_ref().and_then(|s| xparse_color(s.as_bytes()));
+ self.pane_default_bg = bg.as_ref().and_then(|s| xparse_color(s.as_bytes()));
+ self.output_buffer.update_all_lines();
+ }
+ pub fn get_pane_default_color_strings(&self) -> (Option<String>, Option<String>) {
+ (
+ self.pane_default_fg.and_then(ansi_code_to_color_string),
+ self.pane_default_bg.and_then(ansi_code_to_color_string),
+ )
+ }
+}
+
+fn ansi_code_to_color_string(code: AnsiCode) -> Option<String> {
+ match code {
+ AnsiCode::RgbCode((r, g, b)) => Some(format!("#{:02x}{:02x}{:02x}", r, g, b)),
+ AnsiCode::ColorIndex(idx) => Some(format!("{}", idx)),
+ AnsiCode::NamedColor(named) => Some(format!("{:?}", named).to_lowercase()),
+ _ => None,
+ }
}
const CLICK_TIME_THRESHOLD: u128 = 400; // Doherty Threshold
@@ -594,6 +619,8 @@ impl Grid {
explicitly_disable_kitty_keyboard_protocol,
click: Click::default(),
hyperlink_tracker: HyperlinkTracker::new(),
+ pane_default_fg: None,
+ pane_default_bg: None,
}
}
pub fn render_full_viewport(&mut self) {
@@ -1174,6 +1201,7 @@ impl Grid {
let (mut character_chunks, sixel_image_chunks) = self.read_changes(content_x, content_y);
for character_chunk in character_chunks.iter_mut() {
character_chunk.add_changed_colors(self.changed_colors);
+ character_chunk.add_pane_defaults(self.pane_default_fg, self.pane_default_bg);
if self
.selection
.contains_row(character_chunk.y.saturating_sub(content_y))
@@ -1814,6 +1842,8 @@ impl Grid {
self.cursor_is_hidden = false;
self.supports_kitty_keyboard_protocol = false;
self.set_scroll_region_to_viewport_size();
+ self.pane_default_fg = None;
+ self.pane_default_bg = None;
if let Some(images_to_reap) = self.sixel_grid.clear() {
self.sixel_grid.reap_images(images_to_reap);
}
@@ -2702,34 +2732,44 @@ impl Perform for Grid {
if params.len() >= 2 {
if let Some(mut dynamic_code) = parse_number(params[0]) {
for param in &params[1..] {
- // currently only getting the color sequence is supported,
- // setting still isn't
if param == b"?" {
- let saved_terminal_color = if dynamic_code == 10 {
- Some(self.terminal_emulator_colors.borrow().fg)
+ // Query: respond with pane default if set, else terminal default
+ let color_rgb = if dynamic_code == 10 {
+ match self.pane_default_fg {
+ Some(AnsiCode::RgbCode((r, g, b))) => Some((r, g, b)),
+ _ => match self.terminal_emulator_colors.borrow().fg {
+ PaletteColor::Rgb((r, g, b)) => Some((r, g, b)),
+ _ => None,
+ },
+ }
} else if dynamic_code == 11 {
- Some(self.terminal_emulator_colors.borrow().bg)
+ match self.pane_default_bg {
+ Some(AnsiCode::RgbCode((r, g, b))) => Some((r, g, b)),
+ _ => match self.terminal_emulator_colors.borrow().bg {
+ PaletteColor::Rgb((r, g, b)) => Some((r, g, b)),
+ _ => None,
+ },
+ }
} else {
None
};
- let color_response_message = match saved_terminal_color {
- Some(PaletteColor::Rgb((r, g, b))) => {
- format!(
- "\u{1b}]{};rgb:{1:02x}{1:02x}/{2:02x}{2:02x}/{3:02x}{3:02x}{4}",
- // dynamic_code, color.r, color.g, color.b, terminator
- dynamic_code, r, g, b, terminator
- )
- },
- _ => {
- format!(
- "\u{1b}]{};rgb:{1:02x}{1:02x}/{2:02x}{2:02x}/{3:02x}{3:02x}{4}",
- // dynamic_code, color.r, color.g, color.b, terminator
- dynamic_code, 0, 0, 0, terminator
- )
- },
- };
+ let (r, g, b) = color_rgb.unwrap_or((0, 0, 0));
+ let color_response_message = format!(
+ "\u{1b}]{};rgb:{1:02x}{1:02x}/{2:02x}{2:02x}/{3:02x}{3:02x}{4}",
+ dynamic_code, r, g, b, terminator
+ );
self.pending_messages_to_pty
.push(color_response_message.as_bytes().to_vec());
+ } else {
+ // Set: parse color and store as pane default
+ if let Some(color) = xparse_color(param) {
+ if dynamic_code == 10 {
+ self.pane_default_fg = Some(color);
+ } else if dynamic_code == 11 {
+ self.pane_default_bg = Some(color);
+ }
+ self.output_buffer.update_all_lines();
+ }
}
dynamic_code += 1;
}
@@ -2813,12 +2853,14 @@ impl Perform for Grid {
// Reset foreground color.
b"110" => {
- // TBD - reset foreground color - currently unimplemented
+ self.pane_default_fg = None;
+ self.output_buffer.update_all_lines();
},
// Reset background color.
b"111" => {
- // TBD - reset background color - currently unimplemented
+ self.pane_default_bg = None;
+ self.output_buffer.update_all_lines();
},
// Reset text cursor color.
diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs
index db32a88a..a3f73a72 100644
--- a/zellij-server/src/panes/terminal_pane.rs
+++ b/zellij-server/src/panes/terminal_pane.rs
@@ -317,6 +317,13 @@ impl Pane for TerminalPane {
fn set_selectable(&mut self, selectable: bool) {
self.selectable = selectable;
}
+ fn set_pane_default_colors(&mut self, fg: Option<String>, bg: Option<String>) {
+ self.grid.set_pane_default_colors(fg, bg);
+ self.set_should_render(true);
+ }
+ fn get_pane_default_colors(&self) -> (Option<String>, Option<String>) {
+ self.grid.get_pane_default_color_strings()
+ }
fn render(
&mut self,
_client_id: Option<ClientId>,
diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs
index 310c3dc4..e942caa8 100644
--- a/zellij-server/src/panes/unit/grid_tests.rs
+++ b/zellij-server/src/panes/unit/grid_tests.rs
@@ -4362,3 +4362,197 @@ fn single_click_drag_selection_preserved_after_scroll() {
assert_eq!(grid.selection.start.column, start_before.column);
assert_eq!(grid.selection.end.column, end_before.column);
}
+
+#[test]
+fn osc_11_set_and_query_pane_default_bg() {
+ use crate::panes::terminal_character::AnsiCode;
+
+ let mut vte_parser = vte::Parser::new();
+ let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default()));
+ let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
+ let mut grid = Grid::new(
+ 10,
+ 20,
+ Rc::new(RefCell::new(Palette::default())),
+ terminal_emulator_color_codes,
+ Rc::new(RefCell::new(LinkHandler::new())),
+ Rc::new(RefCell::new(None)),
+ sixel_image_store,
+ Style::default(),
+ false,
+ true,
+ true,
+ true,
+ false,
+ );
+
+ // Set background via OSC 11
+ let set_bg = b"\x1b]11;#001a3a\x07";
+ for byte in set_bg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pane_default_bg, Some(AnsiCode::RgbCode((0, 26, 58))));
+
+ // Query background via OSC 11
+ let query_bg = b"\x1b]11;?\x07";
+ for byte in query_bg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pending_messages_to_pty.len(), 1);
+ let response = String::from_utf8(grid.pending_messages_to_pty[0].clone()).unwrap();
+ assert!(
+ response.contains("11;rgb:0000/1a1a/3a3a"),
+ "Response was: {}",
+ response
+ );
+}
+
+#[test]
+fn osc_10_set_and_query_pane_default_fg() {
+ use crate::panes::terminal_character::AnsiCode;
+
+ let mut vte_parser = vte::Parser::new();
+ let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default()));
+ let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
+ let mut grid = Grid::new(
+ 10,
+ 20,
+ Rc::new(RefCell::new(Palette::default())),
+ terminal_emulator_color_codes,
+ Rc::new(RefCell::new(LinkHandler::new())),
+ Rc::new(RefCell::new(None)),
+ sixel_image_store,
+ Style::default(),
+ false,
+ true,
+ true,
+ true,
+ false,
+ );
+
+ // Set foreground via OSC 10
+ let set_fg = b"\x1b]10;#00e000\x07";
+ for byte in set_fg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pane_default_fg, Some(AnsiCode::RgbCode((0, 224, 0))));
+
+ // Query foreground via OSC 10
+ let query_fg = b"\x1b]10;?\x07";
+ for byte in query_fg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pending_messages_to_pty.len(), 1);
+ let response = String::from_utf8(grid.pending_messages_to_pty[0].clone()).unwrap();
+ assert!(
+ response.contains("10;rgb:0000/e0e0/0000"),
+ "Response was: {}",
+ response
+ );
+}
+
+#[test]
+fn osc_110_111_reset_pane_default_colors() {
+ use crate::panes::terminal_character::AnsiCode;
+
+ let mut vte_parser = vte::Parser::new();
+ let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default()));
+ let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
+ let mut grid = Grid::new(
+ 10,
+ 20,
+ Rc::new(RefCell::new(Palette::default())),
+ terminal_emulator_color_codes,
+ Rc::new(RefCell::new(LinkHandler::new())),
+ Rc::new(RefCell::new(None)),
+ sixel_image_store,
+ Style::default(),
+ false,
+ true,
+ true,
+ true,
+ false,
+ );
+
+ // Set both fg and bg
+ let set_fg = b"\x1b]10;#00e000\x07";
+ for byte in set_fg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+ let set_bg = b"\x1b]11;#001a3a\x07";
+ for byte in set_bg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pane_default_fg, Some(AnsiCode::RgbCode((0, 224, 0))));
+ assert_eq!(grid.pane_default_bg, Some(AnsiCode::RgbCode((0, 26, 58))));
+
+ // Reset foreground via OSC 110
+ let reset_fg = b"\x1b]110\x07";
+ for byte in reset_fg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+ assert_eq!(grid.pane_default_fg, None);
+ assert_eq!(grid.pane_default_bg, Some(AnsiCode::RgbCode((0, 26, 58))));
+
+ // Reset background via OSC 111
+ let reset_bg = b"\x1b]111\x07";
+ for byte in reset_bg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+ assert_eq!(grid.pane_default_fg, None);
+ assert_eq!(grid.pane_default_bg, None);
+}
+
+#[test]
+fn osc_11_set_bg_produces_ansi_in_render_output() {
+ use crate::panes::terminal_character::AnsiCode;
+
+ let mut vte_parser = vte::Parser::new();
+ let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default()));
+ let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
+ let mut grid = Grid::new(
+ 5,
+ 10,
+ Rc::new(RefCell::new(Palette::default())),
+ terminal_emulator_color_codes,
+ Rc::new(RefCell::new(LinkHandler::new())),
+ Rc::new(RefCell::new(None)),
+ sixel_image_store,
+ Style::default(),
+ false,
+ true,
+ true,
+ true,
+ false,
+ );
+
+ // Set background via OSC 11
+ let set_bg = b"\x1b]11;#001a3a\x07";
+ for byte in set_bg.iter() {
+ vte_parser.advance(&mut grid, *byte);
+ }
+
+ assert_eq!(grid.pane_default_bg, Some(AnsiCode::RgbCode((0, 26, 58))));
+
+ // Render the grid and check that the pane defaults are stamped on chunks
+ let style = Style::default();
+ let render_result = grid.render(0, 0, &style).unwrap();
+ assert!(render_result.is_some(), "Expected render output");
+
+ let (chunks, _, _) = render_result.unwrap();
+ assert!(!chunks.is_empty(), "Expected at least one character chunk");
+
+ // All chunks should carry the pane default bg
+ for chunk in &chunks {
+ assert_eq!(
+ chunk.pane_default_bg,
+ Some(AnsiCode::RgbCode((0, 26, 58))),
+ "Chunk should carry pane default background"
+ );
+ }
+}
diff --git a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command-2.snap b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command-2.snap
index 9811bdc4..8a11021c 100644
--- a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command-2.snap
+++ b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command-2.snap
@@ -26,6 +26,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -42,6 +44,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -55,6 +59,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
),
[],
diff --git a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command.snap b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command.snap
index 4e5fe5d2..4e5076b1 100644
--- a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command.snap
+++ b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__new_tabs_with_layout_plugin_command.snap
@@ -26,6 +26,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -42,6 +44,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -55,6 +59,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
),
[],
diff --git a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__override_layout_plugin_command.snap b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__override_layout_plugin_command.snap
index 21dc6fda..0320d754 100644
--- a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__override_layout_plugin_command.snap
+++ b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__override_layout_plugin_command.snap
@@ -29,6 +29,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -66,6 +68,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -79,6 +83,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
floating_layouts: [],
swap_tiled_layouts: Some(
@@ -114,6 +120,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -132,6 +140,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -145,6 +155,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -158,6 +170,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -195,6 +209,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -208,6 +224,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
7,
@@ -240,6 +258,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -260,6 +280,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -276,6 +298,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -292,6 +316,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -308,6 +334,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -321,6 +349,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -334,6 +364,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -347,6 +379,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -384,6 +418,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -397,6 +433,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
11,
@@ -429,6 +467,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -449,6 +489,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -465,6 +507,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -481,6 +525,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -497,6 +543,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -510,6 +558,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -530,6 +580,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -546,6 +598,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -562,6 +616,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -578,6 +634,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -591,6 +649,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -604,6 +664,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -617,6 +679,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -654,6 +718,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -667,6 +733,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
},
Some(
@@ -700,6 +768,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -716,6 +786,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -729,6 +801,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -766,6 +840,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -779,6 +855,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
7,
@@ -811,6 +889,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -831,6 +911,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -847,6 +929,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -863,6 +947,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -879,6 +965,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -892,6 +980,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -905,6 +995,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -918,6 +1010,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -955,6 +1049,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -968,6 +1064,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
11,
@@ -1000,6 +1098,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -1020,6 +1120,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1036,6 +1138,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1052,6 +1156,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1068,6 +1174,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1081,6 +1189,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -1101,6 +1211,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1117,6 +1229,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1133,6 +1247,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1149,6 +1265,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1162,6 +1280,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1175,6 +1295,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1188,6 +1310,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1225,6 +1349,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1238,6 +1364,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
},
Some(
@@ -1275,6 +1403,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1293,6 +1423,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1306,6 +1438,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1319,6 +1453,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -1356,6 +1492,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -1369,6 +1507,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
},
Some(
@@ -1421,6 +1561,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1451,6 +1593,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1481,6 +1625,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1511,6 +1657,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1541,6 +1689,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1571,6 +1721,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1601,6 +1753,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1631,6 +1785,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1661,6 +1817,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1691,6 +1849,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
},
@@ -1724,6 +1884,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
MaxPanes(
@@ -1754,6 +1916,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1780,6 +1944,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
MaxPanes(
@@ -1810,6 +1976,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1836,6 +2004,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1862,6 +2032,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
MaxPanes(
@@ -1896,6 +2068,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1926,6 +2100,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1956,6 +2132,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -1986,6 +2164,8 @@ Some(
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
},
diff --git a/zellij-server/src/plugins/zellij_exports.rs b/zellij-server/src/plugins/zellij_exports.rs
index 57cd2a44..dd323977 100644
--- a/zellij-server/src/plugins/zellij_exports.rs
+++ b/zellij-server/src/plugins/zellij_exports.rs
@@ -596,6 +596,9 @@ fn host_run_plugin_command(mut caller: Caller<'_, PluginEnv>) {
PluginCommand::SetPaneBorderless(pane_id, borderless) => {
set_pane_borderless(env, pane_id.into(), borderless)
},
+ PluginCommand::SetPaneColor(pane_id, fg, bg) => {
+ set_pane_color(env, pane_id.into(), fg, bg)
+ },
PluginCommand::OpenFileNearPlugin(file_to_open, context) => {
open_file_near_plugin(env, file_to_open, context)
},
@@ -3602,6 +3605,12 @@ fn set_pane_borderless(env: &PluginEnv, pane_id: PaneId, borderless: bool) {
));
}
+fn set_pane_color(env: &PluginEnv, pane_id: PaneId, fg: Option<String>, bg: Option<String>) {
+ let _ = env
+ .senders
+ .send_to_screen(ScreenInstruction::SetPaneColor(pane_id, fg, bg, None));
+}
+
fn scan_host_folder(env: &PluginEnv, folder_to_scan: PathBuf) {
if !folder_to_scan.starts_with("/host") {
log::error!(
@@ -5061,6 +5070,7 @@ fn check_command_permission(
| PluginCommand::ChangeFloatingPanesCoordinates(..)
| PluginCommand::TogglePaneBorderless(..)
| PluginCommand::SetPaneBorderless(..)
+ | PluginCommand::SetPaneColor(..)
| PluginCommand::GroupAndUngroupPanes(..)
| PluginCommand::HighlightAndUnhighlightPanes(..)
| PluginCommand::CloseMultiplePanes(..)
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index a57873a3..5a5c5c15 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -277,6 +277,16 @@ pub(crate) fn route_action(
))
.with_context(err_context)?;
},
+ Action::SetPaneColor { pane_id, fg, bg } => {
+ senders
+ .send_to_screen(ScreenInstruction::SetPaneColor(
+ pane_id.into(),
+ fg,
+ bg,
+ Some(NotificationEnd::new(completion_tx)),
+ ))
+ .with_context(err_context)?;
+ },
Action::SwitchToMode { input_mode } => {
let attrs = &client_attributes;
senders
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs
index 9d2d258a..6a18042d 100644
--- a/zellij-server/src/screen.rs
+++ b/zellij-server/src/screen.rs
@@ -600,6 +600,12 @@ pub enum ScreenInstruction {
ResizePaneWithId(ResizeStrategy, PaneId),
EditScrollbackForPaneWithId(PaneId, Option<NotificationEnd>),
WriteToPaneId(Vec<u8>, PaneId, Option<NotificationEnd>),
+ SetPaneColor(
+ PaneId,
+ Option<String>,
+ Option<String>,
+ Option<NotificationEnd>,
+ ),
WriteKeyToPaneId(
Option<KeyWithModifier>,
Vec<u8>,
@@ -865,6 +871,7 @@ impl From<&ScreenInstruction> for ScreenContext {
ScreenContext::EditScrollbackForPaneWithId
},
ScreenInstruction::WriteToPaneId(..) => ScreenContext::WriteToPaneId,
+ ScreenInstruction::SetPaneColor(..) => ScreenContext::SetPaneColor,
ScreenInstruction::WriteKeyToPaneId(..) => ScreenContext::WriteKeyToPaneId,
ScreenInstruction::CopyTextToClipboard(..) => ScreenContext::CopyTextToClipboard,
ScreenInstruction::MovePaneWithPaneId(..) => ScreenContext::MovePaneWithPaneId,
@@ -3939,6 +3946,7 @@ impl Screen {
p_id.and_then(|p_id| if p_id == pane_id { Some(*c_id) } else { None })
})
.collect();
+ let (default_fg, default_bg) = p.get_pane_default_colors();
PaneLayoutMetadata::new(
pane_id,
p.position_and_size(),
@@ -3952,6 +3960,8 @@ impl Screen {
None
},
focused_clients,
+ default_fg,
+ default_bg,
)
})
.collect();
@@ -3977,6 +3987,7 @@ impl Screen {
p_id.and_then(|p_id| if p_id == pane_id { Some(*c_id) } else { None })
})
.collect();
+ let (default_fg, default_bg) = p.get_pane_default_colors();
PaneLayoutMetadata::new(
pane_id,
p.position_and_size(),
@@ -3990,6 +4001,8 @@ impl Screen {
None
},
focused_clients,
+ default_fg,
+ default_bg,
)
})
.collect();
@@ -7127,6 +7140,16 @@ pub(crate) fn screen_thread_main(
}
screen.render(None)?;
},
+ ScreenInstruction::SetPaneColor(pane_id, fg, bg, _completion) => {
+ let all_tabs = screen.get_tabs_mut();
+ for tab in all_tabs.values_mut() {
+ if tab.has_pane_with_pid(&pane_id) {
+ tab.set_pane_color(pane_id, fg, bg).non_fatal();
+ break;
+ }
+ }
+ screen.render(None)?;
+ },
ScreenInstruction::WriteKeyToPaneId(
key_with_modifier,
bytes,
diff --git a/zellij-server/src/session_layout_metadata.rs b/zellij-server/src/session_layout_metadata.rs
index afa76526..3ea8b28e 100644
--- a/zellij-server/src/session_layout_metadata.rs
+++ b/zellij-server/src/session_layout_metadata.rs
@@ -533,6 +533,8 @@ impl Into<PaneLayoutManifest> for PaneLayoutMetadata {
title: self.title,
is_focused: self.is_focused,
pane_contents: self.pane_contents,
+ default_fg: self.default_fg,
+ default_bg: self.default_bg,
}
}
}
@@ -557,6 +559,8 @@ pub struct PaneLayoutMetadata {
is_focused: bool,
pane_contents: Option<String>,
focused_clients: Vec<ClientId>,
+ default_fg: Option<String>,
+ default_bg: Option<String>,
}
impl PaneLayoutMetadata {
@@ -569,6 +573,8 @@ impl PaneLayoutMetadata {
is_focused: bool,
pane_contents: Option<String>,
focused_clients: Vec<ClientId>,
+ default_fg: Option<String>,
+ default_bg: Option<String>,
) -> Self {
PaneLayoutMetadata {
id,
@@ -580,6 +586,8 @@ impl PaneLayoutMetadata {
is_focused,
pane_contents,
focused_clients,
+ default_fg,
+ default_bg,
}
}
fn to_pane_metadata(&self) -> PaneMetadata {
@@ -693,6 +701,8 @@ mod tests {
false,
None,
vec![],
+ None,
+ None,
)
}
@@ -710,6 +720,8 @@ mod tests {
false,
None,
vec![],
+ None,
+ None,
)
}
diff --git a/zellij-server/src/tab/layout_applier.rs b/zellij-server/src/tab/layout_applier.rs
index 16fecdbb..46db9bc5 100644
--- a/zellij-server/src/tab/layout_applier.rs
+++ b/zellij-server/src/tab/layout_applier.rs
@@ -653,6 +653,12 @@ impl<'a> LayoutApplier<'a> {
} else {
new_pane.set_borderless(false);
}
+ if floating_pane_layout.default_fg.is_some() || floating_pane_layout.default_bg.is_some() {
+ new_pane.set_pane_default_colors(
+ floating_pane_layout.default_fg.clone(),
+ floating_pane_layout.default_bg.clone(),
+ );
+ }
if let Some(held_command) = hold_for_command {
new_pane.hold(None, true, held_command.clone());
}
@@ -722,6 +728,9 @@ impl<'a> LayoutApplier<'a> {
if let Some(exclude_from_sync) = layout.exclude_from_sync {
new_pane.set_exclude_from_sync(exclude_from_sync);
}
+ if layout.default_fg.is_some() || layout.default_bg.is_some() {
+ new_pane.set_pane_default_colors(layout.default_fg.clone(), layout.default_bg.clone());
+ }
if let Some(held_command) = hold_for_command {
new_pane.hold(None, true, held_command.clone());
}
diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs
index 2fa9996f..49b232a3 100644
--- a/zellij-server/src/tab/mod.rs
+++ b/zellij-server/src/tab/mod.rs
@@ -323,6 +323,10 @@ pub trait Pane {
fn get_selected_text(&self, _client_id: ClientId) -> Option<String> {
None
}
+ fn set_pane_default_colors(&mut self, _fg: Option<String>, _bg: Option<String>) {}
+ fn get_pane_default_colors(&self) -> (Option<String>, Option<String>) {
+ (None, None)
+ }
fn right_boundary_x_coords(&self) -> usize {
self.x() + self.cols()
@@ -2540,6 +2544,22 @@ impl Tab {
.values()
.any(|s_p| s_p.1.pid() == PaneId::Plugin(plugin_id))
}
+ pub fn set_pane_color(
+ &mut self,
+ pane_id: PaneId,
+ fg: Option<String>,
+ bg: Option<String>,
+ ) -> Result<()> {
+ let pane = self
+ .floating_panes
+ .get_mut(&pane_id)
+ .or_else(|| self.tiled_panes.get_pane_mut(pane_id))
+ .or_else(|| self.suppressed_panes.get_mut(&pane_id).map(|p| &mut p.1));
+ if let Some(pane) = pane {
+ pane.set_pane_default_colors(fg, bg);
+ }
+ Ok(())
+ }
pub fn has_pane_with_pid(&self, pid: &PaneId) -> bool {
self.tiled_panes.panes_contain(pid)
|| self.floating_panes.panes_contain(pid)
@@ -5597,6 +5617,10 @@ pub fn pane_info_for_pane(
.collect();
pane_info.index_in_pane_group = index_in_pane_group;
+ let (default_fg, default_bg) = pane.get_pane_default_colors();
+ pane_info.default_fg = default_fg;
+ pane_info.default_bg = default_bg;
+
match pane_id {
PaneId::Terminal(terminal_id) => {
pane_info.id = *terminal_id;
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_default_params.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_default_params.snap
index a734c788..aa0e3596 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_default_params.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_default_params.snap
@@ -1,5 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
+assertion_line: 3515
expression: "format!(\"{:#?}\", new_tab_action)"
---
Some(
@@ -26,6 +27,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -42,6 +45,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -55,6 +60,8 @@ Some(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
),
[],
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_with_name_and_layout.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_with_name_and_layout.snap
index b3be2b93..cd39bac6 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_with_name_and_layout.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_new_tab_action_with_name_and_layout.snap
@@ -1,5 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
+assertion_line: 3568
expression: "format!(\"{:#?}\", new_tab_instruction)"
---
NewTab(
@@ -29,6 +30,8 @@ NewTab(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -49,6 +52,8 @@ NewTab(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -69,6 +74,8 @@ NewTab(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -86,6 +93,8 @@ NewTab(
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
),
[],
diff --git a/zellij-tile/src/shim.rs b/zellij-tile/src/shim.rs
index 023aae31..2837d08e 100644
--- a/zellij-tile/src/shim.rs
+++ b/zellij-tile/src/shim.rs
@@ -2392,6 +2392,19 @@ pub fn set_pane_borderless(pane_id: PaneId, borderless: bool) {
unsafe { host_run_plugin_command() };
}
+/// Set the default foreground and/or background color of a pane
+///
+/// # Arguments
+/// * `pane_id` - The ID of the pane (PaneId::Terminal or PaneId::Plugin)
+/// * `fg` - Optional foreground color string (e.g. "#00e000"), None to leave unchanged
+/// * `bg` - Optional background color string (e.g. "#001a3a"), None to leave unchanged
+pub fn set_pane_color(pane_id: PaneId, fg: Option<String>, bg: Option<String>) {
+ let plugin_command = PluginCommand::SetPaneColor(pane_id, fg, bg);
+ let protobuf_plugin_command: ProtobufPluginCommand = plugin_command.try_into().unwrap();
+ object_to_stdout(&protobuf_plugin_command.encode_to_vec());
+ unsafe { host_run_plugin_command() };
+}
+
pub fn start_web_server() {
let plugin_command = PluginCommand::StartWebServer;
let protobuf_plugin_command: ProtobufPluginCommand = plugin_command.try_into().unwrap();
diff --git a/zellij-utils/assets/prost/api.event.rs b/zellij-utils/assets/prost/api.event.rs
index 3bab18af..04ccac58 100644
--- a/zellij-utils/assets/prost/api.event.rs
+++ b/zellij-utils/assets/prost/api.event.rs
@@ -543,6 +543,10 @@ pub struct PaneInfo {
pub is_selectable: bool,
#[prost(message, repeated, tag="23")]
pub index_in_pane_group: ::prost::alloc::vec::Vec<IndexInPaneGroup>,
+ #[prost(string, optional, tag="24")]
+ pub default_fg: ::core::option::Option<::prost::alloc::string::String>,
+ #[prost(string, optional, tag="25")]
+ pub default_bg: ::core::option::Option<::prost::alloc::string::String>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
diff --git a/zellij-utils/assets/prost/api.plugin_command.rs b/zellij-utils/assets/prost/api.plugin_command.rs
index d89da18b..887e2e30 100644
--- a/zellij-utils/assets/prost/api.plugin_command.rs
+++ b/zellij-utils/assets/prost/api.plugin_command.rs
@@ -3,7 +3,7 @@
pub struct PluginCommand {
#[prost(enumeration="CommandName", tag="1")]
pub name: i32,
- #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156")]
+ #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157")]
pub payload: ::core::option::Option<plugin_command::Payload>,
}
/// Nested message and enum types in `PluginCommand`.
@@ -295,6 +295,8 @@ pub mod plugin_command {
HideFloatingPanesPayload(super::HideFloatingPanesPayload),
#[prost(message, tag="156")]
ShowFloatingPanesPayload(super::ShowFloatingPanesPayload),
+ #[prost(message, tag="157")]
+ SetPaneColorPayload(super::SetPaneColorPayload),
}
}
#[allow(clippy::derive_partial_eq_without_eq)]
@@ -1768,6 +1770,16 @@ pub mod hide_floating_panes_response {
Error(::prost::alloc::string::String),
}
}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct SetPaneColorPayload {
+ #[prost(message, optional, tag="1")]
+ pub pane_id: ::core::option::Option<PaneId>,
+ #[prost(string, optional, tag="2")]
+ pub fg: ::core::option::Option<::prost::alloc::string::String>,
+ #[prost(string, optional, tag="3")]
+ pub bg: ::core::option::Option<::prost::alloc::string::String>,
+}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum CommandName {
@@ -1956,6 +1968,7 @@ pub enum CommandName {
OpenEditPaneInPlaceOfPaneId = 203,
HideFloatingPanes = 204,
ShowFloatingPanes = 205,
+ SetPaneColor = 206,
}
impl CommandName {
/// String value of the enum field names used in the ProtoBuf definition.
@@ -2149,6 +2162,7 @@ impl CommandName {
CommandName::OpenEditPaneInPlaceOfPaneId => "OpenEditPaneInPlaceOfPaneId",
CommandName::HideFloatingPanes => "HideFloatingPanes",
CommandName::ShowFloatingPanes => "ShowFloatingPanes",
+ CommandName::SetPaneColor => "SetPaneColor",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
@@ -2339,6 +2353,7 @@ impl CommandName {
"OpenEditPaneInPlaceOfPaneId" => Some(Self::OpenEditPaneInPlaceOfPaneId),
"HideFloatingPanes" => Some(Self::HideFloatingPanes),
"ShowFloatingPanes" => Some(Self::ShowFloatingPanes),
+ "SetPaneColor" => Some(Self::SetPaneColor),
_ => None,
}
}
diff --git a/zellij-utils/assets/prost_ipc/client_server_contract.rs b/zellij-utils/assets/prost_ipc/client_server_contract.rs
index 79a8b6b3..f2bc91c9 100644
--- a/zellij-utils/assets/prost_ipc/client_server_contract.rs
+++ b/zellij-utils/assets/prost_ipc/client_server_contract.rs
@@ -119,7 +119,7 @@ pub struct RgbColor {
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Action {
- #[prost(oneof="action::ActionType", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107")]
+ #[prost(oneof="action::ActionType", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108")]
pub action_type: ::core::option::Option<action::ActionType>,
}
/// Nested message and enum types in `Action`.
@@ -341,6 +341,8 @@ pub mod action {
ShowFloatingPanes(super::ShowFloatingPanesAction),
#[prost(message, tag="107")]
HideFloatingPanes(super::HideFloatingPanesAction),
+ #[prost(message, tag="108")]
+ SetPaneColor(super::SetPaneColorAction),
}
}
// Action message definitions (all 92 variants)
@@ -1127,6 +1129,16 @@ pub struct SetPaneBorderlessAction {
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct SetPaneColorAction {
+ #[prost(message, optional, tag="1")]
+ pub pane_id: ::core::option::Option<PaneId>,
+ #[prost(string, optional, tag="2")]
+ pub fg: ::core::option::Option<::prost::alloc::string::String>,
+ #[prost(string, optional, tag="3")]
+ pub bg: ::core::option::Option<::prost::alloc::string::String>,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Position {
/// Changed from uint32 to int32 to support negative line numbers
#[prost(int32, tag="1")]
@@ -1409,9 +1421,13 @@ pub struct TiledPaneLayout {
pub is_expanded_in_stack: bool,
#[prost(bool, tag="12")]
pub hide_floating_panes: bool,
- /// NOTE: run_instructions_to_ignore is not represented here because it's a field used only inside the server itself and not part of the server/client contract
#[prost(string, optional, tag="13")]
pub pane_initial_contents: ::core::option::Option<::prost::alloc::string::String>,
+ #[prost(string, optional, tag="14")]
+ pub default_fg: ::core::option::Option<::prost::alloc::string::String>,
+ /// NOTE: run_instructions_to_ignore is not represented here because it's a field used only inside the server itself and not part of the server/client contract
+ #[prost(string, optional, tag="15")]
+ pub default_bg: ::core::option::Option<::prost::alloc::string::String>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
@@ -1440,6 +1456,10 @@ pub struct FloatingPaneLayout {
pub logical_position: ::core::option::Option<u32>,
#[prost(bool, optional, tag="12")]
pub borderless: ::core::option::Option<bool>,
+ #[prost(string, optional, tag="13")]
+ pub default_fg: ::core::option::Option<::prost::alloc::string::String>,
+ #[prost(string, optional, tag="14")]
+ pub default_bg: ::core::option::Option<::prost::alloc::string::String>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
@@ -2562,122 +2582,6 @@ impl WebSharing {
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct ServerToClientMsg {
- #[prost(oneof="server_to_client_msg::Message", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13")]
- pub message: ::core::option::Option<server_to_client_msg::Message>,
-}
-/// Nested message and enum types in `ServerToClientMsg`.
-pub mod server_to_client_msg {
- #[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Oneof)]
- pub enum Message {
- #[prost(message, tag="1")]
- Render(super::RenderMsg),
- #[prost(message, tag="2")]
- UnblockInputThread(super::UnblockInputThreadMsg),
- #[prost(message, tag="3")]
- Exit(super::ExitMsg),
- #[prost(message, tag="4")]
- Connected(super::ConnectedMsg),
- #[prost(message, tag="5")]
- Log(super::LogMsg),
- #[prost(message, tag="6")]
- LogError(super::LogErrorMsg),
- #[prost(message, tag="7")]
- SwitchSession(super::SwitchSessionMsg),
- #[prost(message, tag="8")]
- UnblockCliPipeInput(super::UnblockCliPipeInputMsg),
- #[prost(message, tag="9")]
- CliPipeOutput(super::CliPipeOutputMsg),
- #[prost(message, tag="10")]
- QueryTerminalSize(super::QueryTerminalSizeMsg),
- #[prost(message, tag="11")]
- StartWebServer(super::StartWebServerMsg),
- #[prost(message, tag="12")]
- RenamedSession(super::RenamedSessionMsg),
- #[prost(message, tag="13")]
- ConfigFileUpdated(super::ConfigFileUpdatedMsg),
- }
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct RenderMsg {
- #[prost(string, tag="1")]
- pub content: ::prost::alloc::string::String,
-}
-/// Empty message
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct UnblockInputThreadMsg {
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct ExitMsg {
- #[prost(enumeration="ExitReason", tag="1")]
- pub exit_reason: i32,
- #[prost(string, optional, tag="2")]
- pub payload: ::core::option::Option<::prost::alloc::string::String>,
-}
-/// Empty message
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct ConnectedMsg {
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct LogMsg {
- #[prost(string, repeated, tag="1")]
- pub lines: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct LogErrorMsg {
- #[prost(string, repeated, tag="1")]
- pub lines: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct SwitchSessionMsg {
- #[prost(message, optional, tag="1")]
- pub connect_to_session: ::core::option::Option<ConnectToSession>,
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct UnblockCliPipeInputMsg {
- #[prost(string, tag="1")]
- pub pipe_name: ::prost::alloc::string::String,
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct CliPipeOutputMsg {
- #[prost(string, tag="1")]
- pub pipe_name: ::prost::alloc::string::String,
- #[prost(string, tag="2")]
- pub output: ::prost::alloc::string::String,
-}
-/// Empty message
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct QueryTerminalSizeMsg {
-}
-/// Empty message
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct StartWebServerMsg {
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct RenamedSessionMsg {
- #[prost(string, tag="1")]
- pub name: ::prost::alloc::string::String,
-}
-/// Empty message
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct ConfigFileUpdatedMsg {
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ClientToServerMsg {
#[prost(oneof="client_to_server_msg::Message", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16")]
pub message: ::core::option::Option<client_to_server_msg::Message>,
@@ -2834,3 +2738,119 @@ pub struct FailedToStartWebServerMsg {
#[prost(string, tag="1")]
pub error: ::prost::alloc::string::String,
}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ServerToClientMsg {
+ #[prost(oneof="server_to_client_msg::Message", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13")]
+ pub message: ::core::option::Option<server_to_client_msg::Message>,
+}
+/// Nested message and enum types in `ServerToClientMsg`.
+pub mod server_to_client_msg {
+ #[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Oneof)]
+ pub enum Message {
+ #[prost(message, tag="1")]
+ Render(super::RenderMsg),
+ #[prost(message, tag="2")]
+ UnblockInputThread(super::UnblockInputThreadMsg),
+ #[prost(message, tag="3")]
+ Exit(super::ExitMsg),
+ #[prost(message, tag="4")]
+ Connected(super::ConnectedMsg),
+ #[prost(message, tag="5")]
+ Log(super::LogMsg),
+ #[prost(message, tag="6")]
+ LogError(super::LogErrorMsg),
+ #[prost(message, tag="7")]
+ SwitchSession(super::SwitchSessionMsg),
+ #[prost(message, tag="8")]
+ UnblockCliPipeInput(super::UnblockCliPipeInputMsg),
+ #[prost(message, tag="9")]
+ CliPipeOutput(super::CliPipeOutputMsg),
+ #[prost(message, tag="10")]
+ QueryTerminalSize(super::QueryTerminalSizeMsg),
+ #[prost(message, tag="11")]
+ StartWebServer(super::StartWebServerMsg),
+ #[prost(message, tag="12")]
+ RenamedSession(super::RenamedSessionMsg),
+ #[prost(message, tag="13")]
+ ConfigFileUpdated(super::ConfigFileUpdatedMsg),
+ }
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct RenderMsg {
+ #[prost(string, tag="1")]
+ pub content: ::prost::alloc::string::String,
+}
+/// Empty message
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct UnblockInputThreadMsg {
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ExitMsg {
+ #[prost(enumeration="ExitReason", tag="1")]
+ pub exit_reason: i32,
+ #[prost(string, optional, tag="2")]
+ pub payload: ::core::option::Option<::prost::alloc::string::String>,
+}
+/// Empty message
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ConnectedMsg {
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct LogMsg {
+ #[prost(string, repeated, tag="1")]
+ pub lines: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct LogErrorMsg {
+ #[prost(string, repeated, tag="1")]
+ pub lines: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct SwitchSessionMsg {
+ #[prost(message, optional, tag="1")]
+ pub connect_to_session: ::core::option::Option<ConnectToSession>,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct UnblockCliPipeInputMsg {
+ #[prost(string, tag="1")]
+ pub pipe_name: ::prost::alloc::string::String,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct CliPipeOutputMsg {
+ #[prost(string, tag="1")]
+ pub pipe_name: ::prost::alloc::string::String,
+ #[prost(string, tag="2")]
+ pub output: ::prost::alloc::string::String,
+}
+/// Empty message
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct QueryTerminalSizeMsg {
+}
+/// Empty message
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct StartWebServerMsg {
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct RenamedSessionMsg {
+ #[prost(string, tag="1")]
+ pub name: ::prost::alloc::string::String,
+}
+/// Empty message
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ConfigFileUpdatedMsg {
+}
diff --git a/zellij-utils/src/cli.rs b/zellij-utils/src/cli.rs
index 7b984fd1..8ebbeca7 100644
--- a/zellij-utils/src/cli.rs
+++ b/zellij-utils/src/cli.rs
@@ -111,6 +111,11 @@ pub enum Command {
#[clap(name = "web", value_parser)]
Web(WebCli),
+ /// Send actions to a specific session
+ #[clap(visible_alias = "ac")]
+ #[clap(subcommand)]
+ Action(Box<CliAction>),
+
/// Explore existing zellij sessions
#[clap(flatten)]
Sessions(Sessions),
@@ -333,10 +338,6 @@ pub enum Sessions {
force: bool,
},
- /// Send actions to a specific session
- #[clap(visible_alias = "ac")]
- #[clap(subcommand)]
- Action(CliAction),
/// Run a command in a new pane
/// Returns: Created pane ID (format: terminal_<id>)
#[clap(visible_alias = "r")]
@@ -1355,4 +1356,20 @@ tail -f /tmp/my-live-logfile | zellij action pipe --name logs --plugin https://e
#[clap(short, long, value_parser)]
cwd: Option<PathBuf>,
},
+ /// Set the default foreground/background color of a pane
+ SetPaneColor {
+ /// The pane_id of the pane, eg. terminal_1, plugin_2 or 3 (equivalent to terminal_3).
+ /// Defaults to $ZELLIJ_PANE_ID if not provided.
+ #[clap(short, long, value_parser)]
+ pane_id: Option<String>,
+ /// Foreground color (e.g. "#00e000", "rgb:00/e0/00")
+ #[clap(long, value_parser)]
+ fg: Option<String>,
+ /// Background color (e.g. "#001a3a", "rgb:00/1a/3a")
+ #[clap(long, value_parser)]
+ bg: Option<String>,
+ /// Reset pane colors to terminal defaults
+ #[clap(long, value_parser, conflicts_with_all(&["fg", "bg"]))]
+ reset: bool,
+ },
}
diff --git a/zellij-utils/src/client_server_contract/common_types.proto b/zellij-utils/src/client_server_contract/common_types.proto
index 03602019..e5e661a9 100644
--- a/zellij-utils/src/client_server_contract/common_types.proto
+++ b/zellij-utils/src/client_server_contract/common_types.proto
@@ -243,6 +243,7 @@ message Action {
CurrentTabInfoAction current_tab_info = 105;
ShowFloatingPanesAction show_floating_panes = 106;
HideFloatingPanesAction hide_floating_panes = 107;
+ SetPaneColorAction set_pane_color = 108;
}
}
@@ -651,6 +652,12 @@ message SetPaneBorderlessAction {
bool borderless = 2;
}
+message SetPaneColorAction {
+ PaneId pane_id = 1;
+ optional string fg = 2;
+ optional string bg = 3;
+}
+
// Supporting enums and messages
enum InputMode {
INPUT_MODE_UNSPECIFIED = 0;
@@ -856,6 +863,8 @@ message TiledPaneLayout {
bool is_expanded_in_stack = 11;
bool hide_floating_panes = 12;
optional string pane_initial_contents = 13;
+ optional string default_fg = 14;
+ optional string default_bg = 15;
// NOTE: run_instructions_to_ignore is not represented here because it's a field used only inside the server itself and not part of the server/client contract
}
@@ -872,6 +881,8 @@ message FloatingPaneLayout {
optional string pane_initial_contents = 10;
optional uint32 logical_position = 11;
optional bool borderless = 12;
+ optional string default_fg = 13;
+ optional string default_bg = 14;
}
message SwapTiledLayout {
diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs
index 66cf0815..4a7088c0 100644
--- a/zellij-utils/src/data.rs
+++ b/zellij-utils/src/data.rs
@@ -2264,6 +2264,10 @@ pub struct PaneInfo {
/// Grouped panes (usually through an explicit user action) that are staged for a bulk action
/// the index is kept track of in order to preserve the pane group order
pub index_in_pane_group: BTreeMap<ClientId, usize>,
+ /// The default foreground color of this pane, if set (e.g. "#00e000")
+ pub default_fg: Option<String>,
+ /// The default background color of this pane, if set (e.g. "#001a3a")
+ pub default_bg: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
@@ -3471,6 +3475,7 @@ pub enum PluginCommand {
ShowFloatingPanes {
tab_id: Option<usize>,
},
+ SetPaneColor(PaneId, Option<String>, Option<String>), // (pane_id, fg, bg)
}
// Response type for plugin API methods that open a pane in a new tab
diff --git a/zellij-utils/src/errors.rs b/zellij-utils/src/errors.rs
index 2085e913..928c8901 100644
--- a/zellij-utils/src/errors.rs
+++ b/zellij-utils/src/errors.rs
@@ -372,6 +372,7 @@ pub enum ScreenContext {
ResizePaneWithId,
EditScrollbackForPaneWithId,
WriteToPaneId,
+ SetPaneColor,
WriteKeyToPaneId,
CopyTextToClipboard,
MovePaneWithPaneId,
diff --git a/zellij-utils/src/input/actions.rs b/zellij-utils/src/input/actions.rs
index 2841ea53..5ed8504e 100644
--- a/zellij-utils/src/input/actions.rs
+++ b/zellij-utils/src/input/actions.rs
@@ -327,6 +327,12 @@ pub enum Action {
command: RunCommandAction,
near_current_pane: bool,
},
+ /// Set pane default foreground/background color
+ SetPaneColor {
+ pane_id: PaneId,
+ fg: Option<String>,
+ bg: Option<String>,
+ },
/// Detach session and exit
Detach,
/// Switch to a different session
@@ -1492,6 +1498,38 @@ impl Action {
}
}
},
+ CliAction::SetPaneColor {
+ pane_id,
+ fg,
+ bg,
+ reset,
+ } => {
+ let pane_id_str = match pane_id {
+ Some(id) => id,
+ None => std::env::var("ZELLIJ_PANE_ID").map_err(|_| {
+ "No --pane-id provided and ZELLIJ_PANE_ID is not set".to_string()
+ })?,
+ };
+ let parsed_pane_id = PaneId::from_str(&pane_id_str);
+ match parsed_pane_id {
+ Ok(parsed_pane_id) => {
+ let (fg, bg) = if reset {
+ (None, None)
+ } else {
+ (fg, bg)
+ };
+ Ok(vec![Action::SetPaneColor {
+ pane_id: parsed_pane_id,
+ fg,
+ bg,
+ }])
+ },
+ Err(_e) => Err(format!(
+ "Malformed pane id: {}, expecting either a bare integer (eg. 1), a terminal pane id (eg. terminal_1) or a plugin pane id (eg. plugin_1)",
+ pane_id_str
+ )),
+ }
+ },
CliAction::Detach => Ok(vec![Action::Detach]),
CliAction::SwitchSession {
name,
diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs
index 87a058c5..3f1f72f1 100644
--- a/zellij-utils/src/input/layout.rs
+++ b/zellij-utils/src/input/layout.rs
@@ -794,6 +794,8 @@ pub struct FloatingPaneLayout {
pub already_running: bool,
pub pane_initial_contents: Option<String>,
pub logical_position: Option<usize>,
+ pub default_fg: Option<String>,
+ pub default_bg: Option<String>,
}
impl FloatingPaneLayout {
@@ -811,6 +813,8 @@ impl FloatingPaneLayout {
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
}
}
pub fn add_cwd_to_layout(&mut self, cwd: &PathBuf) {
@@ -855,6 +859,8 @@ pub struct TiledPaneLayout {
pub run_instructions_to_ignore: Vec<Option<Run>>,
pub hide_floating_panes: bool, // only relevant if this is the base layout
pub pane_initial_contents: Option<String>,
+ pub default_fg: Option<String>,
+ pub default_bg: Option<String>,
}
impl TiledPaneLayout {
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap
index 92117f30..bb4010cb 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1410
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -69,6 +72,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -82,6 +87,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap
index 50cb55ff..9830de48 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1375
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -41,6 +42,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -72,6 +75,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -85,6 +90,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap
index b9c0bbf2..688f2b80 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1984
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -46,6 +49,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -62,6 +67,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -75,6 +82,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -88,6 +97,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap
index 1bc75b25..debfb03f 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1952
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -46,6 +49,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -59,6 +64,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -72,6 +79,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap
index 3de11489..35c767a6 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1969
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -34,6 +35,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -50,6 +53,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -63,6 +68,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +83,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -89,6 +98,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap
index 164ddb71..a1fcdacc 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1938
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -26,6 +27,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -39,6 +42,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -91,6 +96,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -115,6 +122,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -133,6 +142,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -146,6 +157,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -159,6 +172,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -198,6 +213,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -211,6 +228,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
8,
@@ -256,6 +275,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -282,6 +303,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -302,6 +325,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -318,6 +343,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -334,6 +361,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -350,6 +379,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -363,6 +394,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -376,6 +409,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -389,6 +424,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -428,6 +465,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -441,6 +480,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
MaxPanes(
12,
@@ -486,6 +527,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -512,6 +555,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -532,6 +577,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -548,6 +595,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -564,6 +613,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -580,6 +631,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -593,6 +646,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -613,6 +668,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -629,6 +686,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -645,6 +704,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -661,6 +722,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -674,6 +737,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -687,6 +752,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -700,6 +767,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -739,6 +808,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -752,6 +823,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
},
Some(
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap
index d8debed4..56ba1f22 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1033
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -36,6 +37,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -72,6 +77,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -85,6 +92,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -98,6 +107,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -114,6 +125,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -127,6 +140,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -151,6 +166,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -166,6 +183,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -182,6 +201,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -195,6 +216,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -208,6 +231,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap
index 668489c1..3ae6e4a9 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 985
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -31,6 +32,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -51,6 +54,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -67,6 +72,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -80,6 +87,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -93,6 +102,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -109,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -122,6 +135,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -150,6 +165,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -165,6 +182,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -181,6 +200,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -194,6 +215,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -216,6 +239,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap
index afde0f8f..8ba07ad3 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1427
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -66,6 +69,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -79,6 +84,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap
index afde0f8f..032bd843 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1393
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -66,6 +69,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -79,6 +84,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap
index d1eba165..6e99b11c 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1085
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -31,6 +32,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -53,6 +56,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -66,6 +71,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -82,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -95,6 +104,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -115,6 +126,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -131,6 +144,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -144,6 +159,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -157,6 +174,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -185,6 +204,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -207,6 +228,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -220,6 +243,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -236,6 +261,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -249,6 +276,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -265,6 +294,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -278,6 +309,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -300,6 +333,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap
index f506e101..c2b277c1 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1462
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -68,6 +71,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -81,6 +86,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap
index 62a41cf5..30376415 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1445
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -40,6 +41,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -70,6 +73,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -83,6 +88,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap
index 926c98b9..30b301da 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 2230
expression: "format!(\"{layout:#?}\")"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -49,6 +52,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -69,6 +74,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -89,6 +96,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -119,6 +128,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -143,6 +154,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -167,6 +180,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -197,6 +212,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -221,6 +238,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -238,6 +257,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -268,6 +289,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -288,6 +311,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -308,6 +333,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -328,6 +355,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -358,6 +387,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -382,6 +413,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -406,6 +439,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -436,6 +471,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -460,6 +497,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -477,6 +516,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap
index 100723b0..4fa28d02 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1847
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -98,6 +105,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap
index a904f8b8..36b254da 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1868
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -33,6 +34,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -63,6 +66,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -87,6 +92,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -104,6 +111,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -121,6 +130,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -138,6 +149,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -160,6 +173,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap
index c295617a..248d4682 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1887
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -83,6 +88,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -100,6 +107,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -117,6 +126,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -139,6 +150,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap
index dd93444f..b6171a49 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1732
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -106,6 +113,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -136,6 +145,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -153,6 +164,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap
index be32b092..aaca18c6 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1765
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -60,6 +63,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -77,6 +82,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap
index 8f71561f..d5067f75 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1786
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -106,6 +113,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -136,6 +145,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -153,6 +164,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap
index 5561302c..1666c83b 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1745
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -106,6 +113,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -136,6 +145,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -153,6 +164,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap
index ea72b0f3..e745a99b 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1802
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -98,6 +105,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap
index 54bf2a0c..baf0eca4 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 511
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -51,6 +54,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap
index fb72c8d7..481a74d8 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 524
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -38,6 +39,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -51,6 +54,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap
index 5534df4c..abddb5c9 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 819
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -27,6 +28,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -47,6 +50,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -63,6 +68,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +83,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -92,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -105,6 +116,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -131,6 +144,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -151,6 +166,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -167,6 +184,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -180,6 +199,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -196,6 +217,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -209,6 +232,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -233,6 +258,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -249,6 +276,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -265,6 +294,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -278,6 +309,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -304,6 +337,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -320,6 +355,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -336,6 +373,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -349,6 +388,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap
index d840f90c..3d267afa 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 939
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -46,6 +49,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -66,6 +71,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -82,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -95,6 +104,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -115,6 +126,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -131,6 +144,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -147,6 +162,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -160,6 +177,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -173,6 +192,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -186,6 +207,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap
index bf4f7934..6f24f2ee 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 913
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -46,6 +49,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -66,6 +71,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -82,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -95,6 +104,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -111,6 +122,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -124,6 +137,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -137,6 +152,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap
index 1b32a429..3eb32a53 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 844
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -27,6 +28,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -43,6 +46,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +61,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -82,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -98,6 +107,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -111,6 +122,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -131,6 +144,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -161,6 +176,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -177,6 +194,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -190,6 +209,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -203,6 +224,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap
index 81d7fd34..a14262ee 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1096
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -28,6 +29,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -41,6 +44,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap
index 4cd8c5f6..43965e11 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 871
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -30,6 +31,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -50,6 +53,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -63,6 +68,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -79,6 +86,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -92,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -112,6 +123,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -132,6 +145,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -148,6 +163,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -161,6 +178,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -177,6 +196,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -190,6 +211,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -210,6 +233,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -230,6 +255,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -246,6 +273,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -259,6 +288,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -275,6 +306,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -288,6 +321,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Vertical,
@@ -308,6 +343,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -324,6 +361,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -340,6 +379,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -353,6 +394,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -366,6 +409,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap
index c5d1e092..edc76b2e 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 892
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -61,6 +64,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -74,6 +79,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -90,6 +97,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -103,6 +112,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -116,6 +127,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -138,6 +151,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap
index 87d7ec68..9e7bf8af 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 305
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -25,6 +26,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -38,6 +41,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[
FloatingPaneLayout {
@@ -53,6 +58,8 @@ Layout {
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
),
@@ -77,6 +84,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -90,6 +99,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[
FloatingPaneLayout {
@@ -105,6 +116,8 @@ Layout {
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: None,
@@ -119,6 +132,8 @@ Layout {
already_running: false,
pane_initial_contents: None,
logical_position: None,
+ default_fg: None,
+ default_bg: None,
},
],
),
@@ -141,6 +156,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap
index 4813f482..f6ffefa0 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1616
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap
index eee14300..7e3cb306 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1562
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap
index 68cc0653..91e2f358 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1579
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap
index 68cc0653..2d0ca360 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1597
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap
index 4813f482..fdbf56a3 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1634
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap
index 3663a4de..5bb6ccec 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1652
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -46,6 +49,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -93,6 +100,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap
index 4813f482..4e8812fa 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1686
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap
index b6e8054b..5ea6f110 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1668
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -39,6 +40,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -56,6 +59,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -96,6 +101,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -113,6 +120,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap
index dedbca10..1913b50f 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1702
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -33,6 +34,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -50,6 +53,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -84,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -101,6 +108,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap
index 407aa8df..f6bbaeed 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1718
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -33,6 +34,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -50,6 +53,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -84,6 +89,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -101,6 +108,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap
index e281ddf0..8a8e5420 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1817
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -98,6 +105,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap
index babaab58..1b37491e 100644
--- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap
+++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap
@@ -1,5 +1,6 @@
---
source: zellij-utils/src/input/./unit/layout_test.rs
+assertion_line: 1832
expression: "format!(\"{:#?}\", layout)"
---
Layout {
@@ -29,6 +30,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
TiledPaneLayout {
children_split_direction: Horizontal,
@@ -59,6 +62,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
],
split_size: None,
@@ -76,6 +81,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
@@ -98,6 +105,8 @@ Layout {
run_instructions_to_ignore: [],
hide_floating_panes: false,
pane_initial_contents: None,
+ default_fg: None,
+ default_bg: None,
},
[],
),
diff --git a/zellij-utils/src/ipc/protobuf_conversion.rs b/zellij-utils/src/ipc/protobuf_conversion.rs
index 91f64070..1d228340 100644
--- a/zellij-utils/src/ipc/protobuf_conversion.rs
+++ b/zellij-utils/src/ipc/protobuf_conversion.rs
@@ -740,7 +740,7 @@ impl From<crate::input::actions::Action>
ResizeAction, RunAction, SaveSessionAction, ScrollDownAction, ScrollDownAtAction,
ScrollToBottomAction, ScrollToTopAction, ScrollUpAction, ScrollUpAtAction,
SearchAction, SearchInputAction, SearchToggleOptionAction, SetPaneBorderlessAction,
- ShowFloatingPanesAction, SkipConfirmAction, StackPanesAction,
+ SetPaneColorAction, ShowFloatingPanesAction, SkipConfirmAction, StackPanesAction,
StartOrReloadPluginAction, SwitchFocusAction, SwitchModeForAllClientsAction,
SwitchSessionAction, SwitchToModeAction, TabNameInputAction, ToggleActiveSyncTabAction,
ToggleFloatingPanesAction, ToggleFocusFullscreenAction, ToggleGroupMarkingAction,
@@ -1391,6 +1391,13 @@ impl From<crate::input::actions::Action>
crate::input::actions::Action::CurrentTabInfo { output_json } => {
ActionType::CurrentTabInfo(CurrentTabInfoAction { output_json })
},
+ crate::input::actions::Action::SetPaneColor { pane_id, fg, bg } => {
+ ActionType::SetPaneColor(SetPaneColorAction {
+ pane_id: Some(pane_id.into()),
+ fg,
+ bg,
+ })
+ },
};
Self {
@@ -2079,6 +2086,16 @@ impl TryFrom<crate::client_server_contract::client_server_contract::Action>
ActionType::ToggleGroupMarking(_) => {
Ok(crate::input::actions::Action::ToggleGroupMarking)
},
+ ActionType::SetPaneColor(set_pane_color_action) => {
+ Ok(crate::input::actions::Action::SetPaneColor {
+ pane_id: set_pane_color_action
+ .pane_id
+ .ok_or_else(|| anyhow!("SetPaneColor missing pane_id"))?
+ .try_into()?,
+ fg: set_pane_color_action.fg,
+ bg: set_pane_color_action.bg,
+ })
+ },
}
}
}
@@ -3129,6 +3146,8 @@ impl From<crate::input::layout::TiledPaneLayout>
is_expanded_in_stack: layout.is_expanded_in_stack,
hide_floating_panes: layout.hide_floating_panes,
pane_initial_contents: layout.pane_initial_contents,
+ default_fg: layout.default_fg,
+ default_bg: layout.default_bg,
}
}
}
@@ -3150,6 +3169,8 @@ impl From<crate::input::layout::FloatingPaneLayout>
pane_initial_contents: layout.pane_initial_contents,
logical_position: layout.logical_position.map(|l| l as u32),
borderless: layout.borderless,
+ default_fg: layout.default_fg,
+ default_bg: layout.default_bg,
}
}
}
@@ -3558,6 +3579,8 @@ impl TryFrom<crate::client_server_contract::client_server_contract::TiledPaneLay
run_instructions_to_ignore: vec![], // not represented in protobuf
hide_floating_panes: layout.hide_floating_panes,
pane_initial_contents: layout.pane_initial_contents,
+ default_fg: layout.default_fg,
+ default_bg: layout.default_bg,
})
}
}
@@ -3590,6 +3613,8 @@ impl TryFrom<crate::client_server_contract::client_server_contract::FloatingPane
pane_initial_contents: layout.pane_initial_contents,
logical_position: layout.logical_position.map(|p| p as usize),
borderless: layout.borderless,
+ default_fg: layout.default_fg,
+ default_bg: layout.default_bg,
})
}
}
diff --git a/zellij-utils/src/ipc/tests/roundtrip_tests.rs b/zellij-utils/src/ipc/tests/roundtrip_tests.rs
index 233a0e5d..fb8e28f8 100644
--- a/zellij-utils/src/ipc/tests/roundtrip_tests.rs
+++ b/zellij-utils/src/ipc/tests/roundtrip_tests.rs
@@ -1976,6 +1976,8 @@ fn test_client_messages() {
already_running: true,
pane_initial_contents: Some("pane_initial_contents".to_owned()),
logical_position: Some(15),
+ default_fg: None,
+ default_bg: None,
},
FloatingPaneLayout {
name: Some("third floating layout".to_owned()),
@@ -2721,6 +2723,26 @@ fn test_client_messages() {
client_id: Some(100),
is_cli_client: true,
});
+ test_client_roundtrip!(ClientToServerMsg::Action {
+ action: Action::SetPaneColor {
+ pane_id: PaneId::Terminal(0),
+ fg: Some("#00e000".to_owned()),
+ bg: Some("#001a3a".to_owned()),
+ },
+ terminal_id: Some(1),
+ client_id: Some(100),
+ is_cli_client: true,
+ });
+ test_client_roundtrip!(ClientToServerMsg::Action {
+ action: Action::SetPaneColor {
+ pane_id: PaneId::Plugin(2),
+ fg: None,
+ bg: None,
+ },
+ terminal_id: Some(1),
+ client_id: Some(100),
+ is_cli_client: true,
+ });
test_client_roundtrip!(ClientToServerMsg::Key {
key: KeyWithModifier {
bare_key: BareKey::PageDown,
@@ -3130,3 +3152,41 @@ fn test_server_messages() {
}
});
}
+
+#[test]
+fn set_pane_color_wire_roundtrip() {
+ // Test actual byte-level encode/decode, not just struct conversion
+ use prost::Message;
+
+ let original = ClientToServerMsg::Action {
+ action: Action::SetPaneColor {
+ pane_id: PaneId::Terminal(0),
+ fg: Some("#00e000".to_owned()),
+ bg: Some("#001a3a".to_owned()),
+ },
+ terminal_id: Some(1),
+ client_id: Some(100),
+ is_cli_client: true,
+ };
+
+ // Rust -> proto struct
+ let proto: crate::client_server_contract::client_server_contract::ClientToServerMsg =
+ original.clone().into();
+
+ // proto struct -> bytes (what goes over the wire)
+ let bytes = proto.encode_to_vec();
+
+ // bytes -> proto struct (what the server does)
+ let decoded_proto =
+ crate::client_server_contract::client_server_contract::ClientToServerMsg::decode(
+ &bytes[..],
+ )
+ .expect("Failed to decode protobuf bytes");
+
+ // proto struct -> Rust
+ let roundtrip: ClientToServerMsg = decoded_proto
+ .try_into()
+ .expect("Failed to convert decoded protobuf back to Rust");
+
+ assert_eq!(original, roundtrip);
+}
diff --git a/zellij-utils/src/kdl/kdl_layout_parser.rs b/zellij-utils/src/kdl/kdl_layout_parser.rs
index 6e1e2c76..ff7fcfe3 100644
--- a/zellij-utils/src/kdl/kdl_layout_parser.rs
+++ b/zellij-utils/src/kdl/kdl_layout_parser.rs
@@ -106,6 +106,8 @@ impl<'a> KdlLayoutParser<'a> {
|| property_name == "expanded"
|| property_name == "exclude_from_sync"
|| property_name == "contents_file"
+ || property_name == "default_fg"
+ || property_name == "default_bg"
}
fn is_a_valid_floating_pane_property(&self, property_name: &str) -> bool {
property_name == "borderless"
@@ -124,6 +126,8 @@ impl<'a> KdlLayoutParser<'a> {
|| property_name == "height"
|| property_name == "pinned"
|| property_name == "contents_file"
+ || property_name == "default_fg"
+ || property_name == "default_bg"
}
fn is_a_valid_tab_property(&self, property_name: &str) -> bool {
property_name == "focus"
@@ -563,6 +567,10 @@ impl<'a> KdlLayoutParser<'a> {
kdl_node.span().len(),
));
}
+ let default_fg = kdl_get_string_property_or_child_value_with_error!(kdl_node, "default_fg")
+ .map(|s| s.to_string());
+ let default_bg = kdl_get_string_property_or_child_value_with_error!(kdl_node, "default_bg")
+ .map(|s| s.to_string());
self.assert_no_mixed_children_and_properties(kdl_node)?;
let pane_initial_contents = contents_file.and_then(|contents_file| {
self.file_name
@@ -585,6 +593,8 @@ impl<'a> KdlLayoutParser<'a> {
children_are_stacked,
is_expanded_in_stack,
pane_initial_contents,
+ default_fg,
+ default_bg,
..Default::default()
})
}
@@ -605,6 +615,10 @@ impl<'a> KdlLayoutParser<'a> {
.map(|name| name.to_string());
let contents_file =
kdl_get_string_property_or_child_value_with_error!(kdl_node, "contents_file");
+ let default_fg = kdl_get_string_property_or_child_value_with_error!(kdl_node, "default_fg")
+ .map(|s| s.to_string());
+ let default_bg = kdl_get_string_property_or_child_value_with_error!(kdl_node, "default_bg")
+ .map(|s| s.to_string());
self.assert_no_mixed_children_and_properties(kdl_node)?;
let pane_initial_contents = contents_file.and_then(|contents_file| {
self.file_name
@@ -625,6 +639,8 @@ impl<'a> KdlLayoutParser<'a> {
pinned,
borderless,
pane_initial_contents,
+ default_fg,
+ default_bg,
..Default::default()
})
}
diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs
index 12eadff6..9fcb3113 100644
--- a/zellij-utils/src/kdl/mod.rs
+++ b/zellij-utils/src/kdl/mod.rs
@@ -5927,6 +5927,8 @@ impl PaneInfo {
plugin_url,
is_selectable,
index_in_pane_group: Default::default(), // we don't serialize this
+ default_fg: None,
+ default_bg: None,
};
Ok((tab_position, pane_info))
}
@@ -6075,6 +6077,8 @@ fn serialize_and_deserialize_session_info_with_data() {
plugin_url: None,
is_selectable: true,
index_in_pane_group: Default::default(), // we don't serialize this
+ default_fg: None,
+ default_bg: None,
},
PaneInfo {
id: 1,
@@ -6100,6 +6104,8 @@ fn serialize_and_deserialize_session_info_with_data() {
plugin_url: Some("i_am_a_fake_plugin".to_owned()),
is_selectable: true,
index_in_pane_group: Default::default(), // we don't serialize this
+ default_fg: None,
+ default_bg: None,
},
];
let mut panes = HashMap::new();
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index 5bb58db3..81db2c67 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -1836,7 +1836,8 @@ impl TryFrom<Action> for ProtobufAction {
| Action::SwitchSession { .. }
| Action::SaveSession
| Action::ListTabs { .. }
- | Action::CurrentTabInfo { .. } => Err("Unsupported action"),
+ | Action::CurrentTabInfo { .. }
+ | Action::SetPaneColor { .. } => Err("Unsupported action"),
}
}
}
@@ -2916,6 +2917,8 @@ impl TryFrom<ProtobufTiledPaneLayout> for TiledPaneLayout {
run_instructions_to_ignore,
hide_floating_panes: protobuf.hide_floating_panes,
pane_initial_contents: protobuf.pane_initial_contents,
+ default_fg: None,
+ default_bg: None,
})
}
}
@@ -2972,6 +2975,8 @@ impl TryFrom<ProtobufFloatingPaneLayout> for FloatingPaneLayout {
pane_initial_contents: protobuf.pane_initial_contents,
logical_position: protobuf.logical_position.map(|p| p as usize),
borderless: protobuf.borderless,
+ default_fg: None,
+ default_bg: None,
})
}
}
diff --git a/zellij-utils/src/plugin_api/event.proto b/zellij-utils/src/plugin_api/event.proto
index 5aa119a9..bbee50a3 100644
--- a/zellij-utils/src/plugin_api/event.proto
+++ b/zellij-utils/src/plugin_api/event.proto
@@ -406,6 +406,8 @@ message PaneInfo {
optional string plugin_url = 21;
bool is_selectable = 22;
repeated IndexInPaneGroup index_in_pane_group = 23;
+ optional string default_fg = 24;
+ optional string default_bg = 25;
}
message IndexInPaneGroup {
diff --git a/zellij-utils/src/plugin_api/event.rs b/zellij-utils/src/plugin_api/event.rs
index 3b135b6d..631d5069 100644
--- a/zellij-utils/src/plugin_api/event.rs
+++ b/zellij-utils/src/plugin_api/event.rs
@@ -1560,6 +1560,8 @@ impl TryFrom<ProtobufPaneInfo> for PaneInfo {
)
})
.collect(),
+ default_fg: protobuf_pane_info.default_fg,
+ default_bg: protobuf_pane_info.default_bg,
})
}
}
@@ -1603,6 +1605,8 @@ impl TryFrom<PaneInfo> for ProtobufPaneInfo {
index: index as u32,
})
.collect(),
+ default_fg: pane_info.default_fg,
+ default_bg: pane_info.default_bg,
})
}
}
@@ -2511,6 +2515,8 @@ fn serialize_session_update_event_with_non_default_values() {
plugin_url: None,
is_selectable: true,
index_in_pane_group: index_in_pane_group_1,
+ default_fg: None,
+ default_bg: None,
},
PaneInfo {
id: 1,
@@ -2536,6 +2542,8 @@ fn serialize_session_update_event_with_non_default_values() {
plugin_url: Some("i_am_a_fake_plugin".to_owned()),
is_selectable: true,
index_in_pane_group: index_in_pane_group_2,
+ default_fg: None,
+ default_bg: None,
},
];
panes.insert(0, panes_list);
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index 7ba3aabe..53e9d729 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -198,6 +198,7 @@ enum CommandName {
OpenEditPaneInPlaceOfPaneId = 203;
HideFloatingPanes = 204;
ShowFloatingPanes = 205;
+ SetPaneColor = 206;
}
message PluginCommand {
@@ -345,6 +346,7 @@ message PluginCommand {
OpenEditPaneInPlaceOfPaneIdPayload open_edit_pane_in_place_of_pane_id_payload = 154;
HideFloatingPanesPayload hide_floating_panes_payload = 155;
ShowFloatingPanesPayload show_floating_panes_payload = 156;
+ SetPaneColorPayload set_pane_color_payload = 157;
}
}
@@ -1212,3 +1214,9 @@ message HideFloatingPanesResponse {
string error = 2;
}
}
+
+message SetPaneColorPayload {
+ PaneId pane_id = 1;
+ optional string fg = 2;
+ optional string bg = 3;
+}
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index c3741591..abd9a994 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -102,7 +102,7 @@ pub use super::generated_api::api::{
SaveLayoutPayload, SaveLayoutResponse as ProtobufSaveLayoutResponse, SaveSessionPayload,
SaveSessionResponse as ProtobufSaveSessionResponse, ScrollDownInPaneIdPayload,
ScrollToBottomInPaneIdPayload, ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload,
- SetFloatingPanePinnedPayload, SetPaneBorderlessPayload,
+ SetFloatingPanePinnedPayload, SetPaneBorderlessPayload, SetPaneColorPayload,
SetSelfMouseSelectionSupportPayload, SetTimeoutPayload, ShowCursorPayload,
ShowFloatingPanesPayload as ProtobufShowFloatingPanesPayload,
ShowFloatingPanesResponse as ProtobufShowFloatingPanesResponse, ShowPaneWithIdPayload,
@@ -2423,6 +2423,17 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
None => Ok(PluginCommand::ShowFloatingPanes { tab_id: None }),
_ => Err("Mismatched payload for ShowFloatingPanes"),
},
+ Some(CommandName::SetPaneColor) => match protobuf_plugin_command.payload {
+ Some(Payload::SetPaneColorPayload(payload)) => match payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::SetPaneColor(
+ pane_id.try_into()?,
+ payload.fg,
+ payload.bg,
+ )),
+ None => Err("Malformed SetPaneColor payload"),
+ },
+ _ => Err("Mismatched payload for SetPaneColor"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -3975,6 +3986,14 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
},
)),
}),
+ PluginCommand::SetPaneColor(pane_id, fg, bg) => Ok(ProtobufPluginCommand {
+ name: CommandName::SetPaneColor as i32,
+ payload: Some(Payload::SetPaneColorPayload(SetPaneColorPayload {
+ pane_id: Some(pane_id.try_into()?),
+ fg,
+ bg,
+ })),
+ }),
}
}
}
diff --git a/zellij-utils/src/session_serialization.rs b/zellij-utils/src/session_serialization.rs
index bb61b42f..bfad7da7 100644
--- a/zellij-utils/src/session_serialization.rs
+++ b/zellij-utils/src/session_serialization.rs
@@ -36,6 +36,8 @@ pub struct PaneLayoutManifest {
pub title: Option<String>,
pub is_focused: bool,
pub pane_contents: Option<String>,
+ pub default_fg: Option<String>,
+ pub default_bg: Option<String>,
}
pub fn serialize_session_layout(
@@ -182,6 +184,16 @@ fn serialize_tiled_pane(
);
serialize_tiled_layout_attributes(&layout, ignore_size, &mut tiled_pane_node);
+ if let Some(ref fg) = layout.default_fg {
+ tiled_pane_node
+ .entries_mut()
+ .push(KdlEntry::new_prop("default_fg", fg.to_owned()));
+ }
+ if let Some(ref bg) = layout.default_bg {
+ tiled_pane_node
+ .entries_mut()
+ .push(KdlEntry::new_prop("default_bg", bg.to_owned()));
+ }
let has_child_attributes = !layout.children.is_empty()
|| layout.external_children_index.is_some()
|| !args.is_empty()
@@ -659,6 +671,16 @@ fn serialize_floating_pane(
has_children,
&mut floating_pane_node,
);
+ if let Some(ref fg) = layout.default_fg {
+ floating_pane_node
+ .entries_mut()
+ .push(KdlEntry::new_prop("default_fg", fg.to_owned()));
+ }
+ if let Some(ref bg) = layout.default_bg {
+ floating_pane_node
+ .entries_mut()
+ .push(KdlEntry::new_prop("default_bg", bg.to_owned()));
+ }
serialize_start_suspended(&command, &mut floating_pane_node_children);
serialize_floating_layout_attributes(&layout, &mut floating_pane_node_children);
serialize_args(args, &mut floating_pane_node_children);
@@ -709,7 +731,16 @@ fn tiled_pane_layout_from_manifest(
manifest: Option<&PaneLayoutManifest>,
split_size: Option<SplitSize>,
) -> TiledPaneLayout {
- let (run, borderless, is_expanded_in_stack, name, focus, pane_initial_contents) = manifest
+ let (
+ run,
+ borderless,
+ is_expanded_in_stack,
+ name,
+ focus,
+ pane_initial_contents,
+ default_fg,
+ default_bg,
+ ) = manifest
.map(|g| {
let mut run = g.run.clone();
if let Some(cwd) = &g.cwd {
@@ -726,9 +757,11 @@ fn tiled_pane_layout_from_manifest(
g.title.clone(),
Some(g.is_focused),
g.pane_contents.clone(),
+ g.default_fg.clone(),
+ g.default_bg.clone(),
)
})
- .unwrap_or((None, None, false, None, None, None));
+ .unwrap_or((None, None, false, None, None, None, None, None));
TiledPaneLayout {
split_size,
run,
@@ -737,6 +770,8 @@ fn tiled_pane_layout_from_manifest(
name,
focus,
pane_initial_contents,
+ default_fg,
+ default_bg,
..Default::default()
}
}
@@ -845,6 +880,8 @@ fn get_floating_panes_layout_from_panegeoms(
pane_initial_contents: m.pane_contents.clone(),
logical_position: None,
borderless: Some(m.is_borderless),
+ default_fg: m.default_fg.clone(),
+ default_bg: m.default_bg.clone(),
}
})
.collect()