diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-11-20 01:24:14 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-11-20 01:27:40 -0500 |
commit | 49f6a8ba69764e99d6674147cd716e32254dfc30 (patch) | |
tree | 889f1890b2779dd7345f2a5d75e633920adb01aa /src | |
parent | 5b50f0c7a22ccbf82fdc114dd172d9adde7b8bd1 (diff) | |
download | vt100-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.rs | 25 |
1 files changed, 22 insertions, 3 deletions
@@ -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); |