Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
97a5069
Refactor so isWrapped isn't public writeable.
PerBothner Mar 31, 2026
1c58f1f
Merge branch 'master' into setWrapped
PerBothner Apr 6, 2026
e9ea22f
Fix MockBuffer.setWrapped.
PerBothner Apr 6, 2026
bd79ccc
Move "data" from BufferLine to new LogicalLine class.
PerBothner Apr 7, 2026
45d9f7a
Merge branch 'master' into LogicalLine
PerBothner May 4, 2026
ab5d344
Merge remote-tracking branch 'upstream/master' into LogicalLine
PerBothner Jun 7, 2026
b469616
Un-remove whitespace to match upsteam.
PerBothner Jun 7, 2026
d41cc7d
Merge branch 'master' into LogicalLine
PerBothner Aug 14, 2026
b1edb57
Optimize _resizeData to need fewer (re-)allocations
PerBothner Aug 16, 2026
69bb5a2
Merge remote-tracking branch 'upstream/master' into LogicalLine
PerBothner Aug 22, 2026
ce06560
New LineBuffer.setCellsFromCodepoints
PerBothner Aug 24, 2026
7a3fa48
Allocate sucessive lines in normal buffer from large block.
PerBothner Aug 28, 2026
d86580c
Merge remote-tracking branch 'upstream/master' into LogicalLine
PerBothner Aug 28, 2026
fbc57f6
Minor optimization - don't check for url links on each character
PerBothner Aug 29, 2026
3ce563c
Use recycled lines from CircularList trimming
PerBothner Aug 29, 2026
1493c24
Merge remote-tracking branch 'upstream/master' into LogicalLine
PerBothner Aug 31, 2026
1ccc47e
Use new COLOR_MASK constant when setting LogicalLine's backgroundColor.
PerBothner Sep 1, 2026
a3be9ce
Fix missing addition of LogicalLine._dataStart in setCellFromCodepoint.
PerBothner Sep 1, 2026
b2a36f5
Change getExtended to return undefined when there is no ExtendedAttrs
PerBothner Sep 1, 2026
e53f2d3
Fix issue in setCellFromCodepoint reported by lint
PerBothner Sep 1, 2026
6ce5d6b
Fixes to integration tests.
PerBothner Sep 1, 2026
95b05e8
Move BufferColumn and LogicalColumn to Types.ts.
PerBothner Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions addons/addon-image/test/ImageAddon.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ test.describe('ImageAddon', () => {
);
}
// bufferline privates
strictEqual(await ctx.page.evaluate('window.term._core.buffer.lines.get(0)._data instanceof Uint32Array'), true);
strictEqual(await ctx.page.evaluate('window.term._core.buffer.lines.get(0)._extendedAttrs instanceof Object'), true);
strictEqual(await ctx.page.evaluate('window.term._core.buffer.lines.get(0)._logicalLine._data instanceof Uint32Array'), true);
strictEqual(await ctx.page.evaluate('window.term._core.buffer.lines.get(0)._logicalLine._extendedAttrs instanceof Object'), true);
// inputhandler privates
strictEqual(await ctx.page.evaluate('window.term._core._inputHandler._curAttrData.constructor.name'), '_AttributeData');
strictEqual(await ctx.page.evaluate('window.term._core._inputHandler._parser.constructor.name'), 'EscapeSequenceParser');
Expand Down
22 changes: 14 additions & 8 deletions addons/addon-serialize/test/SerializeAddon.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,20 @@ test.describe('SerializeAddon', () => {
for (let i = 0; i < buffer.length; i++) {
// Do this intentionally to get content of underlining source
const bufferLine = buffer.getLine(i)._line;
lines.push(JSON.stringify(bufferLine, (key, value) => {
// BufferLine caches are internal/transient and can legitimately differ
// across equivalent terminal states.
if (key === '_stringCache' || key === '_stringCacheEntryRef') {
return undefined;
}
return value;
}));
if (bufferLine.isWrapped) {
lines.push({ startColumn: bufferLine.startColumn, length: bufferLine.length});
} else {
const logical = bufferLine.logical();
lines.push(JSON.stringify(logical, (key, value) => {
if (key === 'firstBufferLine' ) {
return undefined;
}
if (key === '_data') {
return new Uint32Array(value.buffer, 0, logical.length * 3);
}
return value;
}));
}
}
return {
x: buffer.cursorX,
Expand Down
6 changes: 3 additions & 3 deletions src/browser/OscLinkProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('OscLinkProvider', () => {
setUrl(line1, 2, 'bbb', 1);
setUrl(line2, 0, 'cccc', 1);
setText(line2, 4, 'x');
line2!.isWrapped = true;
bufferService.buffer.setWrapped(1, true);

const links = await getLinks(provider, 2);
assert.lengthOf(links, 1);
Expand All @@ -78,7 +78,7 @@ describe('OscLinkProvider', () => {
setUrl(line1, 0, 'aaaaa', 1);
setUrl(line2, 0, 'bb', 1);
setText(line2, 2, 'ccc');
line2!.isWrapped = true;
bufferService.buffer.setWrapped(1, true);

const links = await getLinks(provider, 1);
assert.lengthOf(links, 1);
Expand All @@ -94,7 +94,7 @@ describe('OscLinkProvider', () => {
setUrl(line1, 0, 'aaaaa', 1);
setUrl(line2, 0, 'bbb', 2);
setText(line2, 3, 'cc');
line2!.isWrapped = true;
bufferService.buffer.setWrapped(1, true);

const links = await getLinks(provider, 1);
assert.lengthOf(links, 1);
Expand Down
3 changes: 3 additions & 0 deletions src/browser/TestUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ export class MockBuffer implements IBuffer {
public clearAllMarkers(): void {
throw new Error('Method not implemented.');
}
public setWrapped(row: number, value: boolean): void {
throw new Error('Method not implemented.');
}
}

export class MockRenderer implements IRenderer {
Expand Down
12 changes: 6 additions & 6 deletions src/browser/services/SelectionService.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ describe('SelectionService', () => {
it('should expand upwards or downards for wrapped lines', () => {
buffer.lines.set(0, stringToRow(' foo'));
buffer.lines.set(1, stringToRow('bar '));
buffer.lines.get(1)!.isWrapped = true;
buffer.setWrapped(1, true);
selectionService.selectWordAt([1, 1]);
assert.equal(selectionService.selectionText, 'foobar');
selectionService.model.clearSelection();
Expand All @@ -210,10 +210,10 @@ describe('SelectionService', () => {
buffer.lines.set(2, stringToRow('bbbbbbbbbbbbbbbbbbbb'));
buffer.lines.set(3, stringToRow('cccccccccccccccccccc'));
buffer.lines.set(4, stringToRow('bar '));
buffer.lines.get(1)!.isWrapped = true;
buffer.lines.get(2)!.isWrapped = true;
buffer.lines.get(3)!.isWrapped = true;
buffer.lines.get(4)!.isWrapped = true;
buffer.setWrapped(1, true);
buffer.setWrapped(2, true);
buffer.setWrapped(3, true);
buffer.setWrapped(4, true);
selectionService.selectWordAt([18, 0]);
assert.equal(selectionService.selectionText, expectedText);
selectionService.model.clearSelection();
Expand Down Expand Up @@ -352,8 +352,8 @@ describe('SelectionService', () => {
it('should select the entire wrapped line', () => {
buffer.lines.set(0, stringToRow('foo'));
const line2 = stringToRow('bar');
line2.isWrapped = true;
buffer.lines.set(1, line2);
buffer.setWrapped(1, true);
selectionService.selectLineAt(0);
assert.equal(selectionService.selectionText, 'foobar', 'The selected text is correct');
assert.deepEqual(selectionService.model.selectionStart, [0, 0]);
Expand Down
8 changes: 6 additions & 2 deletions src/common/InputHandler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,10 @@ describe('InputHandler', () => {
await resetToBaseState();
bufferService.buffer.y = 2;
bufferService.buffer.x = 40;
inputHandler.eraseInLine(Params.fromArray([0]));
assert.equal(bufferService.buffer.lines.get(2)!.isWrapped, true);
assert.equal(bufferService.buffer.lines.get(3)!.isWrapped, true);
inputHandler.eraseInLine(Params.fromArray([0]));
assert.equal(bufferService.buffer.lines.get(2)!.isWrapped, true);assert.equal(bufferService.buffer.lines.get(3)!.isWrapped, false);
bufferService.buffer.y = 2;
bufferService.buffer.x = 0;
inputHandler.eraseInLine(Params.fromArray([0]));
Expand All @@ -473,14 +475,16 @@ describe('InputHandler', () => {
bufferService.buffer.y = 2;
bufferService.buffer.x = 40;
inputHandler.eraseInLine(Params.fromArray([1]));
assert.equal(bufferService.buffer.lines.get(2)!.isWrapped, true);
assert.equal(bufferService.buffer.lines.get(2)!.isWrapped, false);
assert.equal(bufferService.buffer.lines.get(3)!.isWrapped, true);

// params[2] - erase complete line
await resetToBaseState();
bufferService.buffer.y = 2;
bufferService.buffer.x = 40;
inputHandler.eraseInLine(Params.fromArray([2]));
assert.equal(bufferService.buffer.lines.get(2)!.isWrapped, false);
assert.equal(bufferService.buffer.lines.get(3)!.isWrapped, false);
});
it('ED2 with scrollOnEraseInDisplay turned on', async () => {
const inputHandler = new TestInputHandler(
Expand Down
Loading
Loading