aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-05 16:49:46 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-05 16:49:46 -0500
commit896a24f83585f0f30743e0db6b53e449b54d29f1 (patch)
tree68c40751137a2a266abe9c18c563bea174870547
parent9f9c519cbaa5384e666ffa2b5e1cf4f99780ba28 (diff)
downloadvt100-rust-896a24f83585f0f30743e0db6b53e449b54d29f1.tar.gz
vt100-rust-896a24f83585f0f30743e0db6b53e449b54d29f1.zip
reset attrs at the start of diffs
otherwise they might inherit the attrs state from the end of the previous state
-rw-r--r--src/grid.rs2
-rw-r--r--tests/window_contents.rs17
2 files changed, 14 insertions, 5 deletions
diff --git a/src/grid.rs b/src/grid.rs
index 2ded0e2..fb0f7d7 100644
--- a/src/grid.rs
+++ b/src/grid.rs
@@ -156,7 +156,7 @@ impl Grid {
}
pub fn contents_diff(&self, prev: &Self) -> Vec<u8> {
- let mut contents = vec![];
+ let mut contents = b"\x1b[m".to_vec();
let mut prev_attrs = crate::attrs::Attrs::default();
for (idx, (row, prev_row)) in self.rows().zip(prev.rows()).enumerate()
{
diff --git a/tests/window_contents.rs b/tests/window_contents.rs
index 32921b8..4f9ac2d 100644
--- a/tests/window_contents.rs
+++ b/tests/window_contents.rs
@@ -326,22 +326,31 @@ fn diff() {
let screen1 = parser.screen().clone();
parser.process(b"\x1b[5C\x1b[32m bar");
let screen2 = parser.screen().clone();
- assert_eq!(screen2.contents_diff(&screen1), b"\x1b[1;6H\x1b[32m bar");
+ assert_eq!(
+ screen2.contents_diff(&screen1),
+ b"\x1b[m\x1b[1;6H\x1b[32m bar"
+ );
compare_diff(&screen1, &screen2, b"");
parser.process(b"\x1b[H\x1b[31mfoo");
let screen3 = parser.screen().clone();
- assert_eq!(screen3.contents_diff(&screen2), b"\x1b[1;1H\x1b[31mfoo");
+ assert_eq!(
+ screen3.contents_diff(&screen2),
+ b"\x1b[m\x1b[1;1H\x1b[31mfoo"
+ );
compare_diff(&screen2, &screen3, b"\x1b[5C\x1b[32m bar");
parser.process(b"\x1b[1;7H\x1b[32mbaz");
let screen4 = parser.screen().clone();
- assert_eq!(screen4.contents_diff(&screen3), b"\x1b[1;9H\x1b[32mz");
+ assert_eq!(screen4.contents_diff(&screen3), b"\x1b[m\x1b[1;9H\x1b[32mz");
compare_diff(&screen3, &screen4, b"\x1b[5C\x1b[32m bar\x1b[H\x1b[31mfoo");
parser.process(b"\x1b[1;8H\x1b[X");
let screen5 = parser.screen().clone();
- assert_eq!(screen5.contents_diff(&screen4), b"\x1b[1;8H\x1b[X\x1b[C");
+ assert_eq!(
+ screen5.contents_diff(&screen4),
+ b"\x1b[m\x1b[1;8H\x1b[X\x1b[C"
+ );
compare_diff(
&screen4,
&screen5,