From 532a9b9417f26c2d7011e4f1b79d556db717a650 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 5 Dec 2019 14:48:06 -0500 Subject: preserve wrapping state when possible --- src/row.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/row.rs') diff --git a/src/row.rs b/src/row.rs index 36d7d34..8f96c27 100644 --- a/src/row.rs +++ b/src/row.rs @@ -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() -- cgit v1.2.3-54-g00ecf