diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-12-06 22:15:49 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-12-06 23:28:04 -0500 |
commit | e13049c91c036354b311bc529b0b258aa4b61952 (patch) | |
tree | bf8b21cbffe4545c0e58ba1827d249c662675ee8 /src | |
parent | e156958580d91b3244e4806ef1a6aa18e900a823 (diff) | |
download | vt100-rust-e13049c91c036354b311bc529b0b258aa4b61952.tar.gz vt100-rust-e13049c91c036354b311bc529b0b258aa4b61952.zip |
fix contents when a wrapped row is followed by an empty row
Diffstat (limited to 'src')
-rw-r--r-- | src/grid.rs | 4 | ||||
-rw-r--r-- | src/row.rs | 4 | ||||
-rw-r--r-- | src/screen.rs | 2 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/grid.rs b/src/grid.rs index b29668f..07bcd6f 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -183,11 +183,13 @@ impl Grid { } pub fn write_contents(&self, contents: &mut String) { + let mut wrapping = false; for row in self.visible_rows() { - row.write_contents(contents, 0, self.size.cols); + row.write_contents(contents, 0, self.size.cols, wrapping); if !row.wrapped() { contents.push_str("\n"); } + wrapping = row.wrapped(); } while contents.ends_with('\n') { @@ -85,6 +85,7 @@ impl Row { contents: &mut String, start: u16, width: u16, + wrapping: bool, ) { let mut prev_was_wide = false; @@ -112,6 +113,9 @@ impl Row { prev_col += if cell.is_wide() { 2 } else { 1 }; } } + if prev_col == start && wrapping { + contents.push('\n'); + } } pub fn write_contents_formatted( diff --git a/src/screen.rs b/src/screen.rs index afe50b8..7141c07 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -164,7 +164,7 @@ impl Screen { ) -> impl Iterator<Item = String> + '_ { self.grid().visible_rows().map(move |row| { let mut contents = String::new(); - row.write_contents(&mut contents, start, width); + row.write_contents(&mut contents, start, width, false); contents }) } |