Fix crash on renaming a floating pane (#1323) (#1357)

* Fix crash on renaming a floating pane (#1323)

* Add rename tests for embedded and floating panes

* docs(changelog): fix floating pane rename
This commit is contained in:
raphCode 2022-04-29 16:16:53 +02:00 committed by GitHub
parent b0a29c046a
commit 1f4e3d88c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 110 additions and 4 deletions

View File

@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* fix: avoid panic in link_handler.rs (https://github.com/zellij-org/zellij/pull/1356)
* Terminal compatibility: prevent wide chars from overflowing the title line (https://github.com/zellij-org/zellij/pull/1361)
* Terminal compatibility: adjust saved cursor position on resize (https://github.com/zellij-org/zellij/pull/1362)
* fix: avoid panic on renaming a floating pane (https://github.com/zellij-org/zellij/pull/1357)
* fix: change the way sessions are sorted (https://github.com/zellij-org/zellij/pull/1347)
## [0.28.1] - 2022-04-13

View File

@ -1749,10 +1749,14 @@ impl Tab {
pub fn update_active_pane_name(&mut self, buf: Vec<u8>, client_id: ClientId) {
if let Some(active_terminal_id) = self.get_active_terminal_id(client_id) {
let active_terminal = self
.tiled_panes
.get_pane_mut(PaneId::Terminal(active_terminal_id))
.unwrap();
let active_terminal = if self.are_floating_panes_visible() {
self.floating_panes
.get_pane_mut(PaneId::Terminal(active_terminal_id))
} else {
self.tiled_panes
.get_pane_mut(PaneId::Terminal(active_terminal_id))
}
.unwrap();
// It only allows printable unicode, delete and backspace keys.
let is_updatable = buf.iter().all(|u| matches!(u, 0x20..=0x7E | 0x08 | 0x7F));

View File

@ -0,0 +1,25 @@
---
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
expression: snapshot
---
00 (C): ┌ Renamed empedded pane ────────────────────────────────────────────────────────────────────────────────────────────────┐
01 (C): │ │
02 (C): │ │
03 (C): │ │
04 (C): │ I am an embedded pane │
05 (C): │ │
06 (C): │ │
07 (C): │ │
08 (C): │ │
09 (C): │ │
10 (C): │ │
11 (C): │ │
12 (C): │ │
13 (C): │ │
14 (C): │ │
15 (C): │ │
16 (C): │ │
17 (C): │ │
18 (C): │ │
19 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@ -0,0 +1,25 @@
---
source: zellij-server/src/tab/./unit/tab_integration_tests.rs
expression: snapshot
---
00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
01 (C): │ │
02 (C): │ │
03 (C): │ │
04 (C): │ │
05 (C): │ ┌ Renamed floating pane ───────────────────────────────────┐ │
06 (C): │ │ │ │
07 (C): │ │ │ │
08 (C): │ │ │ │
09 (C): │ │ I am a floating pane │ │
10 (C): │ │ │ │
11 (C): │ │ │ │
12 (C): │ │ │ │
13 (C): │ │ │ │
14 (C): │ └──────────────────────────────────────────────────────────┘ │
15 (C): │ │
16 (C): │ │
17 (C): │ │
18 (C): │ │
19 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

View File

@ -1096,6 +1096,57 @@ fn replacing_existing_wide_characters() {
assert_snapshot!(snapshot);
}
#[test]
fn rename_embedded_pane() {
let size = Size {
cols: 121,
rows: 20,
};
let client_id = 1;
let mut tab = create_new_tab(size);
let mut output = Output::default();
tab.handle_pty_bytes(
1,
Vec::from("\n\n\n I am an embedded pane".as_bytes()),
);
tab.update_active_pane_name("Renamed empedded pane".as_bytes().to_vec(), client_id);
tab.render(&mut output, None);
let snapshot = take_snapshot(
output.serialize().get(&client_id).unwrap(),
size.rows,
size.cols,
Palette::default(),
);
assert_snapshot!(snapshot);
}
#[test]
fn rename_floating_pane() {
let size = Size {
cols: 121,
rows: 20,
};
let client_id = 1;
let mut tab = create_new_tab(size);
let new_pane_id = PaneId::Terminal(2);
let mut output = Output::default();
tab.new_pane(new_pane_id, Some(client_id));
tab.handle_pty_bytes(
2,
Vec::from("\n\n\n I am a floating pane".as_bytes()),
);
tab.toggle_pane_embed_or_floating(client_id);
tab.update_active_pane_name("Renamed floating pane".as_bytes().to_vec(), client_id);
tab.render(&mut output, None);
let snapshot = take_snapshot(
output.serialize().get(&client_id).unwrap(),
size.rows,
size.cols,
Palette::default(),
);
assert_snapshot!(snapshot);
}
#[test]
fn wide_characters_in_left_title_side() {
// this test makes sure the title doesn't overflow when it has wide characters