From 3fbc74f513a5a691dd99705598c3023f3b8bc173 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 29 Nov 2019 04:40:39 -0500 Subject: handle wide char wrapping correctly wrapping a wide char should set the wrapping state of the line even if it wrapped before the last column --- src/row.rs | 8 ++++++-- tests/text.rs | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/row.rs b/src/row.rs index 90e92db..36d7d34 100644 --- a/src/row.rs +++ b/src/row.rs @@ -167,7 +167,9 @@ impl Row { if pos != prev_pos { if !wrapping || prev_pos.row + 1 != pos.row - || prev_pos.col != self.cols() + || prev_pos.col + < self.cols() + - if cell.is_wide() { 1 } else { 0 } || pos.col != 0 { crate::term::MoveFromTo::new(prev_pos, pos) @@ -260,7 +262,9 @@ impl Row { if pos != prev_pos { if !wrapping || prev_pos.row + 1 != pos.row - || prev_pos.col != self.cols() + || prev_pos.col + < self.cols() + - if cell.is_wide() { 1 } else { 0 } || pos.col != 0 { crate::term::MoveFromTo::new(prev_pos, pos) diff --git a/tests/text.rs b/tests/text.rs index 51ee297..d153f11 100644 --- a/tests/text.rs +++ b/tests/text.rs @@ -226,6 +226,10 @@ fn wrap() { assert_eq!(parser.screen().cell(1, 2).unwrap().contents(), "a"); assert_eq!(parser.screen().cell(1, 3).unwrap().contents(), ""); + let mut new_parser = vt100::Parser::default(); + new_parser.process(&parser.screen().contents_formatted()); + assert_eq!(new_parser.screen().contents(), parser.screen().contents()); + parser.process(b"\x1b[H\x1b[J"); assert_eq!(parser.screen().contents(), ""); parser.process(b" "); -- cgit v1.2.3