diff options
author | Kunal Mohan <44079328+kunalmohan@users.noreply.github.com> | 2021-12-09 23:30:40 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-09 23:30:40 +0530 |
commit | c75bcbd9370249f23031edcd69f6724805c1e034 (patch) | |
tree | a45dab48eb4a0eea8f008db2278ea68c8166b044 /zellij-server/src/panes/terminal_pane.rs | |
parent | 368c852e57f3aa0596ef0459d6e9cc41b314cf65 (diff) |
Feature: Add pane names (#928)
* Read pane name from layout
* Update pane name at runtime
* Fix tests
* prefer and render pane name over pane title
* fix clippy errors
* fix after rebase
Diffstat (limited to 'zellij-server/src/panes/terminal_pane.rs')
-rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index a6da76709..284d6fe9b 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -17,7 +17,7 @@ use zellij_utils::{ pane_size::{Dimension, PaneGeom}, position::Position, vte, - zellij_tile::data::{Palette, PaletteColor}, + zellij_tile::data::{InputMode, Palette, PaletteColor}, }; pub const SELECTION_SCROLL_INTERVAL_MS: u64 = 10; @@ -44,6 +44,7 @@ pub struct TerminalPane { selection_scrolled_at: time::Instant, content_offset: Offset, pane_title: String, + pane_name: String, frame: HashMap<ClientId, PaneFrame>, borderless: bool, fake_cursor_locations: HashSet<(usize, usize)>, // (x, y) - these hold a record of previous fake cursors which we need to clear on render @@ -278,16 +279,31 @@ impl Pane for TerminalPane { None } } - fn render_frame(&mut self, client_id: ClientId, frame_params: FrameParams) -> Option<String> { + fn render_frame( + &mut self, + client_id: ClientId, + frame_params: FrameParams, + input_mode: InputMode, + ) -> Option<String> { // TODO: remove the cursor stuff from here let mut vte_output = None; - let frame = PaneFrame::new( - self.current_geom().into(), - self.grid.scrollback_position_and_length(), + let pane_title = if self.pane_name.is_empty() + && input_mode == InputMode::RenamePane + && frame_params.is_main_client + { + String::from("Enter name...") + } else if self.pane_name.is_empty() { self.grid .title .clone() - .unwrap_or_else(|| self.pane_title.clone()), + .unwrap_or_else(|| self.pane_title.clone()) + } else { + self.pane_name.clone() + }; + let frame = PaneFrame::new( + self.current_geom().into(), + self.grid.scrollback_position_and_length(), + pane_title, frame_params, ); match self.frame.get(&client_id) { @@ -336,6 +352,20 @@ impl Pane for TerminalPane { } vte_output } + fn update_name(&mut self, name: &str) { + match name { + "\0" => { + self.pane_name = String::new(); + } + "\u{007F}" | "\u{0008}" => { + //delete and backspace keys + self.pane_name.pop(); + } + c => { + self.pane_name.push_str(c); + } + } + } fn pid(&self) -> PaneId { PaneId::Terminal(self.pid) } @@ -475,6 +505,7 @@ impl TerminalPane { position_and_size: PaneGeom, palette: Palette, pane_index: usize, + pane_name: String, ) -> TerminalPane { let initial_pane_title = format!("Pane #{}", pane_index); let grid = Grid::new( @@ -495,6 +526,7 @@ impl TerminalPane { colors: palette, selection_scrolled_at: time::Instant::now(), pane_title: initial_pane_title, + pane_name, borderless: false, fake_cursor_locations: HashSet::new(), } |