summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/panes/terminal_pane.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-12-14 22:26:48 +0100
committerGitHub <noreply@github.com>2022-12-14 22:26:48 +0100
commitc3115a428ed5c990cc5ead5629dabb624ae90453 (patch)
treefe1a3c0f344b6d1056789861d6d28ca5196f838d /zellij-server/src/panes/terminal_pane.rs
parent177cd20beaf7a89d54b295f1aab498b7ab2c04c1 (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.rs26
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 {