diff options
author | Aram Drevekenin <aram@poor.dev> | 2022-04-28 17:26:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-28 17:26:44 +0200 |
commit | 0dc136ec5f99f01fc12eaed1e18060d16f62b560 (patch) | |
tree | 399c32e7829d02464c75bc5f535a6d668555e0e2 /zellij-server | |
parent | 188febfc0591e99d1577d3032076eac9ca9a7e33 (diff) |
fix(compatibility): respond to bg and fg color ansi queries (#1358)
* fix(compatibility): respond to background/foreground queries
* style(fmt): rustfmt
* style(clippy): make clippy happy
* style(fmt): rustfmt
* style(fmt): remove unused code
Diffstat (limited to 'zellij-server')
-rw-r--r-- | zellij-server/src/panes/grid.rs | 25 | ||||
-rw-r--r-- | zellij-server/src/panes/mod.rs | 2 | ||||
-rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 5 | ||||
-rw-r--r-- | zellij-server/src/panes/unit/grid_tests.rs | 184 | ||||
-rw-r--r-- | zellij-server/src/panes/unit/terminal_pane_tests.rs | 2 | ||||
-rw-r--r-- | zellij-server/src/route.rs | 20 | ||||
-rw-r--r-- | zellij-server/src/screen.rs | 37 | ||||
-rw-r--r-- | zellij-server/src/tab/mod.rs | 8 | ||||
-rw-r--r-- | zellij-server/src/tab/unit/tab_integration_tests.rs | 6 | ||||
-rw-r--r-- | zellij-server/src/tab/unit/tab_tests.rs | 4 |
10 files changed, 189 insertions, 104 deletions
diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs index 4a569bb19..f34ad1434 100644 --- a/zellij-server/src/panes/grid.rs +++ b/zellij-server/src/panes/grid.rs @@ -287,7 +287,7 @@ pub struct Grid { scroll_region: Option<(usize, usize)>, active_charset: CharsetIndex, preceding_char: Option<TerminalCharacter>, - colors: Palette, + terminal_emulator_colors: Rc<RefCell<Palette>>, output_buffer: OutputBuffer, title_stack: Vec<String>, character_cell_size: Rc<RefCell<Option<SizeInPixels>>>, @@ -328,7 +328,7 @@ impl Grid { pub fn new( rows: usize, columns: usize, - colors: Palette, + terminal_emulator_colors: Rc<RefCell<Palette>>, link_handler: Rc<RefCell<LinkHandler>>, character_cell_size: Rc<RefCell<Option<SizeInPixels>>>, ) -> Self { @@ -357,7 +357,7 @@ impl Grid { clear_viewport_before_rendering: false, active_charset: Default::default(), pending_messages_to_pty: vec![], - colors, + terminal_emulator_colors, output_buffer: Default::default(), selection: Default::default(), title_stack: vec![], @@ -1553,16 +1553,23 @@ impl Perform for Grid { self.link_handler.borrow_mut().dispatch_osc8(params); } - // Get/set Foreground, Background, Cursor colors. - b"10" | b"11" | b"12" => { + // Get/set Foreground (b"10") or background (b"11") colors + b"10" | b"11" => { if params.len() >= 2 { if let Some(mut dynamic_code) = parse_number(params[0]) { for param in ¶ms[1..] { // currently only getting the color sequence is supported, // setting still isn't if param == b"?" { - let color_response_message = match self.colors.bg { - PaletteColor::Rgb((r, g, b)) => { + let saved_terminal_color = if dynamic_code == 10 { + Some(self.terminal_emulator_colors.borrow().fg) + } else if dynamic_code == 11 { + Some(self.terminal_emulator_colors.borrow().bg) + } 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 @@ -1586,6 +1593,10 @@ impl Perform for Grid { } } + b"12" => { + // get/set cursor color currently unimplemented + } + // Set cursor style. b"50" => { if params.len() >= 2 diff --git a/zellij-server/src/panes/mod.rs b/zellij-server/src/panes/mod.rs index b9e7d8d09..c1fb31d1b 100644 --- a/zellij-server/src/panes/mod.rs +++ b/zellij-server/src/panes/mod.rs @@ -1,4 +1,4 @@ -mod alacritty_functions; +pub mod alacritty_functions; mod floating_panes; pub mod grid; pub mod link_handler; diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index 26b4ac30c..2b68ea338 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -21,7 +21,7 @@ use zellij_utils::{ position::Position, shared::make_terminal_title, vte, - zellij_tile::data::{InputMode, PaletteColor}, + zellij_tile::data::{InputMode, Palette, PaletteColor}, }; pub const SELECTION_SCROLL_INTERVAL_MS: u64 = 10; @@ -489,12 +489,13 @@ impl TerminalPane { pane_name: String, link_handler: Rc<RefCell<LinkHandler>>, character_cell_size: Rc<RefCell<Option<SizeInPixels>>>, + terminal_emulator_colors: Rc<RefCell<Palette>>, ) -> TerminalPane { let initial_pane_title = format!("Pane #{}", pane_index); let grid = Grid::new( position_and_size.rows.as_usize(), position_and_size.cols.as_usize(), - style.colors, + terminal_emulator_colors, link_handler, character_cell_size, ); diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs index eac872842..42c4e3292 100644 --- a/zellij-server/src/panes/unit/grid_tests.rs +++ b/zellij-server/src/panes/unit/grid_tests.rs @@ -21,7 +21,7 @@ fn vttest1_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -39,7 +39,7 @@ fn vttest1_1() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -57,7 +57,7 @@ fn vttest1_2() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -75,7 +75,7 @@ fn vttest1_3() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -93,7 +93,7 @@ fn vttest1_4() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -111,7 +111,7 @@ fn vttest1_5() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -129,7 +129,7 @@ fn vttest2_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -147,7 +147,7 @@ fn vttest2_1() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -165,7 +165,7 @@ fn vttest2_2() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -183,7 +183,7 @@ fn vttest2_3() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -201,7 +201,7 @@ fn vttest2_4() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -219,7 +219,7 @@ fn vttest2_5() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -237,7 +237,7 @@ fn vttest2_6() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -255,7 +255,7 @@ fn vttest2_7() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -273,7 +273,7 @@ fn vttest2_8() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -291,7 +291,7 @@ fn vttest2_9() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -309,7 +309,7 @@ fn vttest2_10() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -327,7 +327,7 @@ fn vttest2_11() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -345,7 +345,7 @@ fn vttest2_12() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -363,7 +363,7 @@ fn vttest2_13() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -381,7 +381,7 @@ fn vttest2_14() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -399,7 +399,7 @@ fn vttest3_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -417,7 +417,7 @@ fn vttest8_0() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -435,7 +435,7 @@ fn vttest8_1() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -453,7 +453,7 @@ fn vttest8_2() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -471,7 +471,7 @@ fn vttest8_3() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -489,7 +489,7 @@ fn vttest8_4() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -507,7 +507,7 @@ fn vttest8_5() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -525,7 +525,7 @@ fn csi_b() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -543,7 +543,7 @@ fn csi_capital_i() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -561,7 +561,7 @@ fn csi_capital_z() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -579,7 +579,7 @@ fn terminal_reports() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -597,7 +597,7 @@ fn wide_characters() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -615,7 +615,7 @@ fn wide_characters_line_wrap() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -633,7 +633,7 @@ fn insert_character_in_line_with_wide_character() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -651,7 +651,7 @@ fn delete_char_in_middle_of_line_with_widechar() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -669,7 +669,7 @@ fn delete_char_in_middle_of_line_with_multiple_widechars() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -687,7 +687,7 @@ fn fish_wide_characters_override_clock() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -705,7 +705,7 @@ fn bash_delete_wide_characters() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -723,7 +723,7 @@ fn delete_wide_characters_before_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -741,7 +741,7 @@ fn delete_wide_characters_before_cursor_when_cursor_is_on_wide_character() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -759,7 +759,7 @@ fn delete_wide_character_under_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -777,7 +777,7 @@ fn replace_wide_character_under_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -795,7 +795,7 @@ fn wrap_wide_characters() { let mut grid = Grid::new( 21, 90, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -813,7 +813,7 @@ fn wrap_wide_characters_on_size_change() { let mut grid = Grid::new( 21, 93, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -832,7 +832,7 @@ fn unwrap_wide_characters_on_size_change() { let mut grid = Grid::new( 21, 93, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -852,7 +852,7 @@ fn wrap_wide_characters_in_the_middle_of_the_line() { let mut grid = Grid::new( 21, 91, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -870,7 +870,7 @@ fn wrap_wide_characters_at_the_end_of_the_line() { let mut grid = Grid::new( 21, 90, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -888,7 +888,7 @@ fn copy_selected_text_from_viewport() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -914,7 +914,7 @@ fn copy_wrapped_selected_text_from_viewport() { let mut grid = Grid::new( 22, 73, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -939,7 +939,7 @@ fn copy_selected_text_from_lines_above() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -965,7 +965,7 @@ fn copy_selected_text_from_lines_below() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -999,7 +999,7 @@ fn run_bandwhich_from_fish_shell() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1017,7 +1017,7 @@ fn fish_tab_completion_options() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1040,7 +1040,7 @@ pub fn fish_select_tab_completion_options() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1066,7 +1066,7 @@ pub fn vim_scroll_region_down() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1090,7 +1090,7 @@ pub fn vim_ctrl_d() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1113,7 +1113,7 @@ pub fn vim_ctrl_u() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1131,7 +1131,7 @@ pub fn htop() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1149,7 +1149,7 @@ pub fn htop_scrolling() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1167,7 +1167,7 @@ pub fn htop_right_scrolling() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1193,7 +1193,7 @@ pub fn vim_overwrite() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1213,7 +1213,7 @@ pub fn clear_scroll_region() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1231,7 +1231,7 @@ pub fn display_tab_characters_properly() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1249,7 +1249,7 @@ pub fn neovim_insert_mode() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1267,7 +1267,7 @@ pub fn bash_cursor_linewrap() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), |