feat(ux): pin floating panes (#3876)
* working * ui indication * add keybinding * add to plugin panes * fix with multiple cursors * toggle with the mouse * fix e2e tests and add new one * some cleanups * add to layouts * make mouse click more lenient * allow setting a new floating pane as pinned * make toggle work throughthe command line * add to plugin api * get tests to pass * style(fmt): rustfmt
This commit is contained in:
parent
ea57d9a730
commit
dd291e2a1f
101 changed files with 1039 additions and 244 deletions
|
|
@ -37,6 +37,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Locked"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Locked"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Locked"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Locked"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Locked"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "m" {{ SwitchToMode "Normal"; }}
|
bind "m" {{ SwitchToMode "Normal"; }}
|
||||||
|
|
@ -233,6 +234,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Normal"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "{primary_modifier} h" {{ SwitchToMode "Normal"; }}
|
bind "{primary_modifier} h" {{ SwitchToMode "Normal"; }}
|
||||||
|
|
@ -440,6 +442,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Normal"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "n" "Tab" {{ MovePane; }}
|
bind "n" "Tab" {{ MovePane; }}
|
||||||
|
|
@ -618,6 +621,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Normal"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "{primary_modifier} h" {{ SwitchToMode "Normal"; }}
|
bind "{primary_modifier} h" {{ SwitchToMode "Normal"; }}
|
||||||
|
|
@ -805,6 +809,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Normal"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "n" "Tab" {{ MovePane; }}
|
bind "n" "Tab" {{ MovePane; }}
|
||||||
|
|
@ -967,6 +972,7 @@ keybinds clear-defaults=true {{
|
||||||
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
bind "w" {{ ToggleFloatingPanes; SwitchToMode "Normal"; }}
|
||||||
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
bind "e" {{ TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }}
|
||||||
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
bind "c" {{ SwitchToMode "RenamePane"; PaneNameInput 0;}}
|
||||||
|
bind "i" {{ TogglePanePinned; SwitchToMode "Normal"; }}
|
||||||
}}
|
}}
|
||||||
move {{
|
move {{
|
||||||
bind "{primary_modifier} m" {{ SwitchToMode "Normal"; }}
|
bind "{primary_modifier} m" {{ SwitchToMode "Normal"; }}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ keybinds {
|
||||||
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
||||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
||||||
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "Normal"; }
|
||||||
}
|
}
|
||||||
move {
|
move {
|
||||||
bind "Ctrl h" { SwitchToMode "Normal"; }
|
bind "Ctrl h" { SwitchToMode "Normal"; }
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
})) = opts.command
|
})) = opts.command
|
||||||
{
|
{
|
||||||
let cwd = cwd.or_else(|| std::env::current_dir().ok());
|
let cwd = cwd.or_else(|| std::env::current_dir().ok());
|
||||||
|
|
@ -57,6 +58,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
};
|
};
|
||||||
commands::send_action_to_session(command_cli_action, opts.session, config);
|
commands::send_action_to_session(command_cli_action, opts.session, config);
|
||||||
std::process::exit(0);
|
std::process::exit(0);
|
||||||
|
|
@ -71,6 +73,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
})) = opts.command
|
})) = opts.command
|
||||||
{
|
{
|
||||||
let cwd = None;
|
let cwd = None;
|
||||||
|
|
@ -90,6 +93,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
};
|
};
|
||||||
commands::send_action_to_session(command_cli_action, opts.session, config);
|
commands::send_action_to_session(command_cli_action, opts.session, config);
|
||||||
std::process::exit(0);
|
std::process::exit(0);
|
||||||
|
|
@ -105,6 +109,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
})) = opts.command
|
})) = opts.command
|
||||||
{
|
{
|
||||||
let mut file = file;
|
let mut file = file;
|
||||||
|
|
@ -125,6 +130,7 @@ fn main() {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
};
|
};
|
||||||
commands::send_action_to_session(command_cli_action, opts.session, config);
|
commands::send_action_to_session(command_cli_action, opts.session, config);
|
||||||
std::process::exit(0);
|
std::process::exit(0);
|
||||||
|
|
|
||||||
|
|
@ -2423,3 +2423,100 @@ pub fn load_plugins_in_background_on_startup() {
|
||||||
);
|
);
|
||||||
assert_snapshot!(last_snapshot);
|
assert_snapshot!(last_snapshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
pub fn pin_floating_panes() {
|
||||||
|
let fake_win_size = Size {
|
||||||
|
cols: 120,
|
||||||
|
rows: 24,
|
||||||
|
};
|
||||||
|
let mut test_attempts = 10;
|
||||||
|
let last_snapshot = loop {
|
||||||
|
RemoteRunner::kill_running_sessions(fake_win_size);
|
||||||
|
let mut runner = RemoteRunner::new(fake_win_size)
|
||||||
|
.add_step(Step {
|
||||||
|
name: "Toggle floating panes",
|
||||||
|
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);
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||||
|
remote_terminal.send_key(&TOGGLE_FLOATING_PANES);
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.add_step(Step {
|
||||||
|
name: "Pin floating pane",
|
||||||
|
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
|
||||||
|
let mut step_is_complete = false;
|
||||||
|
if remote_terminal.snapshot_contains("PIN [ ]") {
|
||||||
|
remote_terminal.send_key(&sgr_mouse_report(Position::new(8, 87), 0));
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.add_step(Step {
|
||||||
|
name: "Focus underlying pane",
|
||||||
|
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
|
||||||
|
let mut step_is_complete = false;
|
||||||
|
if remote_terminal.snapshot_contains("PIN [+]") {
|
||||||
|
remote_terminal.send_key(&PANE_MODE);
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||||
|
remote_terminal.send_key(&TOGGLE_FLOATING_PANES);
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.add_step(Step {
|
||||||
|
name: "Fill tiled pane with text",
|
||||||
|
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
|
||||||
|
let mut step_is_complete = false;
|
||||||
|
if remote_terminal.cursor_position_is(3, 2) {
|
||||||
|
remote_terminal.load_fixture("e2e/fill_for_pinned_pane");
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.add_step(Step {
|
||||||
|
name: "Move cursor behind pinned pane",
|
||||||
|
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
|
||||||
|
let mut step_is_complete = false;
|
||||||
|
if remote_terminal.snapshot_contains("line") {
|
||||||
|
remote_terminal
|
||||||
|
.send_key(&format!(" hide_me").as_bytes().to_vec());
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
runner.run_all_steps();
|
||||||
|
let last_snapshot = runner.take_snapshot_after(Step {
|
||||||
|
name: "Wait for cursor to be behind pinned pane",
|
||||||
|
instruction: |remote_terminal: RemoteTerminal| -> bool {
|
||||||
|
let mut step_is_complete = false;
|
||||||
|
if remote_terminal.snapshot_contains("hide") {
|
||||||
|
// terminal has been filled with fixture text
|
||||||
|
step_is_complete = true;
|
||||||
|
}
|
||||||
|
step_is_complete
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if runner.test_timed_out && test_attempts > 0 {
|
||||||
|
test_attempts -= 1;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
break last_snapshot;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let last_snapshot = account_for_races_in_snapshot(last_snapshot);
|
||||||
|
assert_snapshot!(last_snapshot);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -456,6 +456,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij(&mut channel);
|
start_zellij(&mut channel);
|
||||||
|
|
@ -492,6 +493,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_mirrored_session(&mut channel);
|
start_zellij_mirrored_session(&mut channel);
|
||||||
|
|
@ -528,6 +530,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_mirrored_session_with_layout(&mut channel, layout_file_name);
|
start_zellij_mirrored_session_with_layout(&mut channel, layout_file_name);
|
||||||
|
|
@ -567,6 +570,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_mirrored_session_with_layout_and_viewport_serialization(
|
start_zellij_mirrored_session_with_layout_and_viewport_serialization(
|
||||||
|
|
@ -613,6 +617,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_in_session(&mut channel, session_name, mirrored);
|
start_zellij_in_session(&mut channel, session_name, mirrored);
|
||||||
|
|
@ -649,6 +654,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
attach_to_existing_session(&mut channel, session_name);
|
attach_to_existing_session(&mut channel, session_name);
|
||||||
|
|
@ -685,6 +691,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_without_frames(&mut channel);
|
start_zellij_without_frames(&mut channel);
|
||||||
|
|
@ -722,6 +729,7 @@ impl RemoteRunner {
|
||||||
rows,
|
rows,
|
||||||
cols,
|
cols,
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
setup_remote_environment(&mut channel, win_size);
|
setup_remote_environment(&mut channel, win_size);
|
||||||
start_zellij_with_config(&mut channel, &remote_path.to_string_lossy());
|
start_zellij_with_config(&mut channel, &remote_path.to_string_lossy());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
source: src/tests/e2e/cases.rs
|
||||||
|
assertion_line: 2524
|
||||||
|
expression: last_snapshot
|
||||||
|
---
|
||||||
|
Zellij (e2e-test) Tab #1
|
||||||
|
┌ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│$ cat /usr/src/zellij/fixtures/e2e/fill_for_pinned_pane │
|
||||||
|
│line1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line5aaaaaaaaaaaaaaaaaaaaaaaa┌ Pane #2 ──────────────────────────────────────── PIN [+] ┐aaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line6aaaaaaaaaaaaaaaaaaaaaaaa│$ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line7aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line8aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line9aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │
|
||||||
|
│line10aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│
|
||||||
|
│line11aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│
|
||||||
|
│line12aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│
|
||||||
|
│line13aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│
|
||||||
|
│$ hide_m│ │ │
|
||||||
|
│ └──────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
Ctrl + <g> LOCK <p> PANE <t> TAB <n> RESIZE <h> MOVE <s> SEARCH <o> SESSION <q> QUIT
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: src/tests/e2e/cases.rs
|
source: src/tests/e2e/cases.rs
|
||||||
assertion_line: 1191
|
assertion_line: 1212
|
||||||
expression: last_snapshot
|
expression: last_snapshot
|
||||||
---
|
---
|
||||||
Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4
|
Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4
|
||||||
|
|
@ -9,11 +9,11 @@ expression: last_snapshot
|
||||||
│ ││ │
|
│ ││ │
|
||||||
│ ││ │
|
│ ││ │
|
||||||
│ ││ │
|
│ ││ │
|
||||||
│ ┌ Pane #4 ───────────────────────────────────────────────┐ │
|
│ ┌ Pane #4 ────────────────────────────────────── PIN [ ] ┐ │
|
||||||
│ │$ │ │
|
│ │$ │ │
|
||||||
│ │ ┌ top ───────────────────────────────────────────────────┐ │
|
│ │ ┌ top ────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
│ │ │ │ │
|
│ │ │ │ │
|
||||||
│ │ │ │─┐ │
|
│ │ │ │ ┐ │
|
||||||
│ │ │ │ │────────────────────────────┘
|
│ │ │ │ │────────────────────────────┘
|
||||||
│ │ │ Waiting to run: top │ │────────────────────────────┐
|
│ │ │ Waiting to run: top │ │────────────────────────────┐
|
||||||
│ │ │ │ │ │
|
│ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: src/tests/e2e/cases.rs
|
source: src/tests/e2e/cases.rs
|
||||||
assertion_line: 1252
|
assertion_line: 1273
|
||||||
expression: last_snapshot
|
expression: last_snapshot
|
||||||
---
|
---
|
||||||
Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4
|
Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4
|
||||||
|
|
@ -9,11 +9,11 @@ expression: last_snapshot
|
||||||
│$ ││$ │
|
│$ ││$ │
|
||||||
│$ ││$ │
|
│$ ││$ │
|
||||||
│ ││ │
|
│ ││ │
|
||||||
│ ┌ Pane #4 ───────────────────────────────────────────────┐ │
|
│ ┌ Pane #4 ────────────────────────────────────── PIN [ ] ┐ │
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
│ │$┌ top ───────────────────────────────────────────────────┐ │
|
│ │$┌ top ────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
│ │$│ │ │
|
│ │$│ │ │
|
||||||
│ │ │ │─┐ │
|
│ │ │ │ ┐ │
|
||||||
│ │ │ │ │────────────────────────────┘
|
│ │ │ │ │────────────────────────────┘
|
||||||
│ │ │ Waiting to run: top │ │────────────────────────────┐
|
│ │ │ Waiting to run: top │ │────────────────────────────┐
|
||||||
│ │ │ │ │ │
|
│ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: src/tests/e2e/cases.rs
|
source: src/tests/e2e/cases.rs
|
||||||
assertion_line: 2027
|
assertion_line: 2049
|
||||||
expression: last_snapshot
|
expression: last_snapshot
|
||||||
---
|
---
|
||||||
Zellij (e2e-test) Tab #1 Alt <[]> STAGGERED
|
Zellij (e2e-test) Tab #1 Alt <[]> STAGGERED
|
||||||
|
|
@ -10,7 +10,7 @@ expression: last_snapshot
|
||||||
│ │
|
│ │
|
||||||
│ │
|
│ │
|
||||||
│ │
|
│ │
|
||||||
│ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
│ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
│ │$ █ │ │
|
│ │$ █ │ │
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
|
|
|
||||||
13
src/tests/fixtures/e2e/fill_for_pinned_pane
vendored
Normal file
13
src/tests/fixtures/e2e/fill_for_pinned_pane
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
line1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line10aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line11aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
line13aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
|
@ -449,6 +449,12 @@ impl Output {
|
||||||
self.client_character_chunks.values().any(|c| !c.is_empty())
|
self.client_character_chunks.values().any(|c| !c.is_empty())
|
||||||
|| self.sixel_chunks.values().any(|c| !c.is_empty())
|
|| self.sixel_chunks.values().any(|c| !c.is_empty())
|
||||||
}
|
}
|
||||||
|
pub fn cursor_is_visible(&self, cursor_x: usize, cursor_y: usize) -> bool {
|
||||||
|
self.floating_panes_stack
|
||||||
|
.as_ref()
|
||||||
|
.map(|s| s.cursor_is_visible(cursor_x, cursor_y))
|
||||||
|
.unwrap_or(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this struct represents the geometry of a group of floating panes
|
// this struct represents the geometry of a group of floating panes
|
||||||
|
|
@ -740,6 +746,24 @@ impl FloatingPanesStack {
|
||||||
}
|
}
|
||||||
uncovered_chunks
|
uncovered_chunks
|
||||||
}
|
}
|
||||||
|
pub fn cursor_is_visible(&self, cursor_x: usize, cursor_y: usize) -> bool {
|
||||||
|
let z_index = 0; // TODO: receive z_index
|
||||||
|
let panes_to_check = self.layers.iter().skip(z_index);
|
||||||
|
for pane_geom in panes_to_check {
|
||||||
|
let pane_top_edge = pane_geom.y;
|
||||||
|
let pane_left_edge = pane_geom.x;
|
||||||
|
let pane_bottom_edge = pane_geom.y + pane_geom.rows.as_usize().saturating_sub(1);
|
||||||
|
let pane_right_edge = pane_geom.x + pane_geom.cols.as_usize().saturating_sub(1);
|
||||||
|
if pane_top_edge <= cursor_y
|
||||||
|
&& pane_bottom_edge >= cursor_y
|
||||||
|
&& pane_left_edge <= cursor_x
|
||||||
|
&& pane_right_edge >= cursor_x
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default)]
|
#[derive(Debug, Clone, Default)]
|
||||||
|
|
|
||||||
|
|
@ -861,6 +861,7 @@ pub fn half_size_middle_geom(space: &Viewport, offset: usize) -> PaneGeom {
|
||||||
cols: Dimension::fixed(space.cols / 2),
|
cols: Dimension::fixed(space.cols / 2),
|
||||||
rows: Dimension::fixed(space.rows / 2),
|
rows: Dimension::fixed(space.rows / 2),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
geom.cols.set_inner(space.cols / 2);
|
geom.cols.set_inner(space.cols / 2);
|
||||||
geom.rows.set_inner(space.rows / 2);
|
geom.rows.set_inner(space.rows / 2);
|
||||||
|
|
@ -874,6 +875,7 @@ fn half_size_top_left_geom(space: &Viewport, offset: usize) -> PaneGeom {
|
||||||
cols: Dimension::fixed(space.cols / 3),
|
cols: Dimension::fixed(space.cols / 3),
|
||||||
rows: Dimension::fixed(space.rows / 3),
|
rows: Dimension::fixed(space.rows / 3),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
geom.cols.set_inner(space.cols / 3);
|
geom.cols.set_inner(space.cols / 3);
|
||||||
geom.rows.set_inner(space.rows / 3);
|
geom.rows.set_inner(space.rows / 3);
|
||||||
|
|
@ -887,6 +889,7 @@ fn half_size_top_right_geom(space: &Viewport, offset: usize) -> PaneGeom {
|
||||||
cols: Dimension::fixed(space.cols / 3),
|
cols: Dimension::fixed(space.cols / 3),
|
||||||
rows: Dimension::fixed(space.rows / 3),
|
rows: Dimension::fixed(space.rows / 3),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
geom.cols.set_inner(space.cols / 3);
|
geom.cols.set_inner(space.cols / 3);
|
||||||
geom.rows.set_inner(space.rows / 3);
|
geom.rows.set_inner(space.rows / 3);
|
||||||
|
|
@ -900,6 +903,7 @@ fn half_size_bottom_left_geom(space: &Viewport, offset: usize) -> PaneGeom {
|
||||||
cols: Dimension::fixed(space.cols / 3),
|
cols: Dimension::fixed(space.cols / 3),
|
||||||
rows: Dimension::fixed(space.rows / 3),
|
rows: Dimension::fixed(space.rows / 3),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
geom.cols.set_inner(space.cols / 3);
|
geom.cols.set_inner(space.cols / 3);
|
||||||
geom.rows.set_inner(space.rows / 3);
|
geom.rows.set_inner(space.rows / 3);
|
||||||
|
|
@ -913,6 +917,7 @@ fn half_size_bottom_right_geom(space: &Viewport, offset: usize) -> PaneGeom {
|
||||||
cols: Dimension::fixed(space.cols / 3),
|
cols: Dimension::fixed(space.cols / 3),
|
||||||
rows: Dimension::fixed(space.rows / 3),
|
rows: Dimension::fixed(space.rows / 3),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
};
|
};
|
||||||
geom.cols.set_inner(space.cols / 3);
|
geom.cols.set_inner(space.cols / 3);
|
||||||
geom.rows.set_inner(space.rows / 3);
|
geom.rows.set_inner(space.rows / 3);
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,27 @@ impl FloatingPanes {
|
||||||
.map(|pane_id| self.panes.get(pane_id).unwrap().position_and_size())
|
.map(|pane_id| self.panes.get(pane_id).unwrap().position_and_size())
|
||||||
.collect();
|
.collect();
|
||||||
Some(FloatingPanesStack { layers })
|
Some(FloatingPanesStack { layers })
|
||||||
|
} else if self.has_pinned_panes() {
|
||||||
|
let layers = self
|
||||||
|
.z_indices
|
||||||
|
.iter()
|
||||||
|
.filter_map(|pane_id| {
|
||||||
|
self.panes
|
||||||
|
.get(pane_id)
|
||||||
|
.map(|p| p.position_and_size())
|
||||||
|
.and_then(|p| if p.is_pinned { Some(p) } else { None })
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
Some(FloatingPanesStack { layers })
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn has_pinned_panes(&self) -> bool {
|
||||||
|
self.panes
|
||||||
|
.iter()
|
||||||
|
.any(|(_, p)| p.position_and_size().is_pinned)
|
||||||
|
}
|
||||||
pub fn pane_ids(&self) -> impl Iterator<Item = &PaneId> {
|
pub fn pane_ids(&self) -> impl Iterator<Item = &PaneId> {
|
||||||
self.panes.keys()
|
self.panes.keys()
|
||||||
}
|
}
|
||||||
|
|
@ -262,6 +279,9 @@ impl FloatingPanes {
|
||||||
if let Some(height) = &floating_pane_layout.height {
|
if let Some(height) = &floating_pane_layout.height {
|
||||||
position.rows = Dimension::fixed(height.to_position(viewport.rows));
|
position.rows = Dimension::fixed(height.to_position(viewport.rows));
|
||||||
}
|
}
|
||||||
|
if let Some(is_pinned) = &floating_pane_layout.pinned {
|
||||||
|
position.is_pinned = *is_pinned;
|
||||||
|
}
|
||||||
if position.cols.as_usize() > viewport.cols {
|
if position.cols.as_usize() > viewport.cols {
|
||||||
position.cols = Dimension::fixed(viewport.cols);
|
position.cols = Dimension::fixed(viewport.cols);
|
||||||
}
|
}
|
||||||
|
|
@ -317,7 +337,21 @@ impl FloatingPanes {
|
||||||
let err_context = || "failed to render output";
|
let err_context = || "failed to render output";
|
||||||
let connected_clients: Vec<ClientId> =
|
let connected_clients: Vec<ClientId> =
|
||||||
{ self.connected_clients.borrow().iter().copied().collect() };
|
{ self.connected_clients.borrow().iter().copied().collect() };
|
||||||
let mut floating_panes: Vec<_> = self.panes.iter_mut().collect();
|
let active_panes = if self.panes_are_visible() {
|
||||||
|
self.active_panes.clone_active_panes()
|
||||||
|
} else {
|
||||||
|
Default::default()
|
||||||
|
};
|
||||||
|
let mut floating_panes: Vec<_> = if self.panes_are_visible() {
|
||||||
|
self.panes.iter_mut().collect()
|
||||||
|
} else if self.has_pinned_panes() {
|
||||||
|
self.panes
|
||||||
|
.iter_mut()
|
||||||
|
.filter(|(_, p)| p.position_and_size().is_pinned)
|
||||||
|
.collect()
|
||||||
|
} else {
|
||||||
|
vec![]
|
||||||
|
};
|
||||||
floating_panes.sort_by(|(a_id, _a_pane), (b_id, _b_pane)| {
|
floating_panes.sort_by(|(a_id, _a_pane), (b_id, _b_pane)| {
|
||||||
self.z_indices
|
self.z_indices
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -335,7 +369,7 @@ impl FloatingPanes {
|
||||||
});
|
});
|
||||||
|
|
||||||
for (z_index, (kind, pane)) in floating_panes.iter_mut().enumerate() {
|
for (z_index, (kind, pane)) in floating_panes.iter_mut().enumerate() {
|
||||||
let mut active_panes = self.active_panes.clone_active_panes();
|
let mut active_panes = active_panes.clone();
|
||||||
let multiple_users_exist_in_session =
|
let multiple_users_exist_in_session =
|
||||||
{ self.connected_clients_in_app.borrow().len() > 1 };
|
{ self.connected_clients_in_app.borrow().len() > 1 };
|
||||||
active_panes.retain(|c_id, _| self.connected_clients.borrow().contains(c_id));
|
active_panes.retain(|c_id, _| self.connected_clients.borrow().contains(c_id));
|
||||||
|
|
@ -357,8 +391,14 @@ impl FloatingPanes {
|
||||||
.get(client_id)
|
.get(client_id)
|
||||||
.unwrap_or(&self.default_mode_info)
|
.unwrap_or(&self.default_mode_info)
|
||||||
.mode;
|
.mode;
|
||||||
|
let is_floating = true;
|
||||||
pane_contents_and_ui
|
pane_contents_and_ui
|
||||||
.render_pane_frame(*client_id, client_mode, self.session_is_mirrored)
|
.render_pane_frame(
|
||||||
|
*client_id,
|
||||||
|
client_mode,
|
||||||
|
self.session_is_mirrored,
|
||||||
|
is_floating,
|
||||||
|
)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
if let PaneId::Plugin(..) = kind {
|
if let PaneId::Plugin(..) = kind {
|
||||||
pane_contents_and_ui
|
pane_contents_and_ui
|
||||||
|
|
@ -767,6 +807,52 @@ impl FloatingPanes {
|
||||||
.find(|(_, p)| p.contains(point))
|
.find(|(_, p)| p.contains(point))
|
||||||
.map(|(&id, _)| id))
|
.map(|(&id, _)| id))
|
||||||
}
|
}
|
||||||
|
pub fn get_pinned_pane_id_at(
|
||||||
|
&self,
|
||||||
|
point: &Position,
|
||||||
|
search_selectable: bool,
|
||||||
|
) -> Result<Option<PaneId>> {
|
||||||
|
let _err_context = || format!("failed to determine floating pane at point {point:?}");
|
||||||
|
|
||||||
|
let mut panes: Vec<_> = if search_selectable {
|
||||||
|
self.panes
|
||||||
|
.iter()
|
||||||
|
.filter(|(_, p)| p.selectable())
|
||||||
|
.filter(|(_, p)| p.current_geom().is_pinned)
|
||||||
|
.collect()
|
||||||
|
} else {
|
||||||
|
self.panes
|
||||||
|
.iter()
|
||||||
|
.filter(|(_, p)| p.current_geom().is_pinned)
|
||||||
|
.collect()
|
||||||
|
};
|
||||||
|
panes.sort_by(|(a_id, _a_pane), (b_id, _b_pane)| {
|
||||||
|
// TODO: continue
|
||||||
|
Ord::cmp(
|
||||||
|
&self.z_indices.iter().position(|id| id == *b_id).unwrap(),
|
||||||
|
&self.z_indices.iter().position(|id| id == *a_id).unwrap(),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
Ok(panes
|
||||||
|
.iter()
|
||||||
|
.find(|(_, p)| p.contains(point))
|
||||||
|
.map(|(&id, _)| id))
|
||||||
|
}
|
||||||
|
pub fn has_pinned_pane_at(&self, point: &Position) -> bool {
|
||||||
|
let mut panes: Vec<_> = self
|
||||||
|
.panes
|
||||||
|
.iter()
|
||||||
|
.filter(|(_, p)| p.current_geom().is_pinned)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
panes.sort_by(|(a_id, _a_pane), (b_id, _b_pane)| {
|
||||||
|
Ord::cmp(
|
||||||
|
&self.z_indices.iter().position(|id| id == *b_id).unwrap(),
|
||||||
|
&self.z_indices.iter().position(|id| id == *a_id).unwrap(),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
panes.iter().find(|(_, p)| p.contains(point)).is_some()
|
||||||
|
}
|
||||||
pub fn get_pane_at_mut(
|
pub fn get_pane_at_mut(
|
||||||
&mut self,
|
&mut self,
|
||||||
position: &Position,
|
position: &Position,
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,9 @@ impl Pane for PluginPane {
|
||||||
self.set_should_render(true);
|
self.set_should_render(true);
|
||||||
}
|
}
|
||||||
fn set_geom(&mut self, position_and_size: PaneGeom) {
|
fn set_geom(&mut self, position_and_size: PaneGeom) {
|
||||||
|
let is_pinned = self.geom.is_pinned;
|
||||||
self.geom = position_and_size;
|
self.geom = position_and_size;
|
||||||
|
self.geom.is_pinned = is_pinned;
|
||||||
self.resize_grids();
|
self.resize_grids();
|
||||||
self.set_should_render(true);
|
self.set_should_render(true);
|
||||||
}
|
}
|
||||||
|
|
@ -394,12 +396,14 @@ impl Pane for PluginPane {
|
||||||
.cols
|
.cols
|
||||||
.set_inner(frame_geom.cols.as_usize().saturating_sub(1));
|
.set_inner(frame_geom.cols.as_usize().saturating_sub(1));
|
||||||
}
|
}
|
||||||
|
let is_pinned = frame_geom.is_pinned;
|
||||||
let mut frame = PaneFrame::new(
|
let mut frame = PaneFrame::new(
|
||||||
frame_geom.into(),
|
frame_geom.into(),
|
||||||
grid.scrollback_position_and_length(),
|
grid.scrollback_position_and_length(),
|
||||||
pane_title,
|
pane_title,
|
||||||
frame_params,
|
frame_params,
|
||||||
);
|
)
|
||||||
|
.is_pinned(is_pinned);
|
||||||
if let Some((frame_color_override, _text)) = self.pane_frame_color_override.as_ref() {
|
if let Some((frame_color_override, _text)) = self.pane_frame_color_override.as_ref() {
|
||||||
frame.override_color(*frame_color_override);
|
frame.override_color(*frame_color_override);
|
||||||
}
|
}
|
||||||
|
|
@ -700,6 +704,24 @@ impl Pane for PluginPane {
|
||||||
fn query_should_be_suppressed(&self) -> bool {
|
fn query_should_be_suppressed(&self) -> bool {
|
||||||
self.should_be_suppressed
|
self.should_be_suppressed
|
||||||
}
|
}
|
||||||
|
fn toggle_pinned(&mut self) {
|
||||||
|
self.geom.is_pinned = !self.geom.is_pinned;
|
||||||
|
}
|
||||||
|
fn set_pinned(&mut self, should_be_pinned: bool) {
|
||||||
|
self.geom.is_pinned = should_be_pinned;
|
||||||
|
}
|
||||||
|
fn intercept_left_mouse_click(&mut self, position: &Position, client_id: ClientId) -> bool {
|
||||||
|
if self.position_is_on_frame(position) {
|
||||||
|
let relative_position = self.relative_position(position);
|
||||||
|
if let Some(client_frame) = self.frame.get_mut(&client_id) {
|
||||||
|
if client_frame.clicked_on_pinned(relative_position) {
|
||||||
|
self.toggle_pinned();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PluginPane {
|
impl PluginPane {
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,9 @@ impl Pane for TerminalPane {
|
||||||
self.reflow_lines();
|
self.reflow_lines();
|
||||||
}
|
}
|
||||||
fn set_geom(&mut self, position_and_size: PaneGeom) {
|
fn set_geom(&mut self, position_and_size: PaneGeom) {
|
||||||
|
let is_pinned = self.geom.is_pinned;
|
||||||
self.geom = position_and_size;
|
self.geom = position_and_size;
|
||||||
|
self.geom.is_pinned = is_pinned;
|
||||||
self.reflow_lines();
|
self.reflow_lines();
|
||||||
self.render_full_viewport();
|
self.render_full_viewport();
|
||||||
}
|
}
|
||||||
|
|
@ -376,12 +378,14 @@ impl Pane for TerminalPane {
|
||||||
};
|
};
|
||||||
|
|
||||||
let frame_geom = self.current_geom();
|
let frame_geom = self.current_geom();
|
||||||
|
let is_pinned = frame_geom.is_pinned;
|
||||||
let mut frame = PaneFrame::new(
|
let mut frame = PaneFrame::new(
|
||||||
frame_geom.into(),
|
frame_geom.into(),
|
||||||
self.grid.scrollback_position_and_length(),
|
self.grid.scrollback_position_and_length(),
|
||||||
pane_title,
|
pane_title,
|
||||||
frame_params,
|
frame_params,
|
||||||
);
|
)
|
||||||
|
.is_pinned(is_pinned);
|
||||||
if let Some((exit_status, is_first_run, _run_command)) = &self.is_held {
|
if let Some((exit_status, is_first_run, _run_command)) = &self.is_held {
|
||||||
if *is_first_run {
|
if *is_first_run {
|
||||||
frame.indicate_first_run();
|
frame.indicate_first_run();
|
||||||
|
|
@ -820,6 +824,24 @@ impl Pane for TerminalPane {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn toggle_pinned(&mut self) {
|
||||||
|
self.geom.is_pinned = !self.geom.is_pinned;
|
||||||
|
}
|
||||||
|
fn set_pinned(&mut self, should_be_pinned: bool) {
|
||||||
|
self.geom.is_pinned = should_be_pinned;
|
||||||
|
}
|
||||||
|
fn intercept_left_mouse_click(&mut self, position: &Position, client_id: ClientId) -> bool {
|
||||||
|
if self.position_is_on_frame(position) {
|
||||||
|
let relative_position = self.relative_position(position);
|
||||||
|
if let Some(client_frame) = self.frame.get_mut(&client_id) {
|
||||||
|
if client_frame.clicked_on_pinned(relative_position) {
|
||||||
|
self.toggle_pinned();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TerminalPane {
|
impl TerminalPane {
|
||||||
|
|
|
||||||
|
|
@ -699,15 +699,26 @@ impl TiledPanes {
|
||||||
.render_pane_contents_for_client(*client_id)
|
.render_pane_contents_for_client(*client_id)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
}
|
}
|
||||||
|
let is_floating = false;
|
||||||
if self.draw_pane_frames {
|
if self.draw_pane_frames {
|
||||||
pane_contents_and_ui
|
pane_contents_and_ui
|
||||||
.render_pane_frame(*client_id, client_mode, self.session_is_mirrored)
|
.render_pane_frame(
|
||||||
|
*client_id,
|
||||||
|
client_mode,
|
||||||
|
self.session_is_mirrored,
|
||||||
|
is_floating,
|
||||||
|
)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
} else if pane_is_stacked {
|
} else if pane_is_stacked {
|
||||||
// if we have no pane frames but the pane is stacked, we need to render its
|
// if we have no pane frames but the pane is stacked, we need to render its
|
||||||
// frame which will amount to only rendering the title line
|
// frame which will amount to only rendering the title line
|
||||||
pane_contents_and_ui
|
pane_contents_and_ui
|
||||||
.render_pane_frame(*client_id, client_mode, self.session_is_mirrored)
|
.render_pane_frame(
|
||||||
|
*client_id,
|
||||||
|
client_mode,
|
||||||
|
self.session_is_mirrored,
|
||||||
|
is_floating,
|
||||||
|
)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
// we also need to render its boundaries as normal
|
// we also need to render its boundaries as normal
|
||||||
let boundaries = client_id_to_boundaries
|
let boundaries = client_id_to_boundaries
|
||||||
|
|
|
||||||
|
|
@ -355,6 +355,9 @@ fn host_run_plugin_command(caller: Caller<'_, PluginEnv>) {
|
||||||
PluginCommand::ChangeHostFolder(new_host_folder) => {
|
PluginCommand::ChangeHostFolder(new_host_folder) => {
|
||||||
change_host_folder(env, new_host_folder)
|
change_host_folder(env, new_host_folder)
|
||||||
},
|
},
|
||||||
|
PluginCommand::SetFloatingPanePinned(pane_id, should_be_pinned) => {
|
||||||
|
set_floating_pane_pinned(env, pane_id.into(), should_be_pinned)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
(PermissionStatus::Denied, permission) => {
|
(PermissionStatus::Denied, permission) => {
|
||||||
log::error!(
|
log::error!(
|
||||||
|
|
@ -1509,6 +1512,15 @@ fn change_host_folder(env: &PluginEnv, new_host_folder: PathBuf) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_floating_pane_pinned(env: &PluginEnv, pane_id: PaneId, should_be_pinned: bool) {
|
||||||
|
let _ = env.senders.to_screen.as_ref().map(|sender| {
|
||||||
|
sender.send(ScreenInstruction::SetFloatingPanePinned(
|
||||||
|
pane_id,
|
||||||
|
should_be_pinned,
|
||||||
|
))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn scan_host_folder(env: &PluginEnv, folder_to_scan: PathBuf) {
|
fn scan_host_folder(env: &PluginEnv, folder_to_scan: PathBuf) {
|
||||||
if !folder_to_scan.starts_with("/host") {
|
if !folder_to_scan.starts_with("/host") {
|
||||||
log::error!(
|
log::error!(
|
||||||
|
|
@ -1927,6 +1939,7 @@ fn check_command_permission(
|
||||||
| PluginCommand::BreakPanesToTabWithIndex(..)
|
| PluginCommand::BreakPanesToTabWithIndex(..)
|
||||||
| PluginCommand::ReloadPlugin(..)
|
| PluginCommand::ReloadPlugin(..)
|
||||||
| PluginCommand::LoadNewPlugin { .. }
|
| PluginCommand::LoadNewPlugin { .. }
|
||||||
|
| PluginCommand::SetFloatingPanePinned(..)
|
||||||
| PluginCommand::KillSessions(..) => PermissionType::ChangeApplicationState,
|
| PluginCommand::KillSessions(..) => PermissionType::ChangeApplicationState,
|
||||||
PluginCommand::UnblockCliPipeInput(..)
|
PluginCommand::UnblockCliPipeInput(..)
|
||||||
| PluginCommand::BlockCliPipeInput(..)
|
| PluginCommand::BlockCliPipeInput(..)
|
||||||
|
|
|
||||||
|
|
@ -969,6 +969,11 @@ pub(crate) fn route_action(
|
||||||
))
|
))
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
},
|
},
|
||||||
|
Action::TogglePanePinned => {
|
||||||
|
senders
|
||||||
|
.send_to_screen(ScreenInstruction::TogglePanePinned(client_id))
|
||||||
|
.with_context(err_context)?;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
Ok(should_break)
|
Ok(should_break)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -405,6 +405,8 @@ pub enum ScreenInstruction {
|
||||||
client_id: ClientId,
|
client_id: ClientId,
|
||||||
},
|
},
|
||||||
ListClientsToPlugin(PluginId, ClientId),
|
ListClientsToPlugin(PluginId, ClientId),
|
||||||
|
TogglePanePinned(ClientId),
|
||||||
|
SetFloatingPanePinned(PaneId, bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&ScreenInstruction> for ScreenContext {
|
impl From<&ScreenInstruction> for ScreenContext {
|
||||||
|
|
@ -617,6 +619,8 @@ impl From<&ScreenInstruction> for ScreenContext {
|
||||||
ScreenContext::BreakPanesToTabWithIndex
|
ScreenContext::BreakPanesToTabWithIndex
|
||||||
},
|
},
|
||||||
ScreenInstruction::ListClientsToPlugin(..) => ScreenContext::ListClientsToPlugin,
|
ScreenInstruction::ListClientsToPlugin(..) => ScreenContext::ListClientsToPlugin,
|
||||||
|
ScreenInstruction::TogglePanePinned(..) => ScreenContext::TogglePanePinned,
|
||||||
|
ScreenInstruction::SetFloatingPanePinned(..) => ScreenContext::SetFloatingPanePinned,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2499,6 +2503,32 @@ impl Screen {
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
pub fn toggle_pane_pinned(&mut self, client_id: ClientId) {
|
||||||
|
active_tab_and_connected_client_id!(
|
||||||
|
self,
|
||||||
|
client_id,
|
||||||
|
|tab: &mut Tab, client_id: ClientId| {
|
||||||
|
tab.toggle_pane_pinned(client_id);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
self.unblock_input().non_fatal();
|
||||||
|
}
|
||||||
|
pub fn set_floating_pane_pinned(&mut self, pane_id: PaneId, should_be_pinned: bool) {
|
||||||
|
let mut found = false;
|
||||||
|
for tab in self.tabs.values_mut() {
|
||||||
|
if tab.has_pane_with_pid(&pane_id) {
|
||||||
|
tab.set_floating_pane_pinned(pane_id, should_be_pinned);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
log::error!(
|
||||||
|
"Failed to find pane with id: {:?} to set as pinned",
|
||||||
|
pane_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
fn unblock_input(&self) -> Result<()> {
|
fn unblock_input(&self) -> Result<()> {
|
||||||
self.bus
|
self.bus
|
||||||
.senders
|
.senders
|
||||||
|
|
@ -4713,6 +4743,12 @@ pub(crate) fn screen_thread_main(
|
||||||
client_id,
|
client_id,
|
||||||
)?;
|
)?;
|
||||||
},
|
},
|
||||||
|
ScreenInstruction::TogglePanePinned(client_id) => {
|
||||||
|
screen.toggle_pane_pinned(client_id);
|
||||||
|
},
|
||||||
|
ScreenInstruction::SetFloatingPanePinned(pane_id, should_be_pinned) => {
|
||||||
|
screen.set_floating_pane_pinned(pane_id, should_be_pinned);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -397,6 +397,10 @@ pub trait Pane {
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
fn intercept_left_mouse_click(&mut self, _position: &Position, _client_id: ClientId) -> bool {
|
||||||
|
let intercepted = false;
|
||||||
|
intercepted
|
||||||
|
}
|
||||||
fn store_pane_name(&mut self);
|
fn store_pane_name(&mut self);
|
||||||
fn load_pane_name(&mut self);
|
fn load_pane_name(&mut self);
|
||||||
fn set_borderless(&mut self, borderless: bool);
|
fn set_borderless(&mut self, borderless: bool);
|
||||||
|
|
@ -503,6 +507,8 @@ pub trait Pane {
|
||||||
fn drain_fake_cursors(&mut self) -> Option<HashSet<(usize, usize)>> {
|
fn drain_fake_cursors(&mut self) -> Option<HashSet<(usize, usize)>> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
fn toggle_pinned(&mut self) {}
|
||||||
|
fn set_pinned(&mut self, should_be_pinned: bool) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
@ -823,7 +829,7 @@ impl Tab {
|
||||||
let display_area = *self.display_area.borrow();
|
let display_area = *self.display_area.borrow();
|
||||||
// we do this so that the new swap layout has a chance to pass through the constraint system
|
// we do this so that the new swap layout has a chance to pass through the constraint system
|
||||||
self.tiled_panes.resize(display_area);
|
self.tiled_panes.resize(display_area);
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn previous_swap_layout(&mut self, client_id: Option<ClientId>) -> Result<()> {
|
pub fn previous_swap_layout(&mut self, client_id: Option<ClientId>) -> Result<()> {
|
||||||
|
|
@ -1476,7 +1482,7 @@ impl Tab {
|
||||||
);
|
);
|
||||||
self.tiled_panes
|
self.tiled_panes
|
||||||
.split_pane_horizontally(pid, Box::new(new_terminal), client_id);
|
.split_pane_horizontally(pid, Box::new(new_terminal), client_id);
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
self.tiled_panes.focus_pane(pid, client_id);
|
self.tiled_panes.focus_pane(pid, client_id);
|
||||||
self.swap_layouts.set_is_tiled_damaged();
|
self.swap_layouts.set_is_tiled_damaged();
|
||||||
}
|
}
|
||||||
|
|
@ -1536,7 +1542,7 @@ impl Tab {
|
||||||
);
|
);
|
||||||
self.tiled_panes
|
self.tiled_panes
|
||||||
.split_pane_vertically(pid, Box::new(new_terminal), client_id);
|
.split_pane_vertically(pid, Box::new(new_terminal), client_id);
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
self.tiled_panes.focus_pane(pid, client_id);
|
self.tiled_panes.focus_pane(pid, client_id);
|
||||||
self.swap_layouts.set_is_tiled_damaged();
|
self.swap_layouts.set_is_tiled_damaged();
|
||||||
}
|
}
|
||||||
|
|
@ -2099,6 +2105,11 @@ impl Tab {
|
||||||
self.tiled_panes.set_force_render();
|
self.tiled_panes.set_force_render();
|
||||||
self.floating_panes.set_force_render();
|
self.floating_panes.set_force_render();
|
||||||
}
|
}
|
||||||
|
pub fn set_should_clear_display_before_rendering(&mut self) {
|
||||||
|
self.should_clear_display_before_rendering = true;
|
||||||
|
self.floating_panes.set_force_render(); // we do this to make sure pinned panes are
|
||||||
|
// rendered even if their surface is not visible
|
||||||
|
}
|
||||||
pub fn is_sync_panes_active(&self) -> bool {
|
pub fn is_sync_panes_active(&self) -> bool {
|
||||||
self.synchronize_is_active
|
self.synchronize_is_active
|
||||||
}
|
}
|
||||||
|
|
@ -2147,7 +2158,9 @@ impl Tab {
|
||||||
self.tiled_panes
|
self.tiled_panes
|
||||||
.render(output, self.floating_panes.panes_are_visible())
|
.render(output, self.floating_panes.panes_are_visible())
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
if self.floating_panes.panes_are_visible() && self.floating_panes.has_active_panes() {
|
if (self.floating_panes.panes_are_visible() && self.floating_panes.has_active_panes())
|
||||||
|
|| self.floating_panes.has_pinned_panes()
|
||||||
|
{
|
||||||
self.floating_panes
|
self.floating_panes
|
||||||
.render(output)
|
.render(output)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
|
|
@ -2182,7 +2195,19 @@ impl Tab {
|
||||||
let connected_clients: Vec<ClientId> =
|
let connected_clients: Vec<ClientId> =
|
||||||
{ self.connected_clients.borrow().iter().copied().collect() };
|
{ self.connected_clients.borrow().iter().copied().collect() };
|
||||||
for client_id in connected_clients {
|
for client_id in connected_clients {
|
||||||
match self.get_active_terminal_cursor_position(client_id) {
|
match self
|
||||||
|
.get_active_terminal_cursor_position(client_id)
|
||||||
|
.and_then(|(cursor_position_x, cursor_position_y)| {
|
||||||
|
// TODO: get active_pane_z_index and pass it to cursor_is_visible so we do the
|
||||||
|
// right thing if the cursor is in a floating pane
|
||||||
|
if self.floating_panes.panes_are_visible() {
|
||||||
|
Some((cursor_position_x, cursor_position_y))
|
||||||
|
} else if output.cursor_is_visible(cursor_position_x, cursor_position_y) {
|
||||||
|
Some((cursor_position_x, cursor_position_y))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}) {
|
||||||
Some((cursor_position_x, cursor_position_y)) => {
|
Some((cursor_position_x, cursor_position_y)) => {
|
||||||
let desired_cursor_shape = self
|
let desired_cursor_shape = self
|
||||||
.get_active_pane(client_id)
|
.get_active_pane(client_id)
|
||||||
|
|
@ -2308,7 +2333,7 @@ impl Tab {
|
||||||
self.swap_layouts.set_is_tiled_damaged();
|
self.swap_layouts.set_is_tiled_damaged();
|
||||||
let _ = self.relayout_tiled_panes(None, false, false, true);
|
let _ = self.relayout_tiled_panes(None, false, false, true);
|
||||||
}
|
}
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
self.senders
|
self.senders
|
||||||
.send_to_pty_writer(PtyWriteInstruction::ApplyCachedResizes)
|
.send_to_pty_writer(PtyWriteInstruction::ApplyCachedResizes)
|
||||||
.with_context(|| format!("failed to update plugins with mode info"))?;
|
.with_context(|| format!("failed to update plugins with mode info"))?;
|
||||||
|
|
@ -3256,6 +3281,14 @@ impl Tab {
|
||||||
{
|
{
|
||||||
return Ok(self.floating_panes.get_pane_mut(pane_id));
|
return Ok(self.floating_panes.get_pane_mut(pane_id));
|
||||||
}
|
}
|
||||||
|
} else if self.floating_panes.has_pinned_panes() {
|
||||||
|
if let Some(pane_id) = self
|
||||||
|
.floating_panes
|
||||||
|
.get_pinned_pane_id_at(point, search_selectable)
|
||||||
|
.with_context(err_context)?
|
||||||
|
{
|
||||||
|
return Ok(self.floating_panes.get_pane_mut(pane_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if let Some(pane_id) = self
|
if let Some(pane_id) = self
|
||||||
.get_pane_id_at(point, search_selectable)
|
.get_pane_id_at(point, search_selectable)
|
||||||
|
|
@ -3305,6 +3338,31 @@ impl Tab {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let intercepted = self
|
||||||
|
.get_pane_at(position, false)
|
||||||
|
.with_context(err_context)?
|
||||||
|
.map(|pane| pane.intercept_left_mouse_click(&position, client_id))
|
||||||
|
.unwrap_or(false);
|
||||||
|
if intercepted {
|
||||||
|
self.set_force_render();
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
if !self.floating_panes.panes_are_visible() {
|
||||||
|
let search_selectable = false;
|
||||||
|
if let Ok(Some(pane_id)) = self
|
||||||
|
.floating_panes
|
||||||
|
.get_pinned_pane_id_at(position, search_selectable)
|
||||||
|
{
|
||||||
|
// here, the floating panes are not visible, but there is a pinned pane (always
|
||||||
|
// visible) that has been clicked on - so we make the entire surface visible and
|
||||||
|
// focus it
|
||||||
|
self.show_floating_panes();
|
||||||
|
self.floating_panes.focus_pane(pane_id, client_id);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.focus_pane_at(position, client_id)
|
self.focus_pane_at(position, client_id)
|
||||||
.with_context(err_context)?;
|
.with_context(err_context)?;
|
||||||
|
|
||||||
|
|
@ -3888,7 +3946,7 @@ impl Tab {
|
||||||
pub fn set_pane_frames(&mut self, should_set_pane_frames: bool) {
|
pub fn set_pane_frames(&mut self, should_set_pane_frames: bool) {
|
||||||
self.tiled_panes.set_pane_frames(should_set_pane_frames);
|
self.tiled_panes.set_pane_frames(should_set_pane_frames);
|
||||||
self.draw_pane_frames = should_set_pane_frames;
|
self.draw_pane_frames = should_set_pane_frames;
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
self.set_force_render();
|
self.set_force_render();
|
||||||
}
|
}
|
||||||
pub fn panes_to_hide_count(&self) -> usize {
|
pub fn panes_to_hide_count(&self) -> usize {
|
||||||
|
|
@ -4146,6 +4204,9 @@ impl Tab {
|
||||||
if let Some(mut new_pane_geom) = self.floating_panes.find_room_for_new_pane() {
|
if let Some(mut new_pane_geom) = self.floating_panes.find_room_for_new_pane() {
|
||||||
if let Some(floating_pane_coordinates) = floating_pane_coordinates {
|
if let Some(floating_pane_coordinates) = floating_pane_coordinates {
|
||||||
let viewport = self.viewport.borrow();
|
let viewport = self.viewport.borrow();
|
||||||
|
if let Some(pinned) = floating_pane_coordinates.pinned.as_ref() {
|
||||||
|
pane.set_pinned(*pinned);
|
||||||
|
}
|
||||||
new_pane_geom.adjust_coordinates(floating_pane_coordinates, *viewport);
|
new_pane_geom.adjust_coordinates(floating_pane_coordinates, *viewport);
|
||||||
self.swap_layouts.set_is_floating_damaged();
|
self.swap_layouts.set_is_floating_damaged();
|
||||||
}
|
}
|
||||||
|
|
@ -4185,7 +4246,7 @@ impl Tab {
|
||||||
} else {
|
} else {
|
||||||
self.tiled_panes.insert_pane(pane_id, pane);
|
self.tiled_panes.insert_pane(pane_id, pane);
|
||||||
}
|
}
|
||||||
self.should_clear_display_before_rendering = true;
|
self.set_should_clear_display_before_rendering();
|
||||||
if let Some(client_id) = client_id {
|
if let Some(client_id) = client_id {
|
||||||
self.tiled_panes.focus_pane(pane_id, client_id);
|
self.tiled_panes.focus_pane(pane_id, client_id);
|
||||||
}
|
}
|
||||||
|
|
@ -4351,6 +4412,18 @@ impl Tab {
|
||||||
self.suppressed_panes.insert(pane_id, suppressed_pane_entry);
|
self.suppressed_panes.insert(pane_id, suppressed_pane_entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn toggle_pane_pinned(&mut self, client_id: ClientId) {
|
||||||
|
if let Some(pane) = self.get_active_pane_mut(client_id) {
|
||||||
|
pane.toggle_pinned();
|
||||||
|
self.set_force_render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn set_floating_pane_pinned(&mut self, pane_id: PaneId, should_be_pinned: bool) {
|
||||||
|
if let Some(pane) = self.get_pane_with_id_mut(pane_id) {
|
||||||
|
pane.set_pinned(should_be_pinned);
|
||||||
|
self.set_force_render();
|
||||||
|
}
|
||||||
|
}
|
||||||
fn new_scrollback_editor_pane(&self, pid: u32) -> TerminalPane {
|
fn new_scrollback_editor_pane(&self, pid: u32) -> TerminalPane {
|
||||||
let next_terminal_position = self.get_next_terminal_position();
|
let next_terminal_position = self.get_next_terminal_position();
|
||||||
let mut new_pane = TerminalPane::new(
|
let mut new_pane = TerminalPane::new(
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6089
|
assertion_line: 7605
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ zellij:tab-bar ─────────────────────────────────┌ zellij:status-bar ───────────────────────────────────────┐──────────┐
|
00 (C): ┌ zellij:tab-bar ─────────────────────────────────┌ zellij:status-bar ────────────────────────────── PIN [ ] ┐──────────┐
|
||||||
01 (C): │I am a tab bar │I am a │ │
|
01 (C): │I am a tab bar │I am a │ │
|
||||||
02 (C): │ │status bar │ │
|
02 (C): │ │status bar │ │
|
||||||
03 (C): │ │ │ │
|
03 (C): │ │ │ │
|
||||||
|
|
@ -13,7 +13,7 @@ expression: snapshot
|
||||||
07 (C): │ │ │ │ │
|
07 (C): │ │ │ │ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): └─────────────────────────────│ └──────────────────────────────────────────────────────────┘ │
|
09 (C): └─────────────────────────────│ └──────────────────────────────────────────────────────────┘ │
|
||||||
10 (C): ┌ command1 ───────────────────│ ┌ command2 ────────────────────────────────────────────────┐ │
|
10 (C): ┌ command1 ───────────────────│ ┌ command2 ─────────────────────────────────────── PIN [ ] ┐ │
|
||||||
11 (C): │ │ │ │ │
|
11 (C): │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │
|
12 (C): │ │ │ │ │
|
||||||
13 (C): │ │ │ │ │
|
13 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 3022
|
assertion_line: 3841
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): ┌ Pane #2 ─────────────────────────────────────────────────┐ ┌ Pane #3 ─────────────────────────────────────────────────┐
|
05 (C): ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ ┌ Pane #3 ──────────────────────────────────────── PIN [ ] ┐
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1352
|
assertion_line: 2797
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1104
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
|
|
@ -9,7 +9,7 @@ expression: snapshot
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ │
|
05 (C): │ │
|
||||||
06 (C): │ ┌ Pane #2 ─────────────────────────────────────────────┐ │
|
06 (C): │ ┌ Pane #2 ──────────────────────────────────── PIN [ ] ┐ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
09 (C): │ │ │ │
|
09 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1252
|
assertion_line: 1944
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEE┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEE┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
09 (C): │ └─────────────────────────────│ │ │
|
09 (C): │ └─────────────────────────────│ │ │
|
||||||
10 (C): │ │E│ │ │
|
10 (C): │ │E│ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 682
|
assertion_line: 1028
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 2386
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1632
|
assertion_line: 2445
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C):
|
00 (C):
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C):
|
02 (C):
|
||||||
03 (C):
|
03 (C):
|
||||||
04 (C):
|
04 (C):
|
||||||
05 (C): ┌ Pane #2 ─────────────────────────────────────────────────┐
|
05 (C): ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐
|
||||||
06 (C): │ │
|
06 (C): │ │
|
||||||
07 (C): │ │
|
07 (C): │ │
|
||||||
08 (C): │ │
|
08 (C): │ │
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5995
|
assertion_line: 7510
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ zellij:status-bar ───────────────────────────────────────┐ab-bar ──────────────────────────────────────────┐──────────┐
|
00 (C): ┌ zellij:status-bar ────────────────────────────── PIN [ ] ┐ab-bar ───────────────────────────────── PIN [ ] ┐──────────┐
|
||||||
01 (C): │I am a │b bar │ │
|
01 (C): │I am a │b bar │ │
|
||||||
02 (C): │status bar │ │ │
|
02 (C): │status bar │ │ │
|
||||||
03 (C): │ │ │ │
|
03 (C): │ │ │ │
|
||||||
|
|
@ -13,7 +13,7 @@ expression: snapshot
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
09 (C): └──────────────────────────────────────────────────────────┘─────────────────────────────────────────────────┘ │
|
09 (C): └──────────────────────────────────────────────────────────┘─────────────────────────────────────────────────┘ │
|
||||||
10 (C): ┌ command1 ───────────────────│ ┌ command2 ────────────────────────────────────────────────┐ │
|
10 (C): ┌ command1 ───────────────────│ ┌ command2 ─────────────────────────────────────── PIN [ ] ┐ │
|
||||||
11 (C): │ │ │ │ │
|
11 (C): │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │
|
12 (C): │ │ │ │ │
|
||||||
13 (C): │ │ │ │ │
|
13 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1343
|
assertion_line: 2685
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────── SCROLL: 0/7 ┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────── SCROLL: 0/7 ┐
|
||||||
|
|
@ -10,7 +10,7 @@ expression: snapshot
|
||||||
04 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
04 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
||||||
05 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
05 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
||||||
06 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
06 (C): │ixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixe │
|
||||||
07 (C): │ixelSixelSixelSixelSixelSixelSixe┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
07 (C): │ixelSixelSixelSixelSixelSixelSixe┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
08 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
||||||
09 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
09 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
||||||
10 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
10 (C): │ixelSixelSixelSixelSixelSixelSixe│ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 881
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1066
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────────┐ │
|
04 (C): │ ┌ Pane #2 ──────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
05 (C): │ │ │ │
|
05 (C): │ │ │ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1318
|
assertion_line: 2050
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1078
|
assertion_line: 1650
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 911
|
assertion_line: 1363
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ ┐ │
|
04 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ ┐ │
|
||||||
05 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│─────────────────────────────────────────────┐ │
|
05 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│ │ │
|
06 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│ │ │
|
||||||
07 (C): │ └──────────────────────────────────────┘E│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └──────────────────────────────────────┘E│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 967
|
assertion_line: 1459
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1022
|
assertion_line: 1554
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ ┐ │
|
04 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ ┐ │
|
||||||
05 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│─────────────────────────────────────────────┐ │
|
05 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│ │ │
|
06 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│E│ │ │
|
||||||
07 (C): │ └──────────────────────────────────────┘E│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └──────────────────────────────────────┘E│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1136
|
assertion_line: 1748
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └─────────────────────────────┌ Pane #4 ─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └─────────────────────────────┌ Pane #4 ───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1312
|
assertion_line: 2647
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -10,7 +10,7 @@ expression: snapshot
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ │
|
05 (C): │ │
|
||||||
06 (C): │ │
|
06 (C): │ │
|
||||||
07 (C): │ ┌ Pane #2 ────────────────────────────────── SCROLL: 0/17 ┐ │
|
07 (C): │ ┌ Pane #2 ──────────────────────── SCROLL: 0/17 | PIN [ ] ┐ │
|
||||||
08 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
08 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
||||||
09 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
09 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
||||||
10 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
10 (C): │ │SixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSixelSix│ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 849
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5799
|
assertion_line: 8040
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ────────────────────────────────────────────┐ ┌ Pane #3 ────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ─────────────────────────────────── PIN [ ] ┐ ┌ Pane #3 ─────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │ │ │
|
06 (C): │ │ │ │ │ │
|
||||||
07 (C): │ │ │ │ │ │
|
07 (C): │ │ │ │ │ │
|
||||||
08 (C): │ │ │ │ │ │
|
08 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5799
|
assertion_line: 8040
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ ┌ Pane #3 ────────────────────────────────────────────┐ ┌ Pane #2 ────────────────────────────────────────────┐ │
|
01 (C): │ ┌ Pane #3 ─────────────────────────────────── PIN [ ] ┐ ┌ Pane #2 ─────────────────────────────────── PIN [ ] ┐ │
|
||||||
02 (C): │ │ │ │ │ │
|
02 (C): │ │ │ │ │ │
|
||||||
03 (C): │ │ │ │ │ │
|
03 (C): │ │ │ │ │ │
|
||||||
04 (C): │ │ │ │ │ │
|
04 (C): │ │ │ │ │ │
|
||||||
|
|
@ -14,7 +14,7 @@ expression: snapshot
|
||||||
08 (C): │ │ │ │ │ │
|
08 (C): │ │ │ │ │ │
|
||||||
09 (C): │ │ │ │ │ │
|
09 (C): │ │ │ │ │ │
|
||||||
10 (C): │ └─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘ │
|
10 (C): │ └─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘ │
|
||||||
11 (C): │ ┌ Pane #4 ────────────────────────────────────────────┐ │
|
11 (C): │ ┌ Pane #4 ─────────────────────────────────── PIN [ ] ┐ │
|
||||||
12 (C): │ │ │ │
|
12 (C): │ │ │ │
|
||||||
13 (C): │ │ │ │
|
13 (C): │ │ │ │
|
||||||
14 (C): │ │ │ │
|
14 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5799
|
assertion_line: 8040
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -13,7 +13,7 @@ expression: snapshot
|
||||||
07 (C): │ │
|
07 (C): │ │
|
||||||
08 (C): │ │
|
08 (C): │ │
|
||||||
09 (C): │ │
|
09 (C): │ │
|
||||||
10 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐
|
10 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐
|
||||||
11 (C): │ │ │
|
11 (C): │ │ │
|
||||||
12 (C): │ │ │
|
12 (C): │ │ │
|
||||||
13 (C): │ │ │
|
13 (C): │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 2550
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -7,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Renamed floating pane ───────────────────────────────────┐ │
|
05 (C): │ ┌ Renamed floating pane ────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1268
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1145
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ──────────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ───────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1186
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ──────────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ───────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 1227
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
03 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
04 (C): │ │ │ │
|
04 (C): │ │ │ │
|
||||||
05 (C): │ │ │ │
|
05 (C): │ │ │ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1544
|
assertion_line: 2144
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ────────────────────┌ ┌ ┌ Pane #4 ─────────────────────────────────── SCROLL: 0/1 ┐─────┐
|
00 (C): ┌ Pane #1 ────────────────────┌ ┌ ┌ Pane #4 ───────────────────────── SCROLL: 0/1 | PIN [ ] ┐─────┐
|
||||||
01 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
01 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 2220
|
assertion_line: 2921
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ────────────────────┌ EDITING SCROLLBACK ──────────────────────────────────────┐─────────┐
|
00 (C): ┌ Pane #1 ────────────────────┌ EDITING SCROLLBACK ───────────────────────────── PIN [ ] ┐─────────┐
|
||||||
01 (C): │ │ │ │
|
01 (C): │ │ │ │
|
||||||
02 (C): │ │ │ │
|
02 (C): │ │ │ │
|
||||||
03 (C): │ │ │ │
|
03 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1721
|
assertion_line: 3029
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C):
|
00 (C):
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C):
|
02 (C):
|
||||||
03 (C):
|
03 (C):
|
||||||
04 (C):
|
04 (C):
|
||||||
05 (C): ┌ SEARCHING: fring ──────────────────────── SCROLL: 0/103 ┐
|
05 (C): ┌ SEARCHING: fring ────────────── SCROLL: 0/103 | PIN [ ] ┐
|
||||||
06 (C): │ │
|
06 (C): │ │
|
||||||
07 (C): │a mauris in aliquam sem fringilla. │
|
07 (C): │a mauris in aliquam sem fringilla. │
|
||||||
08 (C): │ │
|
08 (C): │ │
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 3017
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -7,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ fish /home/thomas/Projects/zellij ─────── SCROLL: 0/103 ┐ │
|
05 (C): │ ┌ fish /home/thomas/Projects/zellij ────── 0/103 | PIN [ ] ┐ │
|
||||||
06 (C): │ │d viverra tellus in hac habitasse. Nunc scelerisque viverr│ │
|
06 (C): │ │d viverra tellus in hac habitasse. Nunc scelerisque viverr│ │
|
||||||
07 (C): │ │a mauris in aliquam sem fringilla. │ │
|
07 (C): │ │a mauris in aliquam sem fringilla. │ │
|
||||||
08 (C): │ │⏎ │ │
|
08 (C): │ │⏎ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1594
|
assertion_line: 2234
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ────────────────────┌ ┌ ┌ Pane #4 ── 0 ┐
|
00 (C): ┌ Pane #1 ────────────────────┌ ┌ ┌ Pane #4 ── 0 ┐
|
||||||
01 (C): │ │ │E│EEEEEEEEEEEEEE│
|
01 (C): │ │ │E│EEEEEEEEEEEEEE│
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐EEEEEEE│
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐EEEEEEE│
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐EEEEE│
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐EEEEE│
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEE│
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1648
|
assertion_line: 2329
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ Pane #5 ─────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ Pane #5 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
03 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
04 (C): │ │E┌ Pane #6 ─────────────── SCROLL: 0/1 ┐ │
|
04 (C): │ │E┌ Pane #6 ───── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────────────────────────────┐ │
|
05 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│──────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
06 (C): │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │ │
|
||||||
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│───────────────────────────────── SCROLL: 0/1 ┐ │
|
07 (C): │ └─│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│─────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
08 (C): │ │EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
09 (C): │ └──────────────────────────────────────┘─────────────────────────────────── SCROLL: 0/1 ┐ │
|
09 (C): │ └──────────────────────────────────────┘───────────────────────── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
10 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
11 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
12 (C): │ │ │E│EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE│ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 1639
|
assertion_line: 2738
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ EDITING SCROLLBACK ──────────────────────────────────────┐ │
|
05 (C): │ ┌ EDITING SCROLLBACK ───────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6180
|
assertion_line: 7697
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────┐────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │ │
|
01 (C): │ │ │
|
||||||
02 (C): │ │ │
|
02 (C): │ │ │
|
||||||
03 (C): │ │ │
|
03 (C): │ │ │
|
||||||
04 (C): │ │ │
|
04 (C): │ │ │
|
||||||
05 (C): │ ┌ zellij:status-bar ───────────────────────────────────────┐ │
|
05 (C): │ ┌ zellij:status-bar ────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │I am a │ │
|
06 (C): │ │I am a │ │
|
||||||
07 (C): │ │status bar │─┐ │
|
07 (C): │ │status bar │ ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): └─────────────────────────────│ │───┐ │
|
09 (C): └─────────────────────────────│ │ ] ┐ │
|
||||||
10 (C): │ ┌ Pane #3 ──────────│ │ │ │
|
10 (C): │ ┌ Pane #3 ──────────│ │ │ │
|
||||||
11 (C): │ │ │ │ │ │
|
11 (C): │ │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │ │
|
12 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5672
|
assertion_line: 7864
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,11 +8,11 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ ┌ Pane #3 ─────────────────────────────────────────────────┐ │
|
07 (C): │ │ ┌ Pane #3 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ │ ┌ Pane #4 ─────────────────────────────────────────────────┐ │
|
09 (C): │ │ │ ┌ Pane #4 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
10 (C): │ │ │ │ │ │
|
10 (C): │ │ │ │ │ │
|
||||||
11 (C): │ │ │ │ │ │
|
11 (C): │ │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │ │
|
12 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6275
|
assertion_line: 7793
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ ┌ command2 ────────────── SCROLL: 0/1 ┐ │
|
02 (C): │ ┌ command2 ──── SCROLL: 0/1 | PIN [ ] ┐ │
|
||||||
03 (C): │ │ Waiting to run: command2 │ │
|
03 (C): │ │ Waiting to run: command2 │ │
|
||||||
04 (C): │ │ ┌ zellij:tab-bar ──────────────────────┐ │
|
04 (C): │ │ ┌ zellij:tab-bar ───────────── PIN [ ] ┐ │
|
||||||
05 (C): │ │<│I am a tab bar ┌ zellij:status-bar ───────────────────────────────────────┐ │
|
05 (C): │ │<│I am a tab bar ┌ zellij:status-bar ────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │l│ │I am a │ │
|
06 (C): │ │l│ │I am a │ │
|
||||||
07 (C): │ └─│ │status bar │─┐ │
|
07 (C): │ └─│ │status bar │ ┐ │
|
||||||
08 (C): │ │ │ │ │ │
|
08 (C): │ │ │ │ │ │
|
||||||
09 (C): │ └─────────────────────────│ │───┐ │
|
09 (C): │ └─────────────────────────│ │ ] ┐ │
|
||||||
10 (C): │ │ │ │ │
|
10 (C): │ │ │ │ │
|
||||||
11 (C): │ │ │ │ │
|
11 (C): │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │
|
12 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6432
|
assertion_line: 7952
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,11 +8,11 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ zellij:tab-bar ──────────────────────────────────────────┐ │
|
05 (C): │ ┌ zellij:tab-bar ───────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │I am a tab bar │ │
|
06 (C): │ │I am a tab bar │ │
|
||||||
07 (C): │ │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
07 (C): │ │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ │ ┌ zellij:status-bar ───────────────────────────────────────┐ │
|
09 (C): │ │ │ ┌ zellij:status-bar ────────────────────────────── PIN [ ] ┐ │
|
||||||
10 (C): │ │ │ │I am a │ │
|
10 (C): │ │ │ │I am a │ │
|
||||||
11 (C): │ │ │ │status bar │ │
|
11 (C): │ │ │ │status bar │ │
|
||||||
12 (C): │ │ │ │ │ │
|
12 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 2560
|
assertion_line: 3335
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,9 +8,9 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ ┌ Pane #3 ─────────────────────────────────────────────────┐ │
|
07 (C): │ │ ┌ Pane #3 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ │ │ │
|
09 (C): │ │ │ │ │
|
||||||
10 (C): │ │ │ │ │
|
10 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
|
assertion_line: 940
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6028
|
assertion_line: 8340
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,9 +8,9 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #3 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #3 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │─┐ │
|
07 (C): │ │ │ ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ │ │ │
|
09 (C): │ │ │ │ │
|
||||||
10 (C): │ │ │ │ │
|
10 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 6079
|
assertion_line: 8408
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -11,11 +11,11 @@ expression: snapshot
|
||||||
05 (C): │ │
|
05 (C): │ │
|
||||||
06 (C): │ │
|
06 (C): │ │
|
||||||
07 (C): │ │
|
07 (C): │ │
|
||||||
08 (C): │ ┌ Pane #2 ────────────────────────────────────────────────────────────────┐ │
|
08 (C): │ ┌ Pane #2 ─────────────────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
09 (C): │ │ │ │
|
09 (C): │ │ │ │
|
||||||
10 (C): │ │ ┌ Pane #3 ────────────────────────────────────────────────────────────────┐ │
|
10 (C): │ │ ┌ Pane #3 ─────────────────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
11 (C): │ │ │ │ │
|
11 (C): │ │ │ │ │
|
||||||
12 (C): │ │ │ ┌ Pane #4 ────────────────────────────────────────────────────────────────┐ │
|
12 (C): │ │ │ ┌ Pane #4 ─────────────────────────────────────────────────────── PIN [ ] ┐ │
|
||||||
13 (C): │ │ │ │ │ │
|
13 (C): │ │ │ │ │ │
|
||||||
14 (C): │ │ │ │ │ │
|
14 (C): │ │ │ │ │ │
|
||||||
15 (C): │ │ │ │ │ │
|
15 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5859
|
assertion_line: 8119
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────┐────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │ │
|
01 (C): │ │ │
|
||||||
02 (C): │ │ │
|
02 (C): │ │ │
|
||||||
03 (C): │ │ │
|
03 (C): │ │ │
|
||||||
04 (C): │ │ │
|
04 (C): │ │ │
|
||||||
05 (C): │ ┌ Pane #3 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #3 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ ┌ Pane #4 ─────────────────────────────────────────────────┐ │
|
07 (C): │ │ ┌ Pane #4 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): └─────────────────────────────│ │ │ │
|
09 (C): └─────────────────────────────│ │ │ │
|
||||||
10 (C): │ │ │ │ │
|
10 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5915
|
assertion_line: 8192
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,11 +8,11 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #4 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #4 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │─┐ │
|
07 (C): │ │ │ ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ │ │─┐ │
|
09 (C): │ │ │ │ ┐ │
|
||||||
10 (C): │ │ │ │ │ │
|
10 (C): │ │ │ │ │ │
|
||||||
11 (C): │ │ │ │ │ │
|
11 (C): │ │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │ │
|
12 (C): │ │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
|
||||||
assertion_line: 5970
|
assertion_line: 8266
|
||||||
expression: snapshot
|
expression: snapshot
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,11 +8,11 @@ expression: snapshot
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ Pane #4 ─────────────────────────────────────────────────┐ │
|
05 (C): │ ┌ Pane #4 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │─┐ │
|
07 (C): │ │ │ ┐ │
|
||||||
08 (C): │ │ │ │ │
|
08 (C): │ │ │ │ │
|
||||||
09 (C): │ │ ┌ Pane #2 ─────────────────────────────────────────────────┐ │
|
09 (C): │ │ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │
|
||||||
10 (C): │ │ │ │ │
|
10 (C): │ │ │ │ │
|
||||||
11 (C): │ │ │ │ │
|
11 (C): │ │ │ │ │
|
||||||
12 (C): │ │ │ │ │
|
12 (C): │ │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ use crate::ClientId;
|
||||||
use zellij_utils::data::{client_id_to_colors, PaletteColor, Style};
|
use zellij_utils::data::{client_id_to_colors, PaletteColor, Style};
|
||||||
use zellij_utils::errors::prelude::*;
|
use zellij_utils::errors::prelude::*;
|
||||||
use zellij_utils::pane_size::Viewport;
|
use zellij_utils::pane_size::Viewport;
|
||||||
|
use zellij_utils::position::Position;
|
||||||
|
|
||||||
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
|
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
|
||||||
|
|
||||||
|
|
@ -60,6 +61,7 @@ pub struct FrameParams {
|
||||||
pub pane_is_stacked_under: bool,
|
pub pane_is_stacked_under: bool,
|
||||||
pub pane_is_stacked_over: bool,
|
pub pane_is_stacked_over: bool,
|
||||||
pub should_draw_pane_frames: bool,
|
pub should_draw_pane_frames: bool,
|
||||||
|
pub pane_is_floating: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, PartialEq)]
|
#[derive(Default, PartialEq)]
|
||||||
|
|
@ -78,6 +80,8 @@ pub struct PaneFrame {
|
||||||
pane_is_stacked_over: bool,
|
pane_is_stacked_over: bool,
|
||||||
pane_is_stacked_under: bool,
|
pane_is_stacked_under: bool,
|
||||||
should_draw_pane_frames: bool,
|
should_draw_pane_frames: bool,
|
||||||
|
is_pinned: bool,
|
||||||
|
is_floating: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PaneFrame {
|
impl PaneFrame {
|
||||||
|
|
@ -102,8 +106,14 @@ impl PaneFrame {
|
||||||
pane_is_stacked_over: frame_params.pane_is_stacked_over,
|
pane_is_stacked_over: frame_params.pane_is_stacked_over,
|
||||||
pane_is_stacked_under: frame_params.pane_is_stacked_under,
|
pane_is_stacked_under: frame_params.pane_is_stacked_under,
|
||||||
should_draw_pane_frames: frame_params.should_draw_pane_frames,
|
should_draw_pane_frames: frame_params.should_draw_pane_frames,
|
||||||
|
is_pinned: false,
|
||||||
|
is_floating: frame_params.pane_is_floating,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn is_pinned(mut self, is_pinned: bool) -> Self {
|
||||||
|
self.is_pinned = is_pinned;
|
||||||
|
self
|
||||||
|
}
|
||||||
pub fn add_exit_status(&mut self, exit_status: Option<i32>) {
|
pub fn add_exit_status(&mut self, exit_status: Option<i32>) {
|
||||||
self.exit_status = match exit_status {
|
self.exit_status = match exit_status {
|
||||||
Some(exit_status) => Some(ExitStatus::Code(exit_status)),
|
Some(exit_status) => Some(ExitStatus::Code(exit_status)),
|
||||||
|
|
@ -149,10 +159,45 @@ impl PaneFrame {
|
||||||
max_length: usize,
|
max_length: usize,
|
||||||
) -> Option<(Vec<TerminalCharacter>, usize)> {
|
) -> Option<(Vec<TerminalCharacter>, usize)> {
|
||||||
// string and length because of color
|
// string and length because of color
|
||||||
if self.scroll_position.0 > 0 || self.scroll_position.1 > 0 {
|
let has_scroll = self.scroll_position.0 > 0 || self.scroll_position.1 > 0;
|
||||||
|
if has_scroll {
|
||||||
|
let pin_indication = if self.is_floating {
|
||||||
|
self.render_pinned_indication(max_length)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}; // no pin indication for tiled panes
|
||||||
|
let space_for_scroll_indication = pin_indication
|
||||||
|
.as_ref()
|
||||||
|
.map(|(_, length)| max_length.saturating_sub(*length + 1))
|
||||||
|
.unwrap_or(max_length);
|
||||||
|
let scroll_indication = self.render_scroll_indication(space_for_scroll_indication);
|
||||||
|
match (pin_indication, scroll_indication) {
|
||||||
|
(
|
||||||
|
Some((mut pin_indication, pin_indication_len)),
|
||||||
|
Some((mut scroll_indication, scroll_indication_len)),
|
||||||
|
) => {
|
||||||
|
let mut characters: Vec<_> = scroll_indication.drain(..).collect();
|
||||||
|
let mut separator = foreground_color(&format!("|"), self.color);
|
||||||
|
characters.append(&mut separator);
|
||||||
|
characters.append(&mut pin_indication);
|
||||||
|
Some((characters, pin_indication_len + scroll_indication_len + 1))
|
||||||
|
},
|
||||||
|
(Some(pin_indication), None) => Some(pin_indication),
|
||||||
|
(None, Some(scroll_indication)) => Some(scroll_indication),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
} else if self.is_floating {
|
||||||
|
self.render_pinned_indication(max_length)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn render_scroll_indication(
|
||||||
|
&self,
|
||||||
|
max_length: usize,
|
||||||
|
) -> Option<(Vec<TerminalCharacter>, usize)> {
|
||||||
let prefix = " SCROLL: ";
|
let prefix = " SCROLL: ";
|
||||||
let full_indication =
|
let full_indication = format!(" {}/{} ", self.scroll_position.0, self.scroll_position.1);
|
||||||
format!(" {}/{} ", self.scroll_position.0, self.scroll_position.1);
|
|
||||||
let short_indication = format!(" {} ", self.scroll_position.0);
|
let short_indication = format!(" {} ", self.scroll_position.0);
|
||||||
let full_indication_len = full_indication.chars().count();
|
let full_indication_len = full_indication.chars().count();
|
||||||
let short_indication_len = short_indication.chars().count();
|
let short_indication_len = short_indication.chars().count();
|
||||||
|
|
@ -175,6 +220,19 @@ impl PaneFrame {
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
fn render_pinned_indication(
|
||||||
|
&self,
|
||||||
|
max_length: usize,
|
||||||
|
) -> Option<(Vec<TerminalCharacter>, usize)> {
|
||||||
|
let is_checked = if self.is_pinned { '+' } else { ' ' };
|
||||||
|
let full_indication = format!(" PIN [{}] ", is_checked);
|
||||||
|
let full_indication_len = full_indication.chars().count();
|
||||||
|
if full_indication_len <= max_length {
|
||||||
|
Some((
|
||||||
|
foreground_color(&full_indication, self.color),
|
||||||
|
full_indication_len,
|
||||||
|
))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
@ -694,6 +752,22 @@ impl PaneFrame {
|
||||||
};
|
};
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
pub fn clicked_on_pinned(&mut self, position: Position) -> bool {
|
||||||
|
if self.is_floating {
|
||||||
|
// TODO: this is not entirely accurate because our relative position calculation in
|
||||||
|
// itself isn't - when that is fixed, we should adjust this as well
|
||||||
|
let checkbox_center_position = self.geom.cols.saturating_sub(5);
|
||||||
|
let checkbox_position_start = checkbox_center_position.saturating_sub(1);
|
||||||
|
let checkbox_position_end = checkbox_center_position + 1;
|
||||||
|
if position.line() == -1
|
||||||
|
&& (position.column() >= checkbox_position_start
|
||||||
|
&& position.column() <= checkbox_position_end)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
pub fn render(&self) -> Result<(Vec<CharacterChunk>, Option<String>)> {
|
pub fn render(&self) -> Result<(Vec<CharacterChunk>, Option<String>)> {
|
||||||
let err_context = || "failed to render pane frame";
|
let err_context = || "failed to render pane frame";
|
||||||
let mut character_chunks = vec![];
|
let mut character_chunks = vec![];
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,15 @@ impl<'a> PaneContentsAndUi<'a> {
|
||||||
format!("failed to render fake cursor if needed for client {client_id}")
|
format!("failed to render fake cursor if needed for client {client_id}")
|
||||||
})?;
|
})?;
|
||||||
if let Some(colors) = client_id_to_colors(*fake_cursor_client_id, self.style.colors) {
|
if let Some(colors) = client_id_to_colors(*fake_cursor_client_id, self.style.colors) {
|
||||||
|
let cursor_is_visible = self
|
||||||
|
.pane
|
||||||
|
.cursor_coordinates()
|
||||||
|
.map(|(x, y)| {
|
||||||
|
self.output
|
||||||
|
.cursor_is_visible(self.pane.x() + x, self.pane.y() + y)
|
||||||
|
})
|
||||||
|
.unwrap_or(false);
|
||||||
|
if cursor_is_visible {
|
||||||
if let Some(vte_output) = self.pane.render_fake_cursor(colors.0, colors.1) {
|
if let Some(vte_output) = self.pane.render_fake_cursor(colors.0, colors.1) {
|
||||||
self.output.add_post_vte_instruction_to_client(
|
self.output.add_post_vte_instruction_to_client(
|
||||||
client_id,
|
client_id,
|
||||||
|
|
@ -153,6 +162,7 @@ impl<'a> PaneContentsAndUi<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn render_terminal_title_if_needed(
|
pub fn render_terminal_title_if_needed(
|
||||||
|
|
@ -179,6 +189,7 @@ impl<'a> PaneContentsAndUi<'a> {
|
||||||
client_id: ClientId,
|
client_id: ClientId,
|
||||||
client_mode: InputMode,
|
client_mode: InputMode,
|
||||||
session_is_mirrored: bool,
|
session_is_mirrored: bool,
|
||||||
|
pane_is_floating: bool,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let err_context = || format!("failed to render pane frame for client {client_id}");
|
let err_context = || format!("failed to render pane frame for client {client_id}");
|
||||||
|
|
||||||
|
|
@ -210,6 +221,7 @@ impl<'a> PaneContentsAndUi<'a> {
|
||||||
pane_is_stacked_over: self.pane_is_stacked_over,
|
pane_is_stacked_over: self.pane_is_stacked_over,
|
||||||
pane_is_stacked_under: self.pane_is_stacked_under,
|
pane_is_stacked_under: self.pane_is_stacked_under,
|
||||||
should_draw_pane_frames: self.should_draw_pane_frames,
|
should_draw_pane_frames: self.should_draw_pane_frames,
|
||||||
|
pane_is_floating,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FrameParams {
|
FrameParams {
|
||||||
|
|
@ -222,6 +234,7 @@ impl<'a> PaneContentsAndUi<'a> {
|
||||||
pane_is_stacked_over: self.pane_is_stacked_over,
|
pane_is_stacked_over: self.pane_is_stacked_over,
|
||||||
pane_is_stacked_under: self.pane_is_stacked_under,
|
pane_is_stacked_under: self.pane_is_stacked_under,
|
||||||
should_draw_pane_frames: self.should_draw_pane_frames,
|
should_draw_pane_frames: self.should_draw_pane_frames,
|
||||||
|
pane_is_floating,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1328,6 +1328,7 @@ fn open_new_floating_pane_with_custom_coordinates() {
|
||||||
y: Some(SplitSize::Fixed(5)),
|
y: Some(SplitSize::Fixed(5)),
|
||||||
width: Some(SplitSize::Percent(1)),
|
width: Some(SplitSize::Percent(1)),
|
||||||
height: Some(SplitSize::Fixed(2)),
|
height: Some(SplitSize::Fixed(2)),
|
||||||
|
pinned: None,
|
||||||
}),
|
}),
|
||||||
false,
|
false,
|
||||||
Some(1),
|
Some(1),
|
||||||
|
|
@ -1362,6 +1363,7 @@ fn open_new_floating_pane_with_custom_coordinates_exceeding_viewport() {
|
||||||
y: Some(SplitSize::Fixed(21)),
|
y: Some(SplitSize::Fixed(21)),
|
||||||
width: Some(SplitSize::Fixed(10)),
|
width: Some(SplitSize::Fixed(10)),
|
||||||
height: Some(SplitSize::Fixed(10)),
|
height: Some(SplitSize::Fixed(10)),
|
||||||
|
pinned: None,
|
||||||
}),
|
}),
|
||||||
false,
|
false,
|
||||||
Some(1),
|
Some(1),
|
||||||
|
|
@ -2229,6 +2231,7 @@ pub fn send_cli_new_pane_action_with_default_parameters() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2272,6 +2275,7 @@ pub fn send_cli_new_pane_action_with_split_direction() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2315,6 +2319,7 @@ pub fn send_cli_new_pane_action_with_command_and_cwd() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2358,6 +2363,7 @@ pub fn send_cli_new_pane_action_with_floating_pane_and_coordinates() {
|
||||||
y: None,
|
y: None,
|
||||||
width: Some("20%".to_owned()),
|
width: Some("20%".to_owned()),
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_new_pane_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2396,6 +2402,7 @@ pub fn send_cli_edit_action_with_default_parameters() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2434,6 +2441,7 @@ pub fn send_cli_edit_action_with_line_number() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
@ -2472,6 +2480,7 @@ pub fn send_cli_edit_action_with_split_direction() {
|
||||||
y: None,
|
y: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
|
pinned: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
send_cli_action_to_server(&session_metadata, cli_edit_action, client_id);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
std::thread::sleep(std::time::Duration::from_millis(100)); // give time for actions to be
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 3374
|
assertion_line: 3395
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: "format!(\"{}\", snapshot)"
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ floating_pane_to_eject ──────────────┐ │
|
05 (C): │ ┌ floating_pane_to_eject ───── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 3374
|
assertion_line: 3395
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: "format!(\"{}\", snapshot)"
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ floating_pane_to_eject ──────────────┐ │
|
05 (C): │ ┌ floating_pane_to_eject ───── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 2849
|
assertion_line: 3395
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ tiled_pane ──────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ tiled_pane ──────────────────────────────────────────────────────────────────┐
|
||||||
|
|
@ -8,7 +8,7 @@ expression: "format!(\"{}\", snapshot)"
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ │
|
03 (C): │ │
|
||||||
04 (C): │ │
|
04 (C): │ │
|
||||||
05 (C): │ ┌ floating_pane_to_eject ──────────────┐ │
|
05 (C): │ ┌ floating_pane_to_eject ───── PIN [ ] ┐ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
07 (C): │ │ │ │
|
07 (C): │ │ │ │
|
||||||
08 (C): │ │ │ │
|
08 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 2351
|
assertion_line: 2371
|
||||||
expression: "format!(\"{:?}\", * received_pty_instructions.lock().unwrap())"
|
expression: "format!(\"{:?}\", * received_pty_instructions.lock().unwrap())"
|
||||||
---
|
---
|
||||||
[SpawnTerminal(Some(RunCommand(RunCommand { command: "htop", args: [], cwd: Some("/some/folder"), hold_on_close: true, hold_on_start: false, originating_plugin: None })), Some(true), None, Some(FloatingPaneCoordinates { x: Some(Fixed(10)), y: None, width: Some(Percent(20)), height: None }), false, ClientId(10)), UpdateActivePane(Some(Terminal(0)), 1), UpdateActivePane(Some(Terminal(0)), 1), Exit]
|
[SpawnTerminal(Some(RunCommand(RunCommand { command: "htop", args: [], cwd: Some("/some/folder"), hold_on_close: true, hold_on_start: false, originating_plugin: None })), Some(true), None, Some(FloatingPaneCoordinates { x: Some(Fixed(10)), y: None, width: Some(Percent(20)), height: None, pinned: None }), false, ClientId(10)), UpdateActivePane(Some(Terminal(0)), 1), UpdateActivePane(Some(Terminal(0)), 1), Exit]
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 2186
|
assertion_line: 2609
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
|
03 (C): │ ┌ Pane #1 ──────────────────── PIN [ ] ┐ │
|
||||||
04 (C): │ │ │ │
|
04 (C): │ │ │ │
|
||||||
05 (C): │ │ │ │
|
05 (C): │ │ │ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 2186
|
assertion_line: 2609
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
|
03 (C): │ ┌ Pane #1 ──────────────────── PIN [ ] ┐ │
|
||||||
04 (C): │ │ │ │
|
04 (C): │ │ │ │
|
||||||
05 (C): │ │ │ │
|
05 (C): │ │ │ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
source: zellij-server/src/./unit/screen_tests.rs
|
source: zellij-server/src/./unit/screen_tests.rs
|
||||||
assertion_line: 2131
|
assertion_line: 2569
|
||||||
expression: "format!(\"{}\", snapshot)"
|
expression: "format!(\"{}\", snapshot)"
|
||||||
---
|
---
|
||||||
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
00 (C): ┌ Pane #2 ─────────────────────────────────────────────────────────────────────┐
|
||||||
01 (C): │ │
|
01 (C): │ │
|
||||||
02 (C): │ │
|
02 (C): │ │
|
||||||
03 (C): │ ┌ Pane #1 ─────────────────────────────┐ │
|
03 (C): │ ┌ Pane #1 ──────────────────── PIN [ ] ┐ │
|
||||||
04 (C): │ │ │ │
|
04 (C): │ │ │ │
|
||||||
05 (C): │ │ │ │
|
05 (C): │ │ │ │
|
||||||
06 (C): │ │ │ │
|
06 (C): │ │ │ │
|
||||||
|
|
|
||||||
|
|
@ -1135,6 +1135,13 @@ pub fn change_host_folder(new_host_folder: PathBuf) {
|
||||||
unsafe { host_run_plugin_command() };
|
unsafe { host_run_plugin_command() };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_floating_pane_pinned(pane_id: PaneId, should_be_pinned: bool) {
|
||||||
|
let plugin_command = PluginCommand::SetFloatingPanePinned(pane_id, should_be_pinned);
|
||||||
|
let protobuf_plugin_command: ProtobufPluginCommand = plugin_command.try_into().unwrap();
|
||||||
|
object_to_stdout(&protobuf_plugin_command.encode_to_vec());
|
||||||
|
unsafe { host_run_plugin_command() };
|
||||||
|
}
|
||||||
|
|
||||||
// Utility Functions
|
// Utility Functions
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ keybinds {
|
||||||
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
||||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
||||||
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "Normal"; }
|
||||||
}
|
}
|
||||||
move {
|
move {
|
||||||
bind "Ctrl h" { SwitchToMode "Normal"; }
|
bind "Ctrl h" { SwitchToMode "Normal"; }
|
||||||
|
|
|
||||||
|
|
@ -455,6 +455,7 @@ pub enum ActionName {
|
||||||
CliPipe = 82,
|
CliPipe = 82,
|
||||||
MoveTab = 83,
|
MoveTab = 83,
|
||||||
KeybindPipe = 84,
|
KeybindPipe = 84,
|
||||||
|
TogglePanePinned = 85,
|
||||||
}
|
}
|
||||||
impl ActionName {
|
impl ActionName {
|
||||||
/// String value of the enum field names used in the ProtoBuf definition.
|
/// String value of the enum field names used in the ProtoBuf definition.
|
||||||
|
|
@ -548,6 +549,7 @@ impl ActionName {
|
||||||
ActionName::CliPipe => "CliPipe",
|
ActionName::CliPipe => "CliPipe",
|
||||||
ActionName::MoveTab => "MoveTab",
|
ActionName::MoveTab => "MoveTab",
|
||||||
ActionName::KeybindPipe => "KeybindPipe",
|
ActionName::KeybindPipe => "KeybindPipe",
|
||||||
|
ActionName::TogglePanePinned => "TogglePanePinned",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// Creates an enum from field names used in the ProtoBuf definition.
|
/// Creates an enum from field names used in the ProtoBuf definition.
|
||||||
|
|
@ -638,6 +640,7 @@ impl ActionName {
|
||||||
"CliPipe" => Some(Self::CliPipe),
|
"CliPipe" => Some(Self::CliPipe),
|
||||||
"MoveTab" => Some(Self::MoveTab),
|
"MoveTab" => Some(Self::MoveTab),
|
||||||
"KeybindPipe" => Some(Self::KeybindPipe),
|
"KeybindPipe" => Some(Self::KeybindPipe),
|
||||||
|
"TogglePanePinned" => Some(Self::TogglePanePinned),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ pub struct PluginCommand {
|
||||||
pub name: i32,
|
pub name: i32,
|
||||||
#[prost(
|
#[prost(
|
||||||
oneof = "plugin_command::Payload",
|
oneof = "plugin_command::Payload",
|
||||||
tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89"
|
tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90"
|
||||||
)]
|
)]
|
||||||
pub payload: ::core::option::Option<plugin_command::Payload>,
|
pub payload: ::core::option::Option<plugin_command::Payload>,
|
||||||
}
|
}
|
||||||
|
|
@ -176,10 +176,20 @@ pub mod plugin_command {
|
||||||
RebindKeysPayload(super::RebindKeysPayload),
|
RebindKeysPayload(super::RebindKeysPayload),
|
||||||
#[prost(message, tag = "89")]
|
#[prost(message, tag = "89")]
|
||||||
ChangeHostFolderPayload(super::ChangeHostFolderPayload),
|
ChangeHostFolderPayload(super::ChangeHostFolderPayload),
|
||||||
|
#[prost(message, tag = "90")]
|
||||||
|
SetFloatingPanePinnedPayload(super::SetFloatingPanePinnedPayload),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[allow(clippy::derive_partial_eq_without_eq)]
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
||||||
#[derive(Clone, PartialEq, ::prost::Message)]
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
pub struct SetFloatingPanePinnedPayload {
|
||||||
|
#[prost(message, optional, tag = "1")]
|
||||||
|
pub pane_id: ::core::option::Option<PaneId>,
|
||||||
|
#[prost(bool, tag = "2")]
|
||||||
|
pub should_be_pinned: bool,
|
||||||
|
}
|
||||||
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
||||||
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
pub struct ChangeHostFolderPayload {
|
pub struct ChangeHostFolderPayload {
|
||||||
#[prost(string, tag = "1")]
|
#[prost(string, tag = "1")]
|
||||||
pub new_host_folder: ::prost::alloc::string::String,
|
pub new_host_folder: ::prost::alloc::string::String,
|
||||||
|
|
@ -598,6 +608,8 @@ pub struct FloatingPaneCoordinates {
|
||||||
pub width: ::core::option::Option<FixedOrPercentValue>,
|
pub width: ::core::option::Option<FixedOrPercentValue>,
|
||||||
#[prost(message, optional, tag = "4")]
|
#[prost(message, optional, tag = "4")]
|
||||||
pub height: ::core::option::Option<FixedOrPercentValue>,
|
pub height: ::core::option::Option<FixedOrPercentValue>,
|
||||||
|
#[prost(bool, optional, tag = "5")]
|
||||||
|
pub pinned: ::core::option::Option<bool>,
|
||||||
}
|
}
|
||||||
#[allow(clippy::derive_partial_eq_without_eq)]
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
||||||
#[derive(Clone, PartialEq, ::prost::Message)]
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
|
@ -725,6 +737,7 @@ pub enum CommandName {
|
||||||
RebindKeys = 112,
|
RebindKeys = 112,
|
||||||
ListClients = 113,
|
ListClients = 113,
|
||||||
ChangeHostFolder = 114,
|
ChangeHostFolder = 114,
|
||||||
|
SetFloatingPanePinned = 115,
|
||||||
}
|
}
|
||||||
impl CommandName {
|
impl CommandName {
|
||||||
/// String value of the enum field names used in the ProtoBuf definition.
|
/// String value of the enum field names used in the ProtoBuf definition.
|
||||||
|
|
@ -850,6 +863,7 @@ impl CommandName {
|
||||||
CommandName::RebindKeys => "RebindKeys",
|
CommandName::RebindKeys => "RebindKeys",
|
||||||
CommandName::ListClients => "ListClients",
|
CommandName::ListClients => "ListClients",
|
||||||
CommandName::ChangeHostFolder => "ChangeHostFolder",
|
CommandName::ChangeHostFolder => "ChangeHostFolder",
|
||||||
|
CommandName::SetFloatingPanePinned => "SetFloatingPanePinned",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// Creates an enum from field names used in the ProtoBuf definition.
|
/// Creates an enum from field names used in the ProtoBuf definition.
|
||||||
|
|
@ -972,6 +986,7 @@ impl CommandName {
|
||||||
"RebindKeys" => Some(Self::RebindKeys),
|
"RebindKeys" => Some(Self::RebindKeys),
|
||||||
"ListClients" => Some(Self::ListClients),
|
"ListClients" => Some(Self::ListClients),
|
||||||
"ChangeHostFolder" => Some(Self::ChangeHostFolder),
|
"ChangeHostFolder" => Some(Self::ChangeHostFolder),
|
||||||
|
"SetFloatingPanePinned" => Some(Self::SetFloatingPanePinned),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -246,6 +246,9 @@ pub enum Sessions {
|
||||||
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
||||||
#[clap(long, requires("floating"))]
|
#[clap(long, requires("floating"))]
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
/// Whether to pin a floating pane so that it is always on top
|
||||||
|
#[clap(long, requires("floating"))]
|
||||||
|
pinned: Option<bool>,
|
||||||
},
|
},
|
||||||
/// Load a plugin
|
/// Load a plugin
|
||||||
#[clap(visible_alias = "p")]
|
#[clap(visible_alias = "p")]
|
||||||
|
|
@ -288,6 +291,9 @@ pub enum Sessions {
|
||||||
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
||||||
#[clap(long, requires("floating"))]
|
#[clap(long, requires("floating"))]
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
/// Whether to pin a floating pane so that it is always on top
|
||||||
|
#[clap(long, requires("floating"))]
|
||||||
|
pinned: Option<bool>,
|
||||||
},
|
},
|
||||||
/// Edit file with default $EDITOR / $VISUAL
|
/// Edit file with default $EDITOR / $VISUAL
|
||||||
#[clap(visible_alias = "e")]
|
#[clap(visible_alias = "e")]
|
||||||
|
|
@ -333,6 +339,9 @@ pub enum Sessions {
|
||||||
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
||||||
#[clap(long, requires("floating"))]
|
#[clap(long, requires("floating"))]
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
/// Whether to pin a floating pane so that it is always on top
|
||||||
|
#[clap(long, requires("floating"))]
|
||||||
|
pinned: Option<bool>,
|
||||||
},
|
},
|
||||||
ConvertConfig {
|
ConvertConfig {
|
||||||
old_config_file: PathBuf,
|
old_config_file: PathBuf,
|
||||||
|
|
@ -526,6 +535,9 @@ pub enum CliAction {
|
||||||
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
||||||
#[clap(long, requires("floating"))]
|
#[clap(long, requires("floating"))]
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
/// Whether to pin a floating pane so that it is always on top
|
||||||
|
#[clap(long, requires("floating"))]
|
||||||
|
pinned: Option<bool>,
|
||||||
},
|
},
|
||||||
/// Open the specified file in a new zellij pane with your default EDITOR
|
/// Open the specified file in a new zellij pane with your default EDITOR
|
||||||
Edit {
|
Edit {
|
||||||
|
|
@ -570,6 +582,9 @@ pub enum CliAction {
|
||||||
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
/// The height if the pane is floating as a bare integer (eg. 1) or percent (eg. 10%)
|
||||||
#[clap(long, requires("floating"))]
|
#[clap(long, requires("floating"))]
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
/// Whether to pin a floating pane so that it is always on top
|
||||||
|
#[clap(long, requires("floating"))]
|
||||||
|
pinned: Option<bool>,
|
||||||
},
|
},
|
||||||
/// Switch input mode of all connected clients [locked|pane|tab|resize|move|search|session]
|
/// Switch input mode of all connected clients [locked|pane|tab|resize|move|search|session]
|
||||||
SwitchMode {
|
SwitchMode {
|
||||||
|
|
@ -744,4 +759,5 @@ tail -f /tmp/my-live-logfile | zellij action pipe --name logs --plugin https://e
|
||||||
plugin_title: Option<String>,
|
plugin_title: Option<String>,
|
||||||
},
|
},
|
||||||
ListClients,
|
ListClients,
|
||||||
|
TogglePanePinned,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1661,6 +1661,7 @@ pub struct FloatingPaneCoordinates {
|
||||||
pub y: Option<SplitSize>,
|
pub y: Option<SplitSize>,
|
||||||
pub width: Option<SplitSize>,
|
pub width: Option<SplitSize>,
|
||||||
pub height: Option<SplitSize>,
|
pub height: Option<SplitSize>,
|
||||||
|
pub pinned: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FloatingPaneCoordinates {
|
impl FloatingPaneCoordinates {
|
||||||
|
|
@ -1669,12 +1670,13 @@ impl FloatingPaneCoordinates {
|
||||||
y: Option<String>,
|
y: Option<String>,
|
||||||
width: Option<String>,
|
width: Option<String>,
|
||||||
height: Option<String>,
|
height: Option<String>,
|
||||||
|
pinned: Option<bool>,
|
||||||
) -> Option<Self> {
|
) -> Option<Self> {
|
||||||
let x = x.and_then(|x| SplitSize::from_str(&x).ok());
|
let x = x.and_then(|x| SplitSize::from_str(&x).ok());
|
||||||
let y = y.and_then(|y| SplitSize::from_str(&y).ok());
|
let y = y.and_then(|y| SplitSize::from_str(&y).ok());
|
||||||
let width = width.and_then(|width| SplitSize::from_str(&width).ok());
|
let width = width.and_then(|width| SplitSize::from_str(&width).ok());
|
||||||
let height = height.and_then(|height| SplitSize::from_str(&height).ok());
|
let height = height.and_then(|height| SplitSize::from_str(&height).ok());
|
||||||
if x.is_none() && y.is_none() && width.is_none() && height.is_none() {
|
if x.is_none() && y.is_none() && width.is_none() && height.is_none() && pinned.is_none() {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(FloatingPaneCoordinates {
|
Some(FloatingPaneCoordinates {
|
||||||
|
|
@ -1682,6 +1684,7 @@ impl FloatingPaneCoordinates {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1898,4 +1901,5 @@ pub enum PluginCommand {
|
||||||
},
|
},
|
||||||
ListClients,
|
ListClients,
|
||||||
ChangeHostFolder(PathBuf),
|
ChangeHostFolder(PathBuf),
|
||||||
|
SetFloatingPanePinned(PaneId, bool), // bool -> should be pinned
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -373,6 +373,8 @@ pub enum ScreenContext {
|
||||||
BreakPanesToNewTab,
|
BreakPanesToNewTab,
|
||||||
BreakPanesToTabWithIndex,
|
BreakPanesToTabWithIndex,
|
||||||
ListClientsToPlugin,
|
ListClientsToPlugin,
|
||||||
|
TogglePanePinned,
|
||||||
|
SetFloatingPanePinned,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Stack call representations corresponding to the different types of [`PtyInstruction`]s.
|
/// Stack call representations corresponding to the different types of [`PtyInstruction`]s.
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,7 @@ pub enum Action {
|
||||||
pane_title: Option<String>,
|
pane_title: Option<String>,
|
||||||
},
|
},
|
||||||
ListClients,
|
ListClients,
|
||||||
|
TogglePanePinned,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Action {
|
impl Action {
|
||||||
|
|
@ -363,6 +364,7 @@ impl Action {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
} => {
|
} => {
|
||||||
let current_dir = get_current_dir();
|
let current_dir = get_current_dir();
|
||||||
// cwd should only be specified in a plugin alias if it was explicitly given to us,
|
// cwd should only be specified in a plugin alias if it was explicitly given to us,
|
||||||
|
|
@ -398,7 +400,7 @@ impl Action {
|
||||||
name,
|
name,
|
||||||
skip_plugin_cache,
|
skip_plugin_cache,
|
||||||
cwd,
|
cwd,
|
||||||
FloatingPaneCoordinates::new(x, y, width, height),
|
FloatingPaneCoordinates::new(x, y, width, height, pinned),
|
||||||
)])
|
)])
|
||||||
} else if in_place {
|
} else if in_place {
|
||||||
Ok(vec![Action::NewInPlacePluginPane(
|
Ok(vec![Action::NewInPlacePluginPane(
|
||||||
|
|
@ -440,7 +442,7 @@ impl Action {
|
||||||
Ok(vec![Action::NewFloatingPane(
|
Ok(vec![Action::NewFloatingPane(
|
||||||
Some(run_command_action),
|
Some(run_command_action),
|
||||||
name,
|
name,
|
||||||
FloatingPaneCoordinates::new(x, y, width, height),
|
FloatingPaneCoordinates::new(x, y, width, height, pinned),
|
||||||
)])
|
)])
|
||||||
} else if in_place {
|
} else if in_place {
|
||||||
Ok(vec![Action::NewInPlacePane(Some(run_command_action), name)])
|
Ok(vec![Action::NewInPlacePane(Some(run_command_action), name)])
|
||||||
|
|
@ -456,7 +458,7 @@ impl Action {
|
||||||
Ok(vec![Action::NewFloatingPane(
|
Ok(vec![Action::NewFloatingPane(
|
||||||
None,
|
None,
|
||||||
name,
|
name,
|
||||||
FloatingPaneCoordinates::new(x, y, width, height),
|
FloatingPaneCoordinates::new(x, y, width, height, pinned),
|
||||||
)])
|
)])
|
||||||
} else if in_place {
|
} else if in_place {
|
||||||
Ok(vec![Action::NewInPlacePane(None, name)])
|
Ok(vec![Action::NewInPlacePane(None, name)])
|
||||||
|
|
@ -476,6 +478,7 @@ impl Action {
|
||||||
y,
|
y,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
|
pinned,
|
||||||
} => {
|
} => {
|
||||||
let mut file = file;
|
let mut file = file;
|
||||||
let current_dir = get_current_dir();
|
let current_dir = get_current_dir();
|
||||||
|
|
@ -494,7 +497,7 @@ impl Action {
|
||||||
floating,
|
floating,
|
||||||
in_place,
|
in_place,
|
||||||
start_suppressed,
|
start_suppressed,
|
||||||
FloatingPaneCoordinates::new(x, y, width, height),
|
FloatingPaneCoordinates::new(x, y, width, height, pinned),
|
||||||
)])
|
)])
|
||||||
},
|
},
|
||||||
CliAction::SwitchMode { input_mode } => {
|
CliAction::SwitchMode { input_mode } => {
|
||||||
|
|
@ -738,6 +741,7 @@ impl Action {
|
||||||
}])
|
}])
|
||||||
},
|
},
|
||||||
CliAction::ListClients => Ok(vec![Action::ListClients]),
|
CliAction::ListClients => Ok(vec![Action::ListClients]),
|
||||||
|
CliAction::TogglePanePinned => Ok(vec![Action::TogglePanePinned]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn launches_plugin(&self, plugin_url: &str) -> bool {
|
pub fn launches_plugin(&self, plugin_url: &str) -> bool {
|
||||||
|
|
|
||||||
|
|
@ -738,6 +738,7 @@ pub struct FloatingPaneLayout {
|
||||||
pub width: Option<PercentOrFixed>,
|
pub width: Option<PercentOrFixed>,
|
||||||
pub x: Option<PercentOrFixed>,
|
pub x: Option<PercentOrFixed>,
|
||||||
pub y: Option<PercentOrFixed>,
|
pub y: Option<PercentOrFixed>,
|
||||||
|
pub pinned: Option<bool>,
|
||||||
pub run: Option<Run>,
|
pub run: Option<Run>,
|
||||||
pub focus: Option<bool>,
|
pub focus: Option<bool>,
|
||||||
pub already_running: bool,
|
pub already_running: bool,
|
||||||
|
|
@ -752,6 +753,7 @@ impl FloatingPaneLayout {
|
||||||
width: None,
|
width: None,
|
||||||
x: None,
|
x: None,
|
||||||
y: None,
|
y: None,
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1697,6 +1699,7 @@ fn split_space(
|
||||||
cols: split_dimension,
|
cols: split_dimension,
|
||||||
rows: inherited_dimension,
|
rows: inherited_dimension,
|
||||||
is_stacked: layout.children_are_stacked,
|
is_stacked: layout.children_are_stacked,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
SplitDirection::Horizontal => PaneGeom {
|
SplitDirection::Horizontal => PaneGeom {
|
||||||
x: space_to_split.x,
|
x: space_to_split.x,
|
||||||
|
|
@ -1704,6 +1707,7 @@ fn split_space(
|
||||||
cols: inherited_dimension,
|
cols: inherited_dimension,
|
||||||
rows: split_dimension,
|
rows: split_dimension,
|
||||||
is_stacked: layout.children_are_stacked,
|
is_stacked: layout.children_are_stacked,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
split_geom.push(geom);
|
split_geom.push(geom);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/input/./unit/layout_test.rs
|
source: zellij-utils/src/input/./unit/layout_test.rs
|
||||||
assertion_line: 275
|
assertion_line: 305
|
||||||
expression: "format!(\"{:#?}\", layout)"
|
expression: "format!(\"{:#?}\", layout)"
|
||||||
---
|
---
|
||||||
Layout {
|
Layout {
|
||||||
|
|
@ -47,6 +47,7 @@ Layout {
|
||||||
width: None,
|
width: None,
|
||||||
x: None,
|
x: None,
|
||||||
y: None,
|
y: None,
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -96,6 +97,7 @@ Layout {
|
||||||
width: None,
|
width: None,
|
||||||
x: None,
|
x: None,
|
||||||
y: None,
|
y: None,
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -107,6 +109,7 @@ Layout {
|
||||||
width: None,
|
width: None,
|
||||||
x: None,
|
x: None,
|
||||||
y: None,
|
y: None,
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|| property_name == "y"
|
|| property_name == "y"
|
||||||
|| property_name == "width"
|
|| property_name == "width"
|
||||||
|| property_name == "height"
|
|| property_name == "height"
|
||||||
|
|| property_name == "pinned"
|
||||||
|| property_name == "contents_file"
|
|| property_name == "contents_file"
|
||||||
}
|
}
|
||||||
fn is_a_valid_tab_property(&self, property_name: &str) -> bool {
|
fn is_a_valid_tab_property(&self, property_name: &str) -> bool {
|
||||||
|
|
@ -596,6 +597,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
|
let pinned = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
let run = self.parse_command_plugin_or_edit_block(kdl_node)?;
|
let run = self.parse_command_plugin_or_edit_block(kdl_node)?;
|
||||||
let focus = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "focus");
|
let focus = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "focus");
|
||||||
let name = kdl_get_string_property_or_child_value_with_error!(kdl_node, "name")
|
let name = kdl_get_string_property_or_child_value_with_error!(kdl_node, "name")
|
||||||
|
|
@ -619,6 +621,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
y,
|
y,
|
||||||
run,
|
run,
|
||||||
focus,
|
focus,
|
||||||
|
pinned,
|
||||||
pane_initial_contents,
|
pane_initial_contents,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
|
|
@ -845,7 +848,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
// let mut floating_pane = FloatingPaneLayout::from(&pane_template);
|
let pinned = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
if let Some(height) = height {
|
if let Some(height) = height {
|
||||||
pane_template.height = Some(height);
|
pane_template.height = Some(height);
|
||||||
}
|
}
|
||||||
|
|
@ -858,6 +861,9 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
if let Some(x) = x {
|
if let Some(x) = x {
|
||||||
pane_template.x = Some(x);
|
pane_template.x = Some(x);
|
||||||
}
|
}
|
||||||
|
if let Some(pinned) = pinned {
|
||||||
|
pane_template.pinned = Some(pinned);
|
||||||
|
}
|
||||||
Ok(pane_template)
|
Ok(pane_template)
|
||||||
},
|
},
|
||||||
PaneOrFloatingPane::Either(mut pane_template) => {
|
PaneOrFloatingPane::Either(mut pane_template) => {
|
||||||
|
|
@ -896,6 +902,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
|
let pinned = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
let mut floating_pane = FloatingPaneLayout::from(&pane_template);
|
let mut floating_pane = FloatingPaneLayout::from(&pane_template);
|
||||||
if let Some(height) = height {
|
if let Some(height) = height {
|
||||||
floating_pane.height = Some(height);
|
floating_pane.height = Some(height);
|
||||||
|
|
@ -909,6 +916,9 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
if let Some(x) = x {
|
if let Some(x) = x {
|
||||||
floating_pane.x = Some(x);
|
floating_pane.x = Some(x);
|
||||||
}
|
}
|
||||||
|
if let Some(pinned) = pinned {
|
||||||
|
floating_pane.pinned = Some(pinned);
|
||||||
|
}
|
||||||
Ok(floating_pane)
|
Ok(floating_pane)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -948,6 +958,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
|
let pinned = kdl_get_string_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
|
|
||||||
let has_pane_properties = borderless.is_some()
|
let has_pane_properties = borderless.is_some()
|
||||||
|| split_size.is_some()
|
|| split_size.is_some()
|
||||||
|
|
@ -956,7 +967,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|| is_expanded_in_stack.is_some()
|
|| is_expanded_in_stack.is_some()
|
||||||
|| has_children_nodes;
|
|| has_children_nodes;
|
||||||
let has_floating_pane_properties =
|
let has_floating_pane_properties =
|
||||||
height.is_some() || width.is_some() || x.is_some() || y.is_some();
|
height.is_some() || width.is_some() || x.is_some() || y.is_some() || pinned.is_some();
|
||||||
if has_pane_properties || has_floating_pane_properties {
|
if has_pane_properties || has_floating_pane_properties {
|
||||||
Ok(false)
|
Ok(false)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -985,6 +996,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
|
let pinned = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
|
|
||||||
let has_pane_properties = borderless.is_some()
|
let has_pane_properties = borderless.is_some()
|
||||||
|| split_size.is_some()
|
|| split_size.is_some()
|
||||||
|
|
@ -993,7 +1005,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
|| is_expanded_in_stack.is_some()
|
|| is_expanded_in_stack.is_some()
|
||||||
|| has_children_nodes;
|
|| has_children_nodes;
|
||||||
let has_floating_pane_properties =
|
let has_floating_pane_properties =
|
||||||
height.is_some() || width.is_some() || x.is_some() || y.is_some();
|
height.is_some() || width.is_some() || x.is_some() || y.is_some() || pinned.is_some();
|
||||||
|
|
||||||
if has_pane_properties && has_floating_pane_properties {
|
if has_pane_properties && has_floating_pane_properties {
|
||||||
let mut pane_properties = vec![];
|
let mut pane_properties = vec![];
|
||||||
|
|
@ -1028,6 +1040,9 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
if y.is_some() {
|
if y.is_some() {
|
||||||
floating_pane_properties.push("y");
|
floating_pane_properties.push("y");
|
||||||
}
|
}
|
||||||
|
if pinned.is_some() {
|
||||||
|
floating_pane_properties.push("pinned");
|
||||||
|
}
|
||||||
Err(ConfigError::new_layout_kdl_error(
|
Err(ConfigError::new_layout_kdl_error(
|
||||||
format!(
|
format!(
|
||||||
"A pane_template cannot have both pane ({}) and floating pane ({}) properties",
|
"A pane_template cannot have both pane ({}) and floating pane ({}) properties",
|
||||||
|
|
@ -1079,6 +1094,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
let width = self.parse_percent_or_fixed(kdl_node, "width", false)?;
|
||||||
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
let x = self.parse_percent_or_fixed(kdl_node, "x", true)?;
|
||||||
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
let y = self.parse_percent_or_fixed(kdl_node, "y", true)?;
|
||||||
|
let pinned = kdl_get_bool_property_or_child_value_with_error!(kdl_node, "pinned");
|
||||||
self.pane_templates.insert(
|
self.pane_templates.insert(
|
||||||
template_name,
|
template_name,
|
||||||
(
|
(
|
||||||
|
|
@ -1089,6 +1105,7 @@ impl<'a> KdlLayoutParser<'a> {
|
||||||
width,
|
width,
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
|
pinned,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
kdl_node.clone(),
|
kdl_node.clone(),
|
||||||
|
|
|
||||||
|
|
@ -1101,6 +1101,7 @@ impl Action {
|
||||||
}
|
}
|
||||||
Some(node)
|
Some(node)
|
||||||
},
|
},
|
||||||
|
Action::TogglePanePinned => Some(KdlNode::new("TogglePanePinned")),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1537,11 +1538,13 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
|
||||||
let height = command_metadata
|
let height = command_metadata
|
||||||
.and_then(|c_m| kdl_child_string_value_for_entry(c_m, "height"))
|
.and_then(|c_m| kdl_child_string_value_for_entry(c_m, "height"))
|
||||||
.map(|s| s.to_owned());
|
.map(|s| s.to_owned());
|
||||||
|
let pinned =
|
||||||
|
command_metadata.and_then(|c_m| kdl_child_bool_value_for_entry(c_m, "pinned"));
|
||||||
if floating {
|
if floating {
|
||||||
Ok(Action::NewFloatingPane(
|
Ok(Action::NewFloatingPane(
|
||||||
Some(run_command_action),
|
Some(run_command_action),
|
||||||
name,
|
name,
|
||||||
FloatingPaneCoordinates::new(x, y, width, height),
|
FloatingPaneCoordinates::new(x, y, width, height, pinned),
|
||||||
))
|
))
|
||||||
} else if in_place {
|
} else if in_place {
|
||||||
Ok(Action::NewInPlacePane(Some(run_command_action), name))
|
Ok(Action::NewInPlacePane(Some(run_command_action), name))
|
||||||
|
|
@ -1758,6 +1761,7 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
|
||||||
plugin_id,
|
plugin_id,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
"TogglePanePinned" => Ok(Action::TogglePanePinned),
|
||||||
_ => Err(ConfigError::new_kdl_error(
|
_ => Err(ConfigError::new_kdl_error(
|
||||||
format!("Unsupported action: {}", action_name).into(),
|
format!("Unsupported action: {}", action_name).into(),
|
||||||
kdl_action.span().offset(),
|
kdl_action.span().offset(),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/kdl/mod.rs
|
source: zellij-utils/src/kdl/mod.rs
|
||||||
assertion_line: 5535
|
assertion_line: 5551
|
||||||
expression: fake_config_stringified
|
expression: fake_config_stringified
|
||||||
---
|
---
|
||||||
keybinds clear-defaults=true {
|
keybinds clear-defaults=true {
|
||||||
|
|
@ -17,6 +17,7 @@ keybinds clear-defaults=true {
|
||||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
|
||||||
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
|
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
|
||||||
bind "h" { MoveFocus "left"; }
|
bind "h" { MoveFocus "left"; }
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "normal"; }
|
||||||
bind "j" { MoveFocus "down"; }
|
bind "j" { MoveFocus "down"; }
|
||||||
bind "k" { MoveFocus "up"; }
|
bind "k" { MoveFocus "up"; }
|
||||||
bind "l" { MoveFocus "right"; }
|
bind "l" { MoveFocus "right"; }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/kdl/mod.rs
|
source: zellij-utils/src/kdl/mod.rs
|
||||||
assertion_line: 5547
|
assertion_line: 5563
|
||||||
expression: fake_config_stringified
|
expression: fake_config_stringified
|
||||||
---
|
---
|
||||||
keybinds clear-defaults=true {
|
keybinds clear-defaults=true {
|
||||||
|
|
@ -17,6 +17,7 @@ keybinds clear-defaults=true {
|
||||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
|
||||||
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
|
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
|
||||||
bind "h" { MoveFocus "left"; }
|
bind "h" { MoveFocus "left"; }
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "normal"; }
|
||||||
bind "j" { MoveFocus "down"; }
|
bind "j" { MoveFocus "down"; }
|
||||||
bind "k" { MoveFocus "up"; }
|
bind "k" { MoveFocus "up"; }
|
||||||
bind "l" { MoveFocus "right"; }
|
bind "l" { MoveFocus "right"; }
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,30 @@ use crate::position::Position;
|
||||||
|
|
||||||
/// Contains the position and size of a [`Pane`], or more generally of any terminal, measured
|
/// Contains the position and size of a [`Pane`], or more generally of any terminal, measured
|
||||||
/// in character rows and columns.
|
/// in character rows and columns.
|
||||||
#[derive(Clone, Copy, Default, PartialEq, Debug, Serialize, Deserialize, Eq, Hash)]
|
#[derive(Clone, Copy, Default, Debug, Serialize, Deserialize, Hash)]
|
||||||
pub struct PaneGeom {
|
pub struct PaneGeom {
|
||||||
pub x: usize,
|
pub x: usize,
|
||||||
pub y: usize,
|
pub y: usize,
|
||||||
pub rows: Dimension,
|
pub rows: Dimension,
|
||||||
pub cols: Dimension,
|
pub cols: Dimension,
|
||||||
pub is_stacked: bool,
|
pub is_stacked: bool,
|
||||||
|
pub is_pinned: bool, // only relevant to floating panes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PartialEq for PaneGeom {
|
||||||
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
// compare all except is_pinned
|
||||||
|
// TODO: add is_stacked?
|
||||||
|
self.x == other.x
|
||||||
|
&& self.y == other.y
|
||||||
|
&& self.rows == other.rows
|
||||||
|
&& self.cols == other.cols
|
||||||
|
&& self.is_stacked == other.is_stacked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Eq for PaneGeom {}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
|
#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
|
||||||
pub struct Viewport {
|
pub struct Viewport {
|
||||||
pub x: usize,
|
pub x: usize,
|
||||||
|
|
|
||||||
|
|
@ -244,6 +244,7 @@ enum ActionName {
|
||||||
CliPipe = 82;
|
CliPipe = 82;
|
||||||
MoveTab = 83;
|
MoveTab = 83;
|
||||||
KeybindPipe = 84;
|
KeybindPipe = 84;
|
||||||
|
TogglePanePinned = 85;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Position {
|
message Position {
|
||||||
|
|
|
||||||
|
|
@ -688,6 +688,10 @@ impl TryFrom<ProtobufAction> for Action {
|
||||||
},
|
},
|
||||||
_ => Err("Wrong payload for Action::RenameSession"),
|
_ => Err("Wrong payload for Action::RenameSession"),
|
||||||
},
|
},
|
||||||
|
Some(ProtobufActionName::TogglePanePinned) => match protobuf_action.optional_payload {
|
||||||
|
Some(_) => Err("TogglePanePinned should not have a payload"),
|
||||||
|
None => Ok(Action::TogglePanePinned),
|
||||||
|
},
|
||||||
Some(ProtobufActionName::KeybindPipe) => match protobuf_action.optional_payload {
|
Some(ProtobufActionName::KeybindPipe) => match protobuf_action.optional_payload {
|
||||||
Some(_) => Err("KeybindPipe should not have a payload"),
|
Some(_) => Err("KeybindPipe should not have a payload"),
|
||||||
// TODO: at some point we might want to support a payload here
|
// TODO: at some point we might want to support a payload here
|
||||||
|
|
@ -1284,6 +1288,10 @@ impl TryFrom<Action> for ProtobufAction {
|
||||||
name: ProtobufActionName::KeybindPipe as i32,
|
name: ProtobufActionName::KeybindPipe as i32,
|
||||||
optional_payload: None,
|
optional_payload: None,
|
||||||
}),
|
}),
|
||||||
|
Action::TogglePanePinned { .. } => Ok(ProtobufAction {
|
||||||
|
name: ProtobufActionName::TogglePanePinned as i32,
|
||||||
|
optional_payload: None,
|
||||||
|
}),
|
||||||
Action::NoOp
|
Action::NoOp
|
||||||
| Action::Confirm
|
| Action::Confirm
|
||||||
| Action::NewInPlacePane(..)
|
| Action::NewInPlacePane(..)
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@ enum CommandName {
|
||||||
RebindKeys = 112;
|
RebindKeys = 112;
|
||||||
ListClients = 113;
|
ListClients = 113;
|
||||||
ChangeHostFolder = 114;
|
ChangeHostFolder = 114;
|
||||||
|
SetFloatingPanePinned = 115;
|
||||||
}
|
}
|
||||||
|
|
||||||
message PluginCommand {
|
message PluginCommand {
|
||||||
|
|
@ -212,9 +213,15 @@ message PluginCommand {
|
||||||
LoadNewPluginPayload load_new_plugin_payload = 87;
|
LoadNewPluginPayload load_new_plugin_payload = 87;
|
||||||
RebindKeysPayload rebind_keys_payload = 88;
|
RebindKeysPayload rebind_keys_payload = 88;
|
||||||
ChangeHostFolderPayload change_host_folder_payload = 89;
|
ChangeHostFolderPayload change_host_folder_payload = 89;
|
||||||
|
SetFloatingPanePinnedPayload set_floating_pane_pinned_payload = 90;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SetFloatingPanePinnedPayload {
|
||||||
|
PaneId pane_id = 1;
|
||||||
|
bool should_be_pinned = 2;
|
||||||
|
}
|
||||||
|
|
||||||
message ChangeHostFolderPayload {
|
message ChangeHostFolderPayload {
|
||||||
string new_host_folder = 1;
|
string new_host_folder = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -485,6 +492,7 @@ message FloatingPaneCoordinates {
|
||||||
optional FixedOrPercentValue y = 2;
|
optional FixedOrPercentValue y = 2;
|
||||||
optional FixedOrPercentValue width = 3;
|
optional FixedOrPercentValue width = 3;
|
||||||
optional FixedOrPercentValue height = 4;
|
optional FixedOrPercentValue height = 4;
|
||||||
|
optional bool pinned = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message FixedOrPercentValue {
|
message FixedOrPercentValue {
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,10 @@ pub use super::generated_api::api::{
|
||||||
RebindKeysPayload, ReconfigurePayload, ReloadPluginPayload, RequestPluginPermissionPayload,
|
RebindKeysPayload, ReconfigurePayload, ReloadPluginPayload, RequestPluginPermissionPayload,
|
||||||
RerunCommandPanePayload, ResizePaneIdWithDirectionPayload, ResizePayload,
|
RerunCommandPanePayload, ResizePaneIdWithDirectionPayload, ResizePayload,
|
||||||
RunCommandPayload, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload,
|
RunCommandPayload, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload,
|
||||||
ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetTimeoutPayload,
|
ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetFloatingPanePinnedPayload,
|
||||||
ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload, SwitchTabToPayload,
|
SetTimeoutPayload, ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload,
|
||||||
TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload, UnsubscribePayload,
|
SwitchTabToPayload, TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload,
|
||||||
WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload,
|
UnsubscribePayload, WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload,
|
||||||
},
|
},
|
||||||
plugin_permission::PermissionType as ProtobufPermissionType,
|
plugin_permission::PermissionType as ProtobufPermissionType,
|
||||||
resize::ResizeAction as ProtobufResizeAction,
|
resize::ResizeAction as ProtobufResizeAction,
|
||||||
|
|
@ -81,6 +81,7 @@ impl Into<FloatingPaneCoordinates> for ProtobufFloatingPaneCoordinates {
|
||||||
None => None,
|
None => None,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
pinned: self.pinned,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -132,6 +133,7 @@ impl Into<ProtobufFloatingPaneCoordinates> for FloatingPaneCoordinates {
|
||||||
}),
|
}),
|
||||||
None => None,
|
None => None,
|
||||||
},
|
},
|
||||||
|
pinned: self.pinned,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1311,6 +1313,21 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
|
||||||
},
|
},
|
||||||
_ => Err("Mismatched payload for ChangeHostFolder"),
|
_ => Err("Mismatched payload for ChangeHostFolder"),
|
||||||
},
|
},
|
||||||
|
Some(CommandName::SetFloatingPanePinned) => match protobuf_plugin_command.payload {
|
||||||
|
Some(Payload::SetFloatingPanePinnedPayload(set_floating_pane_pinned_payload)) => {
|
||||||
|
match set_floating_pane_pinned_payload
|
||||||
|
.pane_id
|
||||||
|
.and_then(|p| p.try_into().ok())
|
||||||
|
{
|
||||||
|
Some(pane_id) => Ok(PluginCommand::SetFloatingPanePinned(
|
||||||
|
pane_id,
|
||||||
|
set_floating_pane_pinned_payload.should_be_pinned,
|
||||||
|
)),
|
||||||
|
None => Err("PaneId not found!"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => Err("Mismatched payload for SetFloatingPanePinned"),
|
||||||
|
},
|
||||||
None => Err("Unrecognized plugin command"),
|
None => Err("Unrecognized plugin command"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2144,6 +2161,17 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
|
||||||
new_host_folder: new_host_folder.display().to_string(), // TODO: not accurate?
|
new_host_folder: new_host_folder.display().to_string(), // TODO: not accurate?
|
||||||
})),
|
})),
|
||||||
}),
|
}),
|
||||||
|
PluginCommand::SetFloatingPanePinned(pane_id, should_be_pinned) => {
|
||||||
|
Ok(ProtobufPluginCommand {
|
||||||
|
name: CommandName::SetFloatingPanePinned as i32,
|
||||||
|
payload: Some(Payload::SetFloatingPanePinnedPayload(
|
||||||
|
SetFloatingPanePinnedPayload {
|
||||||
|
pane_id: pane_id.try_into().ok(),
|
||||||
|
should_be_pinned,
|
||||||
|
},
|
||||||
|
)),
|
||||||
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -453,6 +453,14 @@ fn serialize_floating_layout_attributes(
|
||||||
},
|
},
|
||||||
None => {},
|
None => {},
|
||||||
}
|
}
|
||||||
|
match layout.pinned {
|
||||||
|
Some(true) => {
|
||||||
|
let mut node = KdlNode::new("pinned");
|
||||||
|
node.entries_mut().push(KdlEntry::new(KdlValue::Bool(true)));
|
||||||
|
pane_node_children.nodes_mut().push(node);
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize_start_suspended(command: &Option<String>, pane_node_children: &mut KdlDocument) {
|
fn serialize_start_suspended(command: &Option<String>, pane_node_children: &mut KdlDocument) {
|
||||||
|
|
@ -774,6 +782,7 @@ fn get_floating_panes_layout_from_panegeoms(
|
||||||
width: Some(m.geom.cols.into()),
|
width: Some(m.geom.cols.into()),
|
||||||
x: Some(PercentOrFixed::Fixed(m.geom.x)),
|
x: Some(PercentOrFixed::Fixed(m.geom.x)),
|
||||||
y: Some(PercentOrFixed::Fixed(m.geom.y)),
|
y: Some(PercentOrFixed::Fixed(m.geom.y)),
|
||||||
|
pinned: Some(m.geom.is_pinned),
|
||||||
run,
|
run,
|
||||||
focus: Some(m.is_focused),
|
focus: Some(m.is_focused),
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1275,6 +1284,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1286,6 +1296,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1301,6 +1312,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1315,6 +1327,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1334,6 +1347,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1347,6 +1361,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1362,6 +1377,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1373,6 +1389,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1386,6 +1403,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1415,6 +1433,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1426,6 +1445,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1441,6 +1461,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1455,6 +1476,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1474,6 +1496,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1487,6 +1510,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1502,6 +1526,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1515,6 +1540,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1528,6 +1554,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1555,6 +1582,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(1),
|
rows: Dimension::fixed(1),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: true,
|
is_stacked: true,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1565,6 +1593,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: true,
|
is_stacked: true,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1575,6 +1604,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(1),
|
rows: Dimension::fixed(1),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: true,
|
is_stacked: true,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1598,6 +1628,7 @@ mod tests {
|
||||||
rows: Dimension::percent(100.0),
|
rows: Dimension::percent(100.0),
|
||||||
cols: Dimension::percent(100.0),
|
cols: Dimension::percent(100.0),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}],
|
}],
|
||||||
|
|
@ -1612,6 +1643,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1622,6 +1654,7 @@ mod tests {
|
||||||
rows: Dimension::fixed(10),
|
rows: Dimension::fixed(10),
|
||||||
cols: Dimension::fixed(10),
|
cols: Dimension::fixed(10),
|
||||||
is_stacked: false,
|
is_stacked: false,
|
||||||
|
is_pinned: false,
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
@ -1753,6 +1786,7 @@ mod tests {
|
||||||
rows: get_dim(&data["rows"]),
|
rows: get_dim(&data["rows"]),
|
||||||
cols: get_dim(&data["cols"]),
|
cols: get_dim(&data["cols"]),
|
||||||
is_stacked: data["is_stacked"].to_string().parse().unwrap(),
|
is_stacked: data["is_stacked"].to_string().parse().unwrap(),
|
||||||
|
is_pinned: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
assertion_line: 740
|
assertion_line: 756
|
||||||
expression: "format!(\"{:#?}\", layout)"
|
expression: "format!(\"{:#?}\", layout)"
|
||||||
---
|
---
|
||||||
Layout {
|
Layout {
|
||||||
|
|
@ -1676,6 +1676,7 @@ Layout {
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1703,6 +1704,7 @@ Layout {
|
||||||
2,
|
2,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1730,6 +1732,7 @@ Layout {
|
||||||
3,
|
3,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1757,6 +1760,7 @@ Layout {
|
||||||
4,
|
4,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1784,6 +1788,7 @@ Layout {
|
||||||
5,
|
5,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1811,6 +1816,7 @@ Layout {
|
||||||
6,
|
6,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1838,6 +1844,7 @@ Layout {
|
||||||
7,
|
7,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1865,6 +1872,7 @@ Layout {
|
||||||
8,
|
8,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1892,6 +1900,7 @@ Layout {
|
||||||
9,
|
9,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1919,6 +1928,7 @@ Layout {
|
||||||
10,
|
10,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: Some(
|
focus: Some(
|
||||||
true,
|
true,
|
||||||
|
|
@ -1951,6 +1961,7 @@ Layout {
|
||||||
50,
|
50,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -1978,6 +1989,7 @@ Layout {
|
||||||
25,
|
25,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2001,6 +2013,7 @@ Layout {
|
||||||
25,
|
25,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2028,6 +2041,7 @@ Layout {
|
||||||
55,
|
55,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: Some(
|
focus: Some(
|
||||||
true,
|
true,
|
||||||
|
|
@ -2053,6 +2067,7 @@ Layout {
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2076,6 +2091,7 @@ Layout {
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2107,6 +2123,7 @@ Layout {
|
||||||
55,
|
55,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2134,6 +2151,7 @@ Layout {
|
||||||
55,
|
55,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: Some(
|
focus: Some(
|
||||||
true,
|
true,
|
||||||
|
|
@ -2163,6 +2181,7 @@ Layout {
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
@ -2190,6 +2209,7 @@ Layout {
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
pinned: None,
|
||||||
run: None,
|
run: None,
|
||||||
focus: None,
|
focus: None,
|
||||||
already_running: false,
|
already_running: false,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
assertion_line: 754
|
assertion_line: 755
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -1076,6 +1076,17 @@ Config {
|
||||||
Left,
|
Left,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
KeyWithModifier {
|
||||||
|
bare_key: Char(
|
||||||
|
'i',
|
||||||
|
),
|
||||||
|
key_modifiers: {},
|
||||||
|
}: [
|
||||||
|
TogglePanePinned,
|
||||||
|
SwitchToMode(
|
||||||
|
Normal,
|
||||||
|
),
|
||||||
|
],
|
||||||
KeyWithModifier {
|
KeyWithModifier {
|
||||||
bare_key: Char(
|
bare_key: Char(
|
||||||
'i',
|
'i',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
assertion_line: 812
|
assertion_line: 813
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -1076,6 +1076,17 @@ Config {
|
||||||
Left,
|
Left,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
KeyWithModifier {
|
||||||
|
bare_key: Char(
|
||||||
|
'i',
|
||||||
|
),
|
||||||
|
key_modifiers: {},
|
||||||
|
}: [
|
||||||
|
TogglePanePinned,
|
||||||
|
SwitchToMode(
|
||||||
|
Normal,
|
||||||
|
),
|
||||||
|
],
|
||||||
KeyWithModifier {
|
KeyWithModifier {
|
||||||
bare_key: Char(
|
bare_key: Char(
|
||||||
'i',
|
'i',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
assertion_line: 840
|
assertion_line: 841
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -1076,6 +1076,17 @@ Config {
|
||||||
Left,
|
Left,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
KeyWithModifier {
|
||||||
|
bare_key: Char(
|
||||||
|
'i',
|
||||||
|
),
|
||||||
|
key_modifiers: {},
|
||||||
|
}: [
|
||||||
|
TogglePanePinned,
|
||||||
|
SwitchToMode(
|
||||||
|
Normal,
|
||||||
|
),
|
||||||
|
],
|
||||||
KeyWithModifier {
|
KeyWithModifier {
|
||||||
bare_key: Char(
|
bare_key: Char(
|
||||||
'i',
|
'i',
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue