diff --git a/src/common/buffer/BufferReflow.test.ts b/src/common/buffer/BufferReflow.test.ts index 8bcf5bf9c..cf14058ff 100644 --- a/src/common/buffer/BufferReflow.test.ts +++ b/src/common/buffer/BufferReflow.test.ts @@ -10,6 +10,7 @@ import { CellData } from './CellData'; import { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE } from './Constants'; import { reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow'; import { IBufferLine } from './Types'; +import { createCellData, NULL_CELL_DATA } from '../TestUtils.test'; const TEST_STRING_CACHE = new BufferLineStringCache(); @@ -122,5 +123,27 @@ describe('BufferReflow', () => { const lines = createWrappedLines('abcde'); assert.notDeepEqual(reflowLargerGetLinesToRemove(lines, 1, 5, 10, nullCell, false), []); }); + + it('should clear isWrapped on the last retained row after unwrap', () => { + const lines = new CircularList(10); + const set2 = (line: BufferLine, s: string) => { + for (let i = 0; i < s.length; i++) { + line.setCell(i, createCellData(0, s[i], 1)); + } + }; + const l0 = new BufferLine(TEST_STRING_CACHE, 2); + set2(l0, 'ab'); + const l1 = new BufferLine(TEST_STRING_CACHE, 2, undefined, true); + set2(l1, 'cd'); + const l2 = new BufferLine(TEST_STRING_CACHE, 2, undefined, true); + set2(l2, 'ef'); + lines.push(l0); + lines.push(l1); + lines.push(l2); + + reflowLargerGetLinesToRemove(lines, 2, 6, 99, NULL_CELL_DATA, false); + + assert.equal(l1.isWrapped, false); + }); }); }); diff --git a/src/common/buffer/BufferReflow.ts b/src/common/buffer/BufferReflow.ts index 2c0fb74ba..2599f059f 100644 --- a/src/common/buffer/BufferReflow.ts +++ b/src/common/buffer/BufferReflow.ts @@ -99,6 +99,11 @@ export function reflowLargerGetLinesToRemove(lines: CircularList, o } if (countToRemove > 0) { + wrappedLines[destLineIndex].isWrapped = false; + const lineAfterGroup = lines.get(y + wrappedLines.length); + if (lineAfterGroup) { + lineAfterGroup.isWrapped = false; + } toRemove.push(y + wrappedLines.length - countToRemove); // index toRemove.push(countToRemove); }