diff options
author | Aram Drevekenin <aram@poor.dev> | 2022-12-14 22:26:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-14 22:26:48 +0100 |
commit | c3115a428ed5c990cc5ead5629dabb624ae90453 (patch) | |
tree | fe1a3c0f344b6d1056789861d6d28ca5196f838d /zellij-server/src/panes/terminal_pane.rs | |
parent | 177cd20beaf7a89d54b295f1aab498b7ab2c04c1 (diff) |
fix(panes): show visual error when unable to split panes vertically/horizontally (#2025)
* fix(panes): show visual error when failing to split pane vertically/horizontally
* fix: lockfile
Diffstat (limited to 'zellij-server/src/panes/terminal_pane.rs')
-rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index b5c51c659..4d5ed840c 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -109,7 +109,8 @@ pub struct TerminalPane { is_held: Option<(Option<i32>, IsFirstRun, RunCommand)>, // a "held" pane means that its command has either exited and the pane is waiting for a // possible user instruction to be re-run, or that the command has not yet been run banner: Option<String>, // a banner to be rendered inside this TerminalPane, used for panes - // held on startup and can possibly be used to display some errors + // held on startup and can possibly be used to display some errors + pane_frame_color_override: Option<(PaletteColor, Option<String>)>, } impl Pane for TerminalPane { @@ -301,7 +302,13 @@ impl Pane for TerminalPane { ) -> Result<Option<(Vec<CharacterChunk>, Option<String>)>> { let err_context = || format!("failed to render frame for client {client_id}"); // TODO: remove the cursor stuff from here - let pane_title = if self.pane_name.is_empty() + let pane_title = if let Some(text_color_override) = self + .pane_frame_color_override + .as_ref() + .and_then(|(_color, text)| text.as_ref()) + { + text_color_override.into() + } else if self.pane_name.is_empty() && input_mode == InputMode::RenamePane && frame_params.is_main_client { @@ -353,6 +360,9 @@ impl Pane for TerminalPane { frame.add_exit_status(exit_status.as_ref().copied()); } } + if let Some((frame_color_override, _text)) = self.pane_frame_color_override.as_ref() { + frame.override_color(*frame_color_override); + } let res = match self.frame.get(&client_id) { // TODO: use and_then or something? @@ -669,6 +679,17 @@ impl Pane for TerminalPane { } self.set_should_render(true); } + fn add_red_pane_frame_color_override(&mut self, error_text: Option<String>) { + self.pane_frame_color_override = Some((self.style.colors.red, error_text)); + } + fn clear_pane_frame_color_override(&mut self) { + self.pane_frame_color_override = None; + } + fn frame_color_override(&self) -> Option<PaletteColor> { + self.pane_frame_color_override + .as_ref() + .map(|(color, _text)| *color) + } } impl TerminalPane { @@ -717,6 +738,7 @@ impl TerminalPane { search_term: String::new(), is_held: None, banner: None, + pane_frame_color_override: None, } } pub fn get_x(&self) -> usize { |