diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-12-05 14:48:06 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-12-06 21:26:07 -0500 |
commit | 532a9b9417f26c2d7011e4f1b79d556db717a650 (patch) | |
tree | 465e59a1cef826f7d08940bbd9f9932bda5a91ab /src/row.rs | |
parent | 10b5fca013b4fa0839b60262164400e5a63f2fb4 (diff) | |
download | vt100-rust-532a9b9417f26c2d7011e4f1b79d556db717a650.tar.gz vt100-rust-532a9b9417f26c2d7011e4f1b79d556db717a650.zip |
preserve wrapping state when possible
Diffstat (limited to 'src/row.rs')
-rw-r--r-- | src/row.rs | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -127,6 +127,14 @@ impl Row { let mut prev_was_wide = false; let default_cell = crate::cell::Cell::default(); + let first_cell = self.get(start).unwrap(); + if wrapping && first_cell == &default_cell { + contents.push(b' '); + crate::term::Backspace::default().write_buf(contents); + crate::term::EraseChar::new(1).write_buf(contents); + prev_pos = crate::grid::Pos { row, col: 0 }; + } + let mut erase: Option<(u16, &crate::attrs::Attrs)> = None; for (col, cell) in self .cells() @@ -221,6 +229,32 @@ impl Row { ) -> (crate::grid::Pos, crate::attrs::Attrs) { let mut prev_was_wide = false; + let first_cell = self.get(start).unwrap(); + let prev_first_cell = prev.get(start).unwrap(); + if wrapping + && first_cell == prev_first_cell + && prev_pos.row + 1 == row + && prev_pos.col + >= self.cols() - if prev_first_cell.is_wide() { 1 } else { 0 } + { + let mut cell_contents = prev_first_cell.contents(); + let need_erase = if cell_contents == "" { + cell_contents = " ".to_string(); + true + } else { + false + }; + contents.extend(cell_contents.as_bytes()); + crate::term::Backspace::default().write_buf(contents); + if prev_first_cell.is_wide() { + crate::term::Backspace::default().write_buf(contents); + } + if need_erase { + crate::term::EraseChar::new(1).write_buf(contents); + } + prev_pos = crate::grid::Pos { row, col: 0 }; + } + let mut erase: Option<(u16, &crate::attrs::Attrs)> = None; for (col, (cell, prev_cell)) in self .cells() |