Fallback to default_ansi_colors when running headless terminal
This commit is contained in:
@@ -74,7 +74,7 @@ describe('xterm-addon-serialize', () => {
|
|||||||
terminal = new Terminal({ cols: 10, rows: 2, allowProposedApi: true });
|
terminal = new Terminal({ cols: 10, rows: 2, allowProposedApi: true });
|
||||||
terminal.loadAddon(serializeAddon);
|
terminal.loadAddon(serializeAddon);
|
||||||
|
|
||||||
(terminal as any)._core._themeService = new ThemeService(new OptionsService({}));
|
(terminal as any)._core._themeService = new ThemeService((terminal as any)._core.optionsService);
|
||||||
(terminal as any)._core._selectionService = new TestSelectionService((terminal as any)._core._bufferService);
|
(terminal as any)._core._selectionService = new TestSelectionService((terminal as any)._core._bufferService);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -205,5 +205,25 @@ describe('xterm-addon-serialize', () => {
|
|||||||
});
|
});
|
||||||
assert.equal((output.match(/color: #ffffff; background-color: #000000; font-family: courier-new, courier, monospace; font-size: 15px;/g) || []).length, 1, output);
|
assert.equal((output.match(/color: #ffffff; background-color: #000000; font-family: courier-new, courier, monospace; font-size: 15px;/g) || []).length, 1, output);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('cells with custom color styling', async () => {
|
||||||
|
terminal.options.theme.black = '#ffa500';
|
||||||
|
terminal.options.theme = { ... terminal.options.theme };
|
||||||
|
|
||||||
|
await writeP(terminal, ' ' + sgr('38;5;0') + 'terminal' + sgr('39') + ' ');
|
||||||
|
|
||||||
|
const output = serializeAddon.serializeAsHTML();
|
||||||
|
assert.equal((output.match(/<span style='color: #ffa500;'>terminal<\/span>/g) || []).length, 1, output);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('cells with color styling - xterm headless', async () => {
|
||||||
|
// a headless terminal doesn't have a themeservice
|
||||||
|
(terminal as any)._core._themeService = undefined;
|
||||||
|
|
||||||
|
await writeP(terminal, ' ' + sgr('38;5;46') + 'terminal' + sgr('39') + ' ');
|
||||||
|
|
||||||
|
const output = serializeAddon.serializeAsHTML();
|
||||||
|
assert.equal((output.match(/<span style='color: #00ff00;'>terminal<\/span>/g) || []).length, 1, output);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
|
|
||||||
import { Terminal, ITerminalAddon, IBuffer, IBufferCell, IBufferRange } from 'xterm';
|
import { Terminal, ITerminalAddon, IBuffer, IBufferCell, IBufferRange } from 'xterm';
|
||||||
import { IColorSet } from 'browser/Types';
|
import { IColorSet } from 'browser/Types';
|
||||||
import { IAttributeData } from 'common/Types';
|
import { IAttributeData, IColor } from 'common/Types';
|
||||||
|
import { DEFAULT_ANSI_COLORS } from 'browser/services/ThemeService';
|
||||||
|
|
||||||
function constrain(value: number, low: number, high: number): number {
|
function constrain(value: number, low: number, high: number): number {
|
||||||
return Math.max(low, Math.min(value, high));
|
return Math.max(low, Math.min(value, high));
|
||||||
@@ -534,7 +535,7 @@ export class HTMLSerializeHandler extends BaseSerializeHandler {
|
|||||||
|
|
||||||
private _htmlContent = '';
|
private _htmlContent = '';
|
||||||
|
|
||||||
private _colors: IColorSet;
|
private _ansiColors: Readonly<IColor[]>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
buffer: IBuffer,
|
buffer: IBuffer,
|
||||||
@@ -543,8 +544,13 @@ export class HTMLSerializeHandler extends BaseSerializeHandler {
|
|||||||
) {
|
) {
|
||||||
super(buffer);
|
super(buffer);
|
||||||
|
|
||||||
// https://github.com/xtermjs/xterm.js/issues/3601
|
// For xterm headless: fallback to ansi colors
|
||||||
this._colors = (_terminal as any)._core._themeService.colors;
|
if ((_terminal as any)._core._themeService) {
|
||||||
|
this._ansiColors = (_terminal as any)._core._themeService.colors.ansi;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._ansiColors = DEFAULT_ANSI_COLORS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _padStart(target: string, targetLength: number, padString: string): string {
|
private _padStart(target: string, targetLength: number, padString: string): string {
|
||||||
@@ -600,7 +606,7 @@ export class HTMLSerializeHandler extends BaseSerializeHandler {
|
|||||||
return rgb.map(x => this._padStart(x.toString(16), 2, '0')).join('');
|
return rgb.map(x => this._padStart(x.toString(16), 2, '0')).join('');
|
||||||
}
|
}
|
||||||
if (isFg ? cell.isFgPalette() : cell.isBgPalette()) {
|
if (isFg ? cell.isFgPalette() : cell.isBgPalette()) {
|
||||||
return this._colors.ansi[color].css;
|
return this._ansiColors[color].css;
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user