diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-11-20 00:55:54 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-11-20 00:55:54 -0500 |
commit | 6a91e5ba400fc8e343b9694612593a0a101a8959 (patch) | |
tree | f183a7ca177be9f443003f7c4b62e6ed7aa22a6d /src/row.rs | |
parent | feccbfb6be9da70f87ac89684f3dca23da3b9947 (diff) | |
download | vt100-rust-6a91e5ba400fc8e343b9694612593a0a101a8959.tar.gz vt100-rust-6a91e5ba400fc8e343b9694612593a0a101a8959.zip |
more wrapping + el bugs
Diffstat (limited to 'src/row.rs')
-rw-r--r-- | src/row.rs | 49 |
1 files changed, 43 insertions, 6 deletions
@@ -182,8 +182,23 @@ impl Row { if let Some((prev_col, attrs)) = erase { if cell.has_contents() || cell.attrs() != attrs { 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); @@ -248,8 +263,15 @@ 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() + { + contents.extend(" ".repeat(new_pos.col as usize).as_bytes()); + } 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); @@ -326,8 +348,23 @@ impl Row { if let Some((prev_col, attrs)) = erase { if cell.has_contents() || cell.attrs() != attrs { 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); |