remove BufferCellApiView

This commit is contained in:
javacs3
2020-01-09 21:15:30 +08:00
parent a4efefbf5e
commit 56f4c3d6ae
9 changed files with 30 additions and 90 deletions
+2 -2
View File
@@ -320,13 +320,13 @@ export class SearchAddon implements ITerminalAddon {
break;
}
// Adjust the searchIndex to normalize emoji into single chars
const char = cell.char;
const char = cell.getChars();
if (char.length > 1) {
resultIndex -= char.length - 1;
}
// Adjust the searchIndex for empty characters following wide unicode
// chars (eg. CJK)
const charWidth = cell.width;
const charWidth = cell.getWidth();
if (charWidth === 0) {
resultIndex++;
}
@@ -126,7 +126,7 @@ describe('SerializeAddon', () => {
const rows = 32;
const cols = 10;
const lines = newArray<string>(
(index: number) => digitsString(cols, index, `\x1b[38;5;${index}m`),
(index: number) => digitsString(cols, index, `\x1b[38;5;${16 + index}m`),
rows
);
await writeSync(page, lines.join('\\r\\n'));
@@ -256,7 +256,7 @@ describe('SerializeAddon', () => {
assert.equal(await page.evaluate(`serializeAddon.serialize();`), lines.join('\r\n'));
});
it('serialize tabs correctly', async () => {
it('serialize tabs correctly', async () => {
const lines = [
'a\tb',
'aa\tc',
@@ -311,9 +311,9 @@ const NORMAL = '0';
const FG_P16_RED = '31';
const FG_P16_GREEN = '32';
const FG_P16_YELLOW = '33';
const FG_P256_RED = '38;5;1';
const FG_P256_GREEN = '38;5;2';
const FG_P256_YELLOW = '38;5;3';
const FG_P256_RED = '38;5;196';
const FG_P256_GREEN = '38;5;46';
const FG_P256_YELLOW = '38;5;226';
const FG_RGB_RED = '38;2;255;0;0';
const FG_RGB_GREEN = '38;2;0;255;0';
const FG_RGB_YELLOW = '38;2;255;255;0';
@@ -323,9 +323,9 @@ const FG_RESET = '39';
const BG_P16_RED = '41';
const BG_P16_GREEN = '42';
const BG_P16_YELLOW = '43';
const BG_P256_RED = '48;5;1';
const BG_P256_GREEN = '48;5;2';
const BG_P256_YELLOW = '48;5;3';
const BG_P256_RED = '48;5;196';
const BG_P256_GREEN = '48;5;46';
const BG_P256_YELLOW = '48;5;226';
const BG_RGB_RED = '48;2;255;0;0';
const BG_RGB_GREEN = '48;2;0;255;0';
const BG_RGB_YELLOW = '48;2;255;255;0';
@@ -104,15 +104,19 @@ class StringSerializeHandler extends BaseSerializeHandler {
if (fgChanged) {
const color = cell.getFgColor();
if (cell.isFgRGB()) { sgrSeq.push(38, 2, (color >>> 16) & 0xFF, (color >>> 8) & 0xFF, color & 0xFF); }
else if (cell.isFgPalette256()) { sgrSeq.push(38, 5, color); }
else if (cell.isFgPalette16()) { sgrSeq.push(color & 8 ? 90 + (color & 7) : 30 + (color & 7)); }
else if (cell.isFgPalette()) {
if (color >= 16) { sgrSeq.push(38, 5, color); }
else { sgrSeq.push(color & 8 ? 90 + (color & 7) : 30 + (color & 7)); }
}
else { sgrSeq.push(39); }
}
if (bgChanged) {
const color = cell.getBgColor();
if (cell.isBgRGB()) { sgrSeq.push(48, 2, (color >>> 16) & 0xFF, (color >>> 8) & 0xFF, color & 0xFF); }
else if (cell.isBgPalette256()) { sgrSeq.push(48, 5, color); }
else if (cell.isBgPalette16()) { sgrSeq.push(color & 8 ? 100 + (color & 7) : 40 + (color & 7)); }
else if (cell.isBgPalette()) {
if (color >= 16) { sgrSeq.push(48, 5, color); }
else { sgrSeq.push(color & 8 ? 100 + (color & 7) : 40 + (color & 7)); }
}
else { sgrSeq.push(49); }
}
if (flagsChanged) {
@@ -133,14 +137,14 @@ class StringSerializeHandler extends BaseSerializeHandler {
// Count number of null cells encountered after the last non-null cell and move the cursor
// if a non-null cell is found (eg. \t or cursor move)
if (cell.char === '') {
if (cell.getChars() === '') {
this._nullCellCount++;
} else if (this._nullCellCount > 0) {
this._currentRow += `\x1b[${this._nullCellCount}C`;
this._nullCellCount = 0;
}
this._currentRow += cell.char;
this._currentRow += cell.getChars();
}
protected _serializeString(): string {
@@ -258,7 +258,7 @@ export class GlyphRenderer {
if (!line) {
line = terminal.buffer.getLine(row);
}
const chars = line!.getCell(x)!.char;
const chars = line!.getCell(x)!.getChars();
this._updateCell(this._vertices.selectionAttributes, x, y, model.cells[offset], bg, model.cells[offset + RENDER_MODEL_FG_OFFSET], chars);
} else {
this._updateCell(this._vertices.selectionAttributes, x, y, model.cells[offset], bg, model.cells[offset + RENDER_MODEL_FG_OFFSET]);
+1
View File
@@ -93,6 +93,7 @@ export interface IAttributeData {
isBgPalette(): boolean;
isFgDefault(): boolean;
isBgDefault(): boolean;
isAttributeDefault(): boolean;
// colors
getFgColor(): number;
+1
View File
@@ -47,6 +47,7 @@ export class AttributeData implements IAttributeData {
public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }
public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }
public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }
public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }
// colors
public getFgColor(): number {
+2 -12
View File
@@ -116,12 +116,7 @@ export const enum FgFlags {
BOLD = 0x8000000,
UNDERLINE = 0x10000000,
BLINK = 0x20000000,
INVISIBLE = 0x40000000,
/**
* bit 27..31 (32th bit unused)
*/
FM_MASK = 0x7C000000
INVISIBLE = 0x40000000
}
export const enum BgFlags {
@@ -129,10 +124,5 @@ export const enum BgFlags {
* bit 27..32 (upper 4 unused)
*/
ITALIC = 0x4000000,
DIM = 0x8000000,
/**
* bit 27..32 (upper 4 unused)
*/
FM_MASK = 0xFC000000
DIM = 0x8000000
}
+5 -43
View File
@@ -5,9 +5,8 @@
import { Terminal as ITerminalApi, ITerminalOptions, IMarker, IDisposable, ILinkMatcherOptions, ITheme, ILocalizableStrings, ITerminalAddon, ISelectionPosition, IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi, IParser, IFunctionIdentifier } from 'xterm';
import { ITerminal } from '../Types';
import { IBufferLine } from 'common/Types';
import { IBufferLine, ICellData } from 'common/Types';
import { IBuffer } from 'common/buffer/Types';
import { Attributes } from 'common/buffer/Constants';
import { CellData } from 'common/buffer/CellData';
import { Terminal as TerminalCore } from '../Terminal';
import * as Strings from '../browser/LocalizableStrings';
@@ -203,7 +202,7 @@ class BufferApiView implements IBufferApi {
}
return new BufferLineApiView(line);
}
public getNullCell(): IBufferCellApi { return new BufferCellApiView(new CellData()); }
public getNullCell(): IBufferCellApi { return new CellData(); }
}
class BufferLineApiView implements IBufferLineApi {
@@ -211,59 +210,22 @@ class BufferLineApiView implements IBufferLineApi {
public get isWrapped(): boolean { return this._line.isWrapped; }
public get length(): number { return this._line.length; }
public getCell(x: number, cell?: BufferCellApiView): IBufferCellApi | undefined {
public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {
if (x < 0 || x >= this._line.length) {
return undefined;
}
if (cell) {
this._line.loadCell(x, cell.cell);
this._line.loadCell(x, <ICellData>cell);
return cell;
}
return new BufferCellApiView(this._line.loadCell(x, new CellData()));
return this._line.loadCell(x, new CellData());
}
public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {
return this._line.translateToString(trimRight, startColumn, endColumn);
}
}
class BufferCellApiView implements IBufferCellApi {
constructor(public cell: CellData) {}
public get char(): string { return this.cell.getChars(); }
public get width(): number { return this.cell.getWidth(); }
public getWidth(): number { return this.cell.getWidth(); }
public getChars(): string { return this.cell.getChars(); }
public getCode(): number { return this.cell.getCode(); }
public isInverse(): number { return this.cell.isInverse(); }
public isBold(): number { return this.cell.isBold(); }
public isUnderline(): number { return this.cell.isUnderline(); }
public isBlink(): number { return this.cell.isBlink(); }
public isInvisible(): number { return this.cell.isInvisible(); }
public isItalic(): number { return this.cell.isItalic(); }
public isDim(): number { return this.cell.isDim(); }
public getFgColorMode(): number { return this.cell.getFgColorMode(); }
public getBgColorMode(): number { return this.cell.getBgColorMode(); }
public isFgRGB(): boolean { return this.cell.isFgRGB(); }
public isBgRGB(): boolean { return this.cell.isBgRGB(); }
public isFgPalette(): boolean { return this.cell.isFgPalette(); }
public isBgPalette(): boolean { return this.cell.isBgPalette(); }
public isFgPalette16(): boolean { return this.cell.getFgColorMode() === Attributes.CM_P16; }
public isBgPalette16(): boolean { return this.cell.getBgColorMode() === Attributes.CM_P16; }
public isFgPalette256(): boolean { return this.cell.getFgColorMode() === Attributes.CM_P256; }
public isBgPalette256(): boolean { return this.cell.getBgColorMode() === Attributes.CM_P256; }
public isAttributeDefault(): boolean { return this.cell.fg === 0 && this.cell.bg === 0; }
public isFgDefault(): boolean { return this.cell.isFgDefault(); }
public isBgDefault(): boolean { return this.cell.isBgDefault(); }
public getFgColor(): number { return this.cell.getFgColor(); }
public getBgColor(): number { return this.cell.getBgColor(); }
}
class ParserApi implements IParser {
constructor(private _core: ITerminal) {}
-18
View File
@@ -1007,20 +1007,6 @@ declare module 'xterm' {
* Represents a single cell in the terminal's buffer.
*/
interface IBufferCell {
/**
* The character within the cell.
*/
readonly char: string;
/**
* The width of the character. Some examples:
*
* - This is `1` for most cells.
* - This is `2` for wide character like CJK glyphs.
* - This is `0` for cells immediately following cells with a width of `2`.
*/
readonly width: number;
getWidth(): number;
getChars(): string;
getCode(): number;
@@ -1042,10 +1028,6 @@ declare module 'xterm' {
isBgRGB(): boolean;
isFgPalette(): boolean;
isBgPalette(): boolean;
isFgPalette16(): boolean;
isBgPalette16(): boolean;
isFgPalette256(): boolean;
isBgPalette256(): boolean;
isAttributeDefault(): boolean;
isFgDefault(): boolean;
isBgDefault(): boolean;