diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-05 16:49:46 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-05 16:49:46 -0500 |
commit | 896a24f83585f0f30743e0db6b53e449b54d29f1 (patch) | |
tree | 68c40751137a2a266abe9c18c563bea174870547 | |
parent | 9f9c519cbaa5384e666ffa2b5e1cf4f99780ba28 (diff) | |
download | vt100-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.rs | 2 | ||||
-rw-r--r-- | tests/window_contents.rs | 17 |
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, |