summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/panes/terminal_pane.rs
diff options
context:
space:
mode:
authorKunal Mohan <44079328+kunalmohan@users.noreply.github.com>2021-12-09 23:30:40 +0530
committerGitHub <noreply@github.com>2021-12-09 23:30:40 +0530
commitc75bcbd9370249f23031edcd69f6724805c1e034 (patch)
treea45dab48eb4a0eea8f008db2278ea68c8166b044 /zellij-server/src/panes/terminal_pane.rs
parent368c852e57f3aa0596ef0459d6e9cc41b314cf65 (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.rs44
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(),
}