fix(compatibility): handle inserting characters after wide character (#964)
* fix(compatibility): handle inserting characters in the middle of a line after a wide character * style(fmt): make rustfmt happy
This commit is contained in:
parent
be54e2b2e0
commit
52977a761f
5 changed files with 32 additions and 9 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
|
@ -2879,7 +2879,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij"
|
name = "zellij"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dialoguer",
|
"dialoguer",
|
||||||
|
|
@ -2896,7 +2896,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij-client"
|
name = "zellij-client"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"insta",
|
"insta",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -2909,7 +2909,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij-server"
|
name = "zellij-server"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|
@ -2935,7 +2935,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij-tile"
|
name = "zellij-tile"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|
@ -2945,14 +2945,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij-tile-utils"
|
name = "zellij-tile-utils"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zellij-utils"
|
name = "zellij-utils"
|
||||||
version = "0.23.0"
|
version = "0.24.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-std",
|
"async-std",
|
||||||
|
|
|
||||||
1
src/tests/fixtures/wide_characters_middle_line_insert
vendored
Executable file
1
src/tests/fixtures/wide_characters_middle_line_insert
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
[?2004h[aram@green zellij]$
[K[aram@green zellij]$ [7m🏠[27m🏠 abcdabceabcfabc abc[1@x
|
||||||
|
|
@ -2249,14 +2249,17 @@ impl Row {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn insert_character_at(&mut self, terminal_character: TerminalCharacter, x: usize) {
|
pub fn insert_character_at(&mut self, terminal_character: TerminalCharacter, x: usize) {
|
||||||
match self.columns.len().cmp(&x) {
|
let width_offset = self.excess_width_until(x);
|
||||||
|
let insert_position = x.saturating_sub(width_offset);
|
||||||
|
match self.columns.len().cmp(&insert_position) {
|
||||||
Ordering::Equal => self.columns.push_back(terminal_character),
|
Ordering::Equal => self.columns.push_back(terminal_character),
|
||||||
Ordering::Less => {
|
Ordering::Less => {
|
||||||
self.columns.resize(x, EMPTY_TERMINAL_CHARACTER);
|
self.columns
|
||||||
|
.resize(insert_position, EMPTY_TERMINAL_CHARACTER);
|
||||||
self.columns.push_back(terminal_character);
|
self.columns.push_back(terminal_character);
|
||||||
}
|
}
|
||||||
Ordering::Greater => {
|
Ordering::Greater => {
|
||||||
self.columns.insert(x, terminal_character);
|
self.columns.insert(insert_position, terminal_character);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -420,6 +420,18 @@ fn wide_characters_line_wrap() {
|
||||||
assert_snapshot!(format!("{:?}", grid));
|
assert_snapshot!(format!("{:?}", grid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn insert_character_in_line_with_wide_character() {
|
||||||
|
let mut vte_parser = vte::Parser::new();
|
||||||
|
let mut grid = Grid::new(21, 104, Palette::default());
|
||||||
|
let fixture_name = "wide_characters_middle_line_insert";
|
||||||
|
let content = read_fixture(fixture_name);
|
||||||
|
for byte in content {
|
||||||
|
vte_parser.advance(&mut grid, byte);
|
||||||
|
}
|
||||||
|
assert_snapshot!(format!("{:?}", grid));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn fish_wide_characters_override_clock() {
|
fn fish_wide_characters_override_clock() {
|
||||||
let mut vte_parser = vte::Parser::new();
|
let mut vte_parser = vte::Parser::new();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
source: zellij-server/src/panes/./unit/grid_tests.rs
|
||||||
|
expression: "format!(\"{:?}\", grid)"
|
||||||
|
|
||||||
|
---
|
||||||
|
00 (C): [aram@green zellij]$ 🏠 xdef abc
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue