aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-server
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-11-21 20:07:24 +0100
committerGitHub <noreply@github.com>2022-11-21 20:07:24 +0100
commit63e7531c48f1c8fbe916e3ac5475cf36201f52b8 (patch)
tree534e56cf9cf2924cec94a32bef1b6bcf92760209 /zellij-server
parentdocs(changelog): client buffer overflow fix (diff)
downloadsl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.tar.gz
sl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.tar.xz
sl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.zip
performance(rendering): improve rendering performance (#1960)
* refactor(plugins): plugins now need to explicitly ask to be rendered * performance(render): remove various needless renders * performance(render): cache boundaries * performance(render): adjust tests and cache cursor location/shape * style(comment): remove outdated * style(fmt): rustfmt
Diffstat (limited to '')
-rw-r--r--zellij-server/src/output/mod.rs6
-rw-r--r--zellij-server/src/panes/grid.rs5
-rw-r--r--zellij-server/src/panes/tiled_panes/mod.rs39
-rw-r--r--zellij-server/src/screen.rs14
-rw-r--r--zellij-server/src/tab/mod.rs60
-rw-r--r--zellij-server/src/ui/boundaries.rs22
-rw-r--r--zellij-server/src/ui/pane_contents_and_ui.rs33
-rw-r--r--zellij-server/src/unit/screen_tests.rs41
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-3.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-2.snap4
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-3.snap6
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-2.snap4
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-3.snap6
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-4.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-5.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-3.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-2.snap4
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-3.snap6
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-2.snap4
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-3.snap6
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-2.snap42
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-3.snap26
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-4.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-5.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-3.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-4.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-5.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-6.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-7.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-8.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-4.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-5.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-6.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-7.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-3.snap12
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-4.snap12
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-5.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-3.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-3.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-4.snap16
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-2.snap22
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-3.snap16
-rw-r--r--zellij-server/src/wasm_vm.rs15
72 files changed, 646 insertions, 747 deletions
diff --git a/zellij-server/src/output/mod.rs b/zellij-server/src/output/mod.rs
index f40c8514..51a21f7b 100644
--- a/zellij-server/src/output/mod.rs
+++ b/zellij-server/src/output/mod.rs
@@ -396,6 +396,12 @@ impl Output {
}
Ok(serialized_render_instructions)
}
+ pub fn is_dirty(&self) -> bool {
+ !self.pre_vte_instructions.is_empty()
+ || !self.post_vte_instructions.is_empty()
+ || self.client_character_chunks.values().any(|c| !c.is_empty())
+ || self.sixel_chunks.values().any(|c| !c.is_empty())
+ }
}
// this struct represents the geometry of a group of floating panes
diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs
index 0bc2b767..b3ee85a4 100644
--- a/zellij-server/src/panes/grid.rs
+++ b/zellij-server/src/panes/grid.rs
@@ -1081,11 +1081,14 @@ impl Grid {
pub fn reset_viewport(&mut self) {
let max_lines_to_scroll = *SCROLL_BUFFER_SIZE.get().unwrap() * 2; // while not very elegant, this can prevent minor bugs from becoming showstoppers by sticking the whole app display in an endless loop
let mut lines_scrolled = 0;
+ let should_clear_output_buffer = self.is_scrolled;
while self.is_scrolled && lines_scrolled < max_lines_to_scroll {
self.scroll_down_one_line();
lines_scrolled += 1;
}
- self.output_buffer.update_all_lines();
+ if should_clear_output_buffer {
+ self.output_buffer.update_all_lines();
+ }
}
pub fn rotate_scroll_region_up(&mut self, count: usize) {
if let Some((scroll_region_top, scroll_region_bottom)) = self
diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs
index cc4e95e6..96fd2f67 100644
--- a/zellij-server/src/panes/tiled_panes/mod.rs
+++ b/zellij-server/src/panes/tiled_panes/mod.rs
@@ -65,6 +65,8 @@ pub struct TiledPanes {
fullscreen_is_active: bool,
os_api: Box<dyn ServerOsApi>,
senders: ThreadSenders,
+ window_title: Option<String>,
+ client_id_to_boundaries: HashMap<ClientId, Boundaries>,
}
impl TiledPanes {
@@ -100,6 +102,8 @@ impl TiledPanes {
fullscreen_is_active: false,
os_api,
senders,
+ window_title: None,
+ client_id_to_boundaries: HashMap::new(),
}
}
pub fn add_pane_with_existing_geom(&mut self, pane_id: PaneId, mut pane: Box<dyn Pane>) {
@@ -264,6 +268,7 @@ impl TiledPanes {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
pub fn can_split_pane_horizontally(&mut self, client_id: ClientId) -> bool {
if let Some(active_pane_id) = &self.active_panes.get(&client_id) {
@@ -338,9 +343,11 @@ impl TiledPanes {
.insert(client_id, pane_id, &mut self.panes);
}
}
+ self.reset_boundaries();
}
pub fn clear_active_panes(&mut self) {
self.active_panes.clear(&mut self.panes);
+ self.reset_boundaries();
}
pub fn first_active_pane_id(&self) -> Option<PaneId> {
self.connected_clients
@@ -373,6 +380,7 @@ impl TiledPanes {
pane.set_should_render_boundaries(true);
pane.render_full_viewport();
}
+ self.reset_boundaries();
}
pub fn has_active_panes(&self) -> bool {
!self.active_panes.is_empty()
@@ -435,7 +443,11 @@ impl TiledPanes {
self.session_is_mirrored,
);
}
- pane_contents_and_ui.render_terminal_title_if_needed(*client_id, client_mode);
+ pane_contents_and_ui.render_terminal_title_if_needed(
+ *client_id,
+ client_mode,
+ &mut self.window_title,
+ );
// this is done for panes that don't have their own cursor (eg. panes of
// another user)
pane_contents_and_ui
@@ -450,14 +462,13 @@ impl TiledPanes {
}
}
// render boundaries if needed
- for (client_id, boundaries) in &mut client_id_to_boundaries {
- // TODO: add some conditional rendering here so this isn't rendered for every character
+ for (client_id, boundaries) in client_id_to_boundaries {
+ let boundaries_to_render = boundaries
+ .render(self.client_id_to_boundaries.get(&client_id))
+ .with_context(err_context)?;
+ self.client_id_to_boundaries.insert(client_id, boundaries);
output
- .add_character_chunks_to_client(
- *client_id,
- boundaries.render().with_context(err_context)?,
- None,
- )
+ .add_character_chunks_to_client(client_id, boundaries_to_render, None)
.with_context(err_context)?;
}
Ok(())
@@ -517,6 +528,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn resize_active_pane_right(&mut self, client_id: ClientId) {
@@ -531,6 +543,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn resize_active_pane_up(&mut self, client_id: ClientId) {
@@ -545,6 +558,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn resize_active_pane_down(&mut self, client_id: ClientId) {
@@ -559,6 +573,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn resize_active_pane_increase(&mut self, client_id: ClientId) {
@@ -573,6 +588,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn resize_active_pane_decrease(&mut self, client_id: ClientId) {
@@ -587,6 +603,7 @@ impl TiledPanes {
for pane in self.panes.values_mut() {
resize_pty!(pane, self.os_api, self.senders).unwrap();
}
+ self.reset_boundaries();
}
}
pub fn focus_next_pane(&mut self, client_id: ClientId) {
@@ -605,6 +622,7 @@ impl TiledPanes {
.insert(client_id, next_active_pane_id, &mut self.panes);
}
self.set_pane_active_at(next_active_pane_id);
+ self.reset_boundaries();
}
pub fn focus_previous_pane(&mut self, client_id: ClientId) {
let connected_clients: Vec<ClientId> =
@@ -622,6 +640,7 @@ impl TiledPanes {
.insert(client_id, next_active_pane_id, &mut self.panes);
}
self.set_pane_active_at(next_active_pane_id);
+ self.reset_boundaries();
}
fn set_pane_active_at(&mut self, pane_id: PaneId) {
if let Some(pane) = self.get_pane_mut(pane_id) {
@@ -999,6 +1018,7 @@ impl TiledPanes {
}
}
pub fn extract_pane(&mut self, pane_id: PaneId) -> Option<Box<dyn Pane>> {
+ self.reset_boundaries();
self.panes.remove(&pane_id)
}
pub fn remove_pane(&mut self, pane_id: PaneId) -> Option<Box<dyn Pane>> {
@@ -1174,6 +1194,9 @@ impl TiledPanes {
.insert(client_id, to_pane_id, &mut self.panes);
}
}
+ fn reset_boundaries(&mut self) {
+ self.client_id_to_boundaries.clear();
+ }
}
#[allow(clippy::borrowed_box)]
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs
index 0c03955a..40bcc964 100644
--- a/zellij-server/src/screen.rs
+++ b/zellij-server/src/screen.rs
@@ -768,11 +768,15 @@ impl Screen {
for tab_index in tabs_to_close {
self.close_tab_at_index(tab_index).context(err_context)?;
}
- let serialized_output = output.serialize().context(err_context)?;
- self.bus
- .senders
- .send_to_server(ServerInstruction::Render(Some(serialized_output)))
- .context(err_context)
+ if output.is_dirty() {
+ let serialized_output = output.serialize().context(err_context)?;
+ self.bus
+ .senders
+ .send_to_server(ServerInstruction::Render(Some(serialized_output)))
+ .context(err_context)
+ } else {
+ Ok(())
+ }
}
/// Returns a mutable reference to this [`Screen`]'s tabs.
diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs
index 374fe1ce..e98b4614 100644
--- a/zellij-server/src/tab/mod.rs
+++ b/zellij-server/src/tab/mod.rs
@@ -112,6 +112,9 @@ pub(crate) struct Tab {
terminal_emulator_colors: Rc<RefCell<Palette>>,
terminal_emulator_color_codes: Rc<RefCell<HashMap<usize, String>>>,
pids_waiting_resize: HashSet<u32>, // u32 is the terminal_id
+ cursor_positions_and_shape: HashMap<ClientId, (usize, usize, String)>, // (x_position,
+ // y_position,
+ // cursor_shape_csi)
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
@@ -485,6 +488,7 @@ impl Tab {
terminal_emulator_colors,
terminal_emulator_color_codes,
pids_waiting_resize: HashSet::new(),
+ cursor_positions_and_shape: HashMap::new(),
}
}
@@ -1427,7 +1431,6 @@ impl Tab {
floating_panes_stack,
);
- self.hide_cursor_and_clear_display_as_needed(output);
self.tiled_panes
.render(output, self.floating_panes.panes_are_visible())
.with_context(err_context)?;
@@ -1437,15 +1440,18 @@ impl Tab {
.with_context(err_context)?;
}
- // FIXME: Once clients can be distinguished
- if let Some(overlay_vte) = &overlay {
- output.add_post_vte_instruction_to_multiple_clients(
- connected_clients.iter().copied(),
- overlay_vte,
- );
+ self.render_cursor(output);
+ if output.is_dirty() {
+ self.hide_cursor_and_clear_display_as_needed(output);
+ // FIXME: Once clients can be distinguished
+ if let Some(overlay_vte) = &overlay {
+ output.add_post_vte_instruction_to_multiple_clients(
+ connected_clients.iter().copied(),
+ overlay_vte,
+ );
+ }
}
- self.render_cursor(output);
Ok(())
}
@@ -1466,25 +1472,41 @@ impl Tab {
self.should_clear_display_before_rendering = false;
}
}
- fn render_cursor(&self, output: &mut Output) {
+ fn render_cursor(&mut self, output: &mut Output) {
let connected_clients: Vec<ClientId> =
{ self.connected_clients.borrow().iter().copied().collect() };
for client_id in connected_clients {
match self.get_active_terminal_cursor_position(client_id) {
Some((cursor_position_x, cursor_position_y)) => {
- let show_cursor = "\u{1b}[?25h";
- let change_cursor_shape = self
+ let desired_cursor_shape = self
.get_active_pane(client_id)
.map(|ap| ap.cursor_shape_csi())
.unwrap_or_default();
- let goto_cursor_position = &format!(
- "\u{1b}[{};{}H\u{1b}[m{}",
- cursor_position_y + 1,
- cursor_position_x + 1,
- change_cursor_shape
- ); // goto row/col
- output.add_post_vte_instruction_to_client(client_id, show_cursor);
- output.add_post_vte_instruction_to_client(client_id, goto_cursor_position);
+ let cursor_changed_position_or_shape = self
+ .cursor_positions_and_shape
+ .get(&client_id)
+ .map(|(previous_x, previous_y, previous_shape)| {
+ previous_x != &cursor_position_x
+ || previous_y != &cursor_position_y
+ || previous_shape != &desired_cursor_shape
+ })
+ .unwrap_or(true);
+
+ if output.is_dirty() || cursor_changed_position_or_shape {
+ let show_cursor = "\u{1b}[?25h";
+ let goto_cursor_position = &format!(
+ "\u{1b}[{};{}H\u{1b}[m{}",
+ cursor_position_y + 1,
+ cursor_position_x + 1,
+ desired_cursor_shape
+ ); // goto row/col
+ output.add_post_vte_instruction_to_client(client_id, show_cursor);
+ output.add_post_vte_instruction_to_client(client_id, goto_cursor_position);
+ self.cursor_positions_and_shape.insert(
+ client_id,
+ (cursor_position_x, cursor_position_y, desired_cursor_shape),
+ );
+ }
},
None => {
let hide_cursor = "\u{1b}[?25l";
diff --git a/zellij-server/src/ui/boundaries.rs b/zellij-server/src/ui/boundaries.rs
index c0827c24..2ba3e67e 100644
--- a/zellij-server/src/ui/boundaries.rs
+++ b/zellij-server/src/ui/boundaries.rs
@@ -27,10 +27,10 @@ pub mod boundary_type {
pub const CROSS: &str = "┼";
}
-pub(crate) type BoundaryType = &'static str; // easy way to refer to boundary_type above
+pub type BoundaryType = &'static str; // easy way to refer to boundary_type above
-#[derive(Clone, Copy, Debug)]
-pub(crate) struct BoundarySymbol {
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub struct BoundarySymbol {
boundary_type: BoundaryType,
invisible: bool,
color: Option<PaletteColor>,
@@ -420,7 +420,7 @@ fn combine_symbols(
}
#[derive(PartialEq, Eq, Hash, Debug)]
-pub(crate) struct Coordinates {
+pub struct Coordinates {
x: usize,
y: usize,
}
@@ -433,7 +433,7 @@ impl Coordinates {
pub struct Boundaries {
viewport: Viewport,
- boundary_characters: HashMap<Coordinates, BoundarySymbol>,
+ pub boundary_characters: HashMap<Coordinates, BoundarySymbol>,
}
impl Boundaries {
@@ -540,9 +540,19 @@ impl Boundaries {
}
}
}
- pub fn render(&self) -> Result<Vec<CharacterChunk>> {
+ pub fn render(
+ &self,
+ existing_boundaries_on_screen: Option<&Boundaries>,
+ ) -> Result<Vec<CharacterChunk>> {
let mut character_chunks = vec![];
for (coordinates, boundary_character) in &self.boundary_characters {
+ let already_on_screen = existing_boundaries_on_screen
+ .and_then(|e| e.boundary_characters.get(coordinates))
+ .map(|e| e == boundary_character)
+ .unwrap_or(false);
+ if already_on_screen {
+ continue;
+ }
character_chunks.push(CharacterChunk::new(
vec![boundary_character
.as_terminal_character()
diff --git a/zellij-server/src/ui/pane_contents_and_ui.rs b/zellij-server/src/ui/pane_contents_and_ui.rs
index 946d9f68..1cc715d8 100644
--- a/zellij-server/src/ui/pane_contents_and_ui.rs
+++ b/zellij-server/src/ui/pane_contents_and_ui.rs
@@ -65,15 +65,17 @@ impl<'a> PaneContentsAndUi<'a> {
self.z_index,
);
if let Some(raw_vte_output) = raw_vte_output {
- self.output.add_post_vte_instruction_to_multiple_clients(
- clients.iter().copied(),
- &format!(
- "\u{1b}[{};{}H\u{1b}[m{}",
- self.pane.y() + 1,
- self.pane.x() + 1,
- raw_vte_output
- ),
- );
+ if !raw_vte_output.is_empty() {
+ self.output.add_post_vte_instruction_to_multiple_clients(
+ clients.iter().copied(),
+ &format!(
+ "\u{1b}[{};{}H\u{1b}[m{}",
+ self.pane.y() + 1,
+ self.pane.x() + 1,
+ raw_vte_output
+ ),
+ );
+ }
}
}
Ok(())
@@ -140,11 +142,22 @@ impl<'a> PaneContentsAndUi<'a> {
}
Ok(())
}
- pub fn render_terminal_title_if_needed(&mut self, client_id: ClientId, client_mode: InputMode) {
+ pub fn render_terminal_title_if_needed(
+ &mut self,
+ client_id: ClientId,
+ client_mode: InputMode,
+ previous_title: &mut Option<String>,
+ ) {
if !self.focused_clients.contains(&client_id) {
return;
}
let vte_output = self.pane.render_terminal_title(client_mode);
+ if let Some(previous_title) = previous_title {
+ if *previous_title == vte_output {
+ return;
+ }
+ }
+ *previous_title = Some(vte_output.clone());
self.output
.add_post_vte_instruction_to_client(client_id, &vte_output);
}
diff --git a/zellij-server/src/unit/screen_tests.rs b/zellij-server/src/unit/screen_tests.rs
index 0ab4f0fa..240a3464 100644
--- a/zellij-server/src/unit/screen_tests.rs
+++ b/zellij-server/src/unit/screen_tests.rs
@@ -41,13 +41,21 @@ use std::collections::HashMap;
use std::rc::Rc;
use zellij_utils::vte;
-// TODO: deduplicate with identical function in tab_integration_tests
fn take_snapshot_and_cursor_coordinates(
ansi_instructions: &str,
- rows: usize,
- columns: usize,
- palette: Palette,
+ grid: &mut Grid,
) -> (Option<(usize, usize)>, String) {
+ let mut vte_parser = vte::Parser::new();
+ for &byte in ansi_instructions.as_bytes() {
+ vte_parser.advance(grid, byte);
+ }
+ (grid.cursor_coordinates(), format!("{:?}", grid))
+}
+
+fn take_snapshots_and_cursor_coordinates_from_render_events<'a>(
+ all_events: impl Iterator<Item = &'a ServerInstruction>,
+ screen_size: Size,
+) -> Vec<(Option<(usize, usize)>, String)> {
let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default()));
let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new()));
let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels {
@@ -55,25 +63,14 @@ fn take_snapshot_and_cursor_coordinates(
height: 21,
})));
let mut grid = Grid::new(
- rows,
- columns,
- Rc::new(RefCell::new(palette)),
+ screen_size.rows,
+ screen_size.cols,
+ Rc::new(RefCell::new(Palette::default())),
terminal_emulator_color_codes,
Rc::new(RefCell::new(LinkHandler::new())),
character_cell_size,
sixel_image_store,
);
- let mut vte_parser = vte::Parser::new();
- for &byte in ansi_instructions.as_bytes() {
- vte_parser.advance(&mut grid, byte);
- }
- (grid.cursor_coordinates(), format!("{:?}", grid))
-}
-
-fn take_snapshots_and_cursor_coordinates_from_render_events<'a>(
- all_events: impl Iterator<Item = &'a ServerInstruction>,
- screen_size: Size,
-) -> Vec<(Option<(usize, usize)>, String)> {
let snapshots: Vec<(Option<(usize, usize)>, String)> = all_events
.filter_map(|server_instruction| {
match server_instruction {
@@ -81,12 +78,8 @@ fn take_snapshots_and_cursor_coordinates_from_render_events<'a>(
if let Some(output) = output {
// note this only takes a snapshot of the first client!
let raw_snapshot = output.get(&1).unwrap();
- let snapshot = take_snapshot_and_cursor_coordinates(
- raw_snapshot,
- screen_size.rows,
- screen_size.cols,
- Palette::default(),
- );
+ let snapshot =
+ take_snapshot_and_cursor_coordinates(raw_snapshot, &mut grid);
Some(snapshot)
} else {
None
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-2.snap
index 2df4565e..a95a55c6 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1805
+assertion_line: 2223
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): │ │
+05 (C): │ │
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-3.snap
index c8e5e9a9..93f20f71 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_pane_action-3.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1805
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2225
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
-01 (C): │ │
-02 (C): │ │
-03 (C): │ │
-04 (C): │ │
-05 (C): │ │
-06 (C): │ │
-07 (C): │ │
-08 (C): │ │
-09 (C): └──────────────────────────────────────────────────────────────────────────────┘
-
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-2.snap
index eea7656b..495842f6 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2118
+assertion_line: 2459
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-3.snap
index b4240eb0..9abd2dfc 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2118
+assertion_line: 2459
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): └──────────────────────────────────────────────────────────────────────────────┘
+05 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-4.snap
index eea7656b..eba5795d 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_close_tab_action-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2118
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2461
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-2.snap
index 74460796..1305cf7b 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-2.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 939
+assertion_line: 1042
expression: "format!(\"{:?}\", cursor_coordinates)"
---
-Some((1, 1))
+Some((41, 1))
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-3.snap
index f0d453eb..3a04bde8 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_next_pane_action-3.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 939
-expression: "format!(\"{:?}\", cursor_coordinates)"
+assertion_line: 1044
+expression: "format!(\"{}\", snapshot_count)"
---
-Some((41, 1))
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-2.snap
index c8861240..ae6be657 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-2.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 968
+assertion_line: 1080
expression: "format!(\"{:?}\", cursor_coordinates)"
---
-Some((1, 1))
+Some((41, 1))
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-3.snap
index 89f17aa7..56d383ed 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_focus_previous_pane_action-3.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 968
-expression: "format!(\"{:?}\", cursor_coordinates)"
+assertion_line: 1082
+expression: "format!(\"{}\", snapshot_count)"
---
-Some((41, 1))
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-2.snap
index 6eb10760..a0264d66 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2037
+assertion_line: 2423
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-3.snap
index a2f36767..cd63569f 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2037
+assertion_line: 2423
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): └──────────────────────────────────────────────────────────────────────────────┘
+05 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-4.snap
index 6eb10760..df0ddc91 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_goto_tab_action-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2037
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2425
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-2.snap
index 0f0a9e25..36487ff3 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1397
+assertion_line: 1702
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 9 ││ │
+02 (C): │fill pane up with something 10 ││ │
+03 (C): │fill pane up with something 11 ││ │
+04 (C): │fill pane up with something 12 ││ │
+05 (C): │fill pane up with something 13 ││ │
+06 (C): │fill pane up with something 14 ││ │
+07 (C): │fill pane up with something 15 ││ │
+08 (C): │fill pane up with something 16 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-3.snap
index 884173f4..e0476fec 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1397
+assertion_line: 1702
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐
-01 (C): │fill pane up with something 9 │
-02 (C): │fill pane up with something 10 │
-03 (C): │fill pane up with something 11 │
-04 (C): │fill pane up with something 12 │
-05 (C): │fill pane up with something 13 │
-06 (C): │fill pane up with something 14 │
-07 (C): │fill pane up with something 15 │
-08 (C): │fill pane up with something 16 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 8/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 5 ││ │
+02 (C): │fill pane up with something 6 ││ │
+03 (C): │fill pane up with something 7 ││ │
+04 (C): │fill pane up with something 8 ││ │
+05 (C): │fill pane up with something 9 ││ │
+06 (C): │fill pane up with something 10 ││ │
+07 (C): │fill pane up with something 11 ││ │
+08 (C): │fill pane up with something 12 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-4.snap
index 8118d806..36487ff3 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-4.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1397
+assertion_line: 1702
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 8/13 ┐
-01 (C): │fill pane up with something 5 │
-02 (C): │fill pane up with something 6 │
-03 (C): │fill pane up with something 7 │
-04 (C): │fill pane up with something 8 │
-05 (C): │fill pane up with something 9 │
-06 (C): │fill pane up with something 10 │
-07 (C): │fill pane up with something 11 │
-08 (C): │fill pane up with something 12 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 9 ││ │
+02 (C): │fill pane up with something 10 ││ │
+03 (C): │fill pane up with something 11 ││ │
+04 (C): │fill pane up with something 12 ││ │
+05 (C): │fill pane up with something 13 ││ │
+06 (C): │fill pane up with something 14 ││ │
+07 (C): │fill pane up with something 15 ││ │
+08 (C): │fill pane up with something 16 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-5.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-5.snap
index 884173f4..f5742603 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-5.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_down_action-5.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1397
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1704
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐
-01 (C): │fill pane up with something 9 │
-02 (C): │fill pane up with something 10 │
-03 (C): │fill pane up with something 11 │
-04 (C): │fill pane up with something 12 │
-05 (C): │fill pane up with something 13 │
-06 (C): │fill pane up with something 14 │
-07 (C): │fill pane up with something 15 │
-08 (C): │fill pane up with something 16 │
-09 (C): └──────────────────────────────────────┘
-
+4
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-2.snap
index 4fdd411b..f400815e 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1354
+assertion_line: 1639
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 9 ││ │
+02 (C): │fill pane up with something 10 ││ │
+03 (C): │fill pane up with something 11 ││ │
+04 (C): │fill pane up with something 12 ││ │
+05 (C): │fill pane up with something 13 ││ │
+06 (C): │fill pane up with something 14 ││ │
+07 (C): │fill pane up with something 15 ││ │
+08 (C): │fill pane up with something 16 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-3.snap
index f0b88e27..f33220f2 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_half_page_scroll_up_action-3.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1354
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1641
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐
-01 (C): │fill pane up with something 9 │
-02 (C): │fill pane up with something 10 │
-03 (C): │fill pane up with something 11 │
-04 (C): │fill pane up with something 12 │
-05 (C): │fill pane up with something 13 │
-06 (C): │fill pane up with something 14 │
-07 (C): │fill pane up with something 15 │
-08 (C): │fill pane up with something 16 │
-09 (C): └──────────────────────────────────────┘
-
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-2.snap
index 7a6fd48a..2cbf6cd5 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-2.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1030
+assertion_line: 1160
expression: "format!(\"{:?}\", cursor_coordinates)"
---
-Some((1, 1))
+Some((41, 1))
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-3.snap
index 400b84d7..6ebce514 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_or_tab_pane_action-3.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1030
-expression: "format!(\"{:?}\", cursor_coordinates)"
+assertion_line: 1162
+expression: "format!(\"{}\", snapshot_count)"
---
-Some((41, 1))
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-2.snap
index 208d683f..83bbdbb6 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-2.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 999
+assertion_line: 1120
expression: "format!(\"{:?}\", cursor_coordinates)"
---
-Some((1, 1))
+Some((41, 1))
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-3.snap
index 407ab4bb..f9d353ec 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_focus_pane_action-3.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 999
-expression: "format!(\"{:?}\", cursor_coordinates)"
+assertion_line: 1122
+expression: "format!(\"{}\", snapshot_count)"
---
-Some((41, 1))
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-2.snap
index 14158fbd..ad657ff1 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-2.snap
@@ -1,26 +1,26 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1060
+assertion_line: 1194
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
-10 (C):
-11 (C):
-12 (C):
-13 (C):
-14 (C):
-15 (C):
-16 (C):
-17 (C):
-18 (C):
-19 (C):
+00 (C): ┌ Pane #2 ─────────────────────────────┐┌ Pane #1 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): │ ││ │
+10 (C): │ ││ │
+11 (C): │ ││ │
+12 (C): │ ││ │
+13 (C): │ ││ │
+14 (C): │ ││ │
+15 (C): │ ││ │
+16 (C): │ ││ │
+17 (C): │ ││ │
+18 (C): │ ││ │
+19 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-3.snap
index d4fc90dd..50082f01 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_move_pane_action-3.snap
@@ -1,26 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1060
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1196
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #2 ─────────────────────────────┐┌ Pane #1 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): │ ││ │
-10 (C): │ ││ │
-11 (C): │ ││ │
-12 (C): │ ││ │
-13 (C): │ ││ │
-14 (C): │ ││ │
-15 (C): │ ││ │
-16 (C): │ ││ │
-17 (C): │ ││ │
-18 (C): │ ││ │
-19 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
-
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-2.snap
index f44abd51..fbf000fe 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1969
+assertion_line: 2346
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-3.snap
index 6c8d7629..fcef454d 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1969
+assertion_line: 2346
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): └──────────────────────────────────────────────────────────────────────────────┘
+05 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-4.snap
index f44abd51..475475ae 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_next_tab_action-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1969
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2348
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-2.snap
index dd4795d3..813e0411 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1318
+assertion_line: 1593
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 9/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 4 ││ │
+02 (C): │fill pane up with something 5 ││ │
+03 (C): │fill pane up with something 6 ││ │
+04 (C): │fill pane up with something 7 ││ │
+05 (C): │fill pane up with something 8 ││ │
+06 (C): │fill pane up with something 9 ││ │
+07 (C): │fill pane up with something 10 ││ │
+08 (C): │fill pane up with something 11 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-3.snap
index 38ae6619..c570d8d7 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1318
+assertion_line: 1593
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 9/13 ┐
-01 (C): │fill pane up with something 4 │
-02 (C): │fill pane up with something 5 │
-03 (C): │fill pane up with something 6 │
-04 (C): │fill pane up with something 7 │
-05 (C): │fill pane up with something 8 │
-06 (C): │fill pane up with something 9 │
-07 (C): │fill pane up with something 10 │
-08 (C): │fill pane up with something 11 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ───────────── SCROLL: 13/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 0 ││ │
+02 (C): │fill pane up with something 1 ││ │
+03 (C): │fill pane up with something 2 ││ │
+04 (C): │fill pane up with something 3 ││ │
+05 (C): │fill pane up with something 4 ││ │
+06 (C): │fill pane up with something 5 ││ │
+07 (C): │fill pane up with something 6 ││ │
+08 (C): │fill pane up with something 7 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-4.snap
index 73c58989..3c606aa7 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-4.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1318
+assertion_line: 1593
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ───────────── SCROLL: 13/13 ┐
-01 (C): │fill pane up with something 0 │
-02 (C): │fill pane up with something 1 │
-03 (C): │fill pane up with something 2 │
-04 (C): │fill pane up with something 3 │
-05 (C): │fill pane up with something 4 │
-06 (C): │fill pane up with something 5 │
-07 (C): │fill pane up with something 6 │
-08 (C): │fill pane up with something 7 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 5/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 8 ││ │
+02 (C): │fill pane up with something 9 ││ │
+03 (C): │fill pane up with something 10 ││ │
+04 (C): │fill pane up with something 11 ││ │
+05 (C): │fill pane up with something 12 ││ │
+06 (C): │fill pane up with something 13 ││ │
+07 (C): │fill pane up with something 14 ││ │
+08 (C): │fill pane up with something 15 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-5.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-5.snap
index 5de916b8..e9a17763 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-5.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_down_action-5.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1318
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1595
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 5/13 ┐
-01 (C): │fill pane up with something 8 │
-02 (C): │fill pane up with something 9 │
-03 (C): │fill pane up with something 10 │
-04 (C): │fill pane up with something 11 │
-05 (C): │fill pane up with something 12 │
-06 (C): │fill pane up with something 13 │
-07 (C): │fill pane up with something 14 │
-08 (C): │fill pane up with something 15 │
-09 (C): └──────────────────────────────────────┘
-
+4
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-2.snap
index 15f71daf..75b3e602 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1275
+assertion_line: 1530
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 9/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 4 ││ │
+02 (C): │fill pane up with something 5 ││ │
+03 (C): │fill pane up with something 6 ││ │
+04 (C): │fill pane up with something 7 ││ │
+05 (C): │fill pane up with something 8 ││ │
+06 (C): │fill pane up with something 9 ││ │
+07 (C): │fill pane up with something 10 ││ │
+08 (C): │fill pane up with something 11 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-3.snap
index 481e5b23..661ae9b1 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_page_scroll_up_action-3.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1275
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1532
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 9/13 ┐
-01 (C): │fill pane up with something 4 │
-02 (C): │fill pane up with something 5 │
-03 (C): │fill pane up with something 6 │
-04 (C): │fill pane up with something 7 │
-05 (C): │fill pane up with something 8 │
-06 (C): │fill pane up with something 9 │
-07 (C): │fill pane up with something 10 │
-08 (C): │fill pane up with something 11 │
-09 (C): └──────────────────────────────────────┘
-
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-2.snap
index 412016df..a677592e 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2003
+assertion_line: 2387
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-3.snap
index e2ff3ec6..1f0f1907 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2003
+assertion_line: 2387
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ─────────────────────────────┐┌ Pane #2 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): └──────────────────────────────────────────────────────────────────────────────┘
+05 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-4.snap
index 412016df..82324999 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_previous_tab_action-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 2003
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2389
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-2.snap
index 4d0118e1..2435355f 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 12 ││ │
+02 (C): │fill pane up with something 13 ││ │
+03 (C): │fill pane up with something 14 ││ │
+04 (C): │fill pane up with something 15 ││ │
+05 (C): │fill pane up with something 16 ││ │
+06 (C): │fill pane up with something 17 ││ │
+07 (C): │fill pane up with something 18 ││ │
+08 (C): │fill pane up with something 19 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-3.snap
index ce17e618..a0d450ef 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐
-01 (C): │fill pane up with something 12 │
-02 (C): │fill pane up with something 13 │
-03 (C): │fill pane up with something 14 │
-04 (C): │fill pane up with something 15 │
-05 (C): │fill pane up with something 16 │
-06 (C): │fill pane up with something 17 │
-07 (C): │fill pane up with something 18 │
-08 (C): │fill pane up with something 19 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 11 ││ │
+02 (C): │fill pane up with something 12 ││ │
+03 (C): │fill pane up with something 13 ││ │
+04 (C): │fill pane up with something 14 ││ │
+05 (C): │fill pane up with something 15 ││ │
+06 (C): │fill pane up with something 16 ││ │
+07 (C): │fill pane up with something 17 ││ │
+08 (C): │fill pane up with something 18 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-4.snap
index eea8c7f4..e2f43ec0 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-4.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐
-01 (C): │fill pane up with something 11 │
-02 (C): │fill pane up with something 12 │
-03 (C): │fill pane up with something 13 │
-04 (C): │fill pane up with something 14 │
-05 (C): │fill pane up with something 15 │
-06 (C): │fill pane up with something 16 │
-07 (C): │fill pane up with something 17 │
-08 (C): │fill pane up with something 18 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 10 ││ │
+02 (C): │fill pane up with something 11 ││ │
+03 (C): │fill pane up with something 12 ││ │
+04 (C): │fill pane up with something 13 ││ │
+05 (C): │fill pane up with something 14 ││ │
+06 (C): │fill pane up with something 15 ││ │
+07 (C): │fill pane up with something 16 ││ │
+08 (C): │fill pane up with something 17 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-5.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-5.snap
index e2c021ed..e305c70e 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-5.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-5.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐
-01 (C): │fill pane up with something 10 │
-02 (C): │fill pane up with something 11 │
-03 (C): │fill pane up with something 12 │
-04 (C): │fill pane up with something 13 │
-05 (C): │fill pane up with something 14 │
-06 (C): │fill pane up with something 15 │
-07 (C): │fill pane up with something 16 │
-08 (C): │fill pane up with something 17 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 9 ││ │
+02 (C): │fill pane up with something 10 ││ │
+03 (C): │fill pane up with something 11 ││ │
+04 (C): │fill pane up with something 12 ││ │
+05 (C): │fill pane up with something 13 ││ │
+06 (C): │fill pane up with something 14 ││ │
+07 (C): │fill pane up with something 15 ││ │
+08 (C): │fill pane up with something 16 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-6.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-6.snap
index 9765846d..e2f43ec0 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-6.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-6.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐
-01 (C): │fill pane up with something 9 │
-02 (C): │fill pane up with something 10 │
-03 (C): │fill pane up with something 11 │
-04 (C): │fill pane up with something 12 │
-05 (C): │fill pane up with something 13 │
-06 (C): │fill pane up with something 14 │
-07 (C): │fill pane up with something 15 │
-08 (C): │fill pane up with something 16 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 10 ││ │
+02 (C): │fill pane up with something 11 ││ │
+03 (C): │fill pane up with something 12 ││ │
+04 (C): │fill pane up with something 13 ││ │
+05 (C): │fill pane up with something 14 ││ │
+06 (C): │fill pane up with something 15 ││ │
+07 (C): │fill pane up with something 16 ││ │
+08 (C): │fill pane up with something 17 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-7.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-7.snap
index e2c021ed..a0d450ef 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-7.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-7.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
+assertion_line: 1407
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐
-01 (C): │fill pane up with something 10 │
-02 (C): │fill pane up with something 11 │
-03 (C): │fill pane up with something 12 │
-04 (C): │fill pane up with something 13 │
-05 (C): │fill pane up with something 14 │
-06 (C): │fill pane up with something 15 │
-07 (C): │fill pane up with something 16 │
-08 (C): │fill pane up with something 17 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 11 ││ │
+02 (C): │fill pane up with something 12 ││ │
+03 (C): │fill pane up with something 13 ││ │
+04 (C): │fill pane up with something 14 ││ │
+05 (C): │fill pane up with something 15 ││ │
+06 (C): │fill pane up with something 16 ││ │
+07 (C): │fill pane up with something 17 ││ │
+08 (C): │fill pane up with something 18 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-8.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-8.snap
index eea8c7f4..5455f620 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-8.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_down_action-8.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1193
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1409
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐
-01 (C): │fill pane up with something 11 │
-02 (C): │fill pane up with something 12 │
-03 (C): │fill pane up with something 13 │
-04 (C): │fill pane up with something 14 │
-05 (C): │fill pane up with something 15 │
-06 (C): │fill pane up with something 16 │
-07 (C): │fill pane up with something 17 │
-08 (C): │fill pane up with something 18 │
-09 (C): └──────────────────────────────────────┘
-
+7
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-2.snap
index fd5c4f89..20c9331f 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
+assertion_line: 1484
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 12 ││ │
+02 (C): │fill pane up with something 13 ││ │
+03 (C): │fill pane up with something 14 ││ │
+04 (C): │fill pane up with something 15 ││ │
+05 (C): │fill pane up with something 16 ││ │
+06 (C): │fill pane up with something 17 ││ │
+07 (C): │fill pane up with something 18 ││ │
+08 (C): │fill pane up with something 19 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-3.snap
index 7a2e2371..5685baed 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
+assertion_line: 1484
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐
-01 (C): │fill pane up with something 12 │
-02 (C): │fill pane up with something 13 │
-03 (C): │fill pane up with something 14 │
-04 (C): │fill pane up with something 15 │
-05 (C): │fill pane up with something 16 │
-06 (C): │fill pane up with something 17 │
-07 (C): │fill pane up with something 18 │
-08 (C): │fill pane up with something 19 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 11 ││ │
+02 (C): │fill pane up with something 12 ││ │
+03 (C): │fill pane up with something 13 ││ │
+04 (C): │fill pane up with something 14 ││ │
+05 (C): │fill pane up with something 15 ││ │
+06 (C): │fill pane up with something 16 ││ │
+07 (C): │fill pane up with something 17 ││ │
+08 (C): │fill pane up with something 18 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-4.snap
index 8e073396..5ae26d91 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-4.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
+assertion_line: 1484
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐
-01 (C): │fill pane up with something 11 │
-02 (C): │fill pane up with something 12 │
-03 (C): │fill pane up with something 13 │
-04 (C): │fill pane up with something 14 │
-05 (C): │fill pane up with something 15 │
-06 (C): │fill pane up with something 16 │
-07 (C): │fill pane up with something 17 │
-08 (C): │fill pane up with something 18 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 10 ││ │
+02 (C): │fill pane up with something 11 ││ │
+03 (C): │fill pane up with something 12 ││ │
+04 (C): │fill pane up with something 13 ││ │
+05 (C): │fill pane up with something 14 ││ │
+06 (C): │fill pane up with something 15 ││ │
+07 (C): │fill pane up with something 16 ││ │
+08 (C): │fill pane up with something 17 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-5.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-5.snap
index 657ed3e8..e473c1ad 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-5.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-5.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
+assertion_line: 1484
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 3/13 ┐
-01 (C): │fill pane up with something 10 │
-02 (C): │fill pane up with something 11 │
-03 (C): │fill pane up with something 12 │
-04 (C): │fill pane up with something 13 │
-05 (C): │fill pane up with something 14 │
-06 (C): │fill pane up with something 15 │
-07 (C): │fill pane up with something 16 │
-08 (C): │fill pane up with something 17 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 9 ││ │
+02 (C): │fill pane up with something 10 ││ │
+03 (C): │fill pane up with something 11 ││ │
+04 (C): │fill pane up with something 12 ││ │
+05 (C): │fill pane up with something 13 ││ │
+06 (C): │fill pane up with something 14 ││ │
+07 (C): │fill pane up with something 15 ││ │
+08 (C): │fill pane up with something 16 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-6.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-6.snap
index 60f03824..2a584fa3 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-6.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-6.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
+assertion_line: 1484
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 4/13 ┐
-01 (C): │fill pane up with something 9 │
-02 (C): │fill pane up with something 10 │
-03 (C): │fill pane up with something 11 │
-04 (C): │fill pane up with something 12 │
-05 (C): │fill pane up with something 13 │
-06 (C): │fill pane up with something 14 │
-07 (C): │fill pane up with something 15 │
-08 (C): │fill pane up with something 16 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 0/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 13 ││ │
+02 (C): │fill pane up with something 14 ││ │
+03 (C): │fill pane up with something 15 ││ │
+04 (C): │fill pane up with something 16 ││ │
+05 (C): │fill pane up with something 17 ││ │
+06 (C): │fill pane up with something 18 ││ │
+07 (C): │fill pane up with something 19 ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-7.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-7.snap
index 92ac7a86..a24fe8bb 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-7.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_to_bottom_action-7.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1239
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1486
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 0/13 ┐
-01 (C): │fill pane up with something 13 │
-02 (C): │fill pane up with something 14 │
-03 (C): │fill pane up with something 15 │
-04 (C): │fill pane up with something 16 │
-05 (C): │fill pane up with something 17 │
-06 (C): │fill pane up with something 18 │
-07 (C): │fill pane up with something 19 │
-08 (C): │ │
-09 (C): └──────────────────────────────────────┘
-
+6
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-2.snap
index cd8a3061..d7056c6e 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1147
+assertion_line: 1327
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 12 ││ │
+02 (C): │fill pane up with something 13 ││ │
+03 (C): │fill pane up with something 14 ││ │
+04 (C): │fill pane up with something 15 ││ │
+05 (C): │fill pane up with something 16 ││ │
+06 (C): │fill pane up with something 17 ││ │
+07 (C): │fill pane up with something 18 ││ │
+08 (C): │fill pane up with something 19 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-3.snap
index d61adfbc..7ccbbdea 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1147
+assertion_line: 1327
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 1/13 ┐
-01 (C): │fill pane up with something 12 │
-02 (C): │fill pane up with something 13 │
-03 (C): │fill pane up with something 14 │
-04 (C): │fill pane up with something 15 │
-05 (C): │fill pane up with something 16 │
-06 (C): │fill pane up with something 17 │
-07 (C): │fill pane up with something 18 │
-08 (C): │fill pane up with something 19 │
-09 (C): └──────────────────────────────────────┘
+00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐┌ Pane #2 ─────────────────────────────┐
+01 (C): │fill pane up with something 11 ││ │
+02 (C): │fill pane up with something 12 ││ │
+03 (C): │fill pane up with something 13 ││ │
+04 (C): │fill pane up with something 14 ││ │
+05 (C): │fill pane up with something 15 ││ │
+06 (C): │fill pane up with something 16 ││ │
+07 (C): │fill pane up with something 17 ││ │
+08 (C): │fill pane up with something 18 ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-4.snap
index a2ef5fa2..18a949ac 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_scroll_up_action-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1149
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1329
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ────────────── SCROLL: 2/13 ┐
-01 (C): │fill pane up with something 11 │
-02 (C): │fill pane up with something 12 │
-03 (C): │fill pane up with something 13 │
-04 (C): │fill pane up with something 14 │
-05 (C): │fill pane up with something 15 │
-06 (C): │fill pane up with something 16 │
-07 (C): │fill pane up with something 17 │
-08 (C): │fill pane up with something 18 │
-09 (C): └──────────────────────────────────────┘
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-2.snap
index e20094c2..e9727e39 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1775
+assertion_line: 2186
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
+04 (C): │ │ │ │
+05 (C): │ │ │ │
+06 (C): │ │ │ │
+07 (C): │ └──────────────────────────────────────┘ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-3.snap
index 105baa7f..70970461 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1775
+assertion_line: 2186
expression: "format!(\"{}\", snapshot)"
---
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
01 (C): │ │
02 (C): │ │
-03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
-04 (C): │ │ │ │
-05 (C): │ │ │ │
-06 (C): │ │ │ │
-07 (C): │ └──────────────────────────────────────┘ │
+03 (C): │ │
+04 (C): │ │
+05 (C): │ │
+06 (C): │ │
+07 (C): │ │
08 (C): │ │
09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-4.snap
index 84f72323..e9727e39 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-4.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1775
+assertion_line: 2186
expression: "format!(\"{}\", snapshot)"
---
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
01 (C): │ │
02 (C): │ │
-03 (C): │ │
-04 (C): │ │
-05 (C): │ │
-06 (C): │ │
-07 (C): │ │
+03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
+04 (C): │ │ │ │
+05 (C): │ │ │ │
+06 (C): │ │ │ │
+07 (C): │ └──────────────────────────────────────┘ │
08 (C): │ │
09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-5.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-5.snap
index 105baa7f..302dd37c 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-5.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_floating_panes-5.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1775
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2188
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
-01 (C): │ │
-02 (C): │ │
-03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
-04 (C): │ │ │ │
-05 (C): │ │ │ │
-06 (C): │ │ │ │
-07 (C): │ └──────────────────────────────────────┘ │
-08 (C): │ │
-09 (C): └──────────────────────────────────────────────────────────────────────────────┘
-
+4
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-2.snap
index d7a84628..a5049d6c 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1427
+assertion_line: 1739
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ │
+04 (C): │ │
+05 (C): │ │
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-3.snap
index 25e1f8df..3b14d03c 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_full_screen_action-3.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1427
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1741
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #1 ─────────────────────────────────────────────────────────────────────┐
-01 (C): │ │
-02 (C): │ │
-03 (C): │ │
-04 (C): │ │
-05 (C): │ │
-06 (C): │ │
-07 (C): │ │
-08 (C): │ │
-09 (C): └──────────────────────────────────────────────────────────────────────────────┘
-
+2
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-2.snap
index 0cffa2c9..a6119cc8 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1737
+assertion_line: 2131
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
+01 (C): │ │
+02 (C): │ │
+03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
+04 (C): │ │ │ │
+05 (C): │ │ │ │
+06 (C): │ │ │ │
+07 (C): │ └──────────────────────────────────────┘ │
+08 (C): │ │
+09 (C): └──────────────────────────────────────────────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-3.snap
index 81d9b259..b612c671 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-3.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1737
+assertion_line: 2131
expression: "format!(\"{}\", snapshot)"
---
-00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
-01 (C): │ │
-02 (C): │ │
-03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
-04 (C): │ │ │ │
-05 (C): │ │ │ │
-06 (C): │ │ │ │
-07 (C): │ └──────────────────────────────────────┘ │
-08 (C): │ │
-09 (C): └──────────────────────────────────────────────────────────────────────────────┘
+00 (C): ┌ Pane #2 ─────────────────────────────┐┌ Pane #1 ─────────────────────────────┐
+01 (C): │ ││ │
+02 (C): │ ││ │
+03 (C): │ ││ │
+04 (C): │ ││ │
+05 (C): │ ││ │
+06 (C): │ ││ │
+07 (C): │ ││ │
+08 (C): │ ││ │
+09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-4.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-4.snap
index 3ee6542f..dc2d3697 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-4.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_embed_or_float-4.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1737
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 2133
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): ┌ Pane #2 ─────────────────────────────┐┌ Pane #1 ─────────────────────────────┐
-01 (C): │ ││ │
-02 (C): │ ││ │
-03 (C): │ ││ │
-04 (C): │ ││ │
-05 (C): │ ││ │
-06 (C): │ ││ │
-07 (C): │ ││ │
-08 (C): │ ││ │
-09 (C): └──────────────────────────────────────┘└──────────────────────────────────────┘
-
+3
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-2.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-2.snap
index 2e0fc915..5d8c103b 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-2.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-2.snap
@@ -1,16 +1,16 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1457
+assertion_line: 1776
expression: "format!(\"{}\", snapshot)"
---
-00 (C):
-01 (C):
-02 (C):
-03 (C):
-04 (C):
-05 (C):
-06 (C):
-07 (C):
-08 (C):
-09 (C):
+00 (C): │
+01 (C): │
+02 (C): │
+03 (C): │
+04 (C): │
+05 (C): │
+06 (C): │
+07 (C): │
+08 (C): │
+09 (C): │
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-3.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-3.snap
index 395ce350..160be32e 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-3.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_toggle_pane_frames_action-3.snap
@@ -1,16 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1457
-expression: "format!(\"{}\", snapshot)"
+assertion_line: 1778
+expression: "format!(\"{}\", snapshot_count)"
---
-00 (C): │
-01 (C): │
-02 (C): │
-03 (C): │
-04 (C): │
-05 (C): │
-06 (C): │
-07 (C): │
-08 (C): │
-09 (C): │
-
+2
diff --git a/zellij-server/src/wasm_vm.rs b/zellij-server/src/wasm_vm.rs
index dfbaa061..ed9f11e4 100644
--- a/zellij-server/src/wasm_vm.rs
+++ b/zellij-server/src/wasm_vm.rs
@@ -234,8 +234,10 @@ pub(crate) fn wasm_thread_main(
.get_function("update")
.with_context(err_context)?;
wasi_write_object(&plugin_env.wasi_env, &event);
- update.call(&[]).or_else::<anyError, _>(|e| {
- match e.downcast::<serde_json::Error>() {
+ let update_return =
+ update.call(&[]).or_else::<anyError, _>(|e| match e
+ .downcast::<serde_json::Error>()
+ {
Ok(_) => panic!(
"{}",
anyError::new(VersionMismatchError::new(
@@ -245,10 +247,13 @@ pub(crate) fn wasm_thread_main(
))
),
Err(e) => Err(e).with_context(err_context),
- }
- })?;
+ })?;
+ let should_render = match update_return.get(0) {
+ Some(Value::I32(n)) => *n == 1,
+ _ => false,
+ };
- if *rows > 0 && *columns > 0 {
+ if *rows > 0 && *columns > 0 && should_render {
let render = instance
.exports
.get_function("render")