diff options
author | Mike Lloyd <49411532+mike-lloyd03@users.noreply.github.com> | 2023-11-08 02:35:26 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-08 11:35:26 +0100 |
commit | 3ebaba9e9ec9ab67c8a0661813303b82ff5bbc77 (patch) | |
tree | 34c40071d68c22ec11a98f2b67fb4abbbcb0a8a2 /zellij-server | |
parent | b20715b5aee29027adb2df467e347364ba621b76 (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.rs | 15 | ||||
-rw-r--r-- | zellij-server/src/panes/plugin_pane.rs | 4 | ||||
-rw-r--r-- | zellij-server/src/panes/terminal_character.rs | 28 | ||||
-rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 2 | ||||
-rw-r--r-- | zellij-server/src/panes/unit/grid_tests.rs | 220 | ||||
-rw-r--r-- | zellij-server/src/panes/unit/search_in_pane_tests.rs | 2 | ||||
-rw-r--r-- | zellij-server/src/panes/unit/terminal_pane_tests.rs | 24 | ||||
-rw-r--r-- | zellij-server/src/screen.rs | 1 | ||||
-rw-r--r-- | zellij-server/src/tab/layout_applier.rs | 7 | ||||
-rw-r--r-- | zellij-server/src/tab/mod.rs | 13 | ||||
-rw-r--r-- | zellij-server/src/tab/unit/tab_integration_tests.rs | 18 | ||||
-rw-r--r-- | zellij-server/src/tab/unit/tab_tests.rs | 6 | ||||
-rw-r--r-- | zellij-server/src/unit/screen_tests.rs | 2 |
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 |