@xterm/xterm 5.4.0-beta.10 → 5.4.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/xterm.js +1 -1
- package/lib/xterm.js.map +1 -1
- package/package.json +1 -1
- package/src/common/InputHandler.ts +15 -19
- package/src/common/Types.d.ts +4 -4
- package/src/common/buffer/BufferLine.ts +17 -17
package/package.json
CHANGED
|
@@ -519,7 +519,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
519
519
|
|
|
520
520
|
// handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char
|
|
521
521
|
if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {
|
|
522
|
-
bufferRow.
|
|
522
|
+
bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);
|
|
523
523
|
}
|
|
524
524
|
|
|
525
525
|
let precedingJoinState = this._parser.precedingJoinState;
|
|
@@ -581,7 +581,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
581
581
|
}
|
|
582
582
|
// clear left over cells to the right
|
|
583
583
|
while (oldCol < cols) {
|
|
584
|
-
oldRow.
|
|
584
|
+
oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);
|
|
585
585
|
}
|
|
586
586
|
} else {
|
|
587
587
|
this._activeBuffer.x = cols - 1;
|
|
@@ -605,7 +605,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
605
605
|
bufferRow.addCodepointToCell(this._activeBuffer.x - offset,
|
|
606
606
|
code, chWidth);
|
|
607
607
|
for (let delta = chWidth - oldWidth; --delta >= 0; ) {
|
|
608
|
-
bufferRow.
|
|
608
|
+
bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);
|
|
609
609
|
}
|
|
610
610
|
continue;
|
|
611
611
|
}
|
|
@@ -613,17 +613,17 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
613
613
|
// insert mode: move characters to right
|
|
614
614
|
if (insertMode) {
|
|
615
615
|
// right shift cells according to the width
|
|
616
|
-
bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr)
|
|
616
|
+
bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));
|
|
617
617
|
// test last cell - since the last cell has only room for
|
|
618
618
|
// a halfwidth char any fullwidth shifted there is lost
|
|
619
619
|
// and will be set to empty cell
|
|
620
620
|
if (bufferRow.getWidth(cols - 1) === 2) {
|
|
621
|
-
bufferRow.
|
|
621
|
+
bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);
|
|
622
622
|
}
|
|
623
623
|
}
|
|
624
624
|
|
|
625
625
|
// write current char to buffer and advance cursor
|
|
626
|
-
bufferRow.
|
|
626
|
+
bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);
|
|
627
627
|
|
|
628
628
|
// fullwidth char - also set next cell to placeholder stub and advance cursor
|
|
629
629
|
// for graphemes bigger than fullwidth we can simply loop to zero
|
|
@@ -631,7 +631,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
631
631
|
if (chWidth > 0) {
|
|
632
632
|
while (--chWidth) {
|
|
633
633
|
// other than a regular empty cell a cell following a wide char has no width
|
|
634
|
-
bufferRow.
|
|
634
|
+
bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);
|
|
635
635
|
}
|
|
636
636
|
}
|
|
637
637
|
}
|
|
@@ -640,7 +640,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
640
640
|
|
|
641
641
|
// handle wide chars: reset cell to the right if it is second cell of a wide char
|
|
642
642
|
if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {
|
|
643
|
-
bufferRow.
|
|
643
|
+
bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);
|
|
644
644
|
}
|
|
645
645
|
|
|
646
646
|
this._dirtyRowTracker.markDirty(this._activeBuffer.y);
|
|
@@ -1145,7 +1145,6 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1145
1145
|
start,
|
|
1146
1146
|
end,
|
|
1147
1147
|
this._activeBuffer.getNullCell(this._eraseAttrData()),
|
|
1148
|
-
this._eraseAttrData(),
|
|
1149
1148
|
respectProtect
|
|
1150
1149
|
);
|
|
1151
1150
|
if (clearWrap) {
|
|
@@ -1366,8 +1365,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1366
1365
|
line.insertCells(
|
|
1367
1366
|
this._activeBuffer.x,
|
|
1368
1367
|
params.params[0] || 1,
|
|
1369
|
-
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1370
|
-
this._eraseAttrData()
|
|
1368
|
+
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1371
1369
|
);
|
|
1372
1370
|
this._dirtyRowTracker.markDirty(this._activeBuffer.y);
|
|
1373
1371
|
}
|
|
@@ -1393,8 +1391,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1393
1391
|
line.deleteCells(
|
|
1394
1392
|
this._activeBuffer.x,
|
|
1395
1393
|
params.params[0] || 1,
|
|
1396
|
-
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1397
|
-
this._eraseAttrData()
|
|
1394
|
+
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1398
1395
|
);
|
|
1399
1396
|
this._dirtyRowTracker.markDirty(this._activeBuffer.y);
|
|
1400
1397
|
}
|
|
@@ -1461,7 +1458,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1461
1458
|
const param = params.params[0] || 1;
|
|
1462
1459
|
for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {
|
|
1463
1460
|
const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;
|
|
1464
|
-
line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1461
|
+
line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));
|
|
1465
1462
|
line.isWrapped = false;
|
|
1466
1463
|
}
|
|
1467
1464
|
this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);
|
|
@@ -1494,7 +1491,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1494
1491
|
const param = params.params[0] || 1;
|
|
1495
1492
|
for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {
|
|
1496
1493
|
const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;
|
|
1497
|
-
line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1494
|
+
line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));
|
|
1498
1495
|
line.isWrapped = false;
|
|
1499
1496
|
}
|
|
1500
1497
|
this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);
|
|
@@ -1517,7 +1514,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1517
1514
|
const param = params.params[0] || 1;
|
|
1518
1515
|
for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {
|
|
1519
1516
|
const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;
|
|
1520
|
-
line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1517
|
+
line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));
|
|
1521
1518
|
line.isWrapped = false;
|
|
1522
1519
|
}
|
|
1523
1520
|
this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);
|
|
@@ -1540,7 +1537,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1540
1537
|
const param = params.params[0] || 1;
|
|
1541
1538
|
for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {
|
|
1542
1539
|
const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;
|
|
1543
|
-
line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1540
|
+
line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));
|
|
1544
1541
|
line.isWrapped = false;
|
|
1545
1542
|
}
|
|
1546
1543
|
this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);
|
|
@@ -1562,8 +1559,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|
|
1562
1559
|
line.replaceCells(
|
|
1563
1560
|
this._activeBuffer.x,
|
|
1564
1561
|
this._activeBuffer.x + (params.params[0] || 1),
|
|
1565
|
-
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1566
|
-
this._eraseAttrData()
|
|
1562
|
+
this._activeBuffer.getNullCell(this._eraseAttrData())
|
|
1567
1563
|
);
|
|
1568
1564
|
this._dirtyRowTracker.markDirty(this._activeBuffer.y);
|
|
1569
1565
|
}
|
package/src/common/Types.d.ts
CHANGED
|
@@ -235,11 +235,11 @@ export interface IBufferLine {
|
|
|
235
235
|
set(index: number, value: CharData): void;
|
|
236
236
|
loadCell(index: number, cell: ICellData): ICellData;
|
|
237
237
|
setCell(index: number, cell: ICellData): void;
|
|
238
|
-
|
|
238
|
+
setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void;
|
|
239
239
|
addCodepointToCell(index: number, codePoint: number, width: number): void;
|
|
240
|
-
insertCells(pos: number, n: number, ch: ICellData
|
|
241
|
-
deleteCells(pos: number, n: number, fill: ICellData
|
|
242
|
-
replaceCells(start: number, end: number, fill: ICellData,
|
|
240
|
+
insertCells(pos: number, n: number, ch: ICellData): void;
|
|
241
|
+
deleteCells(pos: number, n: number, fill: ICellData): void;
|
|
242
|
+
replaceCells(start: number, end: number, fill: ICellData, respectProtect?: boolean): void;
|
|
243
243
|
resize(cols: number, fill: ICellData): boolean;
|
|
244
244
|
cleanupMemory(): number;
|
|
245
245
|
fill(fillCellData: ICellData, respectProtect?: boolean): void;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from 'common/Types';
|
|
7
|
-
import { AttributeData
|
|
7
|
+
import { AttributeData } from 'common/buffer/AttributeData';
|
|
8
8
|
import { CellData } from 'common/buffer/CellData';
|
|
9
9
|
import { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from 'common/buffer/Constants';
|
|
10
10
|
import { stringFromCodePoint } from 'common/input/TextDecoder';
|
|
@@ -212,13 +212,13 @@ export class BufferLine implements IBufferLine {
|
|
|
212
212
|
* Since the input handler see the incoming chars as UTF32 codepoints,
|
|
213
213
|
* it gets an optimized access method.
|
|
214
214
|
*/
|
|
215
|
-
public
|
|
216
|
-
if (bg & BgFlags.HAS_EXTENDED) {
|
|
217
|
-
this._extendedAttrs[index] =
|
|
215
|
+
public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {
|
|
216
|
+
if (attrs.bg & BgFlags.HAS_EXTENDED) {
|
|
217
|
+
this._extendedAttrs[index] = attrs.extended;
|
|
218
218
|
}
|
|
219
219
|
this._data[index * CELL_SIZE + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);
|
|
220
|
-
this._data[index * CELL_SIZE + Cell.FG] = fg;
|
|
221
|
-
this._data[index * CELL_SIZE + Cell.BG] = bg;
|
|
220
|
+
this._data[index * CELL_SIZE + Cell.FG] = attrs.fg;
|
|
221
|
+
this._data[index * CELL_SIZE + Cell.BG] = attrs.bg;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
/**
|
|
@@ -253,12 +253,12 @@ export class BufferLine implements IBufferLine {
|
|
|
253
253
|
this._data[index * CELL_SIZE + Cell.CONTENT] = content;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
public insertCells(pos: number, n: number, fillCellData: ICellData
|
|
256
|
+
public insertCells(pos: number, n: number, fillCellData: ICellData): void {
|
|
257
257
|
pos %= this.length;
|
|
258
258
|
|
|
259
259
|
// handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char
|
|
260
260
|
if (pos && this.getWidth(pos - 1) === 2) {
|
|
261
|
-
this.
|
|
261
|
+
this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
if (n < this.length - pos) {
|
|
@@ -277,11 +277,11 @@ export class BufferLine implements IBufferLine {
|
|
|
277
277
|
|
|
278
278
|
// handle fullwidth at line end: reset last cell if it is first cell of a wide char
|
|
279
279
|
if (this.getWidth(this.length - 1) === 2) {
|
|
280
|
-
this.
|
|
280
|
+
this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
public deleteCells(pos: number, n: number, fillCellData: ICellData
|
|
284
|
+
public deleteCells(pos: number, n: number, fillCellData: ICellData): void {
|
|
285
285
|
pos %= this.length;
|
|
286
286
|
if (n < this.length - pos) {
|
|
287
287
|
const cell = new CellData();
|
|
@@ -301,21 +301,21 @@ export class BufferLine implements IBufferLine {
|
|
|
301
301
|
// - reset pos-1 if wide char
|
|
302
302
|
// - reset pos if width==0 (previous second cell of a wide char)
|
|
303
303
|
if (pos && this.getWidth(pos - 1) === 2) {
|
|
304
|
-
this.
|
|
304
|
+
this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);
|
|
305
305
|
}
|
|
306
306
|
if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {
|
|
307
|
-
this.
|
|
307
|
+
this.setCellFromCodepoint(pos, 0, 1, fillCellData);
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
-
public replaceCells(start: number, end: number, fillCellData: ICellData,
|
|
311
|
+
public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {
|
|
312
312
|
// full branching on respectProtect==true, hopefully getting fast JIT for standard case
|
|
313
313
|
if (respectProtect) {
|
|
314
314
|
if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {
|
|
315
|
-
this.
|
|
315
|
+
this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);
|
|
316
316
|
}
|
|
317
317
|
if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {
|
|
318
|
-
this.
|
|
318
|
+
this.setCellFromCodepoint(end, 0, 1, fillCellData);
|
|
319
319
|
}
|
|
320
320
|
while (start < end && start < this.length) {
|
|
321
321
|
if (!this.isProtected(start)) {
|
|
@@ -328,11 +328,11 @@ export class BufferLine implements IBufferLine {
|
|
|
328
328
|
|
|
329
329
|
// handle fullwidth at start: reset cell one to the left if start is second cell of a wide char
|
|
330
330
|
if (start && this.getWidth(start - 1) === 2) {
|
|
331
|
-
this.
|
|
331
|
+
this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);
|
|
332
332
|
}
|
|
333
333
|
// handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char
|
|
334
334
|
if (end < this.length && this.getWidth(end - 1) === 2) {
|
|
335
|
-
this.
|
|
335
|
+
this.setCellFromCodepoint(end, 0, 1, fillCellData);
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
while (start < end && start < this.length) {
|