@opensumi/ide-terminal-next 2.12.1-next-079c1930
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/lib/browser/component/resize.delegate.d.ts +14 -0
- package/lib/browser/component/resize.delegate.d.ts.map +1 -0
- package/lib/browser/component/resize.delegate.js +47 -0
- package/lib/browser/component/resize.delegate.js.map +1 -0
- package/lib/browser/component/resize.module.less +55 -0
- package/lib/browser/component/resize.view.d.ts +16 -0
- package/lib/browser/component/resize.view.d.ts.map +1 -0
- package/lib/browser/component/resize.view.js +40 -0
- package/lib/browser/component/resize.view.js.map +1 -0
- package/lib/browser/component/tab.item.d.ts +7 -0
- package/lib/browser/component/tab.item.d.ts.map +1 -0
- package/lib/browser/component/tab.item.js +61 -0
- package/lib/browser/component/tab.item.js.map +1 -0
- package/lib/browser/component/tab.module.less +112 -0
- package/lib/browser/component/tab.view.d.ts +4 -0
- package/lib/browser/component/tab.view.d.ts.map +1 -0
- package/lib/browser/component/tab.view.js +30 -0
- package/lib/browser/component/tab.view.js.map +1 -0
- package/lib/browser/component/terminal.module.less +69 -0
- package/lib/browser/component/terminal.select.d.ts +4 -0
- package/lib/browser/component/terminal.select.d.ts.map +1 -0
- package/lib/browser/component/terminal.select.js +21 -0
- package/lib/browser/component/terminal.select.js.map +1 -0
- package/lib/browser/component/terminal.variable.d.ts +8 -0
- package/lib/browser/component/terminal.variable.d.ts.map +1 -0
- package/lib/browser/component/terminal.variable.js +44 -0
- package/lib/browser/component/terminal.variable.js.map +1 -0
- package/lib/browser/component/terminal.view.d.ts +5 -0
- package/lib/browser/component/terminal.view.d.ts.map +1 -0
- package/lib/browser/component/terminal.view.js +68 -0
- package/lib/browser/component/terminal.view.js.map +1 -0
- package/lib/browser/component/terminal.widget.d.ts +10 -0
- package/lib/browser/component/terminal.widget.d.ts.map +1 -0
- package/lib/browser/component/terminal.widget.js +51 -0
- package/lib/browser/component/terminal.widget.js.map +1 -0
- package/lib/browser/component/variable.module.less +15 -0
- package/lib/browser/contribution/index.d.ts +7 -0
- package/lib/browser/contribution/index.d.ts.map +1 -0
- package/lib/browser/contribution/index.js +10 -0
- package/lib/browser/contribution/index.js.map +1 -0
- package/lib/browser/contribution/terminal.command.d.ts +20 -0
- package/lib/browser/contribution/terminal.command.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.command.js +215 -0
- package/lib/browser/contribution/terminal.command.js.map +1 -0
- package/lib/browser/contribution/terminal.keybinding.d.ts +5 -0
- package/lib/browser/contribution/terminal.keybinding.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.keybinding.js +55 -0
- package/lib/browser/contribution/terminal.keybinding.js.map +1 -0
- package/lib/browser/contribution/terminal.lifecycle.d.ts +15 -0
- package/lib/browser/contribution/terminal.lifecycle.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.lifecycle.js +47 -0
- package/lib/browser/contribution/terminal.lifecycle.js.map +1 -0
- package/lib/browser/contribution/terminal.menu.d.ts +19 -0
- package/lib/browser/contribution/terminal.menu.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.menu.js +144 -0
- package/lib/browser/contribution/terminal.menu.js.map +1 -0
- package/lib/browser/contribution/terminal.network.d.ts +11 -0
- package/lib/browser/contribution/terminal.network.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.network.js +44 -0
- package/lib/browser/contribution/terminal.network.js.map +1 -0
- package/lib/browser/contribution/terminal.view.d.ts +7 -0
- package/lib/browser/contribution/terminal.view.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.view.js +55 -0
- package/lib/browser/contribution/terminal.view.js.map +1 -0
- package/lib/browser/index.d.ts +10 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +105 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/links/base.d.ts +8 -0
- package/lib/browser/links/base.d.ts.map +1 -0
- package/lib/browser/links/base.js +13 -0
- package/lib/browser/links/base.js.map +1 -0
- package/lib/browser/links/external-link-provider-adapter.d.ts +18 -0
- package/lib/browser/links/external-link-provider-adapter.d.ts.map +1 -0
- package/lib/browser/links/external-link-provider-adapter.js +56 -0
- package/lib/browser/links/external-link-provider-adapter.js.map +1 -0
- package/lib/browser/links/helpers.d.ts +7 -0
- package/lib/browser/links/helpers.d.ts.map +1 -0
- package/lib/browser/links/helpers.js +129 -0
- package/lib/browser/links/helpers.js.map +1 -0
- package/lib/browser/links/link-manager.d.ts +61 -0
- package/lib/browser/links/link-manager.d.ts.map +1 -0
- package/lib/browser/links/link-manager.js +252 -0
- package/lib/browser/links/link-manager.js.map +1 -0
- package/lib/browser/links/link.d.ts +24 -0
- package/lib/browser/links/link.d.ts.map +1 -0
- package/lib/browser/links/link.js +92 -0
- package/lib/browser/links/link.js.map +1 -0
- package/lib/browser/links/protocol-link-provider.d.ts +11 -0
- package/lib/browser/links/protocol-link-provider.d.ts.map +1 -0
- package/lib/browser/links/protocol-link-provider.js +53 -0
- package/lib/browser/links/protocol-link-provider.js.map +1 -0
- package/lib/browser/links/validated-local-link-provider.d.ts +31 -0
- package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -0
- package/lib/browser/links/validated-local-link-provider.js +137 -0
- package/lib/browser/links/validated-local-link-provider.js.map +1 -0
- package/lib/browser/terminal.addon.d.ts +42 -0
- package/lib/browser/terminal.addon.d.ts.map +1 -0
- package/lib/browser/terminal.addon.js +169 -0
- package/lib/browser/terminal.addon.js.map +1 -0
- package/lib/browser/terminal.api.d.ts +34 -0
- package/lib/browser/terminal.api.d.ts.map +1 -0
- package/lib/browser/terminal.api.js +132 -0
- package/lib/browser/terminal.api.js.map +1 -0
- package/lib/browser/terminal.client.d.ts +114 -0
- package/lib/browser/terminal.client.d.ts.map +1 -0
- package/lib/browser/terminal.client.js +518 -0
- package/lib/browser/terminal.client.js.map +1 -0
- package/lib/browser/terminal.color.d.ts +20 -0
- package/lib/browser/terminal.color.d.ts.map +1 -0
- package/lib/browser/terminal.color.js +172 -0
- package/lib/browser/terminal.color.js.map +1 -0
- package/lib/browser/terminal.context-key.d.ts +10 -0
- package/lib/browser/terminal.context-key.d.ts.map +1 -0
- package/lib/browser/terminal.context-key.js +28 -0
- package/lib/browser/terminal.context-key.js.map +1 -0
- package/lib/browser/terminal.context-menu.d.ts +15 -0
- package/lib/browser/terminal.context-menu.d.ts.map +1 -0
- package/lib/browser/terminal.context-menu.js +75 -0
- package/lib/browser/terminal.context-menu.js.map +1 -0
- package/lib/browser/terminal.controller.d.ts +68 -0
- package/lib/browser/terminal.controller.d.ts.map +1 -0
- package/lib/browser/terminal.controller.js +367 -0
- package/lib/browser/terminal.controller.js.map +1 -0
- package/lib/browser/terminal.environment.service.d.ts +27 -0
- package/lib/browser/terminal.environment.service.d.ts.map +1 -0
- package/lib/browser/terminal.environment.service.js +144 -0
- package/lib/browser/terminal.environment.service.js.map +1 -0
- package/lib/browser/terminal.error.d.ts +10 -0
- package/lib/browser/terminal.error.d.ts.map +1 -0
- package/lib/browser/terminal.error.js +58 -0
- package/lib/browser/terminal.error.js.map +1 -0
- package/lib/browser/terminal.ext.host.proxy.d.ts +58 -0
- package/lib/browser/terminal.ext.host.proxy.d.ts.map +1 -0
- package/lib/browser/terminal.ext.host.proxy.js +104 -0
- package/lib/browser/terminal.ext.host.proxy.js.map +1 -0
- package/lib/browser/terminal.input.d.ts +6 -0
- package/lib/browser/terminal.input.d.ts.map +1 -0
- package/lib/browser/terminal.input.js +32 -0
- package/lib/browser/terminal.input.js.map +1 -0
- package/lib/browser/terminal.network.d.ts +32 -0
- package/lib/browser/terminal.network.d.ts.map +1 -0
- package/lib/browser/terminal.network.js +150 -0
- package/lib/browser/terminal.network.js.map +1 -0
- package/lib/browser/terminal.preference.d.ts +26 -0
- package/lib/browser/terminal.preference.d.ts.map +1 -0
- package/lib/browser/terminal.preference.js +80 -0
- package/lib/browser/terminal.preference.js.map +1 -0
- package/lib/browser/terminal.render.d.ts +13 -0
- package/lib/browser/terminal.render.d.ts.map +1 -0
- package/lib/browser/terminal.render.js +25 -0
- package/lib/browser/terminal.render.js.map +1 -0
- package/lib/browser/terminal.restore.d.ts +10 -0
- package/lib/browser/terminal.restore.d.ts.map +1 -0
- package/lib/browser/terminal.restore.js +41 -0
- package/lib/browser/terminal.restore.js.map +1 -0
- package/lib/browser/terminal.search.d.ts +15 -0
- package/lib/browser/terminal.search.d.ts.map +1 -0
- package/lib/browser/terminal.search.js +53 -0
- package/lib/browser/terminal.search.js.map +1 -0
- package/lib/browser/terminal.service.d.ts +60 -0
- package/lib/browser/terminal.service.d.ts.map +1 -0
- package/lib/browser/terminal.service.js +212 -0
- package/lib/browser/terminal.service.js.map +1 -0
- package/lib/browser/terminal.theme.d.ts +7 -0
- package/lib/browser/terminal.theme.d.ts.map +1 -0
- package/lib/browser/terminal.theme.js +50 -0
- package/lib/browser/terminal.theme.js.map +1 -0
- package/lib/browser/terminal.view.d.ts +99 -0
- package/lib/browser/terminal.view.d.ts.map +1 -0
- package/lib/browser/terminal.view.js +358 -0
- package/lib/browser/terminal.view.js.map +1 -0
- package/lib/common/api.d.ts +20 -0
- package/lib/common/api.d.ts.map +1 -0
- package/lib/common/api.js +5 -0
- package/lib/common/api.js.map +1 -0
- package/lib/common/client.d.ts +163 -0
- package/lib/common/client.d.ts.map +1 -0
- package/lib/common/client.js +5 -0
- package/lib/common/client.js.map +1 -0
- package/lib/common/commands.d.ts +92 -0
- package/lib/common/commands.d.ts.map +1 -0
- package/lib/common/commands.js +97 -0
- package/lib/common/commands.js.map +1 -0
- package/lib/common/controller.d.ts +86 -0
- package/lib/common/controller.d.ts.map +1 -0
- package/lib/common/controller.js +7 -0
- package/lib/common/controller.js.map +1 -0
- package/lib/common/environmentVariable.d.ts +118 -0
- package/lib/common/environmentVariable.d.ts.map +1 -0
- package/lib/common/environmentVariable.js +27 -0
- package/lib/common/environmentVariable.js.map +1 -0
- package/lib/common/environmentVariableCollection.d.ts +10 -0
- package/lib/common/environmentVariableCollection.d.ts.map +1 -0
- package/lib/common/environmentVariableCollection.js +136 -0
- package/lib/common/environmentVariableCollection.js.map +1 -0
- package/lib/common/error.d.ts +30 -0
- package/lib/common/error.d.ts.map +1 -0
- package/lib/common/error.js +5 -0
- package/lib/common/error.js.map +1 -0
- package/lib/common/extension.d.ts +108 -0
- package/lib/common/extension.d.ts.map +1 -0
- package/lib/common/extension.js +52 -0
- package/lib/common/extension.js.map +1 -0
- package/lib/common/index.d.ts +17 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +21 -0
- package/lib/common/index.js.map +1 -0
- package/lib/common/link-computer.d.ts +56 -0
- package/lib/common/link-computer.d.ts.map +1 -0
- package/lib/common/link-computer.js +273 -0
- package/lib/common/link-computer.js.map +1 -0
- package/lib/common/menu.d.ts +5 -0
- package/lib/common/menu.d.ts.map +1 -0
- package/lib/common/menu.js +9 -0
- package/lib/common/menu.js.map +1 -0
- package/lib/common/network.d.ts +48 -0
- package/lib/common/network.d.ts.map +1 -0
- package/lib/common/network.js +10 -0
- package/lib/common/network.js.map +1 -0
- package/lib/common/preference.d.ts +33 -0
- package/lib/common/preference.d.ts.map +1 -0
- package/lib/common/preference.js +18 -0
- package/lib/common/preference.js.map +1 -0
- package/lib/common/pty.d.ts +205 -0
- package/lib/common/pty.d.ts.map +1 -0
- package/lib/common/pty.js +8 -0
- package/lib/common/pty.js.map +1 -0
- package/lib/common/render.d.ts +24 -0
- package/lib/common/render.d.ts.map +1 -0
- package/lib/common/render.js +10 -0
- package/lib/common/render.js.map +1 -0
- package/lib/common/resize.d.ts +39 -0
- package/lib/common/resize.d.ts.map +1 -0
- package/lib/common/resize.js +3 -0
- package/lib/common/resize.js.map +1 -0
- package/lib/common/restore.d.ts +6 -0
- package/lib/common/restore.d.ts.map +1 -0
- package/lib/common/restore.js +5 -0
- package/lib/common/restore.js.map +1 -0
- package/lib/common/service.d.ts +88 -0
- package/lib/common/service.d.ts.map +1 -0
- package/lib/common/service.js +6 -0
- package/lib/common/service.js.map +1 -0
- package/lib/common/shell.d.ts +10 -0
- package/lib/common/shell.d.ts.map +1 -0
- package/lib/common/shell.js +14 -0
- package/lib/common/shell.js.map +1 -0
- package/lib/common/theme.d.ts +6 -0
- package/lib/common/theme.d.ts.map +1 -0
- package/lib/common/theme.js +5 -0
- package/lib/common/theme.js.map +1 -0
- package/lib/common/utils.d.ts +4 -0
- package/lib/common/utils.d.ts.map +1 -0
- package/lib/common/utils.js +21 -0
- package/lib/common/utils.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/node/index.d.ts +10 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +35 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/pty.d.ts +11 -0
- package/lib/node/pty.d.ts.map +1 -0
- package/lib/node/pty.js +54 -0
- package/lib/node/pty.js.map +1 -0
- package/lib/node/shell.d.ts +3 -0
- package/lib/node/shell.d.ts.map +1 -0
- package/lib/node/shell.js +28 -0
- package/lib/node/shell.js.map +1 -0
- package/lib/node/terminal.service.client.d.ts +34 -0
- package/lib/node/terminal.service.client.d.ts.map +1 -0
- package/lib/node/terminal.service.client.js +111 -0
- package/lib/node/terminal.service.client.js.map +1 -0
- package/lib/node/terminal.service.d.ts +28 -0
- package/lib/node/terminal.service.d.ts.map +1 -0
- package/lib/node/terminal.service.js +136 -0
- package/lib/node/terminal.service.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
// Some code copued and modified from https://github.com/microsoft/vscode/blob/1.44.0/src/vs/workbench/contrib/terminal/browser/links/terminalLinkHelpers.ts
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.positionIsInRange = exports.getXtermLineContent = exports.convertBufferRangeToViewport = exports.convertLinkRangeToBuffer = void 0;
|
|
9
|
+
function convertLinkRangeToBuffer(lines, bufferWidth, range, startLine) {
|
|
10
|
+
const bufferRange = {
|
|
11
|
+
start: {
|
|
12
|
+
x: range.startColumn,
|
|
13
|
+
y: range.startLineNumber + startLine,
|
|
14
|
+
},
|
|
15
|
+
end: {
|
|
16
|
+
x: range.endColumn - 1,
|
|
17
|
+
y: range.endLineNumber + startLine,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
// Shift start range right for each wide character before the link
|
|
21
|
+
let startOffset = 0;
|
|
22
|
+
const startWrappedLineCount = Math.ceil(range.startColumn / bufferWidth);
|
|
23
|
+
for (let y = 0; y < Math.min(startWrappedLineCount); y++) {
|
|
24
|
+
const lineLength = Math.min(bufferWidth, range.startColumn - y * bufferWidth);
|
|
25
|
+
let lineOffset = 0;
|
|
26
|
+
const line = lines[y];
|
|
27
|
+
// Sanity check for line, apparently this can happen but it's not clear under what
|
|
28
|
+
// circumstances this happens. Continue on, skipping the remainder of start offset if this
|
|
29
|
+
// happens to minimize impact.
|
|
30
|
+
if (!line) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
for (let x = 0; x < Math.min(bufferWidth, lineLength + lineOffset); x++) {
|
|
34
|
+
const cell = line.getCell(x);
|
|
35
|
+
const width = cell.getWidth();
|
|
36
|
+
if (width === 2) {
|
|
37
|
+
lineOffset++;
|
|
38
|
+
}
|
|
39
|
+
const char = cell.getChars();
|
|
40
|
+
if (char.length > 1) {
|
|
41
|
+
lineOffset -= char.length - 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
startOffset += lineOffset;
|
|
45
|
+
}
|
|
46
|
+
// Shift end range right for each wide character inside the link
|
|
47
|
+
let endOffset = 0;
|
|
48
|
+
const endWrappedLineCount = Math.ceil(range.endColumn / bufferWidth);
|
|
49
|
+
for (let y = Math.max(0, startWrappedLineCount - 1); y < endWrappedLineCount; y++) {
|
|
50
|
+
const start = (y === startWrappedLineCount - 1 ? (range.startColumn + startOffset) % bufferWidth : 0);
|
|
51
|
+
const lineLength = Math.min(bufferWidth, range.endColumn + startOffset - y * bufferWidth);
|
|
52
|
+
const startLineOffset = (y === startWrappedLineCount - 1 ? startOffset : 0);
|
|
53
|
+
let lineOffset = 0;
|
|
54
|
+
const line = lines[y];
|
|
55
|
+
// Sanity check for line, apparently this can happen but it's not clear under what
|
|
56
|
+
// circumstances this happens. Continue on, skipping the remainder of start offset if this
|
|
57
|
+
// happens to minimize impact.
|
|
58
|
+
if (!line) {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
for (let x = start; x < Math.min(bufferWidth, lineLength + lineOffset + startLineOffset); x++) {
|
|
62
|
+
const cell = line.getCell(x);
|
|
63
|
+
const width = cell.getWidth();
|
|
64
|
+
// Offset for 0 cells following wide characters
|
|
65
|
+
if (width === 2) {
|
|
66
|
+
lineOffset++;
|
|
67
|
+
}
|
|
68
|
+
// Offset for early wrapping when the last cell in row is a wide character
|
|
69
|
+
if (x === bufferWidth - 1 && cell.getChars() === '') {
|
|
70
|
+
lineOffset++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
endOffset += lineOffset;
|
|
74
|
+
}
|
|
75
|
+
// Apply the width character offsets to the result
|
|
76
|
+
bufferRange.start.x += startOffset;
|
|
77
|
+
bufferRange.end.x += startOffset + endOffset;
|
|
78
|
+
// Convert back to wrapped lines
|
|
79
|
+
while (bufferRange.start.x > bufferWidth) {
|
|
80
|
+
bufferRange.start.x -= bufferWidth;
|
|
81
|
+
bufferRange.start.y++;
|
|
82
|
+
}
|
|
83
|
+
while (bufferRange.end.x > bufferWidth) {
|
|
84
|
+
bufferRange.end.x -= bufferWidth;
|
|
85
|
+
bufferRange.end.y++;
|
|
86
|
+
}
|
|
87
|
+
return bufferRange;
|
|
88
|
+
}
|
|
89
|
+
exports.convertLinkRangeToBuffer = convertLinkRangeToBuffer;
|
|
90
|
+
function convertBufferRangeToViewport(bufferRange, viewportY) {
|
|
91
|
+
return {
|
|
92
|
+
start: {
|
|
93
|
+
x: bufferRange.start.x - 1,
|
|
94
|
+
y: bufferRange.start.y - viewportY - 1,
|
|
95
|
+
},
|
|
96
|
+
end: {
|
|
97
|
+
x: bufferRange.end.x - 1,
|
|
98
|
+
y: bufferRange.end.y - viewportY - 1,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
exports.convertBufferRangeToViewport = convertBufferRangeToViewport;
|
|
103
|
+
function getXtermLineContent(buffer, lineStart, lineEnd, cols) {
|
|
104
|
+
let content = '';
|
|
105
|
+
for (let i = lineStart; i <= lineEnd; i++) {
|
|
106
|
+
// Make sure only 0 to cols are considered as resizing when windows mode is enabled will
|
|
107
|
+
// retain buffer data outside of the terminal width as reflow is disabled.
|
|
108
|
+
const line = buffer.getLine(i);
|
|
109
|
+
if (line) {
|
|
110
|
+
content += line.translateToString(true, 0, cols);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return content;
|
|
114
|
+
}
|
|
115
|
+
exports.getXtermLineContent = getXtermLineContent;
|
|
116
|
+
function positionIsInRange(position, range) {
|
|
117
|
+
if (position.y < range.start.y || position.y > range.end.y) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (position.y === range.start.y && position.x < range.start.x) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (position.y === range.end.y && position.x > range.end.x) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
exports.positionIsInRange = positionIsInRange;
|
|
129
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/browser/links/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Terminal } from 'xterm';
|
|
2
|
+
import { Disposable, IDisposable } from '@opensumi/ide-core-common';
|
|
3
|
+
import { ITerminalClient, ITerminalExternalLinkProvider } from '../../common';
|
|
4
|
+
import { TerminalClient } from '../terminal.client';
|
|
5
|
+
export declare type XtermLinkMatcherHandler = (event: MouseEvent | undefined, link: string) => Promise<void>;
|
|
6
|
+
export interface ITextEditorSelection {
|
|
7
|
+
readonly startLineNumber: number;
|
|
8
|
+
readonly startColumn: number;
|
|
9
|
+
readonly endLineNumber?: number;
|
|
10
|
+
readonly endColumn?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* An object responsible for managing registration of link matchers and link providers.
|
|
14
|
+
*/
|
|
15
|
+
export declare class TerminalLinkManager extends Disposable {
|
|
16
|
+
private _xterm;
|
|
17
|
+
private _client;
|
|
18
|
+
private _processCwd;
|
|
19
|
+
private _standardLinkProviders;
|
|
20
|
+
private _standardLinkProvidersDisposables;
|
|
21
|
+
private _editorService;
|
|
22
|
+
private _openerService;
|
|
23
|
+
private _fileService;
|
|
24
|
+
private readonly _fileSystem;
|
|
25
|
+
private _getHomeDirPromise;
|
|
26
|
+
constructor(_xterm: Terminal, _client: TerminalClient);
|
|
27
|
+
set processCwd(processCwd: string);
|
|
28
|
+
private _registerStandardLinkProviders;
|
|
29
|
+
registerExternalLinkProvider(instance: ITerminalClient, linkProvider: ITerminalExternalLinkProvider): IDisposable;
|
|
30
|
+
protected _wrapLinkHandler(handler: (event: MouseEvent | undefined, link: string) => void): XtermLinkMatcherHandler;
|
|
31
|
+
protected get _localLinkRegex(): RegExp;
|
|
32
|
+
private _handleLocalLink;
|
|
33
|
+
private _handleHypertextLink;
|
|
34
|
+
private _handleProtocolLink;
|
|
35
|
+
protected _isLinkActivationModifierDown(event: MouseEvent): boolean;
|
|
36
|
+
private get osPath();
|
|
37
|
+
/**
|
|
38
|
+
* 获取用户目录
|
|
39
|
+
*/
|
|
40
|
+
private _getUserHomeDir;
|
|
41
|
+
private _getUserHomeDirOnce;
|
|
42
|
+
protected _preprocessPath(link: string): Promise<string | null>;
|
|
43
|
+
private _resolvePath;
|
|
44
|
+
/**
|
|
45
|
+
* Returns line and column number of URl if that is present.
|
|
46
|
+
*
|
|
47
|
+
* @param link Url link which may contain line and column number.
|
|
48
|
+
*/
|
|
49
|
+
extractLineColumnInfo(link: string): LineColumnInfo;
|
|
50
|
+
/**
|
|
51
|
+
* Returns url from link as link may contain line and column information.
|
|
52
|
+
*
|
|
53
|
+
* @param link url link which may contain line and column number.
|
|
54
|
+
*/
|
|
55
|
+
extractLinkUrl(link: string): string | null;
|
|
56
|
+
}
|
|
57
|
+
export interface LineColumnInfo {
|
|
58
|
+
lineNumber: number;
|
|
59
|
+
columnNumber: number;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=link-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-manager.d.ts","sourceRoot":"","sources":["../../../src/browser/links/link-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAO,UAAU,EAAE,WAAW,EAAwC,MAAM,2BAA2B,CAAC;AAS/G,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,oBAAY,uBAAuB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErG,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,UAAU;IAoB/C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IApBjB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,iCAAiC,CAA8B;IAGvE,OAAO,CAAC,cAAc,CAAyB;IAG/C,OAAO,CAAC,cAAc,CAAiB;IAGvC,OAAO,CAAC,YAAY,CAAqB;IAGzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,kBAAkB,CAAkB;gBAGlC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,cAAc;IAuBjC,IAAW,UAAU,CAAC,UAAU,EAAE,MAAM,EAEvC;IAED,OAAO,CAAC,8BAA8B;IAQ/B,4BAA4B,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,6BAA6B,GAAG,WAAW;IAQxH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,uBAAuB;IAenH,SAAS,KAAK,eAAe,IAAI,MAAM,CAItC;YAEa,gBAAgB;IAgB9B,OAAO,CAAC,oBAAoB;YAId,mBAAmB;IAiBjC,SAAS,CAAC,6BAA6B,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAInE,OAAO,KAAK,MAAM,GAKjB;IAED;;OAEG;YACW,eAAe;IAS7B,OAAO,CAAC,mBAAmB;cAOX,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAmCvD,YAAY;IAuB1B;;;;OAIG;IACI,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IA6B1D;;;;OAIG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAOnD;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalLinkManager = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const xterm_1 = require("xterm");
|
|
6
|
+
const di_1 = require("@opensumi/di");
|
|
7
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
|
+
const platform_1 = require("@opensumi/ide-core-common/lib/platform");
|
|
9
|
+
const path_1 = require("@opensumi/ide-core-common/lib/path");
|
|
10
|
+
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
11
|
+
const ide_file_service_1 = require("@opensumi/ide-file-service");
|
|
12
|
+
const common_1 = require("@opensumi/ide-editor/lib/common");
|
|
13
|
+
const protocol_link_provider_1 = require("./protocol-link-provider");
|
|
14
|
+
const validated_local_link_provider_1 = require("./validated-local-link-provider");
|
|
15
|
+
const external_link_provider_adapter_1 = require("./external-link-provider-adapter");
|
|
16
|
+
const terminal_client_1 = require("../terminal.client");
|
|
17
|
+
/**
|
|
18
|
+
* An object responsible for managing registration of link matchers and link providers.
|
|
19
|
+
*/
|
|
20
|
+
let TerminalLinkManager = class TerminalLinkManager extends ide_core_common_1.Disposable {
|
|
21
|
+
constructor(_xterm, _client) {
|
|
22
|
+
super();
|
|
23
|
+
this._xterm = _xterm;
|
|
24
|
+
this._client = _client;
|
|
25
|
+
this._standardLinkProviders = [];
|
|
26
|
+
this._standardLinkProvidersDisposables = new ide_core_common_1.DisposableCollection();
|
|
27
|
+
// Protocol links
|
|
28
|
+
const wrappedActivateCallback = this._wrapLinkHandler((_, link) => this._handleProtocolLink(link));
|
|
29
|
+
const protocolProvider = new protocol_link_provider_1.TerminalProtocolLinkProvider(this._xterm, wrappedActivateCallback);
|
|
30
|
+
this._standardLinkProviders.push(protocolProvider);
|
|
31
|
+
// Validated local links
|
|
32
|
+
const wrappedTextLinkActivateCallback = this._wrapLinkHandler((_, link) => this._handleLocalLink(link));
|
|
33
|
+
const validatedProvider = new validated_local_link_provider_1.TerminalValidatedLocalLinkProvider(this._xterm, this._client, wrappedTextLinkActivateCallback, this._wrapLinkHandler.bind(this), async (link, cb) => cb(await this._resolvePath(link)));
|
|
34
|
+
this._standardLinkProviders.push(validatedProvider);
|
|
35
|
+
this._registerStandardLinkProviders();
|
|
36
|
+
}
|
|
37
|
+
set processCwd(processCwd) {
|
|
38
|
+
this._processCwd = processCwd;
|
|
39
|
+
}
|
|
40
|
+
_registerStandardLinkProviders() {
|
|
41
|
+
this._standardLinkProvidersDisposables.dispose();
|
|
42
|
+
this._standardLinkProvidersDisposables = new ide_core_common_1.DisposableCollection();
|
|
43
|
+
for (const p of this._standardLinkProviders) {
|
|
44
|
+
this._standardLinkProvidersDisposables.push(this._xterm.registerLinkProvider(p));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
registerExternalLinkProvider(instance, linkProvider) {
|
|
48
|
+
const wrappedLinkProvider = new external_link_provider_adapter_1.TerminalExternalLinkProviderAdapter(this._xterm, instance, linkProvider, this._wrapLinkHandler.bind(this));
|
|
49
|
+
const newLinkProvider = this._xterm.registerLinkProvider(wrappedLinkProvider);
|
|
50
|
+
// Re-register the standard link providers so they are a lower priority that the new one
|
|
51
|
+
this._registerStandardLinkProviders();
|
|
52
|
+
return newLinkProvider;
|
|
53
|
+
}
|
|
54
|
+
_wrapLinkHandler(handler) {
|
|
55
|
+
return async (event, link) => {
|
|
56
|
+
// Prevent default electron link handling so Alt+Click mode works normally
|
|
57
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
58
|
+
// Require correct modifier on click
|
|
59
|
+
if (event && !this._isLinkActivationModifierDown(event)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Just call the handler if there is no before listener
|
|
63
|
+
handler(event, link);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
get _localLinkRegex() {
|
|
67
|
+
const baseLocalLinkClause = this._client.os === platform_1.OperatingSystem.Windows ? validated_local_link_provider_1.winLocalLinkClause : validated_local_link_provider_1.unixLocalLinkClause;
|
|
68
|
+
// Append line and column number regex
|
|
69
|
+
return new RegExp(`${baseLocalLinkClause}(${validated_local_link_provider_1.lineAndColumnClause})`);
|
|
70
|
+
}
|
|
71
|
+
async _handleLocalLink(link) {
|
|
72
|
+
// TODO: This gets resolved again but doesn't need to as it's already validated
|
|
73
|
+
const resolvedLink = await this._resolvePath(link);
|
|
74
|
+
if (!resolvedLink) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const lineColumnInfo = this.extractLineColumnInfo(link);
|
|
78
|
+
const range = {
|
|
79
|
+
startLineNumber: lineColumnInfo.lineNumber,
|
|
80
|
+
endLineNumber: lineColumnInfo.lineNumber,
|
|
81
|
+
startColumn: lineColumnInfo.columnNumber,
|
|
82
|
+
endColumn: lineColumnInfo.columnNumber,
|
|
83
|
+
};
|
|
84
|
+
await this._editorService.open(resolvedLink.uri, { range });
|
|
85
|
+
}
|
|
86
|
+
_handleHypertextLink(url) {
|
|
87
|
+
this._openerService.open(url);
|
|
88
|
+
}
|
|
89
|
+
async _handleProtocolLink(link) {
|
|
90
|
+
// Check if it's a file:/// link, hand off to local link handler so to open an editor and
|
|
91
|
+
// respect line/col attachment
|
|
92
|
+
const uri = ide_core_common_1.URI.parse(link);
|
|
93
|
+
if (uri.scheme === 'file') {
|
|
94
|
+
// Just using fsPath here is unsafe: https://github.com/microsoft/vscode/issues/109076
|
|
95
|
+
// fsPath 是基于当前环境判断 sep 的,连接远程服务时,如果当前系统为 Windows,
|
|
96
|
+
// 而 uri 来自远程 Linux,则会出现生成的链接 sep 不正确,导致打开文件失败。
|
|
97
|
+
const fsPath = ide_core_common_1.FileUri.fsPath(uri);
|
|
98
|
+
this._handleLocalLink(((this._client.os !== platform_1.OperatingSystem.Windows) && platform_1.isWindows) ? fsPath.replace(/\\/g, path_1.posix.sep) : fsPath);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Open as a web link if it's not a file
|
|
102
|
+
this._handleHypertextLink(link);
|
|
103
|
+
}
|
|
104
|
+
_isLinkActivationModifierDown(event) {
|
|
105
|
+
return ide_core_common_1.isOSX ? event.metaKey : event.ctrlKey;
|
|
106
|
+
}
|
|
107
|
+
get osPath() {
|
|
108
|
+
if (this._client.os === platform_1.OperatingSystem.Windows) {
|
|
109
|
+
return path_1.win32;
|
|
110
|
+
}
|
|
111
|
+
return path_1.posix;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 获取用户目录
|
|
115
|
+
*/
|
|
116
|
+
async _getUserHomeDir() {
|
|
117
|
+
const homeDirStat = await this._fileSystem.getCurrentUserHome();
|
|
118
|
+
if (!homeDirStat) {
|
|
119
|
+
throw new Error('Unable to get user home directory');
|
|
120
|
+
}
|
|
121
|
+
const homeDirPath = await this._fileSystem.getFsPath(homeDirStat.uri);
|
|
122
|
+
return homeDirPath;
|
|
123
|
+
}
|
|
124
|
+
_getUserHomeDirOnce() {
|
|
125
|
+
if (!this._getHomeDirPromise) {
|
|
126
|
+
this._getHomeDirPromise = this._getUserHomeDir();
|
|
127
|
+
}
|
|
128
|
+
return this._getHomeDirPromise;
|
|
129
|
+
}
|
|
130
|
+
async _preprocessPath(link) {
|
|
131
|
+
if (link.charAt(0) === '~') {
|
|
132
|
+
// Resolve ~ -> userHome
|
|
133
|
+
const userHome = await this._getUserHomeDirOnce();
|
|
134
|
+
if (!userHome) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
link = this.osPath.join(userHome, link.substring(1));
|
|
138
|
+
}
|
|
139
|
+
else if (link.charAt(0) !== '/' && link.charAt(0) !== '~') {
|
|
140
|
+
// Resolve workspace path . | .. | <relative_path> -> <path>/. | <path>/.. | <path>/<relative_path>
|
|
141
|
+
if (this._client.os === platform_1.OperatingSystem.Windows) {
|
|
142
|
+
if (!link.match('^' + validated_local_link_provider_1.winDrivePrefix) && !link.startsWith('\\\\?\\')) {
|
|
143
|
+
if (!this._processCwd) {
|
|
144
|
+
// Abort if no workspace is open
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
link = this.osPath.join(this._processCwd, link);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Remove \\?\ from paths so that they share the same underlying
|
|
151
|
+
// uri and don't open multiple tabs for the same file
|
|
152
|
+
link = link.replace(/^\\\\\?\\/, '');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
if (!this._processCwd) {
|
|
157
|
+
// Abort if no workspace is open
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
link = this.osPath.join(this._processCwd, link);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
link = this.osPath.normalize(link);
|
|
164
|
+
return link;
|
|
165
|
+
}
|
|
166
|
+
async _resolvePath(link) {
|
|
167
|
+
const preprocessedLink = await this._preprocessPath(link);
|
|
168
|
+
if (!preprocessedLink) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
const linkUrl = this.extractLinkUrl(preprocessedLink);
|
|
172
|
+
if (!linkUrl) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const uri = ide_core_common_1.URI.file(linkUrl);
|
|
177
|
+
const stat = await this._fileService.getFileStat(uri.toString());
|
|
178
|
+
if (stat) {
|
|
179
|
+
return { uri, isDirectory: stat.isDirectory };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (_a) {
|
|
183
|
+
// Errors in parsing the path
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Returns line and column number of URl if that is present.
|
|
189
|
+
*
|
|
190
|
+
* @param link Url link which may contain line and column number.
|
|
191
|
+
*/
|
|
192
|
+
extractLineColumnInfo(link) {
|
|
193
|
+
const matches = this._localLinkRegex.exec(link);
|
|
194
|
+
const lineColumnInfo = {
|
|
195
|
+
lineNumber: 1,
|
|
196
|
+
columnNumber: 1,
|
|
197
|
+
};
|
|
198
|
+
if (!matches) {
|
|
199
|
+
return lineColumnInfo;
|
|
200
|
+
}
|
|
201
|
+
const lineAndColumnMatchIndex = this._client.os === platform_1.OperatingSystem.Windows ? validated_local_link_provider_1.winLineAndColumnMatchIndex : validated_local_link_provider_1.unixLineAndColumnMatchIndex;
|
|
202
|
+
for (let i = 0; i < validated_local_link_provider_1.lineAndColumnClause.length; i++) {
|
|
203
|
+
const lineMatchIndex = lineAndColumnMatchIndex + (validated_local_link_provider_1.lineAndColumnClauseGroupCount * i);
|
|
204
|
+
const rowNumber = matches[lineMatchIndex];
|
|
205
|
+
if (rowNumber) {
|
|
206
|
+
lineColumnInfo['lineNumber'] = parseInt(rowNumber, 10);
|
|
207
|
+
// Check if column number exists
|
|
208
|
+
const columnNumber = matches[lineMatchIndex + 2];
|
|
209
|
+
if (columnNumber) {
|
|
210
|
+
lineColumnInfo['columnNumber'] = parseInt(columnNumber, 10);
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return lineColumnInfo;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Returns url from link as link may contain line and column information.
|
|
219
|
+
*
|
|
220
|
+
* @param link url link which may contain line and column number.
|
|
221
|
+
*/
|
|
222
|
+
extractLinkUrl(link) {
|
|
223
|
+
const matches = this._localLinkRegex.exec(link);
|
|
224
|
+
if (!matches) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return matches[1];
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
(0, tslib_1.__decorate)([
|
|
231
|
+
(0, di_1.Autowired)(),
|
|
232
|
+
(0, tslib_1.__metadata)("design:type", common_1.WorkbenchEditorService)
|
|
233
|
+
], TerminalLinkManager.prototype, "_editorService", void 0);
|
|
234
|
+
(0, tslib_1.__decorate)([
|
|
235
|
+
(0, di_1.Autowired)(ide_core_browser_1.IOpenerService),
|
|
236
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
237
|
+
], TerminalLinkManager.prototype, "_openerService", void 0);
|
|
238
|
+
(0, tslib_1.__decorate)([
|
|
239
|
+
(0, di_1.Autowired)(ide_file_service_1.IFileServiceClient),
|
|
240
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
241
|
+
], TerminalLinkManager.prototype, "_fileService", void 0);
|
|
242
|
+
(0, tslib_1.__decorate)([
|
|
243
|
+
(0, di_1.Autowired)(ide_file_service_1.IFileServiceClient),
|
|
244
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
245
|
+
], TerminalLinkManager.prototype, "_fileSystem", void 0);
|
|
246
|
+
TerminalLinkManager = (0, tslib_1.__decorate)([
|
|
247
|
+
(0, di_1.Injectable)({ multiple: true }),
|
|
248
|
+
(0, tslib_1.__metadata)("design:paramtypes", [xterm_1.Terminal,
|
|
249
|
+
terminal_client_1.TerminalClient])
|
|
250
|
+
], TerminalLinkManager);
|
|
251
|
+
exports.TerminalLinkManager = TerminalLinkManager;
|
|
252
|
+
//# sourceMappingURL=link-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-manager.js","sourceRoot":"","sources":["../../../src/browser/links/link-manager.ts"],"names":[],"mappings":";;;;AAAA,iCAAgD;AAChD,qCAAqD;AACrD,+DAA+G;AAC/G,qEAAoF;AACpF,6DAAyE;AACzE,iEAA4D;AAC5D,iEAAgE;AAChE,4DAAyE;AACzE,qEAAwE;AACxE,mFAA2P;AAC3P,qFAAuF;AAEvF,wDAAoD;AAWpD;;GAEG;AAEH,IAAa,mBAAmB,GAAhC,MAAa,mBAAoB,SAAQ,4BAAU;IAmBjD,YACU,MAAgB,EAChB,OAAuB;QAE/B,KAAK,EAAE,CAAC;QAHA,WAAM,GAAN,MAAM,CAAU;QAChB,YAAO,GAAP,OAAO,CAAgB;QAnBzB,2BAAsB,GAAoB,EAAE,CAAC;QAC7C,sCAAiC,GAAG,IAAI,sCAAoB,EAAE,CAAC;QAsBrE,iBAAiB;QACjB,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QACnG,MAAM,gBAAgB,GAAG,IAAI,qDAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAChG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEnD,wBAAwB;QACxB,MAAM,+BAA+B,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxG,MAAM,iBAAiB,GAAG,IAAI,kEAAkC,CAC9D,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,+BAA+B,EAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CACtD,CAAC;QACF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpD,IAAI,CAAC,8BAA8B,EAAE,CAAC;IACxC,CAAC;IAED,IAAW,UAAU,CAAC,UAAkB;QACtC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAEO,8BAA8B;QACpC,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,iCAAiC,GAAG,IAAI,sCAAoB,EAAE,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC3C,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;SAClF;IACH,CAAC;IAEM,4BAA4B,CAAC,QAAyB,EAAE,YAA2C;QACxG,MAAM,mBAAmB,GAAG,IAAI,oEAAmC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3I,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;QAC9E,wFAAwF;QACxF,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,OAAO,eAAe,CAAC;IACzB,CAAC;IAES,gBAAgB,CAAC,OAA8D;QACvF,OAAO,KAAK,EAAE,KAA6B,EAAE,IAAY,EAAE,EAAE;YAC3D,0EAA0E;YAC1E,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC;YAExB,oCAAoC;YACpC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE;gBACvD,OAAO;aACR;YAED,uDAAuD;YACvD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;IAED,IAAc,eAAe;QAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,0BAAe,CAAC,OAAO,CAAC,CAAC,CAAC,kDAAkB,CAAC,CAAC,CAAC,mDAAmB,CAAC;QACnH,sCAAsC;QACtC,OAAO,IAAI,MAAM,CAAC,GAAG,mBAAmB,IAAI,mDAAmB,GAAG,CAAC,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACzC,+EAA+E;QAC/E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;QACD,MAAM,cAAc,GAAmB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,KAAK,GAAyB;YAClC,eAAe,EAAE,cAAc,CAAC,UAAU;YAC1C,aAAa,EAAE,cAAc,CAAC,UAAU;YACxC,WAAW,EAAE,cAAc,CAAC,YAAY;YACxC,SAAS,EAAE,cAAc,CAAC,YAAY;SACvC,CAAC;QACF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,IAAY;QAC5C,yFAAyF;QACzF,8BAA8B;QAC9B,MAAM,GAAG,GAAG,qBAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;YACzB,sFAAsF;YACtF,kDAAkD;YAClD,+CAA+C;YAC/C,MAAM,MAAM,GAAG,yBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,0BAAe,CAAC,OAAO,CAAC,IAAI,oBAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,YAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChI,OAAO;SACR;QAED,wCAAwC;QACxC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAES,6BAA6B,CAAC,KAAiB;QACvD,OAAO,uBAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED,IAAY,MAAM;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,0BAAe,CAAC,OAAO,EAAE;YAC/C,OAAO,YAAK,CAAC;SACd;QACD,OAAO,YAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,WAAY,CAAC;IACtB,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAClD;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,IAAY;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAC1B,wBAAwB;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,IAAI,CAAC;aACb;YACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAC3D,mGAAmG;YACnG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,0BAAe,CAAC,OAAO,EAAE;gBAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8CAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;oBACpE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;wBACrB,gCAAgC;wBAChC,OAAO,IAAI,CAAC;qBACb;oBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;iBACjD;qBAAM;oBACL,gEAAgE;oBAChE,qDAAqD;oBACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;iBACtC;aACF;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,gCAAgC;oBAChC,OAAO,IAAI,CAAC;iBACb;gBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;aACjD;SACF;QACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAY;QACrC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,SAAS,CAAC;SAClB;QAED,IAAI;YACF,MAAM,GAAG,GAAG,qBAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,IAAI,IAAI,EAAE;gBACR,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;aAC/C;SACF;QAAC,WAAM;YACN,6BAA6B;YAC7B,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED;;;;OAIG;IACI,qBAAqB,CAAC,IAAY;QACvC,MAAM,OAAO,GAAoB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,cAAc,GAAmB;YACrC,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;SAChB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,cAAc,CAAC;SACvB;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,0BAAe,CAAC,OAAO,CAAC,CAAC,CAAC,0DAA0B,CAAC,CAAC,CAAC,2DAA2B,CAAC;QACvI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mDAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,MAAM,cAAc,GAAG,uBAAuB,GAAG,CAAC,6DAA6B,GAAG,CAAC,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE;gBACb,cAAc,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACvD,gCAAgC;gBAChC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,YAAY,EAAE;oBAChB,cAAc,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;iBAC7D;gBACD,MAAM;aACP;SACF;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,IAAY;QAChC,MAAM,OAAO,GAAoB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,IAAI,CAAC;SACb;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CACF,CAAA;AA1PC;IADC,IAAA,cAAS,GAAE;2CACY,+BAAsB;2DAAC;AAG/C;IADC,IAAA,cAAS,EAAC,iCAAc,CAAC;;2DACa;AAGvC;IADC,IAAA,cAAS,EAAC,qCAAkB,CAAC;;yDACW;AAGzC;IADC,IAAA,cAAS,EAAC,qCAAkB,CAAC;;wDACmB;AAftC,mBAAmB;IAD/B,IAAA,eAAU,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAqBX,gBAAQ;QACP,gCAAc;GArBtB,mBAAmB,CAgQ/B;AAhQY,kDAAmB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IBufferRange, ILink, ILinkDecorations, Terminal } from 'xterm';
|
|
2
|
+
import { Disposable, Event } from '@opensumi/ide-core-common';
|
|
3
|
+
export declare class TerminalLink extends Disposable implements ILink {
|
|
4
|
+
private readonly _xterm;
|
|
5
|
+
readonly range: IBufferRange;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
private readonly _viewportY;
|
|
8
|
+
private readonly _activateCallback;
|
|
9
|
+
private readonly _isHighConfidenceLink;
|
|
10
|
+
decorations: ILinkDecorations;
|
|
11
|
+
private _hoverListeners;
|
|
12
|
+
private readonly _onInvalidated;
|
|
13
|
+
get onInvalidated(): Event<void>;
|
|
14
|
+
constructor(_xterm: Terminal, range: IBufferRange, text: string, _viewportY: number, _activateCallback: (event: MouseEvent | undefined, uri: string) => void, _isHighConfidenceLink: boolean);
|
|
15
|
+
dispose(): void;
|
|
16
|
+
activate(event: MouseEvent | undefined, text: string): void;
|
|
17
|
+
private _addDisposableListener;
|
|
18
|
+
hover(event: MouseEvent, text: string): void;
|
|
19
|
+
leave(): void;
|
|
20
|
+
private _enableDecorations;
|
|
21
|
+
private _disableDecorations;
|
|
22
|
+
private _isModifierDown;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/browser/links/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAiC,KAAK,EAAS,MAAM,2BAA2B,CAAC;AAEpG,qBAAa,YAAa,SAAQ,UAAW,YAAW,KAAK;IASzD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,KAAK,EAAE,YAAY;aACnB,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAbxC,WAAW,EAAE,gBAAgB,CAAC;IAE9B,OAAO,CAAC,eAAe,CAAmC;IAE1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,IAAW,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,CAAsC;gBAG1D,MAAM,EAAE,QAAQ,EACjB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,EACvE,qBAAqB,EAAE,OAAO;IASjD,OAAO,IAAI,IAAI;IAMf,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3D,OAAO,CAAC,sBAAsB;IAO9B,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgC5C,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalLink = void 0;
|
|
4
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
5
|
+
class TerminalLink extends ide_core_common_1.Disposable {
|
|
6
|
+
constructor(_xterm, range, text, _viewportY, _activateCallback, _isHighConfidenceLink) {
|
|
7
|
+
super();
|
|
8
|
+
this._xterm = _xterm;
|
|
9
|
+
this.range = range;
|
|
10
|
+
this.text = text;
|
|
11
|
+
this._viewportY = _viewportY;
|
|
12
|
+
this._activateCallback = _activateCallback;
|
|
13
|
+
this._isHighConfidenceLink = _isHighConfidenceLink;
|
|
14
|
+
this._onInvalidated = new ide_core_common_1.Emitter();
|
|
15
|
+
this.decorations = {
|
|
16
|
+
pointerCursor: false,
|
|
17
|
+
underline: this._isHighConfidenceLink,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
get onInvalidated() { return this._onInvalidated.event; }
|
|
21
|
+
dispose() {
|
|
22
|
+
var _a;
|
|
23
|
+
super.dispose();
|
|
24
|
+
(_a = this._hoverListeners) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
25
|
+
this._hoverListeners = undefined;
|
|
26
|
+
}
|
|
27
|
+
activate(event, text) {
|
|
28
|
+
this._activateCallback(event, text);
|
|
29
|
+
}
|
|
30
|
+
_addDisposableListener(node, type, handler) {
|
|
31
|
+
node.addEventListener(type, handler);
|
|
32
|
+
return ide_core_common_1.Disposable.create(() => {
|
|
33
|
+
node.removeEventListener(type, handler);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
hover(event, text) {
|
|
37
|
+
// Listen for modifier before handing it off to the hover to handle so it gets disposed correctly
|
|
38
|
+
this._hoverListeners = new ide_core_common_1.DisposableCollection();
|
|
39
|
+
this._hoverListeners.push(this._addDisposableListener(document, 'keydown', (e) => {
|
|
40
|
+
if (!e.repeat && this._isModifierDown(e)) {
|
|
41
|
+
this._enableDecorations();
|
|
42
|
+
}
|
|
43
|
+
}));
|
|
44
|
+
this._hoverListeners.push(this._addDisposableListener(document, 'keyup', (e) => {
|
|
45
|
+
if (!e.repeat && !this._isModifierDown(e)) {
|
|
46
|
+
this._disableDecorations();
|
|
47
|
+
}
|
|
48
|
+
}));
|
|
49
|
+
// Listen for when the terminal renders on the same line as the link
|
|
50
|
+
this._hoverListeners.push(this._xterm.onRender((e) => {
|
|
51
|
+
const viewportRangeY = this.range.start.y - this._viewportY;
|
|
52
|
+
if (viewportRangeY >= e.start && viewportRangeY <= e.end) {
|
|
53
|
+
this._onInvalidated.fire();
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
56
|
+
this._hoverListeners.push(this._addDisposableListener(document, 'mousemove', (e) => {
|
|
57
|
+
// Update decorations
|
|
58
|
+
if (this._isModifierDown(e)) {
|
|
59
|
+
this._enableDecorations();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this._disableDecorations();
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
leave() {
|
|
67
|
+
var _a;
|
|
68
|
+
(_a = this._hoverListeners) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
69
|
+
this._hoverListeners = undefined;
|
|
70
|
+
}
|
|
71
|
+
_enableDecorations() {
|
|
72
|
+
if (!this.decorations.pointerCursor) {
|
|
73
|
+
this.decorations.pointerCursor = true;
|
|
74
|
+
}
|
|
75
|
+
if (!this.decorations.underline) {
|
|
76
|
+
this.decorations.underline = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
_disableDecorations() {
|
|
80
|
+
if (this.decorations.pointerCursor) {
|
|
81
|
+
this.decorations.pointerCursor = false;
|
|
82
|
+
}
|
|
83
|
+
if (this.decorations.underline !== this._isHighConfidenceLink) {
|
|
84
|
+
this.decorations.underline = this._isHighConfidenceLink;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
_isModifierDown(event) {
|
|
88
|
+
return ide_core_common_1.isOSX ? event.metaKey : event.ctrlKey;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.TerminalLink = TerminalLink;
|
|
92
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/browser/links/link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Terminal } from 'xterm';
|
|
2
|
+
import { TerminalLink } from './link';
|
|
3
|
+
import { TerminalBaseLinkProvider } from './base';
|
|
4
|
+
export declare class TerminalProtocolLinkProvider extends TerminalBaseLinkProvider {
|
|
5
|
+
private readonly _xterm;
|
|
6
|
+
private readonly _activateCallback;
|
|
7
|
+
private _linkComputerTarget;
|
|
8
|
+
constructor(_xterm: Terminal, _activateCallback: (event: MouseEvent | undefined, uri: string) => void);
|
|
9
|
+
protected _provideLinks(y: number): TerminalLink[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=protocol-link-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/protocol-link-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,qBAAa,4BAA6B,SAAQ,wBAAwB;IAItE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJpC,OAAO,CAAC,mBAAmB,CAAkC;gBAG1C,MAAM,EAAE,QAAQ,EAChB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;IAK1F,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;CA4BnD"}
|