summaryrefslogtreecommitdiffstats
path: root/zellij-server
diff options
context:
space:
mode:
authorMike Lloyd <49411532+mike-lloyd03@users.noreply.github.com>2023-11-08 02:35:26 -0800
committerGitHub <noreply@github.com>2023-11-08 11:35:26 +0100
commit3ebaba9e9ec9ab67c8a0661813303b82ff5bbc77 (patch)
tree34c40071d68c22ec11a98f2b67fb4abbbcb0a8a2 /zellij-server
parentb20715b5aee29027adb2df467e347364ba621b76 (diff)
fix: styled underlines in editors (#2918)
* Add styled_underlines param to TerminalPane * Add styled_underlines to Cursor::new * Remove styled_underlines from render_first_run_banner
Diffstat (limited to 'zellij-server')
-rw-r--r--zellij-server/src/panes/grid.rs15
-rw-r--r--zellij-server/src/panes/plugin_pane.rs4
-rw-r--r--zellij-server/src/panes/terminal_character.rs28
-rw-r--r--zellij-server/src/panes/terminal_pane.rs2
-rw-r--r--zellij-server/src/panes/unit/grid_tests.rs220
-rw-r--r--zellij-server/src/panes/unit/search_in_pane_tests.rs2
-rw-r--r--zellij-server/src/panes/unit/terminal_pane_tests.rs24
-rw-r--r--zellij-server/src/screen.rs1
-rw-r--r--zellij-server/src/tab/layout_applier.rs7
-rw-r--r--zellij-server/src/tab/mod.rs13
-rw-r--r--zellij-server/src/tab/unit/tab_integration_tests.rs18
-rw-r--r--zellij-server/src/tab/unit/tab_tests.rs6
-rw-r--r--zellij-server/src/unit/screen_tests.rs2
13 files changed, 332 insertions, 10 deletions
diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs
index 5ee8928d8..498f0d608 100644
--- a/zellij-server/src/panes/grid.rs
+++ b/zellij-server/src/panes/grid.rs
@@ -374,6 +374,7 @@ pub struct Grid {
style: Style,
debug: bool,
arrow_fonts: bool,
+ styled_underlines: bool,
}
#[derive(Clone, Debug)]
@@ -464,6 +465,7 @@ impl Grid {
style: Style, // TODO: consolidate this with terminal_emulator_colors
debug: bool,
arrow_fonts: bool,
+ styled_underlines: bool,
) -> Self {
let sixel_grid = SixelGrid::new(character_cell_size.clone(), sixel_image_store);
// make sure this is initialized as it is used internally
@@ -476,7 +478,7 @@ impl Grid {
viewport: vec![Row::new().canonical()],
lines_below: vec![],
horizontal_tabstops: create_horizontal_tabstops(columns),
- cursor: Cursor::new(0, 0),
+ cursor: Cursor::new(0, 0, styled_underlines),
cursor_is_hidden: false,
saved_cursor_position: None,
scroll_region: None,
@@ -517,6 +519,7 @@ impl Grid {
style,
debug,
arrow_fonts,
+ styled_underlines,
}
}
pub fn render_full_viewport(&mut self) {
@@ -1688,7 +1691,7 @@ impl Grid {
self.cursor_key_mode = false;
self.scroll_region = None;
self.clear_viewport_before_rendering = true;
- self.cursor = Cursor::new(0, 0);
+ self.cursor = Cursor::new(0, 0, self.styled_underlines);
self.saved_cursor_position = None;
self.active_charset = Default::default();
self.erasure_mode = false;
@@ -2132,7 +2135,7 @@ impl Grid {
self.lines_below.clear();
}
pub fn reset_cursor_position(&mut self) {
- self.cursor = Cursor::new(0, 0);
+ self.cursor = Cursor::new(0, 0, self.styled_underlines);
}
}
@@ -2614,8 +2617,10 @@ impl Perform for Grid {
std::mem::replace(&mut self.lines_above, VecDeque::new());
let current_viewport =
std::mem::replace(&mut self.viewport, vec![Row::new().canonical()]);
- let current_cursor =
- std::mem::replace(&mut self.cursor, Cursor::new(0, 0));
+ let current_cursor = std::mem::replace(
+ &mut self.cursor,
+ Cursor::new(0, 0, self.styled_underlines),
+ );
let sixel_image_store = self.sixel_grid.sixel_image_store.clone();
let alternate_sixelgrid = std::mem::replace(
&mut self.sixel_grid,
diff --git a/zellij-server/src/panes/plugin_pane.rs b/zellij-server/src/panes/plugin_pane.rs
index 5c4c4f081..0ddcd3a29 100644
--- a/zellij-server/src/panes/plugin_pane.rs
+++ b/zellij-server/src/panes/plugin_pane.rs
@@ -52,6 +52,7 @@ macro_rules! get_or_create_grid {
$self.style.clone(),
$self.debug,
$self.arrow_fonts,
+ $self.styled_underlines,
);
grid.hide_cursor();
grid
@@ -88,6 +89,7 @@ pub(crate) struct PluginPane {
requesting_permissions: Option<PluginPermission>,
debug: bool,
arrow_fonts: bool,
+ styled_underlines: bool,
}
impl PluginPane {
@@ -107,6 +109,7 @@ impl PluginPane {
invoked_with: Option<Run>,
debug: bool,
arrow_fonts: bool,
+ styled_underlines: bool,
) -> Self {
let loading_indication = LoadingIndication::new(title.clone()).with_colors(style.colors);
let initial_loading_message = loading_indication.to_string();
@@ -139,6 +142,7 @@ impl PluginPane {
requesting_permissions: None,
debug,
arrow_fonts,
+ styled_underlines,
};
for client_id in currently_connected_clients {
plugin.handle_plugin_bytes(client_id, initial_loading_message.as_bytes().to_vec());
diff --git a/zellij-server/src/panes/terminal_character.rs b/zellij-server/src/panes/terminal_character.rs
index 5dd6e2825..50f3ec8e8 100644
--- a/zellij-server/src/panes/terminal_character.rs
+++ b/zellij-server/src/panes/terminal_character.rs
@@ -129,7 +129,7 @@ impl NamedColor {
}
}
-#[derive(Clone, Copy, Debug, PartialEq, Default)]
+#[derive(Clone, Copy, Debug, Default)]
pub struct CharacterStyles {
pub foreground: Option<AnsiCode>,
pub background: Option<AnsiCode>,
@@ -147,6 +147,24 @@ pub struct CharacterStyles {
pub styled_underlines_enabled: bool,
}
+impl PartialEq for CharacterStyles {
+ fn eq(&self, other: &Self) -> bool {
+ self.foreground == other.foreground
+ && self.background == other.background
+ && self.underline_color == other.underline_color
+ && self.strike == other.strike
+ && self.hidden == other.hidden
+ && self.reverse == other.reverse
+ && self.slow_blink == other.slow_blink
+ && self.fast_blink == other.fast_blink
+ && self.underline == other.underline
+ && self.bold == other.bold
+ && self.dim == other.dim
+ && self.italic == other.italic
+ && self.link_anchor == other.link_anchor
+ }
+}
+
impl CharacterStyles {
pub fn new() -> Self {
Self::default()
@@ -232,8 +250,8 @@ impl CharacterStyles {
}
if *new_styles == RESET_STYLES {
- *self = RESET_STYLES;
- return Some(RESET_STYLES);
+ *self = RESET_STYLES.enable_styled_underlines(self.styled_underlines_enabled);
+ return Some(RESET_STYLES.enable_styled_underlines(self.styled_underlines_enabled));
}
// create diff from all changed styles
@@ -801,11 +819,11 @@ pub struct Cursor {
}
impl Cursor {
- pub fn new(x: usize, y: usize) -> Self {
+ pub fn new(x: usize, y: usize, styled_underlines: bool) -> Self {
Cursor {
x,
y,
- pending_styles: RESET_STYLES,
+ pending_styles: RESET_STYLES.enable_styled_underlines(styled_underlines),
charsets: Default::default(),
shape: CursorShape::Initial,
}
diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs
index 613a9619a..0299b6386 100644
--- a/zellij-server/src/panes/terminal_pane.rs
+++ b/zellij-server/src/panes/terminal_pane.rs
@@ -789,6 +789,7 @@ impl TerminalPane {
invoked_with: Option<Run>,
debug: bool,
arrow_fonts: bool,
+ styled_underlines: bool,
) -> TerminalPane {
let initial_pane_title =
initial_pane_title.unwrap_or_else(|| format!("Pane #{}", pane_index));
@@ -803,6 +804,7 @@ impl TerminalPane {
style.clone(),
debug,
arrow_fonts,
+ styled_underlines,
);
TerminalPane {
frame: HashMap::new(),
diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs
index 23181c5f0..781904c36 100644
--- a/zellij-server/src/panes/unit/grid_tests.rs
+++ b/zellij-server/src/panes/unit/grid_tests.rs
@@ -31,6 +31,7 @@ fn vttest1_0() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -42,6 +43,7 @@ fn vttest1_0() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-0";
let content = read_fixture(fixture_name);
@@ -58,6 +60,7 @@ fn vttest1_1() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -69,6 +72,7 @@ fn vttest1_1() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-1";
let content = read_fixture(fixture_name);
@@ -85,6 +89,7 @@ fn vttest1_2() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -96,6 +101,7 @@ fn vttest1_2() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-2";
let content = read_fixture(fixture_name);
@@ -112,6 +118,7 @@ fn vttest1_3() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -123,6 +130,7 @@ fn vttest1_3() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-3";
let content = read_fixture(fixture_name);
@@ -139,6 +147,7 @@ fn vttest1_4() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -150,6 +159,7 @@ fn vttest1_4() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-4";
let content = read_fixture(fixture_name);
@@ -166,6 +176,7 @@ fn vttest1_5() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -177,6 +188,7 @@ fn vttest1_5() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest1-5";
let content = read_fixture(fixture_name);
@@ -193,6 +205,7 @@ fn vttest2_0() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -204,6 +217,7 @@ fn vttest2_0() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-0";
let content = read_fixture(fixture_name);
@@ -220,6 +234,7 @@ fn vttest2_1() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -231,6 +246,7 @@ fn vttest2_1() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-1";
let content = read_fixture(fixture_name);
@@ -247,6 +263,7 @@ fn vttest2_2() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -258,6 +275,7 @@ fn vttest2_2() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-2";
let content = read_fixture(fixture_name);
@@ -274,6 +292,7 @@ fn vttest2_3() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -285,6 +304,7 @@ fn vttest2_3() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-3";
let content = read_fixture(fixture_name);
@@ -301,6 +321,7 @@ fn vttest2_4() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -312,6 +333,7 @@ fn vttest2_4() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-4";
let content = read_fixture(fixture_name);
@@ -328,6 +350,7 @@ fn vttest2_5() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -339,6 +362,7 @@ fn vttest2_5() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-5";
let content = read_fixture(fixture_name);
@@ -355,6 +379,7 @@ fn vttest2_6() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -366,6 +391,7 @@ fn vttest2_6() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-6";
let content = read_fixture(fixture_name);
@@ -382,6 +408,7 @@ fn vttest2_7() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -393,6 +420,7 @@ fn vttest2_7() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-7";
let content = read_fixture(fixture_name);
@@ -409,6 +437,7 @@ fn vttest2_8() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -420,6 +449,7 @@ fn vttest2_8() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-8";
let content = read_fixture(fixture_name);
@@ -436,6 +466,7 @@ fn vttest2_9() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -447,6 +478,7 @@ fn vttest2_9() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-9";
let content = read_fixture(fixture_name);
@@ -463,6 +495,7 @@ fn vttest2_10() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -474,6 +507,7 @@ fn vttest2_10() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-10";
let content = read_fixture(fixture_name);
@@ -490,6 +524,7 @@ fn vttest2_11() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -501,6 +536,7 @@ fn vttest2_11() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-11";
let content = read_fixture(fixture_name);
@@ -517,6 +553,7 @@ fn vttest2_12() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -528,6 +565,7 @@ fn vttest2_12() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-12";
let content = read_fixture(fixture_name);
@@ -544,6 +582,7 @@ fn vttest2_13() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -555,6 +594,7 @@ fn vttest2_13() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-13";
let content = read_fixture(fixture_name);
@@ -571,6 +611,7 @@ fn vttest2_14() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -582,6 +623,7 @@ fn vttest2_14() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest2-14";
let content = read_fixture(fixture_name);
@@ -598,6 +640,7 @@ fn vttest3_0() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
41,
110,
@@ -609,6 +652,7 @@ fn vttest3_0() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest3-0";
let content = read_fixture(fixture_name);
@@ -625,6 +669,7 @@ fn vttest8_0() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -636,6 +681,7 @@ fn vttest8_0() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-0";
let content = read_fixture(fixture_name);
@@ -652,6 +698,7 @@ fn vttest8_1() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -663,6 +710,7 @@ fn vttest8_1() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-1";
let content = read_fixture(fixture_name);
@@ -679,6 +727,7 @@ fn vttest8_2() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -690,6 +739,7 @@ fn vttest8_2() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-2";
let content = read_fixture(fixture_name);
@@ -706,6 +756,7 @@ fn vttest8_3() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -717,6 +768,7 @@ fn vttest8_3() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-3";
let content = read_fixture(fixture_name);
@@ -733,6 +785,7 @@ fn vttest8_4() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -744,6 +797,7 @@ fn vttest8_4() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-4";
let content = read_fixture(fixture_name);
@@ -760,6 +814,7 @@ fn vttest8_5() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -771,6 +826,7 @@ fn vttest8_5() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "vttest8-5";
let content = read_fixture(fixture_name);
@@ -787,6 +843,7 @@ fn csi_b() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -798,6 +855,7 @@ fn csi_b() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "csi-b";
let content = read_fixture(fixture_name);
@@ -814,6 +872,7 @@ fn csi_capital_i() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -825,6 +884,7 @@ fn csi_capital_i() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "csi-capital-i";
let content = read_fixture(fixture_name);
@@ -841,6 +901,7 @@ fn csi_capital_z() {
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let debug = false;
let arrow_fonts = true;
+ let styled_underlines = true;
let mut grid = Grid::new(
51,
97,
@@ -852,6 +913,7 @@ fn csi_capital_z() {
Style::default(),
debug,
arrow_fonts,
+ styled_underlines,
);
let fixture_name = "csi-capital-z";
let content = read_fixture(fixture_name);
@@ -868,6 +930,7 @@ fn terminal_reports() {
let te