Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2f5c424a8 | ||
|
|
e9c648f519 | ||
|
|
60bae9528d |
@@ -495,6 +495,21 @@ describe('BufferLine', function(): void {
|
||||
assert.deepEqual(columns, [0]);
|
||||
});
|
||||
});
|
||||
describe('copyCellsFrom', () => {
|
||||
it('should only move combined data within the copied range', () => {
|
||||
const src = new TestBufferLine(10, NULL_CELL_DATA, false);
|
||||
src.setCell(1, createCellData(1, 'a', 1));
|
||||
src.addCodepointToCell(1, '\u0301'.charCodeAt(0), 0);
|
||||
src.setCell(5, createCellData(1, 'z', 1));
|
||||
src.addCodepointToCell(5, '\u0301'.charCodeAt(0), 0);
|
||||
|
||||
const dest = new TestBufferLine(10, NULL_CELL_DATA, false);
|
||||
dest.copyCellsFrom(src, 0, 0, 2, false);
|
||||
|
||||
assert.property(dest.combined, '1');
|
||||
assert.notProperty(dest.combined, '5');
|
||||
});
|
||||
});
|
||||
describe('addCharToCell', () => {
|
||||
it('should set width to 1 for empty cell', () => {
|
||||
const line = new TestBufferLine(3, NULL_CELL_DATA, false);
|
||||
|
||||
@@ -609,9 +609,13 @@ export class BufferLine implements IBufferLine {
|
||||
const srcStart = srcCol * Constants.CELL_INDICIES;
|
||||
if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {
|
||||
this._combined[destCol] = src._combined[srcCol];
|
||||
} else {
|
||||
delete this._combined[destCol];
|
||||
}
|
||||
if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {
|
||||
this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];
|
||||
} else {
|
||||
delete this._extendedAttrs[destCol];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<BufferLine>(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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -99,6 +99,11 @@ export function reflowLargerGetLinesToRemove(lines: CircularList<IBufferLine>, 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user