Skip to content

Commit fa9d5ab

Browse files
authored
Merge pull request microsoft#159578 from microsoft/tyriar/osc_hyperlink
Support terminal OSC hyperlink sequence
2 parents 72f734b + e0335f8 commit fa9d5ab

File tree

8 files changed

+84
-35
lines changed

8 files changed

+84
-35
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@
8686
"vscode-proxy-agent": "^0.12.0",
8787
"vscode-regexpp": "^3.1.0",
8888
"vscode-textmate": "7.0.1",
89-
"xterm": "5.0.0-beta.44",
89+
"xterm": "5.0.0-beta.48",
9090
"xterm-addon-canvas": "0.2.0-beta.21",
9191
"xterm-addon-search": "0.10.0-beta.5",
9292
"xterm-addon-serialize": "0.8.0-beta.5",
9393
"xterm-addon-unicode11": "0.4.0-beta.5",
94-
"xterm-addon-webgl": "0.13.0-beta.45",
94+
"xterm-addon-webgl": "0.13.0-beta.46",
9595
"xterm-headless": "5.0.0-beta.5",
9696
"yauzl": "^2.9.2",
9797
"yazl": "^2.4.3"
@@ -123,8 +123,8 @@
123123
"@types/winreg": "^1.2.30",
124124
"@types/yauzl": "^2.9.1",
125125
"@types/yazl": "^2.4.2",
126-
"@typescript-eslint/experimental-utils": "^5.10.0",
127126
"@typescript-eslint/eslint-plugin": "^5.10.0",
127+
"@typescript-eslint/experimental-utils": "^5.10.0",
128128
"@typescript-eslint/parser": "^5.10.0",
129129
"@vscode/telemetry-extractor": "^1.9.8",
130130
"@vscode/test-web": "^0.0.29",

remote/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
"vscode-proxy-agent": "^0.12.0",
2525
"vscode-regexpp": "^3.1.0",
2626
"vscode-textmate": "7.0.1",
27-
"xterm": "5.0.0-beta.44",
27+
"xterm": "5.0.0-beta.48",
2828
"xterm-addon-canvas": "0.2.0-beta.21",
2929
"xterm-addon-search": "0.10.0-beta.5",
3030
"xterm-addon-serialize": "0.8.0-beta.5",
3131
"xterm-addon-unicode11": "0.4.0-beta.5",
32-
"xterm-addon-webgl": "0.13.0-beta.45",
32+
"xterm-addon-webgl": "0.13.0-beta.46",
3333
"xterm-headless": "5.0.0-beta.5",
3434
"yauzl": "^2.9.2",
3535
"yazl": "^2.4.3"

remote/web/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
"tas-client-umd": "0.1.6",
1212
"vscode-oniguruma": "1.6.1",
1313
"vscode-textmate": "7.0.1",
14-
"xterm": "5.0.0-beta.44",
14+
"xterm": "5.0.0-beta.48",
1515
"xterm-addon-canvas": "0.2.0-beta.21",
1616
"xterm-addon-search": "0.10.0-beta.5",
1717
"xterm-addon-unicode11": "0.4.0-beta.5",
18-
"xterm-addon-webgl": "0.13.0-beta.45"
18+
"xterm-addon-webgl": "0.13.0-beta.46"
1919
}
2020
}

remote/web/yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ [email protected]:
8383
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.5.tgz#3900e66f10d2e506133b61d7421aab6878d32665"
8484
integrity sha512-+g+fuxAd/tkCEJ/jhdnebXKtdPrhsu4VKWNnB/3qM35GbuGQOasmYFYnKL+HYZMpbQ6YqeZcXTVg/wnCTttz0g==
8585

86-
87-
version "0.13.0-beta.45"
88-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.45.tgz#f1f3c08e2a819970c1af0362eeb61185babcb6fc"
89-
integrity sha512-TXq5mxvG2alo5hSj/aFqHDzR2RSV2HH4is7R7kVmSCVPnl2RgDfAPilXOEJyYFLF09EgiGiG5UZASYJjvJfMRg==
90-
91-
92-
version "5.0.0-beta.44"
93-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.44.tgz#854ed16c06808295777afc4ef7b78ccd55e59d4a"
94-
integrity sha512-raKvoikUjKZTO9duYliDp5hSKAwYia9P51QCumHY30V/bRZ2fq9ryyKQ65PxW8LzGYK8o7x7vNRUHVWbS073Tw==
86+
87+
version "0.13.0-beta.46"
88+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.46.tgz#a7b50fc8218f2712356379dbc8d64260d1aa062d"
89+
integrity sha512-OhB37wlPKDXNt8MxsNQDvuj0HWOTsIAjTeB1uxfNAMenNq/UA5JZFAs/76VGGNe4aMQtpkrixY3ROJVKXJcFqg==
90+
91+
92+
version "5.0.0-beta.48"
93+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.48.tgz#b1c8ae1b1e51ab6ee1f9139ac732c4959e431236"
94+
integrity sha512-7jwWuxtuLOgxkZfLbeBU6nGh+hlmHvz+gH38Ab12eV4jbYEs8Hzwd0hpWJa+/g2Py1ihBTME5TpuJXV2wUBR4A==

remote/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -808,20 +808,20 @@ [email protected]:
808808
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.5.tgz#3900e66f10d2e506133b61d7421aab6878d32665"
809809
integrity sha512-+g+fuxAd/tkCEJ/jhdnebXKtdPrhsu4VKWNnB/3qM35GbuGQOasmYFYnKL+HYZMpbQ6YqeZcXTVg/wnCTttz0g==
810810

811-
812-
version "0.13.0-beta.45"
813-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.45.tgz#f1f3c08e2a819970c1af0362eeb61185babcb6fc"
814-
integrity sha512-TXq5mxvG2alo5hSj/aFqHDzR2RSV2HH4is7R7kVmSCVPnl2RgDfAPilXOEJyYFLF09EgiGiG5UZASYJjvJfMRg==
811+
812+
version "0.13.0-beta.46"
813+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.46.tgz#a7b50fc8218f2712356379dbc8d64260d1aa062d"
814+
integrity sha512-OhB37wlPKDXNt8MxsNQDvuj0HWOTsIAjTeB1uxfNAMenNq/UA5JZFAs/76VGGNe4aMQtpkrixY3ROJVKXJcFqg==
815815

816816
817817
version "5.0.0-beta.5"
818818
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.0.0-beta.5.tgz#e29b6c5081f31f887122b7263ba996b0c46b3c22"
819819
integrity sha512-CMQ1+prBNF92oBMeZzc2rfTcmOaCGfwwSaoPYNTjyziZT6mZsEg7amajYkb0YAnqJ29MFm4kPGZbU78/dX4k2A==
820820

821-
822-
version "5.0.0-beta.44"
823-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.44.tgz#854ed16c06808295777afc4ef7b78ccd55e59d4a"
824-
integrity sha512-raKvoikUjKZTO9duYliDp5hSKAwYia9P51QCumHY30V/bRZ2fq9ryyKQ65PxW8LzGYK8o7x7vNRUHVWbS073Tw==
821+
822+
version "5.0.0-beta.48"
823+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.48.tgz#b1c8ae1b1e51ab6ee1f9139ac732c4959e431236"
824+
integrity sha512-7jwWuxtuLOgxkZfLbeBU6nGh+hlmHvz+gH38Ab12eV4jbYEs8Hzwd0hpWJa+/g2Py1ihBTME5TpuJXV2wUBR4A==
825825

826826
yallist@^4.0.0:
827827
version "4.0.0"

src/vs/workbench/contrib/terminal/browser/links/terminalLinkManager.ts

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { EventType } from 'vs/base/browser/dom';
77
import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
8-
import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle';
8+
import { DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
99
import { Schemas } from 'vs/base/common/network';
1010
import { posix, win32 } from 'vs/base/common/path';
1111
import { isMacintosh, OperatingSystem, OS } from 'vs/base/common/platform';
@@ -32,6 +32,8 @@ import { ITerminalCapabilityStore, TerminalCapability } from 'vs/platform/termin
3232
import { ITerminalConfiguration, ITerminalProcessManager, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal';
3333
import { IHoverAction } from 'vs/workbench/services/hover/browser/hover';
3434
import type { ILink, ILinkProvider, IViewportRange, Terminal } from 'xterm';
35+
import { convertBufferRangeToViewport } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkHelpers';
36+
import { RunOnceScheduler } from 'vs/base/common/async';
3537

3638
export type XtermLinkMatcherHandler = (event: MouseEvent | undefined, link: string) => Promise<void>;
3739
export type XtermLinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;
@@ -92,6 +94,48 @@ export class TerminalLinkManager extends DisposableStore {
9294
this._openers.set(TerminalBuiltinLinkType.Url, this._instantiationService.createInstance(TerminalUrlLinkOpener, !!this._processManager.remoteAuthority));
9395

9496
this._registerStandardLinkProviders();
97+
98+
let activeHoverDisposable: IDisposable | undefined;
99+
let activeTooltipScheduler: RunOnceScheduler | undefined;
100+
this.add(toDisposable(() => {
101+
activeHoverDisposable?.dispose();
102+
activeTooltipScheduler?.dispose();
103+
}));
104+
this._xterm.options.linkHandler = {
105+
activate: (_, text) => {
106+
this._openers.get(TerminalBuiltinLinkType.Url)?.open({
107+
type: TerminalBuiltinLinkType.Url,
108+
text,
109+
bufferRange: null!,
110+
uri: URI.parse(text)
111+
});
112+
},
113+
hover: (e, text, range) => {
114+
activeHoverDisposable?.dispose();
115+
activeHoverDisposable = undefined;
116+
activeTooltipScheduler?.dispose();
117+
activeTooltipScheduler = new RunOnceScheduler(() => {
118+
const core = (this._xterm as any)._core as IXtermCore;
119+
const cellDimensions = {
120+
width: core._renderService.dimensions.actualCellWidth,
121+
height: core._renderService.dimensions.actualCellHeight
122+
};
123+
const terminalDimensions = {
124+
width: this._xterm.cols,
125+
height: this._xterm.rows
126+
};
127+
activeHoverDisposable = this._showHover({
128+
viewportRange: convertBufferRangeToViewport(range, this._xterm.buffer.active.viewportY),
129+
cellDimensions,
130+
terminalDimensions
131+
}, this._getLinkHoverString(text, text), undefined, (text) => this._xterm.options.linkHandler?.activate(e, text, range));
132+
// Clear out scheduler until next hover event
133+
activeTooltipScheduler?.dispose();
134+
activeTooltipScheduler = undefined;
135+
}, this._configurationService.getValue('workbench.hover.delay'));
136+
activeTooltipScheduler.schedule();
137+
}
138+
};
95139
}
96140

97141
private _setupLinkDetector(id: string, detector: ITerminalLinkDetector, isExternal: boolean = false): ILinkProvider {
@@ -236,14 +280,16 @@ export class TerminalLinkManager extends DisposableStore {
236280
actions: IHoverAction[] | undefined,
237281
linkHandler: (url: string) => void,
238282
link?: TerminalLink
239-
) {
283+
): IDisposable | undefined {
240284
if (this._widgetManager) {
241285
const widget = this._instantiationService.createInstance(TerminalHover, targetOptions, text, actions, linkHandler);
242286
const attached = this._widgetManager.attachWidget(widget);
243287
if (attached) {
244288
link?.onInvalidated(() => attached.dispose());
245289
}
290+
return attached;
246291
}
292+
return undefined;
247293
}
248294

249295
setWidgetManager(widgetManager: TerminalWidgetManager): void {

src/vs/workbench/contrib/terminal/browser/media/xterm.css

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@
5555
.xterm .xterm-helpers {
5656
position: absolute;
5757
top: 0;
58-
/* The z-index of the helpers must be higher than the canvases in order for IMEs to appear on top. */
58+
/**
59+
* The z-index of the helpers must be higher than the canvases in order for
60+
* IMEs to appear on top.
61+
*/
5962
z-index: 5;
6063
}
6164

yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11532,20 +11532,20 @@ [email protected]:
1153211532
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.5.tgz#3900e66f10d2e506133b61d7421aab6878d32665"
1153311533
integrity sha512-+g+fuxAd/tkCEJ/jhdnebXKtdPrhsu4VKWNnB/3qM35GbuGQOasmYFYnKL+HYZMpbQ6YqeZcXTVg/wnCTttz0g==
1153411534

11535-
11536-
version "0.13.0-beta.45"
11537-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.45.tgz#f1f3c08e2a819970c1af0362eeb61185babcb6fc"
11538-
integrity sha512-TXq5mxvG2alo5hSj/aFqHDzR2RSV2HH4is7R7kVmSCVPnl2RgDfAPilXOEJyYFLF09EgiGiG5UZASYJjvJfMRg==
11535+
11536+
version "0.13.0-beta.46"
11537+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.13.0-beta.46.tgz#a7b50fc8218f2712356379dbc8d64260d1aa062d"
11538+
integrity sha512-OhB37wlPKDXNt8MxsNQDvuj0HWOTsIAjTeB1uxfNAMenNq/UA5JZFAs/76VGGNe4aMQtpkrixY3ROJVKXJcFqg==
1153911539

1154011540
1154111541
version "5.0.0-beta.5"
1154211542
resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.0.0-beta.5.tgz#e29b6c5081f31f887122b7263ba996b0c46b3c22"
1154311543
integrity sha512-CMQ1+prBNF92oBMeZzc2rfTcmOaCGfwwSaoPYNTjyziZT6mZsEg7amajYkb0YAnqJ29MFm4kPGZbU78/dX4k2A==
1154411544

11545-
11546-
version "5.0.0-beta.44"
11547-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.44.tgz#854ed16c06808295777afc4ef7b78ccd55e59d4a"
11548-
integrity sha512-raKvoikUjKZTO9duYliDp5hSKAwYia9P51QCumHY30V/bRZ2fq9ryyKQ65PxW8LzGYK8o7x7vNRUHVWbS073Tw==
11545+
11546+
version "5.0.0-beta.48"
11547+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.0.0-beta.48.tgz#b1c8ae1b1e51ab6ee1f9139ac732c4959e431236"
11548+
integrity sha512-7jwWuxtuLOgxkZfLbeBU6nGh+hlmHvz+gH38Ab12eV4jbYEs8Hzwd0hpWJa+/g2Py1ihBTME5TpuJXV2wUBR4A==
1154911549

1155011550
y18n@^3.2.1:
1155111551
version "3.2.2"

0 commit comments

Comments
 (0)