aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrooks Rady <b.j.rady@gmail.com>2021-08-28 17:46:24 +0100
committerGitHub <noreply@github.com>2021-08-28 17:46:24 +0100
commit76a5bc8a05c33fb3f46cff1ce95aa1af694b9927 (patch)
treeaa0c9e4b317d9d01906d11817b3b57f0047d7be8 /src
parentfix(plugin): fix set_timeout() host function (diff)
downloadsl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.tar.gz
sl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.tar.xz
sl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.zip
feat(ui): overhauled resize and layout systems
* refactor(panes): move to parametric pane sizes * Fixed the simpler errors by casting to usize * The least I can do is pass the formatting check... * Move to stable toolchain * Well, it compiles? * And now it doesn't! ;) * Baseline functionality with the new Dimension type * Working POC for percent-based resizing * REVERT THIS COMMIT – DELETES TESTS * Perfected the discrete resize algorithm * Fixed fixed-size panes * Basic bidirectional resize * feat(resize): finalised parametric resize algorithm * Reduce the logging level a bit * Fixed nested layouts using percents * Bug squishing for implicit sizing * Here is a funky (read: rubbish) rounding approach * And now it's gone again! * Improve discretisation algorithm to fix rounding errors * Fix the last layout bug (maybe?) * Mixed explicit and implied percents work now * Let's pretend that didn't happen... * Make things a bit less crashy * Crash slightly more for now (to find bugs) * Manaually splitting of panes works now * Start moving to percent-based resizes * Everything but fullscreen seems to be working * Fix compilatation errors * Culled a massive amount of border code * Why not pause to please rustfmt? * Turns out I was still missing a few tests... * Bringing back even more tests! * Fix tests and pane boarders * Fix the resize system without gaps * Fix content offset * Fixed a bug with pane closing * Add a hack to fix setting of the viewport * Fix toggling between shared borders and frames * fix(tests): make e2e properly use PaneGeom * style(fmt): make rustfmt happy * Revert unintentional rounding of borders * Purge some old borderless stuff * Fix busted tab-bar shrinking * Update E2E tests * Finish implementing fullscreen! * Don't crash anymore? * Fix (almost) all tests * Fix a lack of tab-stops * All tests passing * I really can't be bothered to debug a CI issue * Tie up loose ends * Knock out some lingering FIXMEs * Continue to clean things up * Change some naming and address FIXMEs * Cull more code + FIXMEs * Refactor of the resize system + polish * Only draw frames when absolutely necessary * Fix the tab-bar crash * Fix rendering of boarders on reattach * Fix resizing at small pane sizes * Deduplicate code in the layout system * Update tab-bar WASM * Fixed the pinching of panes during resize * Unexpose needlessly public type * Add back a lost test * Re-add tab tests and get them to compile * All tabs need layouts * Start fixing tests + bug in main * Stabilize the resize algorithm rounding * All tests from main are now passing * Cull more dead code
Diffstat (limited to 'src')
-rw-r--r--src/tests/e2e/cases.rs442
-rw-r--r--src/tests/e2e/remote_runner.rs179
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap36
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap2
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap44
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap44
16 files changed, 451 insertions, 526 deletions
diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs
index d28ae2f7..2e09b53f 100644
--- a/src/tests/e2e/cases.rs
+++ b/src/tests/e2e/cases.rs
@@ -1,7 +1,7 @@
#![allow(unused)]
use ::insta::assert_snapshot;
-use zellij_utils::{pane_size::PositionAndSize, position::Position};
+use zellij_utils::{pane_size::Size, position::Position};
use rand::Rng;
@@ -71,19 +71,16 @@ pub fn normal_mouse_report(position: Position, button: u8) -> Vec<u8> {
#[test]
#[ignore]
pub fn starts_with_one_terminal() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("starts_with_one_terminal", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("starts_with_one_terminal", fake_win_size)
.add_step(Step {
name: "Wait for app to load",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
step_is_complete = true;
}
@@ -97,20 +94,17 @@ pub fn starts_with_one_terminal() {
#[test]
#[ignore]
pub fn split_terminals_vertically() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -139,23 +133,16 @@ pub fn split_terminals_vertically() {
#[test]
#[ignore]
pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() {
- let fake_win_size = PositionAndSize {
- cols: 8,
- rows: 20,
- x: 0,
- y: 0,
- ..Default::default()
- };
+ let fake_win_size = Size { cols: 8, rows: 20 };
let last_snapshot = RemoteRunner::new(
"cannot_split_terminals_vertically_when_active_terminal_is_too_small",
fake_win_size,
- None,
)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) {
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) {
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
// back to normal mode after split
@@ -178,7 +165,7 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() {
name: "Wait for text to appear",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(5, 2) && remote_terminal.snapshot_contains("Hi!")
+ if remote_terminal.cursor_position_is(6, 2) && remote_terminal.snapshot_contains("Hi!")
{
step_is_complete = true;
}
@@ -192,19 +179,16 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() {
#[test]
#[ignore]
pub fn scrolling_inside_a_pane() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -279,19 +263,16 @@ pub fn scrolling_inside_a_pane() {
#[test]
#[ignore]
pub fn toggle_pane_fullscreen() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("toggle_pane_fullscreen", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("toggle_pane_fullscreen", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -321,7 +302,7 @@ pub fn toggle_pane_fullscreen() {
name: "Wait for pane to become fullscreen",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(2, 2) {
+ if remote_terminal.cursor_position_is(3, 2) {
// cursor is in full screen pane now
step_is_complete = true;
}
@@ -335,19 +316,16 @@ pub fn toggle_pane_fullscreen() {
#[test]
#[ignore]
pub fn open_new_tab() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("open_new_tab", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("open_new_tab", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -377,7 +355,7 @@ pub fn open_new_tab() {
name: "Wait for new tab to open",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.cursor_position_is(3, 2)
&& remote_terminal.tip_appears()
&& remote_terminal.snapshot_contains("Tab #2")
&& remote_terminal.status_bar_appears()
@@ -395,19 +373,16 @@ pub fn open_new_tab() {
#[test]
#[ignore]
pub fn close_pane() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("close_pane", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("close_pane", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -437,7 +412,7 @@ pub fn close_pane() {
name: "Wait for pane to close",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(2, 2) && remote_terminal.tip_appears() {
+ if remote_terminal.cursor_position_is(3, 2) && remote_terminal.tip_appears() {
// cursor is in the original pane
step_is_complete = true;
}
@@ -451,19 +426,16 @@ pub fn close_pane() {
#[test]
#[ignore]
pub fn exit_zellij() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("exit_zellij", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("exit_zellij", fake_win_size)
.add_step(Step {
name: "Wait for app to load",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&QUIT);
step_is_complete = true;
@@ -490,19 +462,16 @@ pub fn exit_zellij() {
#[test]
#[ignore]
pub fn closing_last_pane_exits_zellij() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("closing_last_pane_exits_zellij", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("closing_last_pane_exits_zellij", fake_win_size)
.add_step(Step {
name: "Close pane",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&CLOSE_PANE_IN_PANE_MODE);
@@ -528,19 +497,16 @@ pub fn closing_last_pane_exits_zellij() {
#[test]
#[ignore]
pub fn resize_pane() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("resize_pane", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("resize_pane", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -570,7 +536,7 @@ pub fn resize_pane() {
name: "Wait for pane to be resized",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(53, 2) && remote_terminal.tip_appears() {
+ if remote_terminal.cursor_position_is(57, 2) && remote_terminal.tip_appears() {
// pane has been resized
step_is_complete = true;
}
@@ -584,19 +550,16 @@ pub fn resize_pane() {
#[test]
#[ignore]
pub fn lock_mode() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("lock_mode", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("lock_mode", fake_win_size)
.add_step(Step {
name: "Enter lock mode",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&LOCK_MODE);
step_is_complete = true;
@@ -621,7 +584,7 @@ pub fn lock_mode() {
name: "Wait for terminal to render sent keys",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(6, 2) {
+ if remote_terminal.cursor_position_is(7, 2) {
// text has been entered into the only terminal pane
step_is_complete = true;
}
@@ -636,19 +599,16 @@ pub fn lock_mode() {
#[ignore]
pub fn resize_terminal_window() {
// this checks the resizing of the whole terminal window (reaction to SIGWINCH) and not just one pane
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("resize_terminal_window", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("resize_terminal_window", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -675,7 +635,7 @@ pub fn resize_terminal_window() {
name: "wait for terminal to be resized and app to be re-rendered",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(43, 2) && remote_terminal.tip_appears() {
+ if remote_terminal.cursor_position_is(53, 2) && remote_terminal.tip_appears() {
// size has been changed
step_is_complete = true;
}
@@ -689,98 +649,87 @@ pub fn resize_terminal_window() {
#[test]
#[ignore]
pub fn detach_and_attach_session() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let session_id = rand::thread_rng().gen_range(0..10000);
- let session_name = format!("session_{}", session_id);
- let last_snapshot = RemoteRunner::new(
- "detach_and_attach_session",
- fake_win_size,
- Some(session_name),
- )
- .add_step(Step {
- name: "Split pane to the right",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) {
- remote_terminal.send_key(&PANE_MODE);
- remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
- // back to normal mode after split
- remote_terminal.send_key(&ENTER);
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Send some text to the active pane",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() {
- // new pane has been opened and focused
- remote_terminal.send_key(&"I am some text".as_bytes());
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Detach session",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(77, 2) {
- remote_terminal.send_key(&SESSION_MODE);
- remote_terminal.send_key(&DETACH_IN_SESSION_MODE);
- // text has been entered
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Reattach session",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if !remote_terminal.status_bar_appears() {
- // we don't see the toolbar, so we can assume we've already detached
- remote_terminal.attach_to_original_session();
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Wait for session to be attached",
- instruction: |remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(77, 2) {
- // we're back inside the session
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .run_all_steps();
+ let last_snapshot = RemoteRunner::new("detach_and_attach_session", fake_win_size)
+ .add_step(Step {
+ name: "Split pane to the right",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
+ {
+ remote_terminal.send_key(&PANE_MODE);
+ remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
+ // back to normal mode after split
+ remote_terminal.send_key(&ENTER);
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Send some text to the active pane",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() {
+ // new pane has been opened and focused
+ remote_terminal.send_key(&"I am some text".as_bytes());
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Detach session",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(77, 2) {
+ remote_terminal.send_key(&SESSION_MODE);
+ remote_terminal.send_key(&DETACH_IN_SESSION_MODE);
+ // text has been entered
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Reattach session",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if !remote_terminal.status_bar_appears() {
+ // we don't see the toolbar, so we can assume we've already detached
+ remote_terminal.attach_to_original_session();
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Wait for session to be attached",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(77, 2) {
+ // we're back inside the session
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .run_all_steps();
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn accepts_basic_layout() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
let layout_file_name = "three-panes-with-nesting.yaml";
- let last_snapshot = RemoteRunner::new_with_layout("accepts_basic_layout", fake_win_size, layout_file_name, None)
+ let last_snapshot = RemoteRunner::new_with_layout("accepts_basic_layout", fake_win_size, layout_file_name)
.add_step(Step {
name: "Wait for app to load",
instruction: |remote_terminal: RemoteTerminal| -> bool {
@@ -800,20 +749,17 @@ pub fn accepts_basic_layout() {
#[test]
#[ignore]
fn focus_pane_with_mouse() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2)
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
{
remote_terminal.send_key(&PANE_MODE);
remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
@@ -853,103 +799,95 @@ fn focus_pane_with_mouse() {
#[test]
#[ignore]
pub fn scrolling_inside_a_pane_with_mouse() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot =
- RemoteRunner::new("scrolling_inside_a_pane_with_mouse", fake_win_size, None)
- .add_step(Step {
- name: "Split pane to the right",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.status_bar_appears()
- && remote_terminal.cursor_position_is(2, 2)
- {
- remote_terminal.send_key(&PANE_MODE);
- remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
- // back to normal mode after split
- remote_terminal.send_key(&ENTER);
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Fill terminal with text",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() {
- // cursor is in the newly opened second pane
- remote_terminal.send_key(&format!("{:0<56}", "line1 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line2 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line3 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line4 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line5 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line6 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line7 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line8 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line9 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line10 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line11 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line12 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line13 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line14 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line15 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line16 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line17 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line18 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<58}", "line19 ").as_bytes());
- remote_terminal.send_key(&format!("{:0<57}", "line20 ").as_bytes());
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Scroll up inside pane",
- instruction: |mut remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(118, 20) {
- // all lines have been written to the pane
- remote_terminal.send_key(&normal_mouse_report(Position::new(2, 64), 64));
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .add_step(Step {
- name: "Wait for scroll to finish",
- instruction: |remote_terminal: RemoteTerminal| -> bool {
- let mut step_is_complete = false;
- if remote_terminal.cursor_position_is(118, 20)
- && remote_terminal.snapshot_contains("line1 ")
- {
- // scrolled up one line
- step_is_complete = true;
- }
- step_is_complete
- },
- })
- .run_all_steps();
+ let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane_with_mouse", fake_win_size)
+ .add_step(Step {
+ name: "Split pane to the right",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2)
+ {
+ remote_terminal.send_key(&PANE_MODE);
+ remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE);
+ // back to normal mode after split
+ remote_terminal.send_key(&ENTER);
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Fill terminal with text",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() {
+ // cursor is in the newly opened second pane
+ remote_terminal.send_key(&format!("{:0<56}", "line1 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line2 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line3 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line4 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line5 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line6 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line7 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line8 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line9 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line10 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line11 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line12 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line13 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line14 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line15 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line16 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line17 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line18 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<58}", "line19 ").as_bytes());
+ remote_terminal.send_key(&format!("{:0<57}", "line20 ").as_bytes());
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Scroll up inside pane",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(118, 20) {
+ // all lines have been written to the pane
+ remote_terminal.send_key(&normal_mouse_report(Position::new(2, 64), 64));
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .add_step(Step {
+ name: "Wait for scroll to finish",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(118, 20)
+ && remote_terminal.snapshot_contains("line1 ")
+ {
+ // scrolled up one line
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ })
+ .run_all_steps();
assert_snapshot!(last_snapshot);
}
#[test]
#[ignore]
pub fn start_without_pane_frames() {
- let fake_win_size = PositionAndSize {
+ let fake_win_size = Size {
cols: 120,
rows: 24,
- x: 0,
- y: 0,
- ..Default::default()
};
- let last_snapshot = RemoteRunner::new_without_frames("no_pane_frames", fake_win_size, None)
+ let last_snapshot = RemoteRunner::new_without_frames("no_pane_frames", fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
diff --git a/src/tests/e2e/remote_runner.rs b/src/tests/e2e/remote_runner.rs
index 819bee86..de9c35ed 100644
--- a/src/tests/e2e/remote_runner.rs
+++ b/src/tests/e2e/remote_runner.rs
@@ -1,7 +1,7 @@
use zellij_tile::data::Palette;
-use zellij_utils::pane_size::PositionAndSize;
use zellij_server::panes::TerminalPane;
+use zellij_utils::pane_size::{Dimension, PaneGeom, Size};
use zellij_utils::{vte, zellij_tile};
use ssh2::Session;
@@ -15,6 +15,7 @@ const ZELLIJ_LAYOUT_PATH: &str = "/usr/src/zellij/fixtures/layouts";
const CONNECTION_STRING: &str = "127.0.0.1:2222";
const CONNECTION_USERNAME: &str = "test";
const CONNECTION_PASSWORD: &str = "test";
+const SESSION_NAME: &str = "e2e-test";
fn ssh_connect() -> ssh2::Session {
let tcp = TcpStream::connect(CONNECTION_STRING).unwrap();
@@ -27,7 +28,7 @@ fn ssh_connect() -> ssh2::Session {
sess
}
-fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: PositionAndSize) {
+fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: Size) {
let (columns, rows) = (win_size.cols as u32, win_size.rows as u32);
channel
.request_pty("xterm", None, Some((columns, rows, 0, 0)))
@@ -39,60 +40,51 @@ fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: PositionAndSi
channel.flush().unwrap();
}
-fn start_zellij(channel: &mut ssh2::Channel, session_name: Option<&String>) {
- match session_name.as_ref() {
- Some(name) => {
- channel
- .write_all(
- format!("{} --session {}\n", ZELLIJ_EXECUTABLE_LOCATION, name).as_bytes(),
- )
- .unwrap();
- }
- None => {
- channel
- .write_all(format!("{}\n", ZELLIJ_EXECUTABLE_LOCATION).as_bytes())
- .unwrap();
- }
- };
+fn stop_zellij(channel: &mut ssh2::Channel) {
+ channel
+ .write_all("killall -KILL zellij\n".as_bytes())
+ .unwrap();
+}
+
+fn start_zellij(channel: &mut ssh2::Channel) {
+ stop_zellij(channel);
+ channel
+ .write_all(
+ format!(
+ "{} --session {}\n",
+ ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME
+ )
+ .as_bytes(),
+ )
+ .unwrap();
channel.flush().unwrap();
}
fn start_zellij_without_frames(channel: &mut ssh2::Channel) {
+ stop_zellij(channel);
channel
- .write_all(format!("{} options --no-pane-frames\n", ZELLIJ_EXECUTABLE_LOCATION).as_bytes())
+ .write_all(
+ format!(
+ "{} --session {} options --no-pane-frames\n",
+ ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME
+ )
+ .as_bytes(),
+ )
.unwrap();
channel.flush().unwrap();
}
-fn start_zellij_with_layout(
- channel: &mut ssh2::Channel,
- layout_path: &str,
- session_name: Option<&String>,
-) {
- match session_name.as_ref() {
- Some(name) => {
- channel
- .write_all(
- format!(
- "{} --layout-path {} --session {}\n",
- ZELLIJ_EXECUTABLE_LOCATION, layout_path, name
- )
- .as_bytes(),
- )
- .unwrap();
- }
- None => {
- channel
- .write_all(
- format!(
- "{} --layout-path {}\n",
- ZELLIJ_EXECUTABLE_LOCATION, layout_path
- )
- .as_bytes(),
- )
- .unwrap();
- }
- };
+fn start_zellij_with_layout(channel: &mut ssh2::Channel, layout_path: &str) {
+ stop_zellij(channel);
+ channel
+ .write_all(
+ format!(
+ "{} --layout-path {} --session {}\n",
+ ZELLIJ_EXECUTABLE_LOCATION, layout_path, SESSION_NAME
+ )
+ .as_bytes(),
+ )
+ .unwrap();
channel.flush().unwrap();
}
@@ -119,7 +111,6 @@ pub fn take_snapshot(terminal_output: &mut TerminalPane) -> String {
pub struct RemoteTerminal<'a> {
channel: &'a mut ssh2::Channel,
- session_name: Option<&'a String>,
cursor_x: usize,
cursor_y: usize,
current_snapshot: String,
@@ -174,12 +165,7 @@ impl<'a> RemoteTerminal<'a> {
pub fn attach_to_original_session(&mut self) {
self.channel
.write_all(
- format!(
- "{} attach {}\n",
- ZELLIJ_EXECUTABLE_LOCATION,
- self.session_name.unwrap()
- )
- .as_bytes(),
+ format!("{} attach {}\n", ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME).as_bytes(),
)
.unwrap();
self.channel.flush().unwrap();
@@ -198,33 +184,37 @@ pub struct RemoteRunner {
vte_parser: vte::Parser,
terminal_output: TerminalPane,
channel: ssh2::Channel,
- session_name: Option<String>,
test_name: &'static str,
currently_running_step: Option<String>,
retries_left: usize,
- win_size: PositionAndSize,
+ win_size: Size,
layout_file_name: Option<&'static str>,
without_frames: bool,
}
impl RemoteRunner {
- pub fn new(
- test_name: &'static str,
- win_size: PositionAndSize,
- session_name: Option<String>,
- ) -> Self {
+ pub fn new(test_name: &'static str, win_size: Size) -> Self {
let sess = ssh_connect();
let mut channel = sess.channel_session().unwrap();
let vte_parser = vte::Parser::new();
- let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index
+ let mut rows = Dimension::fixed(win_size.rows);
+ let mut cols = Dimension::fixed(win_size.cols);
+ rows.set_inner(win_size.rows);
+ cols.set_inner(win_size.cols);
+ let pane_geom = PaneGeom {
+ x: 0,
+ y: 0,
+ rows,
+ cols,
+ };
+ let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index
setup_remote_environment(&mut channel, win_size);
- start_zellij(&mut channel, session_name.as_ref());
+ start_zellij(&mut channel);
RemoteRunner {
steps: vec![],
channel,
terminal_output,
vte_parser,
- session_name,
test_name,
currently_running_step: None,
current_step_index: 0,
@@ -234,15 +224,21 @@ impl RemoteRunner {
without_frames: false,
}
}
- pub fn new_without_frames(
- test_name: &'static str,
- win_size: PositionAndSize,
- session_name: Option<String>,
- ) -> Self {
+ pub fn new_without_frames(test_name: &'static str, win_size: Size) -> Self {
let sess = ssh_connect();
let mut channel = sess.channel_session().unwrap();
let vte_parser = vte::Parser::new();
- let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index
+ let mut rows = Dimension::fixed(win_size.rows);
+ let mut cols = Dimension::fixed(win_size.cols);
+ rows.set_inner(win_size.rows);
+ cols.set_inner(win_size.cols);
+ let pane_geom = PaneGeom {
+ x: 0,
+ y: 0,
+ rows,
+ cols,
+ };
+ let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index
setup_remote_environment(&mut channel, win_size);
start_zellij_without_frames(&mut channel);
RemoteRunner {
@@ -250,7 +246,6 @@ impl RemoteRunner {
channel,
terminal_output,
vte_parser,
- session_name,
test_name,
currently_running_step: None,
current_step_index: 0,
@@ -262,27 +257,31 @@ impl RemoteRunner {
}
pub fn new_with_layout(
test_name: &'static str,
- win_size: PositionAndSize,
+ win_size: Size,
layout_file_name: &'static str,
- session_name: Option<String>,
) -> Self {
let remote_path = Path::new(ZELLIJ_LAYOUT_PATH).join(layout_file_name);
let sess = ssh_connect();
let mut channel = sess.channel_session().unwrap();
let vte_parser = vte::Parser::new();
- let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index
+ let mut rows = Dimension::fixed(win_size.rows);
+ let mut cols = Dimension::fixed(win_size.cols);
+ rows.set_inner(win_size.rows);
+ cols.set_inner(win_size.cols);
+ let pane_geom = PaneGeom {
+ x: 0,
+ y: 0,
+ rows,
+ cols,
+ };
+ let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index
setup_remote_environment(&mut channel, win_size);
- start_zellij_with_layout(
- &mut channel,
- &remote_path.to_string_lossy(),
- session_name.as_ref(),
- );
+ start_zellij_with_layout(&mut channel, &remote_path.to_string_lossy());
RemoteRunner {
steps: vec![],
channel,
terminal_output,
vte_parser,
- session_name,
test_name,
currently_running_step: None,
current_step_index: 0,
@@ -307,7 +306,6 @@ impl RemoteRunner {
cursor_y,
current_snapshot,
channel: &mut self.channel,
- session_name: self.session_name.as_ref(),
}
}
pub fn run_next_step(&mut self) {
@@ -319,7 +317,6 @@ impl RemoteRunner {
cursor_y,
current_snapshot,
channel: &mut self.channel,
- session_name: self.session_name.as_ref(),
};
let instruction = next_step.instruction;
self.currently_running_step = Some(String::from(next_step.name));
@@ -332,32 +329,22 @@ impl RemoteRunner {
self.steps.get(self.current_step_index).is_some()
}
fn restart_test(&mut self) -> String {
- let session_name = self.session_name.as_ref().map(|name| {
- // this is so that we don't try to connect to the previous session if it's still stuck
- // inside the container
- format!("{}_{}", name, self.retries_left)
- });
if let Some(layout_file_name) = self.layout_file_name.as_ref() {
// let mut new_runner = RemoteRunner::new_with_layout(self.test_name, self.win_size, Path::new(&local_layout_path), session_name);
- let mut new_runner = RemoteRunner::new_with_layout(
- self.test_name,
- self.win_size,
- layout_file_name,
- session_name,
- );
+ let mut new_runner =
+ RemoteRunner::new_with_layout(self.test_name, self.win_size, layout_file_name);
new_runner.retries_left = self.retries_left - 1;
new_runner.replace_steps(self.steps.clone());
drop(std::mem::replace(self, new_runner));
self.run_all_steps()
} else if self.without_frames {
- let mut new_runner =
- RemoteRunner::new_without_frames(self.test_name, self.win_size, session_name);
+ let mut new_runner = RemoteRunner::new_without_frames(self.test_name, self.win_size);
new_runner.retries_left = self.retries_left - 1;
new_runner.replace_steps(self.steps.clone());
drop(std::mem::replace(self, new_runner));
self.run_all_steps()
} else {
- let mut new_runner = RemoteRunner::new(self.test_name, self.win_size, session_name);
+ let mut new_runner = RemoteRunner::new(self.test_name, self.win_size);
new_runner.retries_left = self.retries_left - 1;
new_runner.replace_steps(self.steps.clone());
drop(std::mem::replace(self, new_runner));
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap
index 91c83a44..d37f23e3 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap
@@ -3,23 +3,23 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
-
-────────
-$ Hi!β–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij
+β”Œβ”€β”€β”€β”€β”€β”€β”
+β”‚$ Hi!β–ˆβ”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap
index e7487028..af676286 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-─ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
-$ β–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+β”‚$ β–ˆ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap
index 92484dd6..65ebb338 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────────────────────┐
β”‚$ β”‚β”‚$ I am some textβ–ˆ β”‚
β”‚ β”‚β”‚ β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap
index 5a409760..3578cf5e 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────────────────────┐
β”‚$ β–ˆ β”‚β”‚$ β”‚
β”‚ β”‚β”‚ β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap
index 0796484c..cf59dc66 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-─ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
-$ nabcβ–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+β”‚$ nabcβ–ˆ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
-- INTERFACE LOCKED --
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap
index f9b84f68..ca19eb01 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°ξ‚° Tab #2 ξ‚°
-─ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
-$ β–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°ξ‚° Tab #2 ξ‚°
+β”Œ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+β”‚$ β–ˆ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap
index ae130ab5..4220c0c8 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ───────────────────────────────────────────────────────────┐
-β”‚$ β”‚β”‚$ β–ˆ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ───────────────────────────────────────────────────────┐
+β”‚$ β”‚β”‚$ β–ˆ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap
index b329e8c6..6eea2929 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────────────────────┐
-β”‚$ β”‚β”‚$ β–ˆ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β”‚ β”‚β”‚ β”‚
-β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ───────────────────────────────────────┐
+β”‚$ β”‚β”‚$ β–ˆ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β”‚ β”‚β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap
index a33ab400..f9f23c1c 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────── SCROLL: 1/1 ┐
β”‚$ β”‚β”‚$ line1 00000000000000000000000000000000000000000000000000β”‚
β”‚ β”‚β”‚line2 0000000000000000000000000000000000000000000000000000β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap
index dfed0611..5ad40ae7 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────── SCROLL: 1/1 ┐
β”‚$ β”‚β”‚$ line1 00000000000000000000000000000000000000000000000000β”‚
β”‚ β”‚β”‚line2 0000000000000000000000000000000000000000000000000000β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap
index 36f0e6d8..b1f54404 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
β”Œ Pane #1 β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œ Pane #2 ─────────────────────────────────────────────────┐
β”‚$ β”‚β”‚$ β–ˆ β”‚
β”‚ β”‚β”‚ β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap
index 85c6db54..21f47e56 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap
@@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
$ β”‚$ β–ˆ
β”‚
β”‚
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap
index e7487028..af676286 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-─ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
-$ β–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+β”‚$ β–ˆ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.
diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap
index 9108099d..347b0a70 100644
--- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap
+++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap
@@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs
expression: last_snapshot
---
- Zellij ξ‚° Tab #1 ξ‚°
-─ Pane #2 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
-$ β–ˆ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Zellij (e2e-test) ξ‚° Tab #1 ξ‚°
+β”Œ Pane #2 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+β”‚$ β–ˆ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β”‚ β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Ctrl +ξ‚°ξ‚° <g> LOCK ξ‚°ξ‚° <p> PANE ξ‚°ξ‚° <t> TAB ξ‚°ξ‚° <r> RESIZE ξ‚°ξ‚° <s> SCROLL ξ‚°ξ‚° <o> SESSION ξ‚°ξ‚° <q> QUIT ξ‚°
Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes.