forked from openkylin/kylin-code
升级xterm相关npm包: 1.add xterm-addon-canvas; 2.update xterm,xterm-addon-search,xterm-addon-serialize,xterm-addon-unicode11,xterm-addon-webgl,xterm-headless. 3.xterm开启webgl使用gpuAcceleration模式有问题,改为默认使用canvas模式.
This commit is contained in:
parent
0fd9b24158
commit
8a3cd1c3a0
|
@ -256,6 +256,7 @@
|
||||||
"windows-process-tree",
|
"windows-process-tree",
|
||||||
"worker_threads",
|
"worker_threads",
|
||||||
"xterm",
|
"xterm",
|
||||||
|
"xterm-addon-canvas",
|
||||||
"xterm-addon-search",
|
"xterm-addon-search",
|
||||||
"xterm-addon-serialize",
|
"xterm-addon-serialize",
|
||||||
"xterm-addon-unicode11",
|
"xterm-addon-unicode11",
|
||||||
|
|
|
@ -20,6 +20,9 @@ vscode-textmate/webpack.config.js
|
||||||
|
|
||||||
xterm/src/**
|
xterm/src/**
|
||||||
|
|
||||||
|
xterm-addon-canvas/src/**
|
||||||
|
xterm-addon-canvas/out/**
|
||||||
|
|
||||||
xterm-addon-search/src/**
|
xterm-addon-search/src/**
|
||||||
xterm-addon-search/out/**
|
xterm-addon-search/out/**
|
||||||
xterm-addon-search/fixtures/**
|
xterm-addon-search/fixtures/**
|
||||||
|
|
13
package.json
13
package.json
|
@ -86,12 +86,13 @@
|
||||||
"vscode-proxy-agent": "^0.12.0",
|
"vscode-proxy-agent": "^0.12.0",
|
||||||
"vscode-regexpp": "^3.1.0",
|
"vscode-regexpp": "^3.1.0",
|
||||||
"vscode-textmate": "7.0.1",
|
"vscode-textmate": "7.0.1",
|
||||||
"xterm": "4.19.0-beta.58",
|
"xterm": "5.4.0-beta.27",
|
||||||
"xterm-addon-search": "0.9.0-beta.39",
|
"xterm-addon-canvas": "0.6.0-beta.27",
|
||||||
"xterm-addon-serialize": "0.7.0-beta.12",
|
"xterm-addon-search": "0.14.0-beta.27",
|
||||||
"xterm-addon-unicode11": "0.4.0-beta.3",
|
"xterm-addon-serialize": "0.12.0-beta.26",
|
||||||
"xterm-addon-webgl": "0.12.0-beta.37",
|
"xterm-addon-unicode11": "0.7.0-beta.26",
|
||||||
"xterm-headless": "4.19.0-beta.58",
|
"xterm-addon-webgl": "0.17.0-beta.26",
|
||||||
|
"xterm-headless": "5.4.0-beta.27",
|
||||||
"yauzl": "^2.9.2",
|
"yauzl": "^2.9.2",
|
||||||
"yazl": "^2.4.3"
|
"yazl": "^2.4.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -24,12 +24,13 @@
|
||||||
"vscode-proxy-agent": "^0.12.0",
|
"vscode-proxy-agent": "^0.12.0",
|
||||||
"vscode-regexpp": "^3.1.0",
|
"vscode-regexpp": "^3.1.0",
|
||||||
"vscode-textmate": "7.0.1",
|
"vscode-textmate": "7.0.1",
|
||||||
"xterm": "4.19.0-beta.58",
|
"xterm": "5.1.0-beta.46",
|
||||||
"xterm-addon-search": "0.9.0-beta.39",
|
"xterm-addon-canvas": "0.3.0-beta.22",
|
||||||
"xterm-addon-serialize": "0.7.0-beta.12",
|
"xterm-addon-search": "0.11.0-beta.7",
|
||||||
"xterm-addon-unicode11": "0.4.0-beta.3",
|
"xterm-addon-serialize": "0.9.0-beta.3",
|
||||||
"xterm-addon-webgl": "0.12.0-beta.37",
|
"xterm-addon-unicode11": "0.5.0-beta.1",
|
||||||
"xterm-headless": "4.19.0-beta.58",
|
"xterm-addon-webgl": "0.14.0-beta.31",
|
||||||
|
"xterm-headless": "5.1.0-beta.46",
|
||||||
"yauzl": "^2.9.2",
|
"yauzl": "^2.9.2",
|
||||||
"yazl": "^2.4.3"
|
"yazl": "^2.4.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -10,9 +10,10 @@
|
||||||
"tas-client-umd": "0.1.6",
|
"tas-client-umd": "0.1.6",
|
||||||
"vscode-oniguruma": "1.6.1",
|
"vscode-oniguruma": "1.6.1",
|
||||||
"vscode-textmate": "7.0.1",
|
"vscode-textmate": "7.0.1",
|
||||||
"xterm": "4.19.0-beta.58",
|
"xterm": "5.1.0-beta.46",
|
||||||
"xterm-addon-search": "0.9.0-beta.39",
|
"xterm-addon-canvas": "0.3.0-beta.22",
|
||||||
"xterm-addon-unicode11": "0.4.0-beta.3",
|
"xterm-addon-search": "0.11.0-beta.7",
|
||||||
"xterm-addon-webgl": "0.12.0-beta.37"
|
"xterm-addon-unicode11": "0.5.0-beta.1",
|
||||||
|
"xterm-addon-webgl": "0.14.0-beta.31"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,22 +113,27 @@ vscode-textmate@7.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-7.0.1.tgz#8118a32b02735dccd14f893b495fa5389ad7de79"
|
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-7.0.1.tgz#8118a32b02735dccd14f893b495fa5389ad7de79"
|
||||||
integrity sha512-zQ5U/nuXAAMsh691FtV0wPz89nSkHbs+IQV8FDk+wew9BlSDhf4UmWGlWJfTR2Ti6xZv87Tj5fENzKf6Qk7aLw==
|
integrity sha512-zQ5U/nuXAAMsh691FtV0wPz89nSkHbs+IQV8FDk+wew9BlSDhf4UmWGlWJfTR2Ti6xZv87Tj5fENzKf6Qk7aLw==
|
||||||
|
|
||||||
xterm-addon-search@0.9.0-beta.39:
|
xterm-addon-canvas@0.3.0-beta.22:
|
||||||
version "0.9.0-beta.39"
|
version "0.3.0-beta.22"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.9.0-beta.39.tgz#e8376e1485ee7d763c07d1a8f1354114f65b3e3e"
|
resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.3.0-beta.22.tgz#8b145ad01a5e27b7b1d20eebed9929f9c9f51830"
|
||||||
integrity sha512-h45wkecgfqXXoAUqgNytAfSd6g0xNT6rZy/enVaEU0aes7QoL9pxHUKkCry8PP6hs03Slk0VxQ4AGsbSZGvK/w==
|
integrity sha512-4F+XVbxlnyq8OGcdEoM+hz2B6+wdOSEdckNRgq9RRNgnk7YF/Gp0MhWN3orJUT/JqWJFemxVl2Giil8yTRqqEQ==
|
||||||
|
|
||||||
xterm-addon-unicode11@0.4.0-beta.3:
|
xterm-addon-search@0.11.0-beta.7:
|
||||||
version "0.4.0-beta.3"
|
version "0.11.0-beta.7"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
|
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0-beta.7.tgz#d90bcbe9e8f9238c18ba6145bd7ec2f8e3240052"
|
||||||
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
|
integrity sha512-i/c774V0/Eon3BIFRsRR3OjKTnMGkccBo12yDkOa40tnAD4aa8FjspE3bxW/Hh1mUEhCSgBSLnMDlK/GwnUC+g==
|
||||||
|
|
||||||
xterm-addon-webgl@0.12.0-beta.37:
|
xterm-addon-unicode11@0.5.0-beta.1:
|
||||||
version "0.12.0-beta.37"
|
version "0.5.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.12.0-beta.37.tgz#e465100041a7e0b1d32b01cd0b0ba5a516ac13c2"
|
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0-beta.1.tgz#8a9e9356018e082318abbe2be1f9599fcc6b46a2"
|
||||||
integrity sha512-d4GfKlMrWZGzsMfMHd2siG+QiOvwikhwiu+JQlIhlnAShT/wU5BOGbNfDDA1tHmkW7G1UCFgucBuVxrs5wjuBQ==
|
integrity sha512-uAErX4gwhW6N524stLG6oZR3yBGgPnFmZ2Tv4vyYy7tcgDuHRoc22xYSCDgO1ohz1FLlOm8JGXRjXliwO9ic3A==
|
||||||
|
|
||||||
xterm@4.19.0-beta.58:
|
xterm-addon-webgl@0.14.0-beta.31:
|
||||||
version "4.19.0-beta.58"
|
version "0.14.0-beta.31"
|
||||||
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0-beta.58.tgz#cbe535b0b85bc7f8ae3cc242df006bea04cdf541"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.14.0-beta.31.tgz#91c96efaf70bd9e6d3903202f81f5fbd0c3805aa"
|
||||||
integrity sha512-fr3QC2qS2NBab8X7kwA/3QZELzQqhAKsngvK8NkhsrFN1DAuyEETkzqXuKbO7OKpCB6VqGDN6GPkNlUB9VrIDA==
|
integrity sha512-9jmGrkTXJzi4kmqd3pw9wOAS8MxmcuSmOxclmRr4GivYWe/Y/mapdGZtt4HAxEneZFjXMwZSMruOi72QX6QqPg==
|
||||||
|
|
||||||
|
xterm@5.1.0-beta.46:
|
||||||
|
version "5.1.0-beta.46"
|
||||||
|
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.1.0-beta.46.tgz#76716e8ac88a4111781dee5108f5affa572cb4ab"
|
||||||
|
integrity sha512-4i9CzOWbDwQZVLJB3teNqw5PtB/BEB1N3t6T886M0N1IW0WXqIy3r4gXpmxWP+4cNuj4R4tFq+yeCTTJ3rHnFg==
|
||||||
|
|
|
@ -919,35 +919,40 @@ wrappy@1:
|
||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||||
|
|
||||||
xterm-addon-search@0.9.0-beta.39:
|
xterm-addon-canvas@0.3.0-beta.22:
|
||||||
version "0.9.0-beta.39"
|
version "0.3.0-beta.22"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.9.0-beta.39.tgz#e8376e1485ee7d763c07d1a8f1354114f65b3e3e"
|
resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.3.0-beta.22.tgz#8b145ad01a5e27b7b1d20eebed9929f9c9f51830"
|
||||||
integrity sha512-h45wkecgfqXXoAUqgNytAfSd6g0xNT6rZy/enVaEU0aes7QoL9pxHUKkCry8PP6hs03Slk0VxQ4AGsbSZGvK/w==
|
integrity sha512-4F+XVbxlnyq8OGcdEoM+hz2B6+wdOSEdckNRgq9RRNgnk7YF/Gp0MhWN3orJUT/JqWJFemxVl2Giil8yTRqqEQ==
|
||||||
|
|
||||||
xterm-addon-serialize@0.7.0-beta.12:
|
xterm-addon-search@0.11.0-beta.7:
|
||||||
version "0.7.0-beta.12"
|
version "0.11.0-beta.7"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.7.0-beta.12.tgz#4f845d8b1a9f9b7ae3f910455ce8c58b041babc7"
|
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.11.0-beta.7.tgz#d90bcbe9e8f9238c18ba6145bd7ec2f8e3240052"
|
||||||
integrity sha512-b4Ug0B/RSJMux+KAcp+PXVqubVyXjN1yCQw1FOkgVYTpmd9AH/X+EcxKml5Lz8DsKmsXqfD9AlV3WpEeT+OtMw==
|
integrity sha512-i/c774V0/Eon3BIFRsRR3OjKTnMGkccBo12yDkOa40tnAD4aa8FjspE3bxW/Hh1mUEhCSgBSLnMDlK/GwnUC+g==
|
||||||
|
|
||||||
xterm-addon-unicode11@0.4.0-beta.3:
|
xterm-addon-serialize@0.9.0-beta.3:
|
||||||
version "0.4.0-beta.3"
|
version "0.9.0-beta.3"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
|
resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.9.0-beta.3.tgz#bb4ed416db5748bcbe55a4b6d4c2151368fdae74"
|
||||||
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
|
integrity sha512-LaFuowtdxNdeuLm+KmtsoR4mgPOLu/I9k0hlWXbzAd1okJhthwMH4Y6cuL0/pFk1AclP5s+L42glv8PV0GnVsg==
|
||||||
|
|
||||||
xterm-addon-webgl@0.12.0-beta.37:
|
xterm-addon-unicode11@0.5.0-beta.1:
|
||||||
version "0.12.0-beta.37"
|
version "0.5.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.12.0-beta.37.tgz#e465100041a7e0b1d32b01cd0b0ba5a516ac13c2"
|
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0-beta.1.tgz#8a9e9356018e082318abbe2be1f9599fcc6b46a2"
|
||||||
integrity sha512-d4GfKlMrWZGzsMfMHd2siG+QiOvwikhwiu+JQlIhlnAShT/wU5BOGbNfDDA1tHmkW7G1UCFgucBuVxrs5wjuBQ==
|
integrity sha512-uAErX4gwhW6N524stLG6oZR3yBGgPnFmZ2Tv4vyYy7tcgDuHRoc22xYSCDgO1ohz1FLlOm8JGXRjXliwO9ic3A==
|
||||||
|
|
||||||
xterm-headless@4.19.0-beta.58:
|
xterm-addon-webgl@0.14.0-beta.31:
|
||||||
version "4.19.0-beta.58"
|
version "0.14.0-beta.31"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-4.19.0-beta.58.tgz#3a38cf3b9cd2606fb342a5cf8f2a0cfb963a62e8"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.14.0-beta.31.tgz#91c96efaf70bd9e6d3903202f81f5fbd0c3805aa"
|
||||||
integrity sha512-wKQW8VzkFjyYDvcaM26gulo+YghyocfkZnKMH7gc/+/mFn3YXUPBPuOcX6e0M7NibyMlewpQpZjHQUPLBjkzfw==
|
integrity sha512-9jmGrkTXJzi4kmqd3pw9wOAS8MxmcuSmOxclmRr4GivYWe/Y/mapdGZtt4HAxEneZFjXMwZSMruOi72QX6QqPg==
|
||||||
|
|
||||||
xterm@4.19.0-beta.58:
|
xterm-headless@5.1.0-beta.46:
|
||||||
version "4.19.0-beta.58"
|
version "5.1.0-beta.46"
|
||||||
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0-beta.58.tgz#cbe535b0b85bc7f8ae3cc242df006bea04cdf541"
|
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.1.0-beta.46.tgz#dd1c0f99dec1224eca7e67428f47ceb54394dda5"
|
||||||
integrity sha512-fr3QC2qS2NBab8X7kwA/3QZELzQqhAKsngvK8NkhsrFN1DAuyEETkzqXuKbO7OKpCB6VqGDN6GPkNlUB9VrIDA==
|
integrity sha512-BXA79FsGDZcrSgikeluzl0CWLP3pcUj5fo1WfUVphOc1LHdpKkNhIHG8UVmC5QJjfH7wb0XUWUFyz0rWZmA5yA==
|
||||||
|
|
||||||
|
xterm@5.1.0-beta.46:
|
||||||
|
version "5.1.0-beta.46"
|
||||||
|
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.1.0-beta.46.tgz#76716e8ac88a4111781dee5108f5affa572cb4ab"
|
||||||
|
integrity sha512-4i9CzOWbDwQZVLJB3teNqw5PtB/BEB1N3t6T886M0N1IW0WXqIy3r4gXpmxWP+4cNuj4R4tFq+yeCTTJ3rHnFg==
|
||||||
|
|
||||||
yallist@^4.0.0:
|
yallist@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
|
|
|
@ -8,6 +8,7 @@ const path = require('path');
|
||||||
|
|
||||||
const moduleNames = [
|
const moduleNames = [
|
||||||
'xterm',
|
'xterm',
|
||||||
|
'xterm-addon-canvas',
|
||||||
'xterm-addon-search',
|
'xterm-addon-search',
|
||||||
'xterm-addon-unicode11',
|
'xterm-addon-unicode11',
|
||||||
'xterm-addon-webgl'
|
'xterm-addon-webgl'
|
||||||
|
|
|
@ -136,6 +136,7 @@
|
||||||
'vscode-textmate': `${baseNodeModulesPath}/vscode-textmate/release/main.js`,
|
'vscode-textmate': `${baseNodeModulesPath}/vscode-textmate/release/main.js`,
|
||||||
'vscode-oniguruma': `${baseNodeModulesPath}/vscode-oniguruma/release/main.js`,
|
'vscode-oniguruma': `${baseNodeModulesPath}/vscode-oniguruma/release/main.js`,
|
||||||
'xterm': `${baseNodeModulesPath}/xterm/lib/xterm.js`,
|
'xterm': `${baseNodeModulesPath}/xterm/lib/xterm.js`,
|
||||||
|
'xterm-addon-canvas': `${baseNodeModulesPath}/xterm-addon-canvas/lib/xterm-addon-canvas.js`,
|
||||||
'xterm-addon-search': `${baseNodeModulesPath}/xterm-addon-search/lib/xterm-addon-search.js`,
|
'xterm-addon-search': `${baseNodeModulesPath}/xterm-addon-search/lib/xterm-addon-search.js`,
|
||||||
'xterm-addon-unicode11': `${baseNodeModulesPath}/xterm-addon-unicode11/lib/xterm-addon-unicode11.js`,
|
'xterm-addon-unicode11': `${baseNodeModulesPath}/xterm-addon-unicode11/lib/xterm-addon-unicode11.js`,
|
||||||
'xterm-addon-webgl': `${baseNodeModulesPath}/xterm-addon-webgl/lib/xterm-addon-webgl.js`,
|
'xterm-addon-webgl': `${baseNodeModulesPath}/xterm-addon-webgl/lib/xterm-addon-webgl.js`,
|
||||||
|
@ -150,7 +151,7 @@
|
||||||
// which has a fallback to using node.js `require`
|
// which has a fallback to using node.js `require`
|
||||||
// (node.js enabled renderers only)
|
// (node.js enabled renderers only)
|
||||||
if (!safeProcess.sandboxed) {
|
if (!safeProcess.sandboxed) {
|
||||||
loaderConfig.amdModulesPattern = /(^vs\/)|(^vscode-textmate$)|(^vscode-oniguruma$)|(^xterm$)|(^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-unicode11$)|(^xterm-addon-webgl$)|(^@vscode\/iconv-lite-umd$)|(^jschardet$)|(^@vscode\/vscode-languagedetection$)|(^vscode-regexp-languagedetection$)|(^tas-client-umd$)/;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signal before require.config()
|
// Signal before require.config()
|
||||||
|
|
|
@ -737,8 +737,14 @@ class XtermSerializer implements ITerminalSerializer {
|
||||||
reviveBuffer: string | undefined,
|
reviveBuffer: string | undefined,
|
||||||
logService: ILogService
|
logService: ILogService
|
||||||
) {
|
) {
|
||||||
this._xterm = new XtermTerminal({ cols, rows, scrollback });
|
this._xterm = new XtermTerminal({
|
||||||
|
cols,
|
||||||
|
rows,
|
||||||
|
scrollback,
|
||||||
|
allowProposedApi: true
|
||||||
|
});
|
||||||
if (reviveBuffer) {
|
if (reviveBuffer) {
|
||||||
|
// console.log('wpl reviveBuffer:' + reviveBuffer);
|
||||||
this._xterm.writeln(reviveBuffer);
|
this._xterm.writeln(reviveBuffer);
|
||||||
}
|
}
|
||||||
this.setUnicodeVersion(unicodeVersion);
|
this.setUnicodeVersion(unicodeVersion);
|
||||||
|
@ -747,6 +753,7 @@ class XtermSerializer implements ITerminalSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleData(data: string): void {
|
handleData(data: string): void {
|
||||||
|
// console.log('wpl handleData:' + data);
|
||||||
this._xterm.write(data);
|
this._xterm.write(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -757,7 +764,7 @@ class XtermSerializer implements ITerminalSerializer {
|
||||||
async generateReplayEvent(normalBufferOnly?: boolean): Promise<IPtyHostProcessReplayEvent> {
|
async generateReplayEvent(normalBufferOnly?: boolean): Promise<IPtyHostProcessReplayEvent> {
|
||||||
const serialize = new (await this._getSerializeConstructor());
|
const serialize = new (await this._getSerializeConstructor());
|
||||||
this._xterm.loadAddon(serialize);
|
this._xterm.loadAddon(serialize);
|
||||||
const options: ISerializeOptions = { scrollback: this._xterm.getOption('scrollback') };
|
const options: ISerializeOptions = { scrollback: this._xterm.options.scrollback };
|
||||||
if (normalBufferOnly) {
|
if (normalBufferOnly) {
|
||||||
options.excludeAltBuffer = true;
|
options.excludeAltBuffer = true;
|
||||||
options.excludeModes = true;
|
options.excludeModes = true;
|
||||||
|
|
|
@ -202,8 +202,8 @@ export class TerminalLinkManager extends DisposableStore {
|
||||||
|
|
||||||
const core = (this._xterm as any)._core as IXtermCore;
|
const core = (this._xterm as any)._core as IXtermCore;
|
||||||
const cellDimensions = {
|
const cellDimensions = {
|
||||||
width: core._renderService.dimensions.actualCellWidth,
|
width: core._renderService.dimensions.css.cell.width,
|
||||||
height: core._renderService.dimensions.actualCellHeight
|
height: core._renderService.dimensions.css.cell.height
|
||||||
};
|
};
|
||||||
const terminalDimensions = {
|
const terminalDimensions = {
|
||||||
width: this._xterm.cols,
|
width: this._xterm.cols,
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
|
|
||||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||||
import 'vs/css!./media/scrollbar';
|
import 'vs/css!./media/scrollbar';
|
||||||
import 'vs/css!./media/terminal';
|
|
||||||
import 'vs/css!./media/widgets';
|
import 'vs/css!./media/widgets';
|
||||||
import 'vs/css!./media/xterm';
|
import 'vs/css!./media/xterm';
|
||||||
|
import 'vs/css!./media/terminal';
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
||||||
|
|
|
@ -138,10 +138,10 @@ export class TerminalConfigHelper implements IBrowserTerminalConfigHelper {
|
||||||
if (this.config.gpuAcceleration === 'off') {
|
if (this.config.gpuAcceleration === 'off') {
|
||||||
this._lastFontMeasurement.charWidth = rect.width;
|
this._lastFontMeasurement.charWidth = rect.width;
|
||||||
} else {
|
} else {
|
||||||
const scaledCharWidth = Math.floor(rect.width * window.devicePixelRatio);
|
const deviceCharWidth = Math.floor(rect.width * window.devicePixelRatio);
|
||||||
const scaledCellWidth = scaledCharWidth + Math.round(letterSpacing);
|
const deviceCellWidth = deviceCharWidth + Math.round(letterSpacing);
|
||||||
const actualCellWidth = scaledCellWidth / window.devicePixelRatio;
|
const cssCellWidth = deviceCellWidth / window.devicePixelRatio;
|
||||||
this._lastFontMeasurement.charWidth = actualCellWidth - Math.round(letterSpacing) / window.devicePixelRatio;
|
this._lastFontMeasurement.charWidth = cssCellWidth - Math.round(letterSpacing) / window.devicePixelRatio;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,14 +185,14 @@ export class TerminalConfigHelper implements IBrowserTerminalConfigHelper {
|
||||||
|
|
||||||
// Get the character dimensions from xterm if it's available
|
// Get the character dimensions from xterm if it's available
|
||||||
if (xtermCore) {
|
if (xtermCore) {
|
||||||
if (xtermCore._renderService && xtermCore._renderService.dimensions?.actualCellWidth && xtermCore._renderService.dimensions?.actualCellHeight) {
|
if (xtermCore._renderService && xtermCore._renderService.dimensions?.css.cell.width && xtermCore._renderService.dimensions?.css.cell.height) {
|
||||||
return {
|
return {
|
||||||
fontFamily,
|
fontFamily,
|
||||||
fontSize,
|
fontSize,
|
||||||
letterSpacing,
|
letterSpacing,
|
||||||
lineHeight,
|
lineHeight,
|
||||||
charHeight: xtermCore._renderService.dimensions.actualCellHeight / lineHeight,
|
charHeight: xtermCore._renderService.dimensions.css.cell.height / lineHeight,
|
||||||
charWidth: xtermCore._renderService.dimensions.actualCellWidth - Math.round(letterSpacing) / window.devicePixelRatio
|
charWidth: xtermCore._renderService.dimensions.css.cell.width - Math.round(letterSpacing) / window.devicePixelRatio
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1134,7 +1134,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||||
|
|
||||||
// If IShellLaunchConfig.waitOnExit was true and the process finished before the terminal
|
// If IShellLaunchConfig.waitOnExit was true and the process finished before the terminal
|
||||||
// panel was initialized.
|
// panel was initialized.
|
||||||
if (xterm.raw.getOption('disableStdin')) {
|
if (xterm.raw.options.disableStdin) {
|
||||||
this._attachPressAnyKeyToCloseListener(xterm.raw);
|
this._attachPressAnyKeyToCloseListener(xterm.raw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,13 +31,17 @@ export interface IXtermCore {
|
||||||
|
|
||||||
_renderService: {
|
_renderService: {
|
||||||
dimensions: {
|
dimensions: {
|
||||||
actualCellWidth: number;
|
css: {
|
||||||
actualCellHeight: number;
|
cell: {
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
_renderer: {
|
_renderer: {
|
||||||
_renderLayers?: any[];
|
_renderLayers?: any[];
|
||||||
};
|
};
|
||||||
_onIntersectionChange: any;
|
_handleIntersectionChange: any;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import type { IBuffer, ITheme, RendererType, Terminal as RawXtermTerminal } from 'xterm';
|
import type { IBuffer, ITheme, Terminal as RawXtermTerminal } from 'xterm';
|
||||||
|
import type { CanvasAddon as CanvasAddonType } from 'xterm-addon-canvas';
|
||||||
import type { ISearchOptions, SearchAddon as SearchAddonType } from 'xterm-addon-search';
|
import type { ISearchOptions, SearchAddon as SearchAddonType } from 'xterm-addon-search';
|
||||||
import type { Unicode11Addon as Unicode11AddonType } from 'xterm-addon-unicode11';
|
import type { Unicode11Addon as Unicode11AddonType } from 'xterm-addon-unicode11';
|
||||||
import type { WebglAddon as WebglAddonType } from 'xterm-addon-webgl';
|
import type { WebglAddon as WebglAddonType } from 'xterm-addon-webgl';
|
||||||
import { SerializeAddon as SerializeAddonType } from 'xterm-addon-serialize';
|
import type { SerializeAddon as SerializeAddonType } from 'xterm-addon-serialize';
|
||||||
import { IXtermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
import { IXtermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
|
||||||
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||||
|
@ -41,10 +42,11 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
const SLOW_CANVAS_RENDER_THRESHOLD = 50;
|
const SLOW_CANVAS_RENDER_THRESHOLD = 50;
|
||||||
const NUMBER_OF_FRAMES_TO_MEASURE = 20;
|
const NUMBER_OF_FRAMES_TO_MEASURE = 20;
|
||||||
|
|
||||||
|
let CanvasAddon: typeof CanvasAddonType;
|
||||||
let SearchAddon: typeof SearchAddonType;
|
let SearchAddon: typeof SearchAddonType;
|
||||||
|
let SerializeAddon: typeof SerializeAddonType;
|
||||||
let Unicode11Addon: typeof Unicode11AddonType;
|
let Unicode11Addon: typeof Unicode11AddonType;
|
||||||
let WebglAddon: typeof WebglAddonType;
|
let WebglAddon: typeof WebglAddonType;
|
||||||
let SerializeAddon: typeof SerializeAddonType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wraps the xterm object with additional functionality. Interaction with the backing process is out
|
* Wraps the xterm object with additional functionality. Interaction with the backing process is out
|
||||||
|
@ -56,6 +58,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
|
|
||||||
private _core: IXtermCore;
|
private _core: IXtermCore;
|
||||||
private static _suggestedRendererType: 'canvas' | 'dom' | undefined = undefined;
|
private static _suggestedRendererType: 'canvas' | 'dom' | undefined = undefined;
|
||||||
|
private static _checkedWebglCompatible = false;
|
||||||
private _container?: HTMLElement;
|
private _container?: HTMLElement;
|
||||||
|
|
||||||
// Always on addons
|
// Always on addons
|
||||||
|
@ -64,6 +67,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
private _decorationAddon: DecorationAddon | undefined;
|
private _decorationAddon: DecorationAddon | undefined;
|
||||||
|
|
||||||
// Optional addons
|
// Optional addons
|
||||||
|
private _canvasAddon?: CanvasAddonType;
|
||||||
private _searchAddon?: SearchAddonType;
|
private _searchAddon?: SearchAddonType;
|
||||||
private _unicode11Addon?: Unicode11AddonType;
|
private _unicode11Addon?: Unicode11AddonType;
|
||||||
private _webglAddon?: WebglAddonType;
|
private _webglAddon?: WebglAddonType;
|
||||||
|
@ -116,6 +120,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
const editorOptions = this._configurationService.getValue<IEditorOptions>('editor');
|
const editorOptions = this._configurationService.getValue<IEditorOptions>('editor');
|
||||||
|
|
||||||
this.raw = this.add(new xtermCtor({
|
this.raw = this.add(new xtermCtor({
|
||||||
|
allowProposedApi: true,
|
||||||
cols,
|
cols,
|
||||||
rows,
|
rows,
|
||||||
altClickMovesCursor: config.altClickMovesCursor && editorOptions.multiCursorModifier === 'alt',
|
altClickMovesCursor: config.altClickMovesCursor && editorOptions.multiCursorModifier === 'alt',
|
||||||
|
@ -132,14 +137,12 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
cursorBlink: config.cursorBlinking,
|
cursorBlink: config.cursorBlinking,
|
||||||
cursorStyle: config.cursorStyle === 'line' ? 'bar' : config.cursorStyle,
|
cursorStyle: config.cursorStyle === 'line' ? 'bar' : config.cursorStyle,
|
||||||
cursorWidth: config.cursorWidth,
|
cursorWidth: config.cursorWidth,
|
||||||
bellStyle: 'none',
|
|
||||||
macOptionIsMeta: config.macOptionIsMeta,
|
macOptionIsMeta: config.macOptionIsMeta,
|
||||||
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
|
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
|
||||||
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
|
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
|
||||||
fastScrollModifier: 'alt',
|
fastScrollModifier: 'alt',
|
||||||
fastScrollSensitivity: config.fastScrollSensitivity,
|
fastScrollSensitivity: config.fastScrollSensitivity,
|
||||||
scrollSensitivity: config.mouseWheelScrollSensitivity,
|
scrollSensitivity: config.mouseWheelScrollSensitivity,
|
||||||
rendererType: this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType),
|
|
||||||
wordSeparator: config.wordSeparators,
|
wordSeparator: config.wordSeparators,
|
||||||
overviewRulerWidth: 10
|
overviewRulerWidth: 10
|
||||||
}));
|
}));
|
||||||
|
@ -217,6 +220,9 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
this._container = container;
|
this._container = container;
|
||||||
if (this._shouldLoadWebgl()) {
|
if (this._shouldLoadWebgl()) {
|
||||||
this._enableWebglRenderer();
|
this._enableWebglRenderer();
|
||||||
|
} else if (this._shouldLoadCanvas()) {
|
||||||
|
this._enableCanvasRenderer();
|
||||||
|
// rendererType: this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType),
|
||||||
}
|
}
|
||||||
// Screen must be created at this point as xterm.open is called
|
// Screen must be created at this point as xterm.open is called
|
||||||
return this._container.querySelector('.xterm-screen')!;
|
return this._container.querySelector('.xterm-screen')!;
|
||||||
|
@ -244,7 +250,11 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
this._enableWebglRenderer();
|
this._enableWebglRenderer();
|
||||||
} else {
|
} else {
|
||||||
this._disposeOfWebglRenderer();
|
this._disposeOfWebglRenderer();
|
||||||
this.raw.options.rendererType = this._getBuiltInXtermRenderer(config.gpuAcceleration, XtermTerminal._suggestedRendererType);
|
if (this._shouldLoadCanvas()) {
|
||||||
|
this._enableCanvasRenderer();
|
||||||
|
} else {
|
||||||
|
this._disposeOfCanvasRenderer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +262,10 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
return !isSafari && (this._configHelper.config.gpuAcceleration === 'auto' && XtermTerminal._suggestedRendererType === undefined) || this._configHelper.config.gpuAcceleration === 'on';
|
return !isSafari && (this._configHelper.config.gpuAcceleration === 'auto' && XtermTerminal._suggestedRendererType === undefined) || this._configHelper.config.gpuAcceleration === 'on';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _shouldLoadCanvas(): boolean {
|
||||||
|
return (this._configHelper.config.gpuAcceleration === 'auto' && (XtermTerminal._suggestedRendererType === undefined || XtermTerminal._suggestedRendererType === 'canvas')) || this._configHelper.config.gpuAcceleration === 'canvas';
|
||||||
|
}
|
||||||
|
|
||||||
forceRedraw() {
|
forceRedraw() {
|
||||||
this._webglAddon?.clearTextureAtlas();
|
this._webglAddon?.clearTextureAtlas();
|
||||||
this.raw.clearTextureAtlas();
|
this.raw.clearTextureAtlas();
|
||||||
|
@ -270,8 +284,8 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
// This is to fix an issue where dragging the windpow to the top of the screen to
|
// 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
|
// maximize on Windows/Linux would fire an event saying that the terminal was not
|
||||||
// visible.
|
// visible.
|
||||||
if (this.raw.getOption('rendererType') === 'canvas') {
|
if (!!this._canvasAddon) {
|
||||||
this._core._renderService?._onIntersectionChange({ intersectionRatio: 1 });
|
this._core._renderService?._handleIntersectionChange({ intersectionRatio: 1 });
|
||||||
// HACK: Force a refresh of the screen to ensure links are refresh corrected.
|
// 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 can probably be removed when the above hack is fixed in Chromium.
|
||||||
this.raw.refresh(0, this.raw.rows - 1);
|
this.raw.refresh(0, this.raw.rows - 1);
|
||||||
|
@ -422,27 +436,49 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getBuiltInXtermRenderer(gpuAcceleration: string, suggestedRendererType?: string): RendererType {
|
// TODO: Fix renderer
|
||||||
let rendererType: RendererType = 'canvas';
|
// private _getBuiltInXtermRenderer(gpuAcceleration: string, suggestedRendererType?: string): RendererType {
|
||||||
if (gpuAcceleration === 'off' || (gpuAcceleration === 'auto' && suggestedRendererType === 'dom')) {
|
// let rendererType: RendererType = 'canvas';
|
||||||
rendererType = 'dom';
|
// if (gpuAcceleration === 'off' || (gpuAcceleration === 'auto' && suggestedRendererType === 'dom')) {
|
||||||
}
|
// rendererType = 'dom';
|
||||||
return rendererType;
|
// }
|
||||||
}
|
// return rendererType;
|
||||||
|
// }
|
||||||
|
|
||||||
private async _enableWebglRenderer(): Promise<void> {
|
private async _enableWebglRenderer(): Promise<void> {
|
||||||
if (!this.raw.element || this._webglAddon) {
|
if (!this.raw.element || this._webglAddon) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the the WebGL renderer is compatible with xterm.js:
|
||||||
|
// - https://github.com/microsoft/vscode/issues/190195
|
||||||
|
// - https://github.com/xtermjs/xterm.js/issues/4665
|
||||||
|
// - https://bugs.chromium.org/p/chromium/issues/detail?id=1476475
|
||||||
|
if (!XtermTerminal._checkedWebglCompatible) {
|
||||||
|
XtermTerminal._checkedWebglCompatible = true;
|
||||||
|
const checkCanvas = document.createElement('canvas');
|
||||||
|
const checkGl = checkCanvas.getContext('webgl2');
|
||||||
|
const debugInfo = checkGl?.getExtension('WEBGL_debug_renderer_info');
|
||||||
|
if (checkGl && debugInfo) {
|
||||||
|
const renderer = checkGl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
|
||||||
|
if (renderer.startsWith('ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)')) {
|
||||||
|
this._disableWebglForThisSession();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const Addon = await this._getWebglAddonConstructor();
|
const Addon = await this._getWebglAddonConstructor();
|
||||||
this._webglAddon = new Addon();
|
this._webglAddon = new Addon();
|
||||||
|
this._disposeOfCanvasRenderer();
|
||||||
try {
|
try {
|
||||||
this.raw.loadAddon(this._webglAddon);
|
this.raw.loadAddon(this._webglAddon);
|
||||||
this._logService.trace('Webgl was loaded');
|
this._logService.trace('Webgl was loaded');
|
||||||
this._webglAddon.onContextLoss(() => {
|
this._webglAddon.onContextLoss(() => {
|
||||||
this._logService.info(`Webgl lost context, disposing of webgl renderer`);
|
this._logService.info(`Webgl lost context, disposing of webgl renderer`);
|
||||||
this._disposeOfWebglRenderer();
|
this._disposeOfWebglRenderer();
|
||||||
this.raw.options.rendererType = 'dom';
|
// TODO: Fix renderer
|
||||||
|
// this.raw.options.rendererType = 'dom';
|
||||||
});
|
});
|
||||||
// Uncomment to add the texture atlas to the DOM
|
// Uncomment to add the texture atlas to the DOM
|
||||||
// setTimeout(() => {
|
// setTimeout(() => {
|
||||||
|
@ -457,12 +493,45 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
if (!neverMeasureRenderTime && this._configHelper.config.gpuAcceleration !== 'off') {
|
if (!neverMeasureRenderTime && this._configHelper.config.gpuAcceleration !== 'off') {
|
||||||
this._measureRenderTime();
|
this._measureRenderTime();
|
||||||
}
|
}
|
||||||
this.raw.options.rendererType = 'canvas';
|
this._disableWebglForThisSession();
|
||||||
XtermTerminal._suggestedRendererType = 'canvas';
|
|
||||||
this._disposeOfWebglRenderer();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _disableWebglForThisSession() {
|
||||||
|
XtermTerminal._suggestedRendererType = 'canvas';
|
||||||
|
this._disposeOfWebglRenderer();
|
||||||
|
this._enableCanvasRenderer();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async _enableCanvasRenderer(): Promise<void> {
|
||||||
|
if (!this.raw.element || this._canvasAddon) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const Addon = await this._getCanvasAddonConstructor();
|
||||||
|
this._canvasAddon = new Addon();
|
||||||
|
this._disposeOfWebglRenderer();
|
||||||
|
try {
|
||||||
|
this.raw.loadAddon(this._canvasAddon);
|
||||||
|
this._logService.trace('Canvas was loaded');
|
||||||
|
} catch (e) {
|
||||||
|
this._logService.warn(`Canvas could not be loaded. Falling back to the dom renderer type.`, e);
|
||||||
|
const neverMeasureRenderTime = this._storageService.getBoolean(TerminalStorageKeys.NeverMeasureRenderTime, StorageScope.GLOBAL, false);
|
||||||
|
// if it's already set to dom, no need to measure render time
|
||||||
|
if (!neverMeasureRenderTime && this._configHelper.config.gpuAcceleration !== 'off') {
|
||||||
|
this._measureRenderTime();
|
||||||
|
}
|
||||||
|
XtermTerminal._suggestedRendererType = 'dom';
|
||||||
|
this._disposeOfCanvasRenderer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async _getCanvasAddonConstructor(): Promise<typeof CanvasAddonType> {
|
||||||
|
if (!CanvasAddon) {
|
||||||
|
CanvasAddon = (await import('xterm-addon-canvas')).CanvasAddon;
|
||||||
|
}
|
||||||
|
return CanvasAddon;
|
||||||
|
}
|
||||||
|
|
||||||
protected async _getSearchAddonConstructor(): Promise<typeof SearchAddonType> {
|
protected async _getSearchAddonConstructor(): Promise<typeof SearchAddonType> {
|
||||||
if (!SearchAddon) {
|
if (!SearchAddon) {
|
||||||
SearchAddon = (await import('xterm-addon-search')).SearchAddon;
|
SearchAddon = (await import('xterm-addon-search')).SearchAddon;
|
||||||
|
@ -491,6 +560,15 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
return SerializeAddon;
|
return SerializeAddon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _disposeOfCanvasRenderer(): void {
|
||||||
|
try {
|
||||||
|
this._canvasAddon?.dispose();
|
||||||
|
} catch {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
this._canvasAddon = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
private _disposeOfWebglRenderer(): void {
|
private _disposeOfWebglRenderer(): void {
|
||||||
try {
|
try {
|
||||||
this._webglAddon?.dispose();
|
this._webglAddon?.dispose();
|
||||||
|
@ -576,7 +654,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
foreground: foregroundColor?.toString(),
|
foreground: foregroundColor?.toString(),
|
||||||
cursor: cursorColor?.toString(),
|
cursor: cursorColor?.toString(),
|
||||||
cursorAccent: cursorAccentColor?.toString(),
|
cursorAccent: cursorAccentColor?.toString(),
|
||||||
selection: selectionBackgroundColor?.toString(),
|
selectionBackground: selectionBackgroundColor?.toString(),
|
||||||
selectionForeground: selectionForegroundColor?.toString(),
|
selectionForeground: selectionForegroundColor?.toString(),
|
||||||
black: theme.getColor(ansiColorIdentifiers[0])?.toString(),
|
black: theme.getColor(ansiColorIdentifiers[0])?.toString(),
|
||||||
red: theme.getColor(ansiColorIdentifiers[1])?.toString(),
|
red: theme.getColor(ansiColorIdentifiers[1])?.toString(),
|
||||||
|
@ -598,7 +676,7 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal {
|
||||||
}
|
}
|
||||||
|
|
||||||
private _updateTheme(theme?: IColorTheme): void {
|
private _updateTheme(theme?: IColorTheme): void {
|
||||||
this.raw.setOption('theme', this._getXtermTheme(theme));
|
this.raw.options.theme = this._getXtermTheme(theme);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _updateUnicodeVersion(): Promise<void> {
|
private async _updateUnicodeVersion(): Promise<void> {
|
||||||
|
|
|
@ -28,9 +28,11 @@ import { TerminalCapabilityStore } from 'vs/platform/terminal/common/capabilitie
|
||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService';
|
import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService';
|
||||||
|
|
||||||
class TestWebglAddon {
|
class TestWebglAddon implements WebglAddon {
|
||||||
static shouldThrow = false;
|
static shouldThrow = false;
|
||||||
static isEnabled = false;
|
static isEnabled = false;
|
||||||
|
readonly onChangeTextureAtlas = new Emitter().event as IEvent<HTMLCanvasElement>;
|
||||||
|
readonly onAddTextureAtlasCanvas = new Emitter().event as IEvent<HTMLCanvasElement>;
|
||||||
readonly onContextLoss = new Emitter().event as IEvent<void>;
|
readonly onContextLoss = new Emitter().event as IEvent<void>;
|
||||||
activate() {
|
activate() {
|
||||||
TestWebglAddon.isEnabled = !TestWebglAddon.shouldThrow;
|
TestWebglAddon.isEnabled = !TestWebglAddon.shouldThrow;
|
||||||
|
@ -120,8 +122,8 @@ suite('XtermTerminal', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should use fallback dimensions of 80x30', () => {
|
test('should use fallback dimensions of 80x30', () => {
|
||||||
strictEqual(xterm.raw.options.cols, 80);
|
strictEqual(xterm.raw.cols, 80);
|
||||||
strictEqual(xterm.raw.options.rows, 30);
|
strictEqual(xterm.raw.rows, 30);
|
||||||
});
|
});
|
||||||
|
|
||||||
suite('theme', () => {
|
suite('theme', () => {
|
||||||
|
@ -243,7 +245,6 @@ suite('XtermTerminal', () => {
|
||||||
suite('renderers', () => {
|
suite('renderers', () => {
|
||||||
test('should re-evaluate gpu acceleration auto when the setting is changed', async () => {
|
test('should re-evaluate gpu acceleration auto when the setting is changed', async () => {
|
||||||
// Check initial state
|
// Check initial state
|
||||||
strictEqual(xterm.raw.options.rendererType, 'dom');
|
|
||||||
strictEqual(TestWebglAddon.isEnabled, false);
|
strictEqual(TestWebglAddon.isEnabled, false);
|
||||||
|
|
||||||
// Open xterm as otherwise the webgl addon won't activate
|
// Open xterm as otherwise the webgl addon won't activate
|
||||||
|
@ -261,18 +262,17 @@ suite('XtermTerminal', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn off to reset state
|
// Turn off to reset state
|
||||||
|
// TODO: Fix renderer
|
||||||
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'off' } });
|
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'off' } });
|
||||||
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
|
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
|
||||||
await xterm.webglAddonPromise; // await addon activate
|
await xterm.webglAddonPromise; // await addon activate
|
||||||
strictEqual(xterm.raw.options.rendererType, 'dom');
|
|
||||||
strictEqual(TestWebglAddon.isEnabled, false);
|
strictEqual(TestWebglAddon.isEnabled, false);
|
||||||
|
|
||||||
// Set to auto again but throw when activating the webgl addon
|
// // Set to auto again but throw when activating the webgl addon
|
||||||
TestWebglAddon.shouldThrow = true;
|
// TestWebglAddon.shouldThrow = true;
|
||||||
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'auto' } });
|
await configurationService.setUserConfiguration('terminal', { integrated: { ...defaultTerminalConfig, gpuAcceleration: 'auto' } });
|
||||||
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
|
configurationService.onDidChangeConfigurationEmitter.fire({ affectsConfiguration: () => true } as any);
|
||||||
await xterm.webglAddonPromise; // await addon activate
|
await xterm.webglAddonPromise; // await addon activate
|
||||||
strictEqual(xterm.raw.options.rendererType, 'canvas');
|
|
||||||
strictEqual(TestWebglAddon.isEnabled, false);
|
strictEqual(TestWebglAddon.isEnabled, false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -516,13 +516,13 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
|
||||||
this.element!.setAttribute('src', `${this.webviewContentEndpoint(encodedWebviewOrigin)}/${fileName}?${queryString}`);
|
this.element!.setAttribute('src', `${this.webviewContentEndpoint(encodedWebviewOrigin)}/${fileName}?${queryString}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
public mountTo(parent: HTMLElement) {
|
public mountTo(element: HTMLElement) {
|
||||||
if (!this.element) {
|
if (!this.element) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._webviewFindWidget) {
|
if (this._webviewFindWidget) {
|
||||||
parent.appendChild(this._webviewFindWidget.getDomNode());
|
element.appendChild(this._webviewFindWidget.getDomNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
[EventType.MOUSE_DOWN, EventType.MOUSE_MOVE, EventType.DROP].forEach(eventName => {
|
[EventType.MOUSE_DOWN, EventType.MOUSE_MOVE, EventType.DROP].forEach(eventName => {
|
||||||
|
@ -531,11 +531,15 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
[parent, window].forEach(node => this._register(addDisposableListener(node as HTMLElement, EventType.DRAG_END, () => {
|
for (const node of [element, window]) {
|
||||||
this.stopBlockingIframeDragEvents();
|
this._register(addDisposableListener(node, EventType.DRAG_END, () => {
|
||||||
})));
|
this.stopBlockingIframeDragEvents();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
parent.appendChild(this.element);
|
element.id = this.id; // This is used by aria-flow for accessibility order
|
||||||
|
|
||||||
|
element.appendChild(this.element);
|
||||||
}
|
}
|
||||||
|
|
||||||
private startBlockingIframeDragEvents() {
|
private startBlockingIframeDragEvents() {
|
||||||
|
|
53
yarn.lock
53
yarn.lock
|
@ -12315,35 +12315,40 @@ xtend@~2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
object-keys "~0.4.0"
|
object-keys "~0.4.0"
|
||||||
|
|
||||||
xterm-addon-search@0.9.0-beta.39:
|
xterm-addon-canvas@0.6.0-beta.27:
|
||||||
version "0.9.0-beta.39"
|
version "0.6.0-beta.27"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.9.0-beta.39.tgz#e8376e1485ee7d763c07d1a8f1354114f65b3e3e"
|
resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.6.0-beta.27.tgz#2517f050d165b093a3c3e564e4420ccc3ccbad75"
|
||||||
integrity sha512-h45wkecgfqXXoAUqgNytAfSd6g0xNT6rZy/enVaEU0aes7QoL9pxHUKkCry8PP6hs03Slk0VxQ4AGsbSZGvK/w==
|
integrity sha512-mSxEJKPnXYKkD6/zQLdNH6kB+sr4B+4DMFzntWgxLjHJdyOO95wUSAtBFnhAUez2nNYvXbs/OXpEbdVdO7f2kQ==
|
||||||
|
|
||||||
xterm-addon-serialize@0.7.0-beta.12:
|
xterm-addon-search@0.14.0-beta.27:
|
||||||
version "0.7.0-beta.12"
|
version "0.14.0-beta.27"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.7.0-beta.12.tgz#4f845d8b1a9f9b7ae3f910455ce8c58b041babc7"
|
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.14.0-beta.27.tgz#b6f81eac5047253a5c664349c47498a81b6ec168"
|
||||||
integrity sha512-b4Ug0B/RSJMux+KAcp+PXVqubVyXjN1yCQw1FOkgVYTpmd9AH/X+EcxKml5Lz8DsKmsXqfD9AlV3WpEeT+OtMw==
|
integrity sha512-T4Exwf/rqoLHqGUUIta5Pw/i9PljvroZwLxc7RnVyDqpNsTifDn3675kS54CxwqPlv4owFhxujTDzJPCUEkM2A==
|
||||||
|
|
||||||
xterm-addon-unicode11@0.4.0-beta.3:
|
xterm-addon-serialize@0.12.0-beta.26:
|
||||||
version "0.4.0-beta.3"
|
version "0.12.0-beta.26"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa"
|
resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.12.0-beta.26.tgz#cb5bd80128e82880369cb012938e14414b182aa1"
|
||||||
integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q==
|
integrity sha512-b4lOcttE6lqAF3zB2l8XtDShe5djhl9SueljnVWuG4mYMYPQoiklxFcpY66sjSCIAS6NsbtrL/LGQ/0eZGi+Ig==
|
||||||
|
|
||||||
xterm-addon-webgl@0.12.0-beta.37:
|
xterm-addon-unicode11@0.7.0-beta.26:
|
||||||
version "0.12.0-beta.37"
|
version "0.7.0-beta.26"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.12.0-beta.37.tgz#e465100041a7e0b1d32b01cd0b0ba5a516ac13c2"
|
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.7.0-beta.26.tgz#f9606231a8f13e57dbdec5e884b044b0813931f5"
|
||||||
integrity sha512-d4GfKlMrWZGzsMfMHd2siG+QiOvwikhwiu+JQlIhlnAShT/wU5BOGbNfDDA1tHmkW7G1UCFgucBuVxrs5wjuBQ==
|
integrity sha512-po+z1ayyrkWh8IGXKpbwCLKLKfcjotZVKqowU6PtHuDtJm/J8rlzvV2eJU1WQ/8ezpopU09ibWCvaf1a7EPuxA==
|
||||||
|
|
||||||
xterm-headless@4.19.0-beta.58:
|
xterm-addon-webgl@0.17.0-beta.26:
|
||||||
version "4.19.0-beta.58"
|
version "0.17.0-beta.26"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-4.19.0-beta.58.tgz#3a38cf3b9cd2606fb342a5cf8f2a0cfb963a62e8"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.17.0-beta.26.tgz#aee4a043981d5d303b7112ef7049bc2865e75393"
|
||||||
integrity sha512-wKQW8VzkFjyYDvcaM26gulo+YghyocfkZnKMH7gc/+/mFn3YXUPBPuOcX6e0M7NibyMlewpQpZjHQUPLBjkzfw==
|
integrity sha512-N8CuAPZnoDlQ6yV7n4eXQ2ONPr/GdxiwgxrJjNks4CzzHiJREm23FQIv0fCTwKQS5xU3qoc4LlT3vZ1tKGjtQw==
|
||||||
|
|
||||||
xterm@4.19.0-beta.58:
|
xterm-headless@5.4.0-beta.27:
|
||||||
version "4.19.0-beta.58"
|
version "5.4.0-beta.27"
|
||||||
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0-beta.58.tgz#cbe535b0b85bc7f8ae3cc242df006bea04cdf541"
|
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.4.0-beta.27.tgz#cfce5f86e83580388238ea204bb451b7ffe94dc9"
|
||||||
integrity sha512-fr3QC2qS2NBab8X7kwA/3QZELzQqhAKsngvK8NkhsrFN1DAuyEETkzqXuKbO7OKpCB6VqGDN6GPkNlUB9VrIDA==
|
integrity sha512-vdrq5eeNMyHZRDw5XR/TPl8oPln0BqbR07akt/fDXMsVg6YwWG+UOnU6GIMj7bJaBed5YkPV9NeBtdsVQn4Lyw==
|
||||||
|
|
||||||
|
xterm@5.4.0-beta.27:
|
||||||
|
version "5.4.0-beta.27"
|
||||||
|
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.4.0-beta.27.tgz#f641ee045a65c9c8967fac534a202062706a8fa9"
|
||||||
|
integrity sha512-gKqtrjy0RLk2123oFyPw5tkV96jGz4c/JkY8/XUvBXoMVsX4A7rVKpHlmHhmnuK1X5ERAkvCD21YE7LfB8WYkw==
|
||||||
|
|
||||||
y18n@^3.2.1:
|
y18n@^3.2.1:
|
||||||
version "3.2.2"
|
version "3.2.2"
|
||||||
|
|
Loading…
Reference in New Issue