diff options
| author | Aram Drevekenin <aram@poor.dev> | 2021-04-29 15:25:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-29 15:25:08 +0200 |
| commit | cedd830a2e106d968a8fc07404dd4e14b300864e (patch) | |
| tree | 386d9c5c2424046fa784905b1ecc42e2082a4f3e | |
| parent | chore(changelog): added the ability to synchronize input sent to panes (diff) | |
| download | sl0ppij-cedd830a2e106d968a8fc07404dd4e14b300864e.tar.gz sl0ppij-cedd830a2e106d968a8fc07404dd4e14b300864e.tar.xz sl0ppij-cedd830a2e106d968a8fc07404dd4e14b300864e.zip | |
Terminal: pass vttest 1 (#408)
* fix(compatibility): pass vttest 1
* fix(tests): move unit tests to a separate file
* style(fmt): rustfmt
* fix(grid): correct comment
* style(fmt): rustfmt
14 files changed, 985 insertions, 27 deletions
diff --git a/src/client/panes/grid.rs b/src/client/panes/grid.rs index c6dd201e..f2bedbce 100644 --- a/src/client/panes/grid.rs +++ b/src/client/panes/grid.rs @@ -161,6 +161,7 @@ pub struct Grid { pending_styles: CharacterStyles, pub should_render: bool, pub cursor_key_mode: bool, // DECCKM - when set, cursor keys should send ANSI direction codes (eg. "OD") instead of the arrow keys (eg. "[D") + pub erasure_mode: bool, // ERM pub clear_viewport_before_rendering: bool, pub width: usize, pub height: usize, @@ -170,9 +171,9 @@ impl Debug for Grid { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { for (i, row) in self.viewport.iter().enumerate() { if row.is_canonical { - writeln!(f, "{:?} (C): {:?}", i, row)?; + writeln!(f, "{:02?} (C): {:?}", i, row)?; } else { - writeln!(f, "{:?} (W): {:?}", i, row)?; + writeln!(f, "{:02?} (W): {:?}", i, row)?; } } Ok(()) @@ -192,20 +193,20 @@ impl Grid { pending_styles: CharacterStyles::new(), should_render: true, cursor_key_mode: false, + erasure_mode: false, alternative_lines_above_viewport_and_cursor: None, clear_viewport_before_rendering: false, } } pub fn advance_to_next_tabstop(&mut self, styles: CharacterStyles) { let columns_until_next_tabstop = TABSTOP_WIDTH - (self.cursor.x % TABSTOP_WIDTH); - let columns_until_screen_end = self.width - self.cursor.x; + let columns_until_screen_end = (self.width - self.cursor.x).saturating_sub(1); let columns_to_advance = std::cmp::min(columns_until_next_tabstop, columns_until_screen_end); let mut empty_character = EMPTY_TERMINAL_CHARACTER; empty_character.styles = styles; - for _ in 0..columns_to_advance { - self.add_character(empty_character) - } + self.cursor.x += columns_to_advance; + self.pad_current_line_until(self.cursor.x); } fn cursor_canonical_line_index(&self) -> usize { let mut cursor_canonical_line_index = 0; @@ -475,6 +476,13 @@ impl Grid { } } } + pub fn fill_viewport(&mut self, character: TerminalCharacter) { + self.viewport.clear(); + for _ in 0..self.height { + let columns = vec![character; self.width]; + self.viewport.push(Row::from_columns(columns).canonical()); + } + } pub fn add_canonical_line(&mut self) { if let Some((scroll_region_top, scroll_region_bottom)) = self.scroll_region { if self.cursor.y == scroll_region_bottom { @@ -490,8 +498,12 @@ impl Grid { } self.viewport.remove(scroll_region_top); let columns = vec![EMPTY_TERMINAL_CHARACTER; self.width]; - self.viewport - .insert(scroll_region_bottom, Row::from_columns(columns).canonical()); + if self.viewport.len() >= scroll_region_bottom { + self.viewport + .insert(scroll_region_bottom, Row::from_columns(columns).canonical()); + } else { + self.viewport.push(Row::from_columns(columns).canonical()); + } return; } } @@ -518,13 +530,6 @@ impl Grid { pub fn move_cursor_to_beginning_of_line(&mut self) { self.cursor.x = 0; } - pub fn move_cursor_backwards(&mut self, count: usize) { - if self.cursor.x > count { - self.cursor.x -= count; - } else { - self.cursor.x = 0; - } - } pub fn insert_character_at_cursor_position(&mut self, terminal_character: TerminalCharacter) { match self.viewport.get_mut(self.cursor.y) { Some(row) => { @@ -601,17 +606,13 @@ impl Grid { } } pub fn replace_characters_in_line_before_cursor(&mut self, replace_with: TerminalCharacter) { - let line_part = vec![replace_with; self.cursor.x]; + let line_part = vec![replace_with; self.cursor.x + 1]; let row = self.viewport.get_mut(self.cursor.y).unwrap(); row.replace_beginning_with(line_part); } pub fn clear_all_after_cursor(&mut self, replace_with: TerminalCharacter) { if let Some(cursor_row) = self.viewport.get_mut(self.cursor.y).as_mut() { cursor_row.truncate(self.cursor.x); - let mut replace_with_columns_in_cursor_row = - vec![replace_with; self.width - self.cursor.x]; - cursor_row.append(&mut replace_with_columns_in_cursor_row); - let replace_with_columns = vec![replace_with; self.width]; self.replace_characters_in_line_after_cursor(replace_with); for row in self.viewport.iter_mut().skip(self.cursor.y + 1) { @@ -619,6 +620,15 @@ impl Grid { } } } + pub fn clear_all_before_cursor(&mut self, replace_with: TerminalCharacter) { + if let Some(cursor_row) = self.viewport.get_mut(self.cursor.y).as_mut() { + self.replace_characters_in_line_before_cursor(replace_with); + let replace_with_columns = vec![replace_with; self.width]; + for row in self.viewport.iter_mut().take(self.cursor.y) { + row.replace_columns(replace_with_columns.clone()); + } + } + } pub fn clear_cursor_line(&mut self) { self.viewport.get_mut(self.cursor.y).unwrap().truncate(0); } @@ -642,10 +652,25 @@ impl Grid { } } pub fn move_cursor_to(&mut self, x: usize, y: usize, pad_character: TerminalCharacter) { - self.cursor.x = std::cmp::min(self.width - 1, x); - self.cursor.y = std::cmp::min(self.height - 1, y); - self.pad_lines_until(self.cursor.y, pad_character); - self.pad_current_line_until(self.cursor.x); + match self.scroll_region { + Some((scroll_region_top, scroll_region_bottom)) => { + self.cursor.x = std::cmp::min(self.width - 1, x); + let y_offset = if self.erasure_mode { + scroll_region_top + } else { + 0 + }; + self.cursor.y = std::cmp::min(scroll_region_bottom, y + y_offset); + self.pad_lines_until(self.cursor.y, pad_character); + self.pad_current_line_until(self.cursor.x); + } + None => { + self.cursor.x = std::cmp::min(self.width - 1, x); + self.cursor.y = std::cmp::min(self.height - 1, y); + self.pad_lines_until(self.cursor.y, pad_character); + self.pad_current_line_until(self.cursor.x); + } + } } pub fn move_cursor_up(&mut self, count: usize) { self.cursor.y = if self.cursor.y < count { @@ -690,6 +715,10 @@ impl Grid { self.pad_lines_until(self.cursor.y, pad_character); } pub fn move_cursor_back(&mut self, count: usize) { + if self.cursor.x == self.width { + // on the rightmost screen edge, backspace skips one character + self.cursor.x -= 1; + } if self.cursor.x < count { self.cursor.x = 0; } else { @@ -827,14 +856,15 @@ impl vte::Perform for Grid { match byte { 8 => { // backspace - self.move_cursor_backwards(1); + self.move_cursor_back(1); } 9 => { // tab self.advance_to_next_tabstop(self.pending_styles); } - 10 => { + 10 | 11 => { // 0a, newline + // 0b, form-feed self.add_newline(); } 13 => { @@ -891,11 +921,13 @@ impl vte::Perform for Grid { char_to_replace.styles = self.pending_styles; if params[0] == 0 { self.clear_all_after_cursor(char_to_replace); + } else if params[0] == 1 { + self.clear_all_before_cursor(char_to_replace); } else if params[0] == 2 { self.clear_all(char_to_replace); } // TODO: implement 1 - } else if c == 'H' { + } else if c == 'H' || c == 'f' { // goto row/col // we subtract 1 from the row/column because these are 1 indexed // (except when they are 0, in which case they should be 1 @@ -963,6 +995,16 @@ impl vte::Perform for Grid { Some(&1) => { self.cursor_key_mode = false; } + Some(&3) => { + // DECCOLM - only side effects + self.scroll_region = None; + self.clear_all(EMPTY_TERMINAL_CHARACTER); + self.cursor.x = 0; + self.cursor.y = 0; + } + Some(&6) => { + self.erasure_mode = false; + } _ => {} }; } @@ -993,6 +1035,16 @@ impl vte::Perform for Grid { Some(&1) => { self.cursor_key_mode = true; } + Some(&3) => { + // DECCOLM - only side effects + self.scroll_region = None; + self.clear_all(EMPTY_TERMINAL_CHARACTER); + self.cursor.x = 0; + self.cursor.y = 0; + } + Some(&6) => { + self.erasure_mode = true; + } _ => {} }; } @@ -1098,12 +1150,27 @@ impl vte::Perform for Grid { fn esc_dispatch(&mut self, intermediates: &[u8], _ignore: bool, byte: u8) { match (byte, intermediates.get(0)) { + (b'D', None) => { + self.add_newline(); + } + (b'E', None) => { + self.add_newline(); + self.move_cursor_to_beginning_of_line(); + } (b'M', None) => { self.move_cursor_up_with_scrolling(1); } (b'c', None) => { self.reset_terminal_state(); } + (b'H', None) => { + self.advance_to_next_tabstop(self.pending_styles); + } + (b'8', Some(b'#')) => { + let mut fill_character = EMPTY_TERMINAL_CHARACTER; + fill_character.character = 'E'; + self.fill_viewport(fill_character); + } _ => {} } } @@ -1254,3 +1321,7 @@ impl Cursor { } } } + +#[cfg(test)] +#[path = "./unit/grid_tests.rs"] +mod grid_tests; diff --git a/src/client/panes/unit/grid_tests.rs b/src/client/panes/unit/grid_tests.rs new file mode 100644 index 00000000..92f5fbdf --- /dev/null +++ b/src/client/panes/unit/grid_tests.rs @@ -0,0 +1,85 @@ +use super::super::Grid; +use ::insta::assert_snapshot; + +fn read_fixture(fixture_name: &str) -> Vec<u8> { + let mut path_to_file = std::path::PathBuf::new(); + path_to_file.push("src"); + path_to_file.push("tests"); + path_to_file.push("fixtures"); + path_to_file.push(fixture_name); + let content = std::fs::read(path_to_file) + .unwrap_or_else(|_| panic!("could not read fixture {:?}", &fixture_name)); + content +} + +#[test] +fn vttest1_0() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-0"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +fn vttest1_1() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-1"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +fn vttest1_2() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-2"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +fn vttest1_3() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-3"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +fn vttest1_4() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-4"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} + +#[test] +fn vttest1_5() { + let mut vte_parser = vte::Parser::new(); + let mut grid = Grid::new(41, 110); + let fixture_name = "vttest1-5"; + let content = read_fixture(fixture_name); + for byte in content { + vte_parser.advance(&mut grid, byte); + } + assert_snapshot!(format!("{:?}", grid)); +} diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_0.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_0.snap new file mode 100644 index 00000000..8641098c --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_0.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): ******************************************************************************** +01 (C): *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* +02 (C): *+ +* +03 (C): *+ +* +04 (C): *+ +* +05 (C): *+ +* +06 (C): *+ +* +07 (C): *+ +* +08 (C): *+ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +* +09 (C): *+ E E +* +10 (C): *+ E The screen should be cleared, and have an unbroken bor- E +* +11 (C): *+ E der of *'s and +'s around the edge, and exactly in the E +* +12 (C): *+ E middle there should be a frame of E's around this text E +* +13 (C): *+ E with one (1) free position around it. Push <RETURN> E +* +14 (C): *+ E E +* +15 (C): *+ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +* +16 (C): *+ +* +17 (C): *+ +* +18 (C): *+ +* +19 (C): *+ +* +20 (C): *+ +* +21 (C): *+ +* +22 (C): *+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +23 (C): ******************************************************************************** +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_1.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_1.snap new file mode 100644 index 00000000..09663484 --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_1.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): ************************************************************************************************************** +01 (C): *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* +02 (C): *+ +* +03 (C): *+ +* +04 (C): *+ +* +05 (C): *+ +* +06 (C): *+ +* +07 (C): *+ +* +08 (C): *+ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +* +09 (C): *+ E E +* +10 (C): *+ E The screen should be cleared, and have an unbroken bor- E +* +11 (C): *+ E der of *'s and +'s around the edge, and exactly in the E +* +12 (C): *+ E middle there should be a frame of E's around this text E +* +13 (C): *+ E with one (1) free position around it. Push <RETURN> E +* +14 (C): *+ E E +* +15 (C): *+ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +* +16 (C): *+ +* +17 (C): *+ +* +18 (C): *+ +* +19 (C): *+ +* +20 (C): *+ +* +21 (C): *+ +* +22 (C): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * +23 (C): ************************************************************************************************************** +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_2.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_2.snap new file mode 100644 index 00000000..05d80b1d --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_2.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): Test of autowrap, mixing control and print characters. +01 (C): The left/right margins should have letters in order: +02 (C): I iJ +03 (C): j +04 (C): K K k +05 (C): L l +06 (C): M mN +07 (C): n +08 (C): O O o +09 (C): P p +10 (C): Q qR +11 (C): r +12 (C): S S s +13 (C): T t +14 (C): U uV +15 (C): v +16 (C): W W w +17 (C): X x +18 (C): Y yZ +19 (C): z +20 (C): +21 (C): Push <RETURN> +22 (C): +23 (C): +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_3.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_3.snap new file mode 100644 index 00000000..64c3e7b9 --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_3.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): Test of autowrap, mixing control and print characters. +01 (C): The left/right margins should have letters in order: +02 (C): I i +03 (C): J j +04 (C): K k +05 (C): L l +06 (C): M m +07 (C): N n +08 (C): O o +09 (C): P p +10 (C): Q q +11 (C): R r +12 (C): S s +13 (C): T t +14 (C): U u +15 (C): V v +16 (C): W w +17 (C): X x +18 (C): Y y +19 (C): Z z +20 (C): +21 (C): Push <RETURN> +22 (C): +23 (C): +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_4.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_4.snap new file mode 100644 index 00000000..dcb417ae --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_4.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): Test of cursor-control characters inside ESC sequences. +01 (C): Below should be four identical lines: +02 (C): +03 (C): A B C D E F G H I +04 (C): A B C D E F G H I +05 (C): A B C D E F G H I +06 (C): A B C D E F G H I +07 (C): +08 (C): Push <RETURN> +09 (C): +10 (C): +11 (C): +12 (C): +13 (C): +14 (C): +15 (C): +16 (C): +17 (C): +18 (C): +19 (C): +20 (C): +21 (C): +22 (C): +23 (C): +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_5.snap b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_5.snap new file mode 100644 index 00000000..d044691c --- /dev/null +++ b/src/client/panes/unit/snapshots/zellij__client__panes__grid__grid_tests__vttest1_5.snap @@ -0,0 +1,47 @@ +--- +source: src/client/panes/grid.rs +expression: "format!(\"{:?}\", grid)" + +--- +00 (C): Test of leading zeros in ESC sequences. +01 (C): Two lines below you should see the sentence "This is a correct sentence". +02 (C): +03 (C): This is a correct sentence +04 (C): +05 (C): +06 (C): +07 (C): +08 (C): +09 (C): +10 (C): +11 (C): +12 (C): +13 (C): +14 (C): +15 (C): +16 (C): +17 (C): +18 (C): +19 (C): Push <RETURN> +20 (C): +21 (C): +22 (C): +23 (C): +24 (C): +25 (C): +26 (C): +27 (C): +28 (C): +29 (C): +30 (C): +31 (C): +32 (C): +33 (C): +34 (C): +35 (C): +36 (C): +37 (C): +38 (C): +39 (C): +40 (C): + diff --git a/src/tests/fixtures/vttest1-0 b/src/tests/fixtures/vttest1-0 new file mode 100644 index 00000000..985fb2a2 --- /dev/null +++ b/src/tests/fixtures/vttest1-0 @@ -0,0 +1,34 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:25:27(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:25:27(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[34C[68C[38;2;85;85;85m11:25:27(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>
\ No newline at end of file diff --git a/src/tests/fixtures/vttest1-1 b/src/tests/fixtures/vttest1-1 new file mode 100644 index 00000000..4068a89b --- /dev/null +++ b/src/tests/fixtures/vttest1-1 @@ -0,0 +1,48 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:04:45(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:04:45(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:04:45(B[m
[102C
[34C[68C[38;2;85;85;85m11:04:45(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[?3h#8[9;36H[1J[18;86H[0J[1K[9;97H[0K[10;36H[1K[10;97H[0K[11;36H[1K[11;97H[0K[12;36H[1K[12;97H[0K[13;36H[1K[13;97H[0K[14;36H[1K[14;97H[0K[15;36H[1K[15;97H[0K[16;36H[1K[16;97H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[24;81f*[1;81f*[24;82f*[1;82f*[24;83f*[1;83f*[24;84f*[1;84f*[24;85f*[1;85f*[24;86f*[1;86f*[24;87f*[1;87f*[24;88f*[1;88f*[24;89f*[1;89f*[24;90f*[1;90f*[24;91f*[1;91f*[24;92f*[1;92f*[24;93f*[1;93f*[24;94f*[1;94f*[24;95f*[1;95f*[24;96f*[1;96f*[24;97f*[1;97f*[24;98f*[1;98f*[24;99f*[1;99f*[24;100f*[1;100f*[24;101f*[1;101f*[24;102f*[1;102f*[24;103f*[1;103f*[24;104f*[1;104f*[24;105f*[1;105f*[24;106f*[1;106f*[24;107f*[1;107f*[24;108f*[1;108f*[24;109f*[1;109f*[24;110f*[1;110f*[24;111f*[1;111f*[24;112f*[1;112f*[24;113f*[1;113f*[24;114f*[1;114f*[24;115f*[1;115f*[24;116f*[1;116f*[24;117f*[1;117f*[24;118f*[1;118f*[24;119f*[1;119f*[24;120f*[1;120f*[24;121f*[1;121f*[24;122f*[1;122f*[24;123f*[1;123f*[24;124f*[1;124f*[24;125f*[1;125f*[24;126f*[1;126f*[24;127f*[1;127f*[24;128f*[1;128f*[24;129f*[1;129f*[24;130f*[1;130f*[24;131f*[1;131f*[24;132f*[1;132f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;131H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;132H*[10DE*[3;132H*[10DE*[4;132H*[10DE*[5;132H*[10DE*[6;132H*[10DE*[7;132H*[10DE*[8;132H*[10DE*[9;132H*[10DE*[10;132H*[10D
+*[11;132H*[10D
+*[12;132H*[10D
+*[13;132H*[10D
+*[14;132H*[10D
+*[15;132H*[10D
+*[16;132H*[10D
+*[17;132H*[10D
+*[18;132H*[10D
+*[19;132H*[10D
+*[20;132H*[10D
+*[21;132H*[10D
+*[22;132H*[10D
+*[23;132H*[10D
+[2;10H[68D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;96H[68C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;132H[10B[1B[0B[10;38H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;39Hder of *'s and +'s around the edge, and exactly in the[13;39Hmiddle there should be a frame of E's around this text[14;39Hwith one (1) free position around it. Push <RETURN>
\ No newline at end of file diff --git a/src/tests/fixtures/vttest1-2 b/src/tests/fixtures/vttest1-2 new file mode 100644 index 00000000..5f8b9e15 --- /dev/null +++ b/src/tests/fixtures/vttest1-2 @@ -0,0 +1,76 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:23:05(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:23:05(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:23:05(B[m
[102C
[34C[68C[38;2;85;85;85m11:23:05(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[?3h#8[9;36H[1J[18;86H[0J[1K[9;97H[0K[10;36H[1K[10;97H[0K[11;36H[1K[11;97H[0K[12;36H[1K[12;97H[0K[13;36H[1K[13;97H[0K[14;36H[1K[14;97H[0K[15;36H[1K[15;97H[0K[16;36H[1K[16;97H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[24;81f*[1;81f*[24;82f*[1;82f*[24;83f*[1;83f*[24;84f*[1;84f*[24;85f*[1;85f*[24;86f*[1;86f*[24;87f*[1;87f*[24;88f*[1;88f*[24;89f*[1;89f*[24;90f*[1;90f*[24;91f*[1;91f*[24;92f*[1;92f*[24;93f*[1;93f*[24;94f*[1;94f*[24;95f*[1;95f*[24;96f*[1;96f*[24;97f*[1;97f*[24;98f*[1;98f*[24;99f*[1;99f*[24;100f*[1;100f*[24;101f*[1;101f*[24;102f*[1;102f*[24;103f*[1;103f*[24;104f*[1;104f*[24;105f*[1;105f*[24;106f*[1;106f*[24;107f*[1;107f*[24;108f*[1;108f*[24;109f*[1;109f*[24;110f*[1;110f*[24;111f*[1;111f*[24;112f*[1;112f*[24;113f*[1;113f*[24;114f*[1;114f*[24;115f*[1;115f*[24;116f*[1;116f*[24;117f*[1;117f*[24;118f*[1;118f*[24;119f*[1;119f*[24;120f*[1;120f*[24;121f*[1;121f*[24;122f*[1;122f*[24;123f*[1;123f*[24;124f*[1;124f*[24;125f*[1;125f*[24;126f*[1;126f*[24;127f*[1;127f*[24;128f*[1;128f*[24;129f*[1;129f*[24;130f*[1;130f*[24;131f*[1;131f*[24;132f*[1;132f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;131H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;132H*[10DE*[3;132H*[10DE*[4;132H*[10DE*[5;132H*[10DE*[6;132H*[10DE*[7;132H*[10DE*[8;132H*[10DE*[9;132H*[10DE*[10;132H*[10D
+*[11;132H*[10D
+*[12;132H*[10D
+*[13;132H*[10D
+*[14;132H*[10D
+*[15;132H*[10D
+*[16;132H*[10D
+*[17;132H*[10D
+*[18;132H*[10D
+*[19;132H*[10D
+*[20;132H*[10D
+*[21;132H*[10D
+*[22;132H*[10D
+*[23;132H*[10D
+[2;10H[68D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;96H[68C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;132H[10B[1B[0B[10;38H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;39Hder of *'s and +'s around the edge, and exactly in the[13;39Hmiddle there should be a frame of E's around this text[14;39Hwith one (1) free position around it. Push <RETURN>[?3l[?3lTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;80Ha
+[18;80HaB[19;80HB b
+[19;80HC c[19;2HC
+[19;80H
+[18;1HD[18;80Hd[19;1HE[19;80He
+[18;80HeF[19;80HF f
+[19;80HG g[19;2HG
+[19;80H
+[18;1HH[18;80Hh[19;1HI[19;80Hi
+[18;80HiJ[19;80HJ j
+[19;80HK k[19;2HK
+[19;80H
+[18;1HL[18;80Hl[19;1HM[19;80Hm
+[18;80HmN[19;80HN n
+[19;80HO o[19;2HO
+[19;80H
+[18;1HP[18;80Hp[19;1HQ[19;80Hq
+[18;80HqR[19;80HR r
+[19;80HS s[19;2HS
+[19;80H
+[18;1HT[18;80Ht[19;1HU[19;80Hu
+[18;80HuV[19;80HV v
+[19;80HW w[19;2HW
+[19;80H
+[18;1HX[18;80Hx[19;1HY[19;80Hy
+[18;80HyZ[19;80HZ z
+[?6l[r[22;1HPush <RETURN>
\ No newline at end of file diff --git a/src/tests/fixtures/vttest1-3 b/src/tests/fixtures/vttest1-3 new file mode 100644 index 00000000..3b4842c1 --- /dev/null +++ b/src/tests/fixtures/vttest1-3 @@ -0,0 +1,137 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:25:27(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:25:27(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:25:27(B[m
[102C
[34C[68C[38;2;85;85;85m11:25:27(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:27:18(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:27:18(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:27:18(B[m
[102C
[34C[68C[38;2;85;85;85m11:27:18(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[?3h#8[9;36H[1J[18;86H[0J[1K[9;97H[0K[10;36H[1K[10;97H[0K[11;36H[1K[11;97H[0K[12;36H[1K[12;97H[0K[13;36H[1K[13;97H[0K[14;36H[1K[14;97H[0K[15;36H[1K[15;97H[0K[16;36H[1K[16;97H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[24;81f*[1;81f*[24;82f*[1;82f*[24;83f*[1;83f*[24;84f*[1;84f*[24;85f*[1;85f*[24;86f*[1;86f*[24;87f*[1;87f*[24;88f*[1;88f*[24;89f*[1;89f*[24;90f*[1;90f*[24;91f*[1;91f*[24;92f*[1;92f*[24;93f*[1;93f*[24;94f*[1;94f*[24;95f*[1;95f*[24;96f*[1;96f*[24;97f*[1;97f*[24;98f*[1;98f*[24;99f*[1;99f*[24;100f*[1;100f*[24;101f*[1;101f*[24;102f*[1;102f*[24;103f*[1;103f*[24;104f*[1;104f*[24;105f*[1;105f*[24;106f*[1;106f*[24;107f*[1;107f*[24;108f*[1;108f*[24;109f*[1;109f*[24;110f*[1;110f*[24;111f*[1;111f*[24;112f*[1;112f*[24;113f*[1;113f*[24;114f*[1;114f*[24;115f*[1;115f*[24;116f*[1;116f*[24;117f*[1;117f*[24;118f*[1;118f*[24;119f*[1;119f*[24;120f*[1;120f*[24;121f*[1;121f*[24;122f*[1;122f*[24;123f*[1;123f*[24;124f*[1;124f*[24;125f*[1;125f*[24;126f*[1;126f*[24;127f*[1;127f*[24;128f*[1;128f*[24;129f*[1;129f*[24;130f*[1;130f*[24;131f*[1;131f*[24;132f*[1;132f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;131H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;132H*[10DE*[3;132H*[10DE*[4;132H*[10DE*[5;132H*[10DE*[6;132H*[10DE*[7;132H*[10DE*[8;132H*[10DE*[9;132H*[10DE*[10;132H*[10D
+*[11;132H*[10D
+*[12;132H*[10D
+*[13;132H*[10D
+*[14;132H*[10D
+*[15;132H*[10D
+*[16;132H*[10D
+*[17;132H*[10D
+*[18;132H*[10D
+*[19;132H*[10D
+*[20;132H*[10D
+*[21;132H*[10D
+*[22;132H*[10D
+*[23;132H*[10D
+[2;10H[68D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;96H[68C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;132H[10B[1B[0B[10;38H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;39Hder of *'s and +'s around the edge, and exactly in the[13;39Hmiddle there should be a frame of E's around this text[14;39Hwith one (1) free position around it. Push <RETURN>[?3l[?3lTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;80Ha
+[18;80HaB[19;80HB b
+[19;80HC c[19;2HC
+[19;80H
+[18;1HD[18;80Hd[19;1HE[19;80He
+[18;80HeF[19;80HF f
+[19;80HG g[19;2HG
+[19;80H
+[18;1HH[18;80Hh[19;1HI[19;80Hi
+[18;80HiJ[19;80HJ j
+[19;80HK k[19;2HK
+[19;80H
+[18;1HL[18;80Hl[19;1HM[19;80Hm
+[18;80HmN[19;80HN n
+[19;80HO o[19;2HO
+[19;80H
+[18;1HP[18;80Hp[19;1HQ[19;80Hq
+[18;80HqR[19;80HR r
+[19;80HS s[19;2HS
+[19;80H
+[18;1HT[18;80Ht[19;1HU[19;80Hu
+[18;80HuV[19;80HV v
+[19;80HW w[19;2HW
+[19;80H
+[18;1HX[18;80Hx[19;1HY[19;80Hy
+[18;80HyZ[19;80HZ z
+[?6l[r[22;1HPush <RETURN>[?3hTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;132Ha
+[18;132HaB[19;132HB b
+[19;132HC c[19;2HC
+[19;132H
+[18;1HD[18;132Hd[19;1HE[19;132He
+[18;132HeF[19;132HF f
+[19;132HG g[19;2HG
+[19;132H
+[18;1HH[18;132Hh[19;1HI[19;132Hi
+[18;132HiJ[19;132HJ j
+[19;132HK k[19;2HK
+[19;132H
+[18;1HL[18;132Hl[19;1HM[19;132Hm
+[18;132HmN[19;132HN n
+[19;132HO o[19;2HO
+[19;132H
+[18;1HP[18;132Hp[19;1HQ[19;132Hq
+[18;132HqR[19;132HR r
+[19;132HS s[19;2HS
+[19;132H
+[18;1HT[18;132Ht[19;1HU[19;132Hu
+[18;132HuV[19;132HV v
+[19;132HW w[19;2HW
+[19;132H
+[18;1HX[18;132Hx[19;1HY[19;132Hy
+[18;132HyZ[19;132HZ z
+[?6l[r[22;1HPush <RETURN>
\ No newline at end of file diff --git a/src/tests/fixtures/vttest1-4 b/src/tests/fixtures/vttest1-4 new file mode 100644 index 00000000..66e86891 --- /dev/null +++ b/src/tests/fixtures/vttest1-4 @@ -0,0 +1,112 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:29:05(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:29:05(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:29:05(B[m
[102C
[34C[68C[38;2;85;85;85m11:29:05(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[?3h#8[9;36H[1J[18;86H[0J[1K[9;97H[0K[10;36H[1K[10;97H[0K[11;36H[1K[11;97H[0K[12;36H[1K[12;97H[0K[13;36H[1K[13;97H[0K[14;36H[1K[14;97H[0K[15;36H[1K[15;97H[0K[16;36H[1K[16;97H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[24;81f*[1;81f*[24;82f*[1;82f*[24;83f*[1;83f*[24;84f*[1;84f*[24;85f*[1;85f*[24;86f*[1;86f*[24;87f*[1;87f*[24;88f*[1;88f*[24;89f*[1;89f*[24;90f*[1;90f*[24;91f*[1;91f*[24;92f*[1;92f*[24;93f*[1;93f*[24;94f*[1;94f*[24;95f*[1;95f*[24;96f*[1;96f*[24;97f*[1;97f*[24;98f*[1;98f*[24;99f*[1;99f*[24;100f*[1;100f*[24;101f*[1;101f*[24;102f*[1;102f*[24;103f*[1;103f*[24;104f*[1;104f*[24;105f*[1;105f*[24;106f*[1;106f*[24;107f*[1;107f*[24;108f*[1;108f*[24;109f*[1;109f*[24;110f*[1;110f*[24;111f*[1;111f*[24;112f*[1;112f*[24;113f*[1;113f*[24;114f*[1;114f*[24;115f*[1;115f*[24;116f*[1;116f*[24;117f*[1;117f*[24;118f*[1;118f*[24;119f*[1;119f*[24;120f*[1;120f*[24;121f*[1;121f*[24;122f*[1;122f*[24;123f*[1;123f*[24;124f*[1;124f*[24;125f*[1;125f*[24;126f*[1;126f*[24;127f*[1;127f*[24;128f*[1;128f*[24;129f*[1;129f*[24;130f*[1;130f*[24;131f*[1;131f*[24;132f*[1;132f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;131H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;132H*[10DE*[3;132H*[10DE*[4;132H*[10DE*[5;132H*[10DE*[6;132H*[10DE*[7;132H*[10DE*[8;132H*[10DE*[9;132H*[10DE*[10;132H*[10D
+*[11;132H*[10D
+*[12;132H*[10D
+*[13;132H*[10D
+*[14;132H*[10D
+*[15;132H*[10D
+*[16;132H*[10D
+*[17;132H*[10D
+*[18;132H*[10D
+*[19;132H*[10D
+*[20;132H*[10D
+*[21;132H*[10D
+*[22;132H*[10D
+*[23;132H*[10D
+[2;10H[68D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;96H[68C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;132H[10B[1B[0B[10;38H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;39Hder of *'s and +'s around the edge, and exactly in the[13;39Hmiddle there should be a frame of E's around this text[14;39Hwith one (1) free position around it. Push <RETURN>[?3l[?3lTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;80Ha
+[18;80HaB[19;80HB b
+[19;80HC c[19;2HC
+[19;80H
+[18;1HD[18;80Hd[19;1HE[19;80He
+[18;80HeF[19;80HF f
+[19;80HG g[19;2HG
+[19;80H
+[18;1HH[18;80Hh[19;1HI[19;80Hi
+[18;80HiJ[19;80HJ j
+[19;80HK k[19;2HK
+[19;80H
+[18;1HL[18;80Hl[19;1HM[19;80Hm
+[18;80HmN[19;80HN n
+[19;80HO o[19;2HO
+[19;80H
+[18;1HP[18;80Hp[19;1HQ[19;80Hq
+[18;80HqR[19;80HR r
+[19;80HS s[19;2HS
+[19;80H
+[18;1HT[18;80Ht[19;1HU[19;80Hu
+[18;80HuV[19;80HV v
+[19;80HW w[19;2HW
+[19;80H
+[18;1HX[18;80Hx[19;1HY[19;80Hy
+[18;80HyZ[19;80HZ z
+[?6l[r[22;1HPush <RETURN>[?3hTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;132Ha
+[18;132HaB[19;132HB b
+[19;132HC c[19;2HC
+[19;132H
+[18;1HD[18;132Hd[19;1HE[19;132He
+[18;132HeF[19;132HF f
+[19;132HG g[19;2HG
+[19;132H
+[18;1HH[18;132Hh[19;1HI[19;132Hi
+[18;132HiJ[19;132HJ j
+[19;132HK k[19;2HK
+[19;132H
+[18;1HL[18;132Hl[19;1HM[19;132Hm
+[18;132HmN[19;132HN n
+[19;132HO o[19;2HO
+[19;132H
+[18;1HP[18;132Hp[19;1HQ[19;132Hq
+[18;132HqR[19;132HR r
+[19;132HS s[19;2HS
+[19;132H
+[18;1HT[18;132Ht[19;1HU[19;132Hu
+[18;132HuV[19;132HV v
+[19;132HW w[19;2HW
+[19;132H
+[18;1HX[18;132Hx[19;1HY[19;132Hy
+[18;132HyZ[19;132HZ z
+[?6l[r[22;1HPush <RETURN>[?3l[2J[1;1HTest of cursor-control characters inside ESC sequences.
+Below should be four identical lines:
+
+A B C D E F G H I
+A[2CB[2CC[2CD[2CE[2CF[2CG[2CH[2CI[2C
+A [
2CB[
4CC[
6CD[
8CE[
10CF[
12CG[
14CH[
16CI
+[20lA [1AB [1AC [1AD [1AE [1AF [1AG [1AH [1AI [1A
+
+Push <RETURN>
\ No newline at end of file diff --git a/src/tests/fixtures/vttest1-5 b/src/tests/fixtures/vttest1-5 new file mode 100644 index 00000000..89b39930 --- /dev/null +++ b/src/tests/fixtures/vttest1-5 @@ -0,0 +1,113 @@ +[2m⏎(B[m
⏎
[KWelcome to fish, the friendly interactive shell
+[?2004h]0;fish /home/aram/code/zellij[30m(B[m[97m[46m⋊>(B[m [33m~/c/zellij(B[m on [32mvttest-1(B[m ⨯ [K[44C[38;2;85;85;85m11:30:38(B[m
[72C
[28C
[28Cv[J[73C[38;2;85;85;85m11:30:38(B[m
[102C
[29C[91mv[73C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[29C[38;2;85;85;85mttest[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[29C[91mt[38;2;85;85;85mtest[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[30C[91mt[38;2;85;85;85mest[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[31C[91me[38;2;85;85;85mst[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[32C[91ms[38;2;85;85;85mt[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[33C[91mt[68C[30m(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[34C[1mvttest[68C(B[m[38;2;85;85;85m11:30:38(B[m
[102C
[34C[68C[38;2;85;85;85m11:30:38(B[m
[102C
[34C
+[30m(B[m[?2004l]0;vttest /home/aram/code/zellij[30m(B[m
[0c[?1l[?3l[?4l[?5l[?6l[?7h[?8l[?40h[?45l[r[0m[2J[3;10HVT100 test program, version 2.7 (20210210)[4;10HLine speed 38400bd [5;10HChoose test type:
+[6;1H[0J
+ 0. Exit
+ 1. Test of cursor movements
+ 2. Test of screen features
+ 3. Test of character sets
+ 4. Test of double-sized characters
+ 5. Test of keyboard
+ 6. Test of terminal reports
+ 7. Test of VT52 mode
+ 8. Test of VT102 features (Insert/Delete Char/Line)
+ 9. Test of known bugs
+ 10. Test of reset and self-test
+ 11. Test non-VT100 (e.g., VT220, XTERM) terminals
+ 12. Modify test-parameters
+
+ Enter choice number (0 - 12): 1
+[2J[?3l#8[9;10H[1J[18;60H[0J[1K[9;71H[0K[10;10H[1K[10;71H[0K[11;10H[1K[11;71H[0K[12;10H[1K[12;71H[0K[13;10H[1K[13;71H[0K[14;10H[1K[14;71H[0K[15;10H[1K[15;71H[0K[16;10H[1K[16;71H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;79H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;80H*[10DE*[3;80H*[10DE*[4;80H*[10DE*[5;80H*[10DE*[6;80H*[10DE*[7;80H*[10DE*[8;80H*[10DE*[9;80H*[10DE*[10;80H*[10D
+*[11;80H*[10D
+*[12;80H*[10D
+*[13;80H*[10D
+*[14;80H*[10D
+*[15;80H*[10D
+*[16;80H*[10D
+*[17;80H*[10D
+*[18;80H*[10D
+*[19;80H*[10D
+*[20;80H*[10D
+*[21;80H*[10D
+*[22;80H*[10D
+*[23;80H*[10D
+[2;10H[42D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;70H[42C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;80H[10B[1B[0B[10;12H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;13Hder of *'s and +'s around the edge, and exactly in the[13;13Hmiddle there should be a frame of E's around this text[14;13Hwith one (1) free position around it. Push <RETURN>[?3h#8[9;36H[1J[18;86H[0J[1K[9;97H[0K[10;36H[1K[10;97H[0K[11;36H[1K[11;97H[0K[12;36H[1K[12;97H[0K[13;36H[1K[13;97H[0K[14;36H[1K[14;97H[0K[15;36H[1K[15;97H[0K[16;36H[1K[16;97H[0K[17;30H[2K[24;1f*[1;1f*[24;2f*[1;2f*[24;3f*[1;3f*[24;4f*[1;4f*[24;5f*[1;5f*[24;6f*[1;6f*[24;7f*[1;7f*[24;8f*[1;8f*[24;9f*[1;9f*[24;10f*[1;10f*[24;11f*[1;11f*[24;12f*[1;12f*[24;13f*[1;13f*[24;14f*[1;14f*[24;15f*[1;15f*[24;16f*[1;16f*[24;17f*[1;17f*[24;18f*[1;18f*[24;19f*[1;19f*[24;20f*[1;20f*[24;21f*[1;21f*[24;22f*[1;22f*[24;23f*[1;23f*[24;24f*[1;24f*[24;25f*[1;25f*[24;26f*[1;26f*[24;27f*[1;27f*[24;28f*[1;28f*[24;29f*[1;29f*[24;30f*[1;30f*[24;31f*[1;31f*[24;32f*[1;32f*[24;33f*[1;33f*[24;34f*[1;34f*[24;35f*[1;35f*[24;36f*[1;36f*[24;37f*[1;37f*[24;38f*[1;38f*[24;39f*[1;39f*[24;40f*[1;40f*[24;41f*[1;41f*[24;42f*[1;42f*[24;43f*[1;43f*[24;44f*[1;44f*[24;45f*[1;45f*[24;46f*[1;46f*[24;47f*[1;47f*[24;48f*[1;48f*[24;49f*[1;49f*[24;50f*[1;50f*[24;51f*[1;51f*[24;52f*[1;52f*[24;53f*[1;53f*[24;54f*[1;54f*[24;55f*[1;55f*[24;56f*[1;56f*[24;57f*[1;57f*[24;58f*[1;58f*[24;59f*[1;59f*[24;60f*[1;60f*[24;61f*[1;61f*[24;62f*[1;62f*[24;63f*[1;63f*[24;64f*[1;64f*[24;65f*[1;65f*[24;66f*[1;66f*[24;67f*[1;67f*[24;68f*[1;68f*[24;69f*[1;69f*[24;70f*[1;70f*[24;71f*[1;71f*[24;72f*[1;72f*[24;73f*[1;73f*[24;74f*[1;74f*[24;75f*[1;75f*[24;76f*[1;76f*[24;77f*[1;77f*[24;78f*[1;78f*[24;79f*[1;79f*[24;80f*[1;80f*[24;81f*[1;81f*[24;82f*[1;82f*[24;83f*[1;83f*[24;84f*[1;84f*[24;85f*[1;85f*[24;86f*[1;86f*[24;87f*[1;87f*[24;88f*[1;88f*[24;89f*[1;89f*[24;90f*[1;90f*[24;91f*[1;91f*[24;92f*[1;92f*[24;93f*[1;93f*[24;94f*[1;94f*[24;95f*[1;95f*[24;96f*[1;96f*[24;97f*[1;97f*[24;98f*[1;98f*[24;99f*[1;99f*[24;100f*[1;100f*[24;101f*[1;101f*[24;102f*[1;102f*[24;103f*[1;103f*[24;104f*[1;104f*[24;105f*[1;105f*[24;106f*[1;106f*[24;107f*[1;107f*[24;108f*[1;108f*[24;109f*[1;109f*[24;110f*[1;110f*[24;111f*[1;111f*[24;112f*[1;112f*[24;113f*[1;113f*[24;114f*[1;114f*[24;115f*[1;115f*[24;116f*[1;116f*[24;117f*[1;117f*[24;118f*[1;118f*[24;119f*[1;119f*[24;120f*[1;120f*[24;121f*[1;121f*[24;122f*[1;122f*[24;123f*[1;123f*[24;124f*[1;124f*[24;125f*[1;125f*[24;126f*[1;126f*[24;127f*[1;127f*[24;128f*[1;128f*[24;129f*[1;129f*[24;130f*[1;130f*[24;131f*[1;131f*[24;132f*[1;132f*[2;2H+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD+[1DD[23;131H+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM+[1DM[2;1H*[2;132H*[10DE*[3;132H*[10DE*[4;132H*[10DE*[5;132H*[10DE*[6;132H*[10DE*[7;132H*[10DE*[8;132H*[10DE*[9;132H*[10DE*[10;132H*[10D
+*[11;132H*[10D
+*[12;132H*[10D
+*[13;132H*[10D
+*[14;132H*[10D
+*[15;132H*[10D
+*[16;132H*[10D
+*[17;132H*[10D
+*[18;132H*[10D
+*[19;132H*[10D
+*[20;132H*[10D
+*[21;132H*[10D
+*[22;132H*[10D
+*[23;132H*[10D
+[2;10H[68D[2C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C+[0C[2D[1C[23;96H[68C[2D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D+[1D[1C[0D[1;1H[10A[1A[0A[24;132H[10B[1B[0B[10;38H [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D [1B[58D[5A[1CThe screen should be cleared, and have an unbroken bor-[12;39Hder of *'s and +'s around the edge, and exactly in the[13;39Hmiddle there should be a frame of E's around this text[14;39Hwith one (1) free position around it. Push <RETURN>[?3l[?3lTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;80Ha
+[18;80HaB[19;80HB b
+[19;80HC c[19;2HC
+[19;80H
+[18;1HD[18;80Hd[19;1HE[19;80He
+[18;80HeF[19;80HF f
+[19;80HG g[19;2HG
+[19;80H
+[18;1HH[18;80Hh[19;1HI[19;80Hi
+[18;80HiJ[19;80HJ j
+[19;80HK k[19;2HK
+[19;80H
+[18;1HL[18;80Hl[19;1HM[19;80Hm
+[18;80HmN[19;80HN n
+[19;80HO o[19;2HO
+[19;80H
+[18;1HP[18;80Hp[19;1HQ[19;80Hq
+[18;80HqR[19;80HR r
+[19;80HS s[19;2HS
+[19;80H
+[18;1HT[18;80Ht[19;1HU[19;80Hu
+[18;80HuV[19;80HV v
+[19;80HW w[19;2HW
+[19;80H
+[18;1HX[18;80Hx[19;1HY[19;80Hy
+[18;80HyZ[19;80HZ z
+[?6l[r[22;1HPush <RETURN>[?3hTest of autowrap, mixing control and print characters.
+The left/right margins should have letters in order:
+[3;21r[?6h[19;1HA[19;132Ha
+[18;132HaB[19;132HB b
+[19;132HC c[19;2HC
+[19;132H
+[18;1HD[18;132Hd[19;1HE[19;132He
+[18;132HeF[19;132HF f
+[19;132HG g[19;2HG
+[19;132H
+[18;1HH[18;132Hh[19;1HI[19;132Hi
+[18;132HiJ[19;132HJ j
+[19;132HK k[19;2HK
+[19;132H
+[18;1HL[18;132Hl[19;1HM[19;132Hm
+[18;132HmN[19;132HN n
+[19;132HO o[19;2HO
+[19;132H
+[18;1HP[18;132Hp[19;1HQ[19;132Hq
+[18;132HqR[19;132HR r
+[19;132HS s[19;2HS
+[19;132H
+[18;1HT[18;132Ht[19;1HU[19;132Hu
+[18;132HuV[19;132HV v
+[19;132HW w[19;2HW
+[19;132H
+[18;1HX[18;132Hx[19;1HY[19;132Hy
+[18;132HyZ[19;132HZ z
+[?6l[r[22;1HPush <RETURN>[?3l[2J[1;1HTest of cursor-control characters inside ESC sequences.
+Below should be four identical lines:
+
+A B C D E F G H I
+A[2CB[2CC[2CD[2CE[2CF[2CG[2CH[2CI[2C
+A [
2CB[
4CC[
6CD[
8CE[
10CF[
12CG[
14CH[
16CI
+[20lA [1AB [1AC [1AD [1AE [1AF [1AG [1AH [1AI [1A
+
+Push <RETURN>[2J[1;1HTest of leading zeros in ESC sequences.
+Two lines below you should see the sentence "This is a correct sentence".[00000000004;000000001HT[00000000004;000000002Hh[00000000004;000000003Hi[00000000004;000000004Hs[00000000004;000000005H [00000000004;000000006Hi[00000000004;000000007Hs[00000000004;000000008H [00000000004;000000009Ha[00000000004;0000000010H [00000000004;0000000011Hc[00000000004;0000000012Ho[00000000004;0000000013Hr[00000000004;0000000014Hr[00000000004;0000000015He[00000000004;0000000016Hc[00000000004;0000000017Ht[00000000004;0000000018H [00000000004;0000000019Hs[00000000004;0000000020He[00000000004;0000000021Hn[00000000004;0000000022Ht[00000000004;0000000023He[00000000004;0000000024Hn[00000000004;0000000025Hc[00000000004;0000000026He[20;1HPush <RETURN>
\ No newline at end of file |
