From 4b17588374703e310ed6da750d3d28cad1bdbd10 Mon Sep 17 00:00:00 2001 From: Chip Locke Date: Tue, 27 Nov 2018 02:16:59 -0800 Subject: [PATCH] fix erase commands to respect SGR values (fixes weird buffer corruption from vim) --- src/ConsoleBuffer/Buffer.cs | 15 ++++++++++++--- src/ConsoleBuffer/Line.cs | 10 ++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/ConsoleBuffer/Buffer.cs b/src/ConsoleBuffer/Buffer.cs index a371a8e..155aee4 100644 --- a/src/ConsoleBuffer/Buffer.cs +++ b/src/ConsoleBuffer/Buffer.cs @@ -298,7 +298,9 @@ private void HandleEraseCharacter(Commands.EraseCharacter ech) var x = this.cursorX; for (var c = 0; c < ech.Count; ++c) { - this.lines[y].SetGlyph(x, 0x20); + var eraseChar = this.characterTemplate; + eraseChar.Glyph = 0x20; + this.lines[y].Set(x, eraseChar); ++x; if (x == this.Width) { @@ -332,9 +334,14 @@ private void HandleEraseInDisplay(Commands.EraseIn eid) return; } + var eraseChar = this.characterTemplate; + eraseChar.Glyph = 0x20; for (var y = startY; y <= endY; ++y) { - this.lines[y].Clear(); + for (var x = 0; x < this.lines[y].Length; ++x) + { + this.lines[y].Set(x, eraseChar); + } } } @@ -359,9 +366,11 @@ private void HandleEraseInLine(Commands.EraseIn eil) return; } + var eraseChar = this.characterTemplate; + eraseChar.Glyph = 0x20; for (var x = startX; x <= endX; ++x) { - this.lines[this.CurrentLine].SetGlyph(x, 0x20); + this.lines[this.CurrentLine].Set(x, eraseChar); } } diff --git a/src/ConsoleBuffer/Line.cs b/src/ConsoleBuffer/Line.cs index c6599fc..c54153b 100644 --- a/src/ConsoleBuffer/Line.cs +++ b/src/ConsoleBuffer/Line.cs @@ -8,6 +8,8 @@ public sealed class Line : IEnumerable { private readonly List chars; + public int Length => this.chars.Count; + public Line() { var hintSize = 80; @@ -54,14 +56,6 @@ public void SetGlyph(int pos, int glyph) this.chars[pos] = current; } - public void Clear() - { - for (var x = 0; x < this.chars.Count; ++x) - { - this.SetGlyph(x, 0x20); - } - } - private void Extend(int pos) { while (this.chars.Count <= pos)