aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-11-19 16:35:08 -0500
committerJesse Luehrs <doy@tozt.net>2021-11-19 16:35:08 -0500
commitfeccbfb6be9da70f87ac89684f3dca23da3b9947 (patch)
treedc0f7d7f0549ed5cc707182e72fc469a642843cd
parent073bcb868df8eea8504526f11bce9f831de06e67 (diff)
downloadvt100-rust-feccbfb6be9da70f87ac89684f3dca23da3b9947.tar.gz
vt100-rust-feccbfb6be9da70f87ac89684f3dca23da3b9947.zip
fix another attribute issue with cursor_state_formatted
-rw-r--r--src/grid.rs13
-rw-r--r--tests/data/fixtures/el.in1
-rw-r--r--tests/data/fixtures/el/22.json329
-rw-r--r--tests/data/fixtures/el/22.typescript1
4 files changed, 344 insertions, 0 deletions
diff --git a/src/grid.rs b/src/grid.rs
index f550f9e..970909c 100644
--- a/src/grid.rs
+++ b/src/grid.rs
@@ -357,10 +357,23 @@ impl Grid {
crate::term::MoveTo::new(pos).write_buf(contents);
}
contents.push(b' ');
+ // we know that the cell has no contents, but it still may
+ // have drawing attributes (background color, etc)
+ let end_cell = self.visible_cell(pos).unwrap();
+ end_cell.attrs().write_escape_code_diff(
+ contents,
+ &prev_attrs.unwrap_or_default(),
+ );
crate::term::SaveCursor::default().write_buf(contents);
crate::term::Backspace::default().write_buf(contents);
crate::term::EraseChar::new(1).write_buf(contents);
crate::term::RestoreCursor::default().write_buf(contents);
+ if let Some(prev_attrs) = prev_attrs {
+ prev_attrs.write_escape_code_diff(
+ contents,
+ end_cell.attrs(),
+ );
+ }
}
}
} else if let Some(prev_pos) = prev_pos {
diff --git a/tests/data/fixtures/el.in b/tests/data/fixtures/el.in
index 092a817..108a7d2 100644
--- a/tests/data/fixtures/el.in
+++ b/tests/data/fixtures/el.in
@@ -19,3 +19,4 @@ foo\x1b[5;5Hbarbar\x1b[10;10Hbazbaz\x1b[20;20Hquux
\x1b[41m\x1b[1K
\x1bc\x1b[5;5H
\x1b[41m\x1b[2K
+\x1bc\x1b[1;80H\x1b[41ma\x1b[1K
diff --git a/tests/data/fixtures/el/22.json b/tests/data/fixtures/el/22.json
new file mode 100644
index 0000000..908b9f0
--- /dev/null
+++ b/tests/data/fixtures/el/22.json
@@ -0,0 +1,329 @@
+{
+ "contents": "",
+ "cells": {
+ "0,0": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,1": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,10": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,11": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,12": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,13": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,14": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,15": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,16": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,17": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,18": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,19": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,2": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,20": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,21": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,22": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,23": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,24": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,25": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,26": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,27": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,28": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,29": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,3": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,30": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,31": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,32": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,33": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,34": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,35": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,36": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,37": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,38": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,39": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,4": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,40": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,41": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,42": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,43": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,44": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,45": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,46": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,47": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,48": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,49": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,5": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,50": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,51": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,52": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,53": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,54": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,55": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,56": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,57": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,58": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,59": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,6": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,60": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,61": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,62": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,63": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,64": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,65": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,66": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,67": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,68": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,69": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,7": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,70": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,71": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,72": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,73": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,74": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,75": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,76": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,77": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,78": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,79": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,8": {
+ "contents": "",
+ "bgcolor": "1"
+ },
+ "0,9": {
+ "contents": "",
+ "bgcolor": "1"
+ }
+ },
+ "cursor_position": [
+ 0,
+ 80
+ ]
+} \ No newline at end of file
diff --git a/tests/data/fixtures/el/22.typescript b/tests/data/fixtures/el/22.typescript
new file mode 100644
index 0000000..c6d4307
--- /dev/null
+++ b/tests/data/fixtures/el/22.typescript
@@ -0,0 +1 @@
+ca \ No newline at end of file