From 5799f440141cf7182f4c20e6e6b6743c4c0a8577 Mon Sep 17 00:00:00 2001 From: Trevor Brown Date: Wed, 29 Mar 2023 16:11:48 -0400 Subject: [PATCH] integrated xterm-addon-image into the terminal --- .eslintrc.json | 1 + package.json | 1 + remote/package.json | 1 + remote/web/package.json | 1 + remote/web/yarn.lock | 5 +++++ remote/yarn.lock | 5 +++++ scripts/update-xterm.js | 1 + src/bootstrap-window.js | 2 +- .../terminal/browser/xterm/xtermTerminal.ts | 19 +++++++++++++++++++ yarn.lock | 5 +++++ 10 files changed, 40 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index c33c41eb61491..997df5c98c8f2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -264,6 +264,7 @@ "xterm", "xterm-addon-canvas", "xterm-addon-search", + "xterm-addon-image", "xterm-addon-serialize", "xterm-addon-unicode11", "xterm-addon-webgl", diff --git a/package.json b/package.json index 4ab0e2a798986..4669188437de9 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "xterm": "5.2.0-beta.35", "xterm-addon-canvas": "0.4.0-beta.9", "xterm-addon-search": "0.11.0", + "xterm-addon-image": "0.4.0", "xterm-addon-serialize": "0.9.0", "xterm-addon-unicode11": "0.5.0", "xterm-addon-webgl": "0.15.0-beta.8", diff --git a/remote/package.json b/remote/package.json index ed567745d7064..29995fd95c265 100644 --- a/remote/package.json +++ b/remote/package.json @@ -27,6 +27,7 @@ "xterm": "5.2.0-beta.35", "xterm-addon-canvas": "0.4.0-beta.9", "xterm-addon-search": "0.11.0", + "xterm-addon-image": "0.4.0", "xterm-addon-serialize": "0.9.0", "xterm-addon-unicode11": "0.5.0", "xterm-addon-webgl": "0.15.0-beta.8", diff --git a/remote/web/package.json b/remote/web/package.json index 1d15da91cf313..6eda88e94cb0a 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -14,6 +14,7 @@ "xterm": "5.2.0-beta.35", "xterm-addon-canvas": "0.4.0-beta.9", "xterm-addon-search": "0.11.0", + "xterm-addon-image": "0.4.0", "xterm-addon-unicode11": "0.5.0", "xterm-addon-webgl": "0.15.0-beta.8" } diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index 54f9a7426937b..9fb514b1ca77f 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -73,6 +73,11 @@ xterm-addon-canvas@0.4.0-beta.9: resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.9.tgz#e570fa4592890f92cc86706f2bba0dd128a8641d" integrity sha512-BWRVWyUW7NY2g4BBMm3ecPQvbdyKXFgABnpmh4m0TVHqFJMNeXdNuTc94KiDbE+cvw8jtAY9NC/OIM4HcgjAIQ== +xterm-addon-image@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" + integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== + xterm-addon-search@0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0.tgz#2a00ff7f9848f6140e7c4d1782486b0b18b06e0d" diff --git a/remote/yarn.lock b/remote/yarn.lock index 1fae3d896aef5..87224f5628c60 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -846,6 +846,11 @@ xterm-addon-canvas@0.4.0-beta.9: resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.9.tgz#e570fa4592890f92cc86706f2bba0dd128a8641d" integrity sha512-BWRVWyUW7NY2g4BBMm3ecPQvbdyKXFgABnpmh4m0TVHqFJMNeXdNuTc94KiDbE+cvw8jtAY9NC/OIM4HcgjAIQ== +xterm-addon-image@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" + integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== + xterm-addon-search@0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0.tgz#2a00ff7f9848f6140e7c4d1782486b0b18b06e0d" diff --git a/scripts/update-xterm.js b/scripts/update-xterm.js index bc57493590248..240c439685f9e 100644 --- a/scripts/update-xterm.js +++ b/scripts/update-xterm.js @@ -10,6 +10,7 @@ const moduleNames = [ 'xterm', 'xterm-addon-canvas', 'xterm-addon-search', + 'xterm-addon-image', 'xterm-addon-unicode11', 'xterm-addon-webgl' ]; diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js index d61e432e3b340..2d1f1a4c1953a 100644 --- a/src/bootstrap-window.js +++ b/src/bootstrap-window.js @@ -160,7 +160,7 @@ // which has a fallback to using node.js `require` // (node.js enabled renderers only) if (!safeProcess.sandboxed) { - loaderConfig.amdModulesPattern = /(^vs\/)|(^vscode-textmate$)|(^vscode-oniguruma$)|(^xterm$)|(^xterm-addon-canvas$)|(^xterm-addon-search$)|(^xterm-addon-unicode11$)|(^xterm-addon-webgl$)|(^@vscode\/iconv-lite-umd$)|(^jschardet$)|(^@vscode\/vscode-languagedetection$)|(^vscode-regexp-languagedetection$)|(^tas-client-umd$)/; + loaderConfig.amdModulesPattern = /(^vs\/)|(^vscode-textmate$)|(^vscode-oniguruma$)|(^xterm$)|(^xterm-addon-canvas$)|(^xterm-addon-search$)|(^xterm-addon-image$)|(^xterm-addon-unicode11$)|(^xterm-addon-webgl$)|(^@vscode\/iconv-lite-umd$)|(^jschardet$)|(^@vscode\/vscode-languagedetection$)|(^vscode-regexp-languagedetection$)|(^tas-client-umd$)/; } // Signal before require.config() diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts index 296c8f2e46935..2eb5006db6a87 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts @@ -9,6 +9,7 @@ import type { ISearchOptions, SearchAddon as SearchAddonType } from 'xterm-addon import type { Unicode11Addon as Unicode11AddonType } from 'xterm-addon-unicode11'; import type { WebglAddon as WebglAddonType } from 'xterm-addon-webgl'; import type { SerializeAddon as SerializeAddonType } from 'xterm-addon-serialize'; +import { ImageAddon, IImageAddonOptions } from 'xterm-addon-image'; import { IXtermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private'; import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper'; @@ -36,6 +37,20 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { SuggestAddon } from 'vs/workbench/contrib/terminal/browser/xterm/suggestAddon'; import { IContextKey } from 'vs/platform/contextkey/common/contextkey'; +// customize as needed (showing addon defaults) +const customSettings: IImageAddonOptions = { + enableSizeReports: true, // whether to enable CSI t reports (see below) + pixelLimit: 16777216, // max. pixel size of a single image + sixelSupport: true, // enable sixel support + sixelScrolling: true, // whether to scroll on image output + sixelPaletteLimit: 256, // initial sixel palette size + sixelSizeLimit: 25000000, // size limit of a single sixel sequence + storageLimit: 128, // FIFO storage limit in MB + showPlaceholder: true, // whether to show a placeholder for evicted images + iipSupport: true, // enable iTerm IIP support + iipSizeLimit: 20000000 // size limit of a single IIP sequence +}; + const enum RenderConstants { /** * How long in milliseconds should an average frame take to render for a notification to appear @@ -250,6 +265,10 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal, II this._shellIntegrationAddon = this._instantiationService.createInstance(ShellIntegrationAddon, disableShellIntegrationReporting, this._telemetryService); this.raw.loadAddon(this._shellIntegrationAddon); + // Load image addon (for displaying sixels && IIP) + const imageAddon = new ImageAddon(customSettings); + this.raw.loadAddon(imageAddon); + // Load the suggest addon, this should be loaded regardless of the setting as the sequences // may still come in this._suggestAddon = this._instantiationService.createInstance(SuggestAddon, this._terminalSuggestWidgetVisibleContextKey); diff --git a/yarn.lock b/yarn.lock index 7eabceca09ced..4c5e7dfc684a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11902,6 +11902,11 @@ xterm-addon-canvas@0.4.0-beta.9: resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.9.tgz#e570fa4592890f92cc86706f2bba0dd128a8641d" integrity sha512-BWRVWyUW7NY2g4BBMm3ecPQvbdyKXFgABnpmh4m0TVHqFJMNeXdNuTc94KiDbE+cvw8jtAY9NC/OIM4HcgjAIQ== +xterm-addon-image@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" + integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== + xterm-addon-search@0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0.tgz#2a00ff7f9848f6140e7c4d1782486b0b18b06e0d"