Update to xterm 5

Mainly just canvas renderer not yet hooked up
This commit is contained in:
Daniel Imms 2022-08-01 04:57:27 -07:00
parent dbae720630
commit 852b4ae5f8
No known key found for this signature in database
GPG key ID: E5CF412B63651C69
10 changed files with 91 additions and 80 deletions

View file

@ -86,12 +86,12 @@
"vscode-proxy-agent": "^0.12.0",
"vscode-regexpp": "^3.1.0",
"vscode-textmate": "7.0.1",
"xterm": "4.20.0-beta.20",
"xterm": "5.0.0-beta.32",
"xterm-addon-search": "0.10.0-beta.3",
"xterm-addon-serialize": "0.8.0-beta.3",
"xterm-addon-unicode11": "0.4.0-beta.3",
"xterm-addon-webgl": "0.13.0-beta.9",
"xterm-headless": "4.20.0-beta.20",
"xterm-addon-webgl": "0.13.0-beta.32",
"xterm-headless": "5.0.0-beta.5",
"yauzl": "^2.9.2",
"yazl": "^2.4.3"
},

View file

@ -24,12 +24,12 @@
"vscode-proxy-agent": "^0.12.0",
"vscode-regexpp": "^3.1.0",
"vscode-textmate": "7.0.1",
"xterm": "4.20.0-beta.20",
"xterm": "5.0.0-beta.32",
"xterm-addon-search": "0.10.0-beta.3",
"xterm-addon-serialize": "0.8.0-beta.3",
"xterm-addon-unicode11": "0.4.0-beta.3",
"xterm-addon-webgl": "0.13.0-beta.9",
"xterm-headless": "4.20.0-beta.20",
"xterm-addon-webgl": "0.13.0-beta.32",
"xterm-headless": "5.0.0-beta.5",
"yauzl": "^2.9.2",
"yazl": "^2.4.3"
},

View file

@ -11,9 +11,9 @@
"tas-client-umd": "0.1.6",
"vscode-oniguruma": "1.6.1",
"vscode-textmate": "7.0.1",
"xterm": "4.20.0-beta.20",
"xterm": "5.0.0-beta.32",
"xterm-addon-search": "0.10.0-beta.3",
"xterm-addon-unicode11": "0.4.0-beta.3",
"xterm-addon-webgl": "0.13.0-beta.9"
"xterm-addon-webgl": "0.13.0-beta.32"
}
}

View file

@ -78,12 +78,12 @@ xterm-addon-unicode11@0.4.0-beta.3:
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
xterm-addon-webgl@0.13.0-beta.9:
version "0.13.0-beta.9"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.9.tgz#66a9ac142ae347d0548abbf4e66bb2f35f415adb"
integrity sha512-x1o1tpCqIsICvhcRsZs+BLcwUIdizYS2G4TIH0KBnUDiSN+oSqpVBQNG8qKg56xbK8WtpdbQ9dLB7JR2W5cX0g==
xterm-addon-webgl@0.13.0-beta.32:
version "0.13.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.32.tgz#ae7335f788ae611733e03f6ca38280ab7b86d212"
integrity sha512-xOudNzYXaRh9QZ+IigXM5EB3bM8l3/F8F35EpJRYvvsylVxiB6Km8X8l7+nxlWt+uYdnHZs0ka2rvtL8kOP/uw==
xterm@4.20.0-beta.20:
version "4.20.0-beta.20"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.20.0-beta.20.tgz#2979a31839f7b8ee3ffe4f063b40c02facdb0fed"
integrity sha512-ltDtTquH+33tXQPFSDqenbgz6LkvIob6l6Rac85L4aX5Ve7P3ubVLrq+lTFJGQn3iiwGqNmnE1t1EUuGhxsXcQ==
xterm@5.0.0-beta.32:
version "5.0.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.32.tgz#62bb9902429c0055fd2fd85c9eecfbf1756ed31c"
integrity sha512-OAM1GaBs/chK63Cr86XbVhfVCLLXLpNxxFrv3RK9xoyb9dwiY3gaMxK9jeGzTnrbGLWJb+k5nxaC0rx2YsHvUA==

View file

@ -803,20 +803,20 @@ xterm-addon-unicode11@0.4.0-beta.3:
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
xterm-addon-webgl@0.13.0-beta.9:
version "0.13.0-beta.9"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.9.tgz#66a9ac142ae347d0548abbf4e66bb2f35f415adb"
integrity sha512-x1o1tpCqIsICvhcRsZs+BLcwUIdizYS2G4TIH0KBnUDiSN+oSqpVBQNG8qKg56xbK8WtpdbQ9dLB7JR2W5cX0g==
xterm-addon-webgl@0.13.0-beta.32:
version "0.13.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.32.tgz#ae7335f788ae611733e03f6ca38280ab7b86d212"
integrity sha512-xOudNzYXaRh9QZ+IigXM5EB3bM8l3/F8F35EpJRYvvsylVxiB6Km8X8l7+nxlWt+uYdnHZs0ka2rvtL8kOP/uw==
xterm-headless@4.20.0-beta.20:
version "4.20.0-beta.20"
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-4.20.0-beta.20.tgz#da2d8131b02d6f1e37f47cc17e578f2c2980fbb6"
integrity sha512-JK4jUIiUH7TdzvMrpfDnbGxTuC4s7byjqnMHR8+gIpY8qCFjz0xcMFSbp+ZshxGwVyziI4jtJqTHZjFToT2/kw==
xterm-headless@5.0.0-beta.5:
version "5.0.0-beta.5"
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.0.0-beta.5.tgz#e29b6c5081f31f887122b7263ba996b0c46b3c22"
integrity sha512-CMQ1+prBNF92oBMeZzc2rfTcmOaCGfwwSaoPYNTjyziZT6mZsEg7amajYkb0YAnqJ29MFm4kPGZbU78/dX4k2A==
xterm@4.20.0-beta.20:
version "4.20.0-beta.20"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.20.0-beta.20.tgz#2979a31839f7b8ee3ffe4f063b40c02facdb0fed"
integrity sha512-ltDtTquH+33tXQPFSDqenbgz6LkvIob6l6Rac85L4aX5Ve7P3ubVLrq+lTFJGQn3iiwGqNmnE1t1EUuGhxsXcQ==
xterm@5.0.0-beta.32:
version "5.0.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.32.tgz#62bb9902429c0055fd2fd85c9eecfbf1756ed31c"
integrity sha512-OAM1GaBs/chK63Cr86XbVhfVCLLXLpNxxFrv3RK9xoyb9dwiY3gaMxK9jeGzTnrbGLWJb+k5nxaC0rx2YsHvUA==
yallist@^4.0.0:
version "4.0.0"

View file

@ -789,7 +789,12 @@ class XtermSerializer implements ITerminalSerializer {
private _rawReviveBuffer: string | undefined,
logService: ILogService
) {
this._xterm = new XtermTerminal({ cols, rows, scrollback });
this._xterm = new XtermTerminal({
cols,
rows,
scrollback,
allowProposedApi: true
});
if (reviveBufferWithRestoreMessage) {
this._xterm.writeln(reviveBufferWithRestoreMessage);
}
@ -815,7 +820,7 @@ class XtermSerializer implements ITerminalSerializer {
const serialize = new (await this._getSerializeConstructor());
this._xterm.loadAddon(serialize);
const options: ISerializeOptions = {
scrollback: this._xterm.getOption('scrollback')
scrollback: this._xterm.options.scrollback
};
if (normalBufferOnly) {
options.excludeAltBuffer = true;

View file

@ -1249,7 +1249,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
// If IShellLaunchConfig.waitOnExit was true and the process finished before the terminal
// panel was initialized.
if (xterm.raw.getOption('disableStdin')) {
if (xterm.raw.options.disableStdin) {
this._attachPressAnyKeyToCloseListener(xterm.raw);
}
}

View file

@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import type { IBuffer, IMarker, ITheme, RendererType, Terminal as RawXtermTerminal } from 'xterm';
import type { IBuffer, IMarker, ITheme, Terminal as RawXtermTerminal } from 'xterm';
import type { ISearchOptions, SearchAddon as SearchAddonType } from 'xterm-addon-search';
import type { Unicode11Addon as Unicode11AddonType } from 'xterm-addon-unicode11';
import type { WebglAddon as WebglAddonType } from 'xterm-addon-webgl';
@ -117,6 +117,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
const editorOptions = this._configurationService.getValue<IEditorOptions>('editor');
this.raw = this.add(new xtermCtor({
allowProposedApi: true,
cols,
rows,
altClickMovesCursor: config.altClickMovesCursor && editorOptions.multiCursorModifier === 'alt',
@ -133,14 +134,13 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
cursorBlink: config.cursorBlinking,
cursorStyle: config.cursorStyle === 'line' ? 'bar' : config.cursorStyle,
cursorWidth: config.cursorWidth,
bellStyle: 'none',
macOptionIsMeta: config.macOptionIsMeta,
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
fastScrollModifier: 'alt',
fastScrollSensitivity: config.fastScrollSensitivity,
scrollSensitivity: config.mouseWheelScrollSensitivity,
rendererType: this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType),
// rendererType: this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType),
wordSeparator: config.wordSeparators,
overviewRulerWidth: 10
}));
@ -241,7 +241,8 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
this._enableWebglRenderer();
} else {
this._disposeOfWebglRenderer();
this.raw.options.rendererType = this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType);
// TODO: Fix renderer
// this.raw.options.rendererType = this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType);
}
}
@ -267,12 +268,13 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
// This is to fix an issue where dragging the windpow to the top of the screen to
// maximize on Windows/Linux would fire an event saying that the terminal was not
// visible.
if (this.raw.getOption('rendererType') === 'canvas') {
this._core._renderService?._onIntersectionChange({ intersectionRatio: 1 });
// HACK: Force a refresh of the screen to ensure links are refresh corrected.
// This can probably be removed when the above hack is fixed in Chromium.
this.raw.refresh(0, this.raw.rows - 1);
}
// TODO: Fix renderer
// if (this.raw.getOption('rendererType') === 'canvas') {
// this._core._renderService?._onIntersectionChange({ intersectionRatio: 1 });
// // HACK: Force a refresh of the screen to ensure links are refresh corrected.
// // This can probably be removed when the above hack is fixed in Chromium.
// this.raw.refresh(0, this.raw.rows - 1);
// }
}
async findNext(term: string, searchOptions: ISearchOptions): Promise<boolean> {
@ -419,13 +421,14 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
}
}
private _getBuiltInXtermRenderer(gpuAcceleration: string, suggestedRendererType?: string): RendererType {
let rendererType: RendererType = 'canvas';
if (gpuAcceleration === 'off' || (gpuAcceleration === 'auto' && suggestedRendererType === 'dom')) {
rendererType = 'dom';
}
return rendererType;
}
// TODO: Fix renderer
// private _getBuiltInXtermRenderer(gpuAcceleration: string, suggestedRendererType?: string): RendererType {
// let rendererType: RendererType = 'canvas';
// if (gpuAcceleration === 'off' || (gpuAcceleration === 'auto' && suggestedRendererType === 'dom')) {
// rendererType = 'dom';
// }
// return rendererType;
// }
private async _enableWebglRenderer(): Promise<void> {
if (!this.raw.element || this._webglAddon) {
@ -439,7 +442,8 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
this._webglAddon.onContextLoss(() => {
this._logService.info(`Webgl lost context, disposing of webgl renderer`);
this._disposeOfWebglRenderer();
this.raw.options.rendererType = 'dom';
// TODO: Fix renderer
// this.raw.options.rendererType = 'dom';
});
// Uncomment to add the texture atlas to the DOM
// setTimeout(() => {
@ -454,8 +458,9 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
if (!neverMeasureRenderTime && this._configHelper.config.gpuAcceleration !== 'off') {
this._measureRenderTime();
}
this.raw.options.rendererType = 'canvas';
XtermTerminal._suggestedRendererType = 'canvas';
// TODO: Fix renderer
// this.raw.options.rendererType = 'canvas';
// XtermTerminal._suggestedRendererType = 'canvas';
this._disposeOfWebglRenderer();
}
}
@ -573,7 +578,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
foreground: foregroundColor?.toString(),
cursor: cursorColor?.toString(),
cursorAccent: cursorAccentColor?.toString(),
selection: selectionBackgroundColor?.toString(),
selectionBackground: selectionBackgroundColor?.toString(),
selectionForeground: selectionForegroundColor?.toString(),
black: theme.getColor(ansiColorIdentifiers[0])?.toString(),
red: theme.getColor(ansiColorIdentifiers[1])?.toString(),
@ -595,7 +600,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II
}
private _updateTheme(theme?: IColorTheme): void {
this.raw.setOption('theme', this._getXtermTheme(theme));
this.raw.options.theme = this._getXtermTheme(theme);
}
private async _updateUnicodeVersion(): Promise<void> {

View file

@ -31,6 +31,7 @@ import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuS
class TestWebglAddon {
static shouldThrow = false;
static isEnabled = false;
readonly onChangeTextureAtlas = new Emitter().event as IEvent<HTMLCanvasElement>;
readonly onContextLoss = new Emitter().event as IEvent<void>;
activate() {
TestWebglAddon.isEnabled = !TestWebglAddon.shouldThrow;
@ -120,8 +121,8 @@ suite('XtermTerminal', () => {
});
test('should use fallback dimensions of 80x30', () => {
strictEqual(xterm.raw.options.cols, 80);
strictEqual(xterm.raw.options.rows, 30);
strictEqual(xterm.raw.cols, 80);
strictEqual(xterm.raw.rows, 30);
});
suite('theme', () => {
@ -243,7 +244,6 @@ suite('XtermTerminal', () => {
suite('renderers', () => {
test('should re-evaluate gpu acceleration auto when the setting is changed', async () => {
// Check initial state
strictEqual(xterm.raw.options.rendererType, 'dom');
strictEqual(TestWebglAddon.isEnabled, false);
// Open xterm as otherwise the webgl addon won't activate
@ -261,19 +261,20 @@ suite('XtermTerminal', () => {
}
// Turn off to reset state
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'off' } });
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
await xterm.webglAddonPromise; // await addon activate
strictEqual(xterm.raw.options.rendererType, 'dom');
strictEqual(TestWebglAddon.isEnabled, false);
// TODO: Fix renderer
// await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'off' } });
// configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
// await xterm.webglAddonPromise; // await addon activate
// strictEqual(xterm.raw.options.rendererType, 'dom');
// strictEqual(TestWebglAddon.isEnabled, false);
// Set to auto again but throw when activating the webgl addon
TestWebglAddon.shouldThrow = true;
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'auto' } });
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
await xterm.webglAddonPromise; // await addon activate
strictEqual(xterm.raw.options.rendererType, 'canvas');
strictEqual(TestWebglAddon.isEnabled, false);
// // Set to auto again but throw when activating the webgl addon
// TestWebglAddon.shouldThrow = true;
// await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'auto' } });
// configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
// await xterm.webglAddonPromise; // await addon activate
// strictEqual(xterm.raw.options.rendererType, 'canvas');
// strictEqual(TestWebglAddon.isEnabled, false);
});
});
});

View file

@ -12087,20 +12087,20 @@ xterm-addon-unicode11@0.4.0-beta.3:
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
xterm-addon-webgl@0.13.0-beta.9:
version "0.13.0-beta.9"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.9.tgz#66a9ac142ae347d0548abbf4e66bb2f35f415adb"
integrity sha512-x1o1tpCqIsICvhcRsZs+BLcwUIdizYS2G4TIH0KBnUDiSN+oSqpVBQNG8qKg56xbK8WtpdbQ9dLB7JR2W5cX0g==
xterm-addon-webgl@0.13.0-beta.32:
version "0.13.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.32.tgz#ae7335f788ae611733e03f6ca38280ab7b86d212"
integrity sha512-xOudNzYXaRh9QZ+IigXM5EB3bM8l3/F8F35EpJRYvvsylVxiB6Km8X8l7+nxlWt+uYdnHZs0ka2rvtL8kOP/uw==
xterm-headless@4.20.0-beta.20:
version "4.20.0-beta.20"
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-4.20.0-beta.20.tgz#da2d8131b02d6f1e37f47cc17e578f2c2980fbb6"
integrity sha512-JK4jUIiUH7TdzvMrpfDnbGxTuC4s7byjqnMHR8+gIpY8qCFjz0xcMFSbp+ZshxGwVyziI4jtJqTHZjFToT2/kw==
xterm-headless@5.0.0-beta.5:
version "5.0.0-beta.5"
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.0.0-beta.5.tgz#e29b6c5081f31f887122b7263ba996b0c46b3c22"
integrity sha512-CMQ1+prBNF92oBMeZzc2rfTcmOaCGfwwSaoPYNTjyziZT6mZsEg7amajYkb0YAnqJ29MFm4kPGZbU78/dX4k2A==
xterm@4.20.0-beta.20:
version "4.20.0-beta.20"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.20.0-beta.20.tgz#2979a31839f7b8ee3ffe4f063b40c02facdb0fed"
integrity sha512-ltDtTquH+33tXQPFSDqenbgz6LkvIob6l6Rac85L4aX5Ve7P3ubVLrq+lTFJGQn3iiwGqNmnE1t1EUuGhxsXcQ==
xterm@5.0.0-beta.32:
version "5.0.0-beta.32"
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.32.tgz#62bb9902429c0055fd2fd85c9eecfbf1756ed31c"
integrity sha512-OAM1GaBs/chK63Cr86XbVhfVCLLXLpNxxFrv3RK9xoyb9dwiY3gaMxK9jeGzTnrbGLWJb+k5nxaC0rx2YsHvUA==
y18n@^3.2.1:
version "3.2.2"