aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-11-20 01:24:14 -0500
committerJesse Luehrs <doy@tozt.net>2021-11-20 01:27:40 -0500
commit49f6a8ba69764e99d6674147cd716e32254dfc30 (patch)
tree889f1890b2779dd7345f2a5d75e633920adb01aa /src
parent5b50f0c7a22ccbf82fdc114dd172d9adde7b8bd1 (diff)
downloadvt100-rust-49f6a8ba69764e99d6674147cd716e32254dfc30.tar.gz
vt100-rust-49f6a8ba69764e99d6674147cd716e32254dfc30.zip
make sure all of these cases are handled the same
Diffstat (limited to 'src')
-rw-r--r--src/row.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/row.rs b/src/row.rs
index 3b0302c..7b3c2f0 100644
--- a/src/row.rs
+++ b/src/row.rs
@@ -267,7 +267,13 @@ impl Row {
&& prev_pos.row + 1 == new_pos.row
&& prev_pos.col >= self.cols()
{
- contents.extend(" ".repeat(new_pos.col as usize).as_bytes());
+ if new_pos.col > 0 {
+ contents
+ .extend(" ".repeat(new_pos.col as usize).as_bytes());
+ } else {
+ contents.extend(b" ");
+ crate::term::Backspace::default().write_buf(contents);
+ }
} else {
crate::term::MoveFromTo::new(prev_pos, new_pos)
.write_buf(contents);
@@ -430,8 +436,21 @@ impl Row {
}
if let Some((prev_col, attrs)) = erase {
let new_pos = crate::grid::Pos { row, col: prev_col };
- crate::term::MoveFromTo::new(prev_pos, new_pos)
- .write_buf(contents);
+ if wrapping
+ && prev_pos.row + 1 == new_pos.row
+ && prev_pos.col >= self.cols()
+ {
+ if new_pos.col > 0 {
+ contents
+ .extend(" ".repeat(new_pos.col as usize).as_bytes());
+ } else {
+ contents.extend(b" ");
+ crate::term::Backspace::default().write_buf(contents);
+ }
+ } else {
+ crate::term::MoveFromTo::new(prev_pos, new_pos)
+ .write_buf(contents);
+ }
prev_pos = new_pos;
if &prev_attrs != attrs {
attrs.write_escape_code_diff(contents, &prev_attrs);