From feccbfb6be9da70f87ac89684f3dca23da3b9947 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 19 Nov 2021 16:35:08 -0500 Subject: fix another attribute issue with cursor_state_formatted --- src/grid.rs | 13 ++ tests/data/fixtures/el.in | 1 + tests/data/fixtures/el/22.json | 329 +++++++++++++++++++++++++++++++++++ tests/data/fixtures/el/22.typescript | 1 + 4 files changed, 344 insertions(+) create mode 100644 tests/data/fixtures/el/22.json create mode 100644 tests/data/fixtures/el/22.typescript 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 -- cgit v1.2.3-54-g00ecf