From ff65c812fcf3e46803bb3fbdc820d0006ea004c3 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 3 Nov 2019 11:03:09 +0000 Subject: improve formatted output a bit --- src/attrs.rs | 6 +++++- tests/window_contents.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 tests/window_contents.rs diff --git a/src/attrs.rs b/src/attrs.rs index 7e27f5a..ef7bf38 100644 --- a/src/attrs.rs +++ b/src/attrs.rs @@ -78,6 +78,10 @@ impl Attrs { pub fn escape_code_diff(&self, other: &Self) -> String { let mut opts = vec![]; + if self != other && self == &Self::default() { + return "\x1b[m".to_string(); + } + if self.fgcolor != other.fgcolor { match self.fgcolor { Color::Default => { @@ -131,7 +135,7 @@ impl Attrs { } if self.bold() != other.bold() { - opts.push(if self.bold() { 1 } else { 21 }); + opts.push(if self.bold() { 1 } else { 22 }); } if self.italic() != other.italic() { opts.push(if self.italic() { 3 } else { 23 }); diff --git a/tests/window_contents.rs b/tests/window_contents.rs new file mode 100644 index 0000000..057cfb1 --- /dev/null +++ b/tests/window_contents.rs @@ -0,0 +1,26 @@ +#[test] +fn formatted() { + let mut screen = vt100::Screen::new(24, 80); + assert_eq!(screen.window_contents_formatted(0, 0 ,23, 79), "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + + screen.process(b"foobar"); + assert!(!screen.cell(0, 2).unwrap().bold()); + assert!(!screen.cell(0, 3).unwrap().bold()); + assert!(!screen.cell(0, 4).unwrap().bold()); + assert!(!screen.cell(0, 5).unwrap().bold()); + assert_eq!(screen.window_contents_formatted(0, 0 ,23, 79), "foobar\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + + screen.process(b"\x1b[1;4H\x1b[1;7m\x1b[33mb"); + assert!(!screen.cell(0, 2).unwrap().bold()); + assert!(screen.cell(0, 3).unwrap().bold()); + assert!(!screen.cell(0, 4).unwrap().bold()); + assert!(!screen.cell(0, 5).unwrap().bold()); + assert_eq!(screen.window_contents_formatted(0, 0 ,23, 79), "foo\x1b[33;1;7mb\x1b[mar\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + + screen.process(b"\x1b[1;5H\x1b[22;42ma"); + assert!(!screen.cell(0, 2).unwrap().bold()); + assert!(screen.cell(0, 3).unwrap().bold()); + assert!(!screen.cell(0, 4).unwrap().bold()); + assert!(!screen.cell(0, 5).unwrap().bold()); + assert_eq!(screen.window_contents_formatted(0, 0 ,23, 79), "foo\x1b[33;1;7mb\x1b[42;22ma\x1b[mr\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); +} -- cgit v1.2.3-54-g00ecf