@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,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalProtocolLinkProvider = void 0;
|
|
4
|
+
const common_1 = require("../../common");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
const link_1 = require("./link");
|
|
7
|
+
const base_1 = require("./base");
|
|
8
|
+
class TerminalProtocolLinkProvider extends base_1.TerminalBaseLinkProvider {
|
|
9
|
+
constructor(_xterm, _activateCallback) {
|
|
10
|
+
super();
|
|
11
|
+
this._xterm = _xterm;
|
|
12
|
+
this._activateCallback = _activateCallback;
|
|
13
|
+
}
|
|
14
|
+
_provideLinks(y) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
let startLine = y - 1;
|
|
17
|
+
let endLine = startLine;
|
|
18
|
+
const lines = [
|
|
19
|
+
this._xterm.buffer.active.getLine(startLine),
|
|
20
|
+
];
|
|
21
|
+
while (startLine >= 0 && ((_a = this._xterm.buffer.active.getLine(startLine)) === null || _a === void 0 ? void 0 : _a.isWrapped)) {
|
|
22
|
+
lines.unshift(this._xterm.buffer.active.getLine(startLine - 1));
|
|
23
|
+
startLine--;
|
|
24
|
+
}
|
|
25
|
+
while (endLine < this._xterm.buffer.active.length && ((_b = this._xterm.buffer.active.getLine(endLine + 1)) === null || _b === void 0 ? void 0 : _b.isWrapped)) {
|
|
26
|
+
lines.push(this._xterm.buffer.active.getLine(endLine + 1));
|
|
27
|
+
endLine++;
|
|
28
|
+
}
|
|
29
|
+
this._linkComputerTarget = new TerminalLinkAdapter(this._xterm, startLine, endLine);
|
|
30
|
+
const links = common_1.LinkComputer.computeLinks(this._linkComputerTarget);
|
|
31
|
+
return links.map((link) => {
|
|
32
|
+
var _a;
|
|
33
|
+
const range = (0, helpers_1.convertLinkRangeToBuffer)(lines, this._xterm.cols, link.range, startLine);
|
|
34
|
+
// Check if the link if within the mouse position
|
|
35
|
+
return new link_1.TerminalLink(this._xterm, range, ((_a = link.url) === null || _a === void 0 ? void 0 : _a.toString()) || '', this._xterm.buffer.active.viewportY, this._activateCallback, true);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.TerminalProtocolLinkProvider = TerminalProtocolLinkProvider;
|
|
40
|
+
class TerminalLinkAdapter {
|
|
41
|
+
constructor(_xterm, _lineStart, _lineEnd) {
|
|
42
|
+
this._xterm = _xterm;
|
|
43
|
+
this._lineStart = _lineStart;
|
|
44
|
+
this._lineEnd = _lineEnd;
|
|
45
|
+
}
|
|
46
|
+
getLineCount() {
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
getLineContent() {
|
|
50
|
+
return (0, helpers_1.getXtermLineContent)(this._xterm.buffer.active, this._lineStart, this._lineEnd, this._xterm.cols);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=protocol-link-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/protocol-link-provider.ts"],"names":[],"mappings":";;;AACA,yCAAiE;AACjE,uCAA0E;AAC1E,iCAAsC;AACtC,iCAAkD;AAElD,MAAa,4BAA6B,SAAQ,+BAAwB;IAGxE,YACmB,MAAgB,EAChB,iBAAuE;QAExF,KAAK,EAAE,CAAC;QAHS,WAAM,GAAN,MAAM,CAAU;QAChB,sBAAiB,GAAjB,iBAAiB,CAAsD;IAG1F,CAAC;IAES,aAAa,CAAC,CAAS;;QAC/B,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,MAAM,KAAK,GAAkB;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAE;SAC9C,CAAC;QAEF,OAAO,SAAS,IAAI,CAAC,KAAI,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,SAAS,CAAA,EAAE;YAChF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAE,CAAC,CAAC;YACjE,SAAS,EAAE,CAAC;SACb;QAED,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAI,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,0CAAE,SAAS,CAAA,EAAE;YAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,CAAC;SACX;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,qBAAY,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAElE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;YACxB,MAAM,KAAK,GAAG,IAAA,kCAAwB,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEvF,iDAAiD;YACjD,OAAO,IAAI,mBAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,QAAQ,EAAE,KAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC7I,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtCD,oEAsCC;AAED,MAAM,mBAAmB;IACvB,YACU,MAAgB,EAChB,UAAkB,EAClB,QAAgB;QAFhB,WAAM,GAAN,MAAM,CAAU;QAChB,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IACtB,CAAC;IAEL,YAAY;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IAED,cAAc;QACZ,OAAO,IAAA,6BAAmB,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1G,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Terminal } from 'xterm';
|
|
2
|
+
import { URI } from '@opensumi/ide-core-common';
|
|
3
|
+
import type { TerminalClient } from '../terminal.client';
|
|
4
|
+
import { TerminalLink } from './link';
|
|
5
|
+
import { XtermLinkMatcherHandler } from './link-manager';
|
|
6
|
+
import { TerminalBaseLinkProvider } from './base';
|
|
7
|
+
/** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
|
|
8
|
+
export declare const unixLocalLinkClause: string;
|
|
9
|
+
export declare const winDrivePrefix = "(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:";
|
|
10
|
+
/** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
|
|
11
|
+
export declare const winLocalLinkClause: string;
|
|
12
|
+
/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
|
|
13
|
+
replacing space with nonBreakningSpace or space ASCII code - 32. */
|
|
14
|
+
export declare const lineAndColumnClause: string;
|
|
15
|
+
export declare const winLineAndColumnMatchIndex = 12;
|
|
16
|
+
export declare const unixLineAndColumnMatchIndex = 11;
|
|
17
|
+
export declare const lineAndColumnClauseGroupCount = 6;
|
|
18
|
+
export declare class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider {
|
|
19
|
+
private readonly _xterm;
|
|
20
|
+
private readonly _client;
|
|
21
|
+
private readonly _activateFileCallback;
|
|
22
|
+
private readonly _wrapLinkHandler;
|
|
23
|
+
private readonly _validationCallback;
|
|
24
|
+
constructor(_xterm: Terminal, _client: TerminalClient, _activateFileCallback: (event: MouseEvent | undefined, link: string) => void, _wrapLinkHandler: (handler: (event: MouseEvent | undefined, link: string) => void) => XtermLinkMatcherHandler, _validationCallback: (link: string, callback: (result: {
|
|
25
|
+
uri: URI;
|
|
26
|
+
isDirectory: boolean;
|
|
27
|
+
} | undefined) => void) => void);
|
|
28
|
+
protected _provideLinks(y: number): Promise<TerminalLink[]>;
|
|
29
|
+
protected get _localLinkRegex(): RegExp;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validated-local-link-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validated-local-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAQlD,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAyI,CAAC;AAE1K,eAAO,MAAM,cAAc,kCAAkC,CAAC;AAI9D,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAAqJ,CAAC;AAErL;mEACmE;AACnE,eAAO,MAAM,mBAAmB,QAOW,CAAC;AAG5C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAG9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAI/C,qBAAa,kCAAmC,SAAQ,wBAAwB;IAE5E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAJnB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,cAAc,EACvB,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5E,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,uBAAuB,EAC7G,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,KAAK,IAAI,KAAK,IAAI;cAK1H,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAyFjE,SAAS,KAAK,eAAe,IAAI,MAAM,CAItC;CACF"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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/terminalValidatedLocalLinkProvider.ts
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TerminalValidatedLocalLinkProvider = exports.lineAndColumnClauseGroupCount = exports.unixLineAndColumnMatchIndex = exports.winLineAndColumnMatchIndex = exports.lineAndColumnClause = exports.winLocalLinkClause = exports.winDrivePrefix = exports.unixLocalLinkClause = void 0;
|
|
9
|
+
const platform_1 = require("@opensumi/ide-core-common/lib/platform");
|
|
10
|
+
const link_1 = require("./link");
|
|
11
|
+
const base_1 = require("./base");
|
|
12
|
+
const helpers_1 = require("./helpers");
|
|
13
|
+
const pathPrefix = '(\\.\\.?|\\~)';
|
|
14
|
+
const pathSeparatorClause = '\\/';
|
|
15
|
+
// '":; are allowed in paths but they are often separators so ignore them
|
|
16
|
+
// Also disallow \\ to prevent a catastropic backtracking case #24798
|
|
17
|
+
const excludedPathCharactersClause = '[^\\0\\s!$`&*()\\[\\]\'":;\\\\]';
|
|
18
|
+
/** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
|
|
19
|
+
exports.unixLocalLinkClause = '((' + pathPrefix + '|(' + excludedPathCharactersClause + ')+)?(' + pathSeparatorClause + '(' + excludedPathCharactersClause + ')+)+)';
|
|
20
|
+
exports.winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:';
|
|
21
|
+
const winPathPrefix = '(' + exports.winDrivePrefix + '|\\.\\.?|\\~)';
|
|
22
|
+
const winPathSeparatorClause = '(\\\\|\\/)';
|
|
23
|
+
const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]\'":;]';
|
|
24
|
+
/** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
|
|
25
|
+
exports.winLocalLinkClause = '((' + winPathPrefix + '|(' + winExcludedPathCharactersClause + ')+)?(' + winPathSeparatorClause + '(' + winExcludedPathCharactersClause + ')+)+)';
|
|
26
|
+
/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
|
|
27
|
+
replacing space with nonBreakningSpace or space ASCII code - 32. */
|
|
28
|
+
exports.lineAndColumnClause = [
|
|
29
|
+
'((\\S*)", line ((\\d+)( column (\\d+))?))',
|
|
30
|
+
'((\\S*)",((\\d+)(:(\\d+))?))',
|
|
31
|
+
'((\\S*) on line ((\\d+)(, column (\\d+))?))',
|
|
32
|
+
'((\\S*):line ((\\d+)(, column (\\d+))?))',
|
|
33
|
+
'(([^\\s\\(\\)]*)(\\s?[\\(\\[](\\d+)(,\\s?(\\d+))?)[\\)\\]])',
|
|
34
|
+
'(([^:\\s\\(\\)<>\'\"\\[\\]]*)(:(\\d+))?(:(\\d+))?)', // (file path):336, (file path):336:9
|
|
35
|
+
].join('|').replace(/ /g, `[${'\u00A0'} ]`);
|
|
36
|
+
// Changing any regex may effect this value, hence changes this as well if required.
|
|
37
|
+
exports.winLineAndColumnMatchIndex = 12;
|
|
38
|
+
exports.unixLineAndColumnMatchIndex = 11;
|
|
39
|
+
// Each line and column clause have 6 groups (ie no. of expressions in round brackets)
|
|
40
|
+
exports.lineAndColumnClauseGroupCount = 6;
|
|
41
|
+
const MAX_LENGTH = 2000;
|
|
42
|
+
class TerminalValidatedLocalLinkProvider extends base_1.TerminalBaseLinkProvider {
|
|
43
|
+
constructor(_xterm, _client, _activateFileCallback, _wrapLinkHandler, _validationCallback) {
|
|
44
|
+
super();
|
|
45
|
+
this._xterm = _xterm;
|
|
46
|
+
this._client = _client;
|
|
47
|
+
this._activateFileCallback = _activateFileCallback;
|
|
48
|
+
this._wrapLinkHandler = _wrapLinkHandler;
|
|
49
|
+
this._validationCallback = _validationCallback;
|
|
50
|
+
}
|
|
51
|
+
async _provideLinks(y) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
const result = [];
|
|
54
|
+
let startLine = y - 1;
|
|
55
|
+
let endLine = startLine;
|
|
56
|
+
const lines = [
|
|
57
|
+
this._xterm.buffer.active.getLine(startLine),
|
|
58
|
+
];
|
|
59
|
+
while (startLine >= 0 && ((_a = this._xterm.buffer.active.getLine(startLine)) === null || _a === void 0 ? void 0 : _a.isWrapped)) {
|
|
60
|
+
lines.unshift(this._xterm.buffer.active.getLine(startLine - 1));
|
|
61
|
+
startLine--;
|
|
62
|
+
}
|
|
63
|
+
while (endLine < this._xterm.buffer.active.length && ((_b = this._xterm.buffer.active.getLine(endLine + 1)) === null || _b === void 0 ? void 0 : _b.isWrapped)) {
|
|
64
|
+
lines.push(this._xterm.buffer.active.getLine(endLine + 1));
|
|
65
|
+
endLine++;
|
|
66
|
+
}
|
|
67
|
+
const text = (0, helpers_1.getXtermLineContent)(this._xterm.buffer.active, startLine, endLine, this._xterm.cols);
|
|
68
|
+
if (text.length > MAX_LENGTH) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
// clone regex to do a global search on text
|
|
72
|
+
const rex = new RegExp(this._localLinkRegex, 'g');
|
|
73
|
+
let match;
|
|
74
|
+
let stringIndex = -1;
|
|
75
|
+
while ((match = rex.exec(text)) !== null) {
|
|
76
|
+
// const link = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];
|
|
77
|
+
let link = match[0];
|
|
78
|
+
if (!link) {
|
|
79
|
+
// something matched but does not comply with the given matchIndex
|
|
80
|
+
// since this is most likely a bug the regex itself we simply do nothing here
|
|
81
|
+
// this._logService.debug('match found without corresponding matchIndex', match, matcher);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
// Get index, match.index is for the outer match which includes negated chars
|
|
85
|
+
// therefore we cannot use match.index directly, instead we search the position
|
|
86
|
+
// of the match group in text again
|
|
87
|
+
// also correct regex and string search offsets for the next loop run
|
|
88
|
+
stringIndex = text.indexOf(link, stringIndex + 1);
|
|
89
|
+
rex.lastIndex = stringIndex + link.length;
|
|
90
|
+
if (stringIndex < 0) {
|
|
91
|
+
// invalid stringIndex (should not have happened)
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
// Adjust the link range to exclude a/ and b/ if it looks like a git diff
|
|
95
|
+
if (
|
|
96
|
+
// --- a/foo/bar
|
|
97
|
+
// +++ b/foo/bar
|
|
98
|
+
((text.startsWith('--- a/') || text.startsWith('+++ b/')) && stringIndex === 4) ||
|
|
99
|
+
// diff --git a/foo/bar b/foo/bar
|
|
100
|
+
(text.startsWith('diff --git') && (link.startsWith('a/') || link.startsWith('b/')))) {
|
|
101
|
+
link = link.substring(2);
|
|
102
|
+
stringIndex += 2;
|
|
103
|
+
}
|
|
104
|
+
// Convert the link text's string index into a wrapped buffer range
|
|
105
|
+
const bufferRange = (0, helpers_1.convertLinkRangeToBuffer)(lines, this._xterm.cols, {
|
|
106
|
+
startColumn: stringIndex + 1,
|
|
107
|
+
startLineNumber: 1,
|
|
108
|
+
endColumn: stringIndex + link.length + 1,
|
|
109
|
+
endLineNumber: 1,
|
|
110
|
+
}, startLine);
|
|
111
|
+
const validatedLink = await new Promise((r) => {
|
|
112
|
+
this._validationCallback(link, (result) => {
|
|
113
|
+
if (result && !result.isDirectory) {
|
|
114
|
+
const activateCallback = this._wrapLinkHandler((event, text) => {
|
|
115
|
+
this._activateFileCallback(event, text);
|
|
116
|
+
});
|
|
117
|
+
r(new link_1.TerminalLink(this._xterm, bufferRange, link, this._xterm.buffer.active.viewportY, activateCallback, true));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
r(undefined);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
if (validatedLink) {
|
|
125
|
+
result.push(validatedLink);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
get _localLinkRegex() {
|
|
131
|
+
const baseLocalLinkClause = this._client.os === platform_1.OperatingSystem.Windows ? exports.winLocalLinkClause : exports.unixLocalLinkClause;
|
|
132
|
+
// Append line and column number regex
|
|
133
|
+
return new RegExp(`${baseLocalLinkClause}(${exports.lineAndColumnClause})`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.TerminalValidatedLocalLinkProvider = TerminalValidatedLocalLinkProvider;
|
|
137
|
+
//# sourceMappingURL=validated-local-link-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validated-local-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Terminal, ILinkMatcherOptions, ITerminalAddon } from 'xterm';
|
|
2
|
+
import { IFileServiceClient } from '@opensumi/ide-file-service/lib/common';
|
|
3
|
+
import { Disposable, Event } from '@opensumi/ide-core-common';
|
|
4
|
+
import { WorkbenchEditorService } from '@opensumi/ide-editor/lib/common';
|
|
5
|
+
import { TerminalKeyBoardInputService } from './terminal.input';
|
|
6
|
+
import { ITerminalConnection } from '../common';
|
|
7
|
+
export declare const rePath: RegExp;
|
|
8
|
+
export declare class FilePathAddon extends Disposable implements ITerminalAddon {
|
|
9
|
+
private _workspace;
|
|
10
|
+
private _fileService;
|
|
11
|
+
private _editorService;
|
|
12
|
+
private _keyboardService;
|
|
13
|
+
private _options;
|
|
14
|
+
private _linkMatcherId;
|
|
15
|
+
private _terminal;
|
|
16
|
+
constructor(_workspace: string, _fileService: IFileServiceClient, _editorService: WorkbenchEditorService, _keyboardService: TerminalKeyBoardInputService, _options?: ILinkMatcherOptions);
|
|
17
|
+
private _mayAbsolutePath;
|
|
18
|
+
private filterAvailablePaths;
|
|
19
|
+
private _parseUri;
|
|
20
|
+
private _openFile;
|
|
21
|
+
activate(terminal: Terminal): void;
|
|
22
|
+
}
|
|
23
|
+
export declare class AttachAddon extends Disposable implements ITerminalAddon {
|
|
24
|
+
private _connection;
|
|
25
|
+
private _disposeConnection;
|
|
26
|
+
private _terminal;
|
|
27
|
+
private _onData;
|
|
28
|
+
onData: Event<string | ArrayBuffer>;
|
|
29
|
+
private _onExit;
|
|
30
|
+
onExit: Event<number | undefined>;
|
|
31
|
+
private _onTime;
|
|
32
|
+
onTime: Event<number>;
|
|
33
|
+
private _lastInputTime;
|
|
34
|
+
setConnection(connection: ITerminalConnection | undefined): void;
|
|
35
|
+
activate(terminal: Terminal): Promise<void>;
|
|
36
|
+
private _sendData;
|
|
37
|
+
private _sendBinary;
|
|
38
|
+
private _timeResponse;
|
|
39
|
+
}
|
|
40
|
+
export declare const DEFAULT_ROW = 80;
|
|
41
|
+
export declare const DEFAULT_COL = 24;
|
|
42
|
+
//# sourceMappingURL=terminal.addon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.addon.d.ts","sourceRoot":"","sources":["../../src/browser/terminal.addon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAY,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAO,UAAU,EAAW,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAiBhD,eAAO,MAAM,MAAM,QAA6D,CAAC;AAEjF,qBAAa,aAAc,SAAQ,UAAW,YAAW,cAAc;IAKnE,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,QAAQ;IARlB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAG9B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,kBAAkB,EAChC,cAAc,EAAE,sBAAsB,EACtC,gBAAgB,EAAE,4BAA4B,EAC9C,QAAQ,GAAE,mBAAwB;IAM5C,OAAO,CAAC,gBAAgB;YAYV,oBAAoB;YAcpB,SAAS;YAkBT,SAAS;IAqBvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAYnC;AAED,qBAAa,WAAY,SAAQ,UAAW,YAAW,cAAc;IACnE,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,SAAS,CAAW;IAE5B,OAAO,CAAC,OAAO,CAAuC;IACtD,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAsB;IACzD,OAAO,CAAC,OAAO,CAAqC;IACpD,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAsB;IACvD,OAAO,CAAC,OAAO,CAAyB;IACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAsB;IAE3C,OAAO,CAAC,cAAc,CAAK;IAEpB,aAAa,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS;IA0BnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;CAGtB;AAED,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,WAAW,KAAK,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_COL = exports.DEFAULT_ROW = exports.AttachAddon = exports.FilePathAddon = exports.rePath = void 0;
|
|
4
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
5
|
+
const segmentClause = '\\~\\w\\.@_\\-';
|
|
6
|
+
const posClause = [
|
|
7
|
+
':\\d+(?::\\d+)?',
|
|
8
|
+
'\\s*\\(\\d+(?:,\\s*\\d+)?\\)', // (1) | (1,2) | (1, 2)
|
|
9
|
+
].join('|');
|
|
10
|
+
const pathClause = [
|
|
11
|
+
// Unix
|
|
12
|
+
`[${segmentClause}]*(?:/[${segmentClause}]+)+`,
|
|
13
|
+
// Windows 应该只在 electron 场景用到
|
|
14
|
+
// Windows https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats
|
|
15
|
+
// C:\xxx\xxx
|
|
16
|
+
// \\.\c:\xxx\xxx
|
|
17
|
+
// \\?\c:\xxx\xxx
|
|
18
|
+
`(?:(?:\\\\\\\\[.?]\\\\)?[a-zA-Z]:\\\\)?[${segmentClause}]+(?:\\\\[${segmentClause}]+)+`,
|
|
19
|
+
].join('|');
|
|
20
|
+
exports.rePath = new RegExp(`(?:^|\s)((?:${pathClause})(?:${posClause})?)`);
|
|
21
|
+
class FilePathAddon extends ide_core_common_1.Disposable {
|
|
22
|
+
constructor(_workspace, _fileService, _editorService, _keyboardService, _options = {}) {
|
|
23
|
+
super();
|
|
24
|
+
this._workspace = _workspace;
|
|
25
|
+
this._fileService = _fileService;
|
|
26
|
+
this._editorService = _editorService;
|
|
27
|
+
this._keyboardService = _keyboardService;
|
|
28
|
+
this._options = _options;
|
|
29
|
+
this._options.matchIndex = 1;
|
|
30
|
+
}
|
|
31
|
+
_mayAbsolutePath(uri) {
|
|
32
|
+
// 同时校验相对路径和绝对路径
|
|
33
|
+
// 单纯从链接层面无法区分
|
|
34
|
+
// 只能够全部交给 file api 去判断
|
|
35
|
+
// 两个同时匹配的时候,优先取相对路径
|
|
36
|
+
return [
|
|
37
|
+
// 这里无须使用 join,前置的 match 来保证
|
|
38
|
+
this._workspace + (uri[0] === '/' ? '' : '/') + uri,
|
|
39
|
+
uri,
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
async filterAvailablePaths(paths) {
|
|
43
|
+
try {
|
|
44
|
+
const promises = [];
|
|
45
|
+
paths.map((absolute) => promises
|
|
46
|
+
.push(this._fileService.getFileStat(ide_core_common_1.URI.file(absolute).toString())));
|
|
47
|
+
const stats = await Promise.all(promises);
|
|
48
|
+
return stats
|
|
49
|
+
.filter((s) => !!s && !s.isDirectory && (new ide_core_common_1.URI(s.uri).scheme === 'file'))
|
|
50
|
+
.map((s) => (new ide_core_common_1.URI(s.uri)).codeUri.fsPath);
|
|
51
|
+
}
|
|
52
|
+
catch (_a) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async _parseUri(uri) {
|
|
57
|
+
const [, path, pos] = uri.match(exports.rePath);
|
|
58
|
+
const posArr = [];
|
|
59
|
+
const reNum = /\d+/g;
|
|
60
|
+
if (pos) {
|
|
61
|
+
let res;
|
|
62
|
+
while ((res = reNum.exec(pos))) {
|
|
63
|
+
posArr.push(+res[0]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const [row, col] = posArr;
|
|
67
|
+
return {
|
|
68
|
+
paths: await this.filterAvailablePaths(this._mayAbsolutePath(path)),
|
|
69
|
+
row,
|
|
70
|
+
col,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async _openFile(_, uri) {
|
|
74
|
+
if (!this._keyboardService.isCommandOrCtrl) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const uriInfo = await this._parseUri(uri);
|
|
78
|
+
for (const path of uriInfo.paths) {
|
|
79
|
+
const fileUri = ide_core_common_1.URI.file(path);
|
|
80
|
+
this._editorService.open(fileUri, uriInfo.row && uriInfo.col ? {
|
|
81
|
+
range: {
|
|
82
|
+
startLineNumber: uriInfo.row,
|
|
83
|
+
endLineNumber: uriInfo.row,
|
|
84
|
+
startColumn: uriInfo.col,
|
|
85
|
+
endColumn: uriInfo.col,
|
|
86
|
+
},
|
|
87
|
+
} : {});
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
activate(terminal) {
|
|
92
|
+
this._terminal = terminal;
|
|
93
|
+
this._linkMatcherId = this._terminal.registerLinkMatcher(exports.rePath, this._openFile.bind(this), this._options);
|
|
94
|
+
this.addDispose({
|
|
95
|
+
dispose: () => {
|
|
96
|
+
if (this._linkMatcherId !== undefined && this._terminal !== undefined) {
|
|
97
|
+
this._terminal.deregisterLinkMatcher(this._linkMatcherId);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.FilePathAddon = FilePathAddon;
|
|
104
|
+
class AttachAddon extends ide_core_common_1.Disposable {
|
|
105
|
+
constructor() {
|
|
106
|
+
super(...arguments);
|
|
107
|
+
this._onData = new ide_core_common_1.Emitter();
|
|
108
|
+
this.onData = this._onData.event;
|
|
109
|
+
this._onExit = new ide_core_common_1.Emitter();
|
|
110
|
+
this.onExit = this._onExit.event;
|
|
111
|
+
this._onTime = new ide_core_common_1.Emitter();
|
|
112
|
+
this.onTime = this._onTime.event;
|
|
113
|
+
this._lastInputTime = 0;
|
|
114
|
+
}
|
|
115
|
+
setConnection(connection) {
|
|
116
|
+
if (this._disposeConnection) {
|
|
117
|
+
this._disposeConnection.dispose();
|
|
118
|
+
this._disposeConnection = null;
|
|
119
|
+
}
|
|
120
|
+
this._connection = connection;
|
|
121
|
+
if (connection) {
|
|
122
|
+
this._disposeConnection = new ide_core_common_1.Disposable(connection.onData((data) => {
|
|
123
|
+
this._terminal.write(typeof data === 'string' ? data : new Uint8Array(data));
|
|
124
|
+
this._onData.fire(data);
|
|
125
|
+
if (this._lastInputTime) {
|
|
126
|
+
const delta = Date.now() - this._lastInputTime;
|
|
127
|
+
this._lastInputTime = 0;
|
|
128
|
+
this._onTime.fire(delta);
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
if (connection.onExit) {
|
|
132
|
+
this._disposeConnection.addDispose(connection.onExit((code) => {
|
|
133
|
+
this._onExit.fire(code);
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async activate(terminal) {
|
|
139
|
+
this._terminal = terminal;
|
|
140
|
+
this.addDispose(ide_core_common_1.Disposable.create(() => { var _a; return (_a = this._disposeConnection) === null || _a === void 0 ? void 0 : _a.dispose(); }));
|
|
141
|
+
this.addDispose(terminal.onData((data) => this._sendData(data)));
|
|
142
|
+
this.addDispose(terminal.onBinary((data) => this._sendBinary(data)));
|
|
143
|
+
}
|
|
144
|
+
_sendData(data) {
|
|
145
|
+
if (!this._connection || this._connection.readonly) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
this._timeResponse();
|
|
149
|
+
this._connection.sendData(data);
|
|
150
|
+
}
|
|
151
|
+
_sendBinary(data) {
|
|
152
|
+
if (!this._connection || this._connection.readonly) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const buffer = new Uint8Array(data.length);
|
|
156
|
+
for (let i = 0; i < data.length; ++i) {
|
|
157
|
+
buffer[i] = data.charCodeAt(i) & 255;
|
|
158
|
+
}
|
|
159
|
+
this._timeResponse();
|
|
160
|
+
this._connection.sendData(buffer);
|
|
161
|
+
}
|
|
162
|
+
_timeResponse() {
|
|
163
|
+
this._lastInputTime = Date.now();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.AttachAddon = AttachAddon;
|
|
167
|
+
exports.DEFAULT_ROW = 80;
|
|
168
|
+
exports.DEFAULT_COL = 24;
|
|
169
|
+
//# sourceMappingURL=terminal.addon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.addon.js","sourceRoot":"","sources":["../../src/browser/terminal.addon.ts"],"names":[],"mappings":";;;AAEA,+DAA4E;AAK5E,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,SAAS,GAAG;IAChB,iBAAiB;IACjB,8BAA8B,EAAE,uBAAuB;CACxD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,IAAI,aAAa,UAAU,aAAa,MAAM;IAC9C,6BAA6B;IAC7B,gFAAgF;IAChF,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,2CAA2C,aAAa,aAAa,aAAa,MAAM;CACzF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACC,QAAA,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,UAAU,OAAO,SAAS,KAAK,CAAC,CAAC;AAEjF,MAAa,aAAc,SAAQ,4BAAU;IAI3C,YACU,UAAkB,EAClB,YAAgC,EAChC,cAAsC,EACtC,gBAA8C,EAC9C,WAAgC,EAAE;QAE1C,KAAK,EAAE,CAAC;QANA,eAAU,GAAV,UAAU,CAAQ;QAClB,iBAAY,GAAZ,YAAY,CAAoB;QAChC,mBAAc,GAAd,cAAc,CAAwB;QACtC,qBAAgB,GAAhB,gBAAgB,CAA8B;QAC9C,aAAQ,GAAR,QAAQ,CAA0B;QAG1C,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,gBAAgB;QAChB,cAAc;QACd,uBAAuB;QACvB,oBAAoB;QACpB,OAAO;YACL,4BAA4B;YAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;YACnD,GAAG;SACJ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAe;QAChD,IAAI;YACF,MAAM,QAAQ,GAAoC,EAAE,CAAC;YACrD,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;iBAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,qBAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,KAAK;iBACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,qBAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;iBAC3E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,qBAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACjD;QAAC,WAAM;YACN,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,GAAW;QACjC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,cAAM,CAAE,CAAC;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,IAAI,GAAG,EAAE;YACP,IAAI,GAAoB,CAAC;YACzB,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACtB;SACF;QACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACnE,GAAG;YACH,GAAG;SACJ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE;YAC1C,OAAO;SACR;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;YAChC,MAAM,OAAO,GAAG,qBAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7D,KAAK,EAAE;oBACL,eAAe,EAAE,OAAO,CAAC,GAAG;oBAC5B,aAAa,EAAE,OAAO,CAAC,GAAG;oBAC1B,WAAW,EAAE,OAAO,CAAC,GAAG;oBACxB,SAAS,EAAE,OAAO,CAAC,GAAG;iBACvB;aACF,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,MAAM;SACP;IACH,CAAC;IAED,QAAQ,CAAC,QAAkB;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,cAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3G,IAAI,CAAC,UAAU,CAAC;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;oBACrE,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC3D;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AA5FD,sCA4FC;AAED,MAAa,WAAY,SAAQ,4BAAU;IAA3C;;QAKU,YAAO,GAAG,IAAI,yBAAO,EAAwB,CAAC;QACtD,WAAM,GAAgC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjD,YAAO,GAAG,IAAI,yBAAO,EAAsB,CAAC;QACpD,WAAM,GAA8B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,YAAO,GAAG,IAAI,yBAAO,EAAU,CAAC;QACxC,WAAM,GAAkB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEnC,mBAAc,GAAG,CAAC,CAAC;IA0D7B,CAAC;IAxDQ,aAAa,CAAC,UAA2C;QAC9D,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,kBAAkB,GAAG,IAAI,4BAAU,CACtC,UAAU,CAAC,MAAM,CAAC,CAAC,IAA0B,EAAE,EAAE;gBAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,cAAc,EAAE;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;oBAC/C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;oBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC1B;YACH,CAAC,CAAC,CACH,CAAC;YACF,IAAI,UAAU,CAAC,MAAM,EAAE;gBACrB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC,CAAC;aACL;SACF;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,QAAkB;QACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,4BAAU,CAAC,MAAM,CAAC,GAAG,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,OAAO,EAAE,CAAA,EAAA,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAClD,OAAO;SACR;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAClD,OAAO;SACR;QACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SACtC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;CACF;AAtED,kCAsEC;AAEY,QAAA,WAAW,GAAG,EAAE,CAAC;AACjB,QAAA,WAAW,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type vscode from 'vscode';
|
|
2
|
+
import { Event } from '@opensumi/ide-core-common';
|
|
3
|
+
import { ITerminalApiService, ITerminalGroupViewService, ITerminalController, ITerminalInfo, ITerminalExternalClient, ITerminalInternalService, ITerminalNetwork, ITerminalExitEvent } from '../common';
|
|
4
|
+
export declare class TerminalApiService implements ITerminalApiService {
|
|
5
|
+
private _onDidOpenTerminal;
|
|
6
|
+
private _onDidCloseTerminal;
|
|
7
|
+
private _onDidChangeActiveTerminal;
|
|
8
|
+
readonly onDidOpenTerminal: Event<ITerminalInfo>;
|
|
9
|
+
readonly onDidCloseTerminal: Event<ITerminalExitEvent>;
|
|
10
|
+
readonly onDidChangeActiveTerminal: Event<string>;
|
|
11
|
+
protected readonly controller: ITerminalController;
|
|
12
|
+
protected readonly view: ITerminalGroupViewService;
|
|
13
|
+
protected readonly service: ITerminalInternalService;
|
|
14
|
+
protected readonly network: ITerminalNetwork;
|
|
15
|
+
protected _entries: Map<string, ITerminalExternalClient>;
|
|
16
|
+
constructor();
|
|
17
|
+
get terminals(): {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
isActive: boolean;
|
|
21
|
+
}[];
|
|
22
|
+
createTerminal(options: vscode.TerminalOptions): Promise<ITerminalExternalClient>;
|
|
23
|
+
getProcessId(sessionId: string): Promise<number | undefined>;
|
|
24
|
+
sendText(id: string, text: string, addNewLine?: boolean): void;
|
|
25
|
+
showTerm(clientId: string, preserveFocus?: boolean): void;
|
|
26
|
+
hideTerm(clientId: string): void;
|
|
27
|
+
removeTerm(clientId: string): void;
|
|
28
|
+
createWidget(uniqName: string, widgetRenderFunc: (element: HTMLDivElement) => void): import("../common").IWidget;
|
|
29
|
+
/**
|
|
30
|
+
* 启动终端重连任务,可多次调用不会频繁触发,具体触发时机由底层控制
|
|
31
|
+
*/
|
|
32
|
+
scheduleReconnection(): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=terminal.api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.api.d.ts","sourceRoot":"","sources":["../../src/browser/terminal.api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAW,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,aAAa,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExM,qBACa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,mBAAmB,CAAqC;IAChE,OAAO,CAAC,0BAA0B,CAAyB;IAE3D,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAiC;IACjF,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAkC;IACxF,QAAQ,CAAC,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAyC;IAG1F,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAGrD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,uCAA8C;;IAgBhE,IAAI,SAAS;;;;QAQZ;IAEK,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmCvF,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,UAAO;IAIpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAE,OAAc;IAUxD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAUzB,UAAU,CAAC,QAAQ,EAAE,MAAM;IAU3B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI;IAelF;;OAEG;IACH,oBAAoB;CAGrB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalApiService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
let TerminalApiService = class TerminalApiService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this._onDidOpenTerminal = new ide_core_common_1.Emitter();
|
|
12
|
+
this._onDidCloseTerminal = new ide_core_common_1.Emitter();
|
|
13
|
+
this._onDidChangeActiveTerminal = new ide_core_common_1.Emitter();
|
|
14
|
+
this.onDidOpenTerminal = this._onDidOpenTerminal.event;
|
|
15
|
+
this.onDidCloseTerminal = this._onDidCloseTerminal.event;
|
|
16
|
+
this.onDidChangeActiveTerminal = this._onDidChangeActiveTerminal.event;
|
|
17
|
+
this._entries = new Map();
|
|
18
|
+
this.controller.onDidOpenTerminal((info) => {
|
|
19
|
+
this._onDidOpenTerminal.fire(info);
|
|
20
|
+
});
|
|
21
|
+
this.controller.onDidCloseTerminal((e) => {
|
|
22
|
+
this._onDidCloseTerminal.fire(e);
|
|
23
|
+
});
|
|
24
|
+
this.controller.onDidChangeActiveTerminal((id) => {
|
|
25
|
+
this._onDidChangeActiveTerminal.fire(id);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
get terminals() {
|
|
29
|
+
return Array.from(this.controller.clients.values()).map((v) => {
|
|
30
|
+
return {
|
|
31
|
+
id: v.id,
|
|
32
|
+
name: v.name,
|
|
33
|
+
isActive: this.view.currentWidgetId === v.id,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async createTerminal(options) {
|
|
38
|
+
const self = this;
|
|
39
|
+
const client = this.controller.createClientWithWidget(options);
|
|
40
|
+
const external = {
|
|
41
|
+
get id() { return client.id; },
|
|
42
|
+
get name() { return client.name; },
|
|
43
|
+
get processId() { return client.pid; },
|
|
44
|
+
show(preserveFocus = true) {
|
|
45
|
+
const widget = client.widget;
|
|
46
|
+
self.view.selectWidget(widget.id);
|
|
47
|
+
self.controller.showTerminalPanel();
|
|
48
|
+
if (!preserveFocus) {
|
|
49
|
+
setTimeout(() => client.focus());
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
hide() {
|
|
53
|
+
self.controller.hideTerminalPanel();
|
|
54
|
+
},
|
|
55
|
+
dispose() {
|
|
56
|
+
self.view.removeWidget(client.widget.id);
|
|
57
|
+
self._entries.delete(client.id);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
this._entries.set(client.id, external);
|
|
61
|
+
await client.attached.promise;
|
|
62
|
+
external.show();
|
|
63
|
+
return external;
|
|
64
|
+
}
|
|
65
|
+
getProcessId(sessionId) {
|
|
66
|
+
return this.service.getProcessId(sessionId);
|
|
67
|
+
}
|
|
68
|
+
sendText(id, text, addNewLine = true) {
|
|
69
|
+
this.service.sendText(id, `${text}${addNewLine ? '\r' : ''}`);
|
|
70
|
+
}
|
|
71
|
+
showTerm(clientId, preserveFocus = true) {
|
|
72
|
+
const client = this._entries.get(clientId);
|
|
73
|
+
if (!client) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
client.show(preserveFocus);
|
|
77
|
+
}
|
|
78
|
+
hideTerm(clientId) {
|
|
79
|
+
const client = this._entries.get(clientId);
|
|
80
|
+
if (!client) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
client.hide();
|
|
84
|
+
}
|
|
85
|
+
removeTerm(clientId) {
|
|
86
|
+
const client = this._entries.get(clientId);
|
|
87
|
+
if (!client) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
client.dispose();
|
|
91
|
+
}
|
|
92
|
+
createWidget(uniqName, widgetRenderFunc) {
|
|
93
|
+
const widgetId = uniqName;
|
|
94
|
+
const groupIndex = this.view.createGroup();
|
|
95
|
+
const group = this.view.getGroup(groupIndex);
|
|
96
|
+
const widget = this.view.createWidget(group, widgetId, false, true);
|
|
97
|
+
widget.name = (0, lodash_1.capitalize)(uniqName);
|
|
98
|
+
this.view.selectWidget(widgetId);
|
|
99
|
+
widget.onRender(() => {
|
|
100
|
+
widgetRenderFunc(widget.element);
|
|
101
|
+
});
|
|
102
|
+
return widget;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 启动终端重连任务,可多次调用不会频繁触发,具体触发时机由底层控制
|
|
106
|
+
*/
|
|
107
|
+
scheduleReconnection() {
|
|
108
|
+
return this.network.scheduleReconnection();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
(0, tslib_1.__decorate)([
|
|
112
|
+
(0, di_1.Autowired)(common_1.ITerminalController),
|
|
113
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
114
|
+
], TerminalApiService.prototype, "controller", void 0);
|
|
115
|
+
(0, tslib_1.__decorate)([
|
|
116
|
+
(0, di_1.Autowired)(common_1.ITerminalGroupViewService),
|
|
117
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
118
|
+
], TerminalApiService.prototype, "view", void 0);
|
|
119
|
+
(0, tslib_1.__decorate)([
|
|
120
|
+
(0, di_1.Autowired)(common_1.ITerminalInternalService),
|
|
121
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
122
|
+
], TerminalApiService.prototype, "service", void 0);
|
|
123
|
+
(0, tslib_1.__decorate)([
|
|
124
|
+
(0, di_1.Autowired)(common_1.ITerminalNetwork),
|
|
125
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
126
|
+
], TerminalApiService.prototype, "network", void 0);
|
|
127
|
+
TerminalApiService = (0, tslib_1.__decorate)([
|
|
128
|
+
(0, di_1.Injectable)(),
|
|
129
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
130
|
+
], TerminalApiService);
|
|
131
|
+
exports.TerminalApiService = TerminalApiService;
|
|
132
|
+
//# sourceMappingURL=terminal.api.js.map
|