@opensumi/ide-terminal-next 3.7.1-next-1739774311.0 → 3.7.1
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/lib/browser/component/resize.view.d.ts.map +1 -1
- package/lib/browser/component/resize.view.js +2 -2
- package/lib/browser/component/resize.view.js.map +1 -1
- package/lib/browser/component/tab.item.d.ts.map +1 -1
- package/lib/browser/component/tab.item.js +1 -23
- package/lib/browser/component/tab.item.js.map +1 -1
- package/lib/browser/component/tab.view.d.ts.map +1 -1
- package/lib/browser/component/tab.view.js +1 -10
- package/lib/browser/component/tab.view.js.map +1 -1
- package/lib/browser/component/terminal.module.less +0 -6
- package/lib/browser/component/terminal.widget.d.ts.map +1 -1
- package/lib/browser/component/terminal.widget.js +3 -9
- package/lib/browser/component/terminal.widget.js.map +1 -1
- package/lib/browser/contribution/terminal.view.d.ts.map +1 -1
- package/lib/browser/contribution/terminal.view.js +0 -2
- package/lib/browser/contribution/terminal.view.js.map +1 -1
- package/lib/browser/links/link-manager.d.ts.map +1 -1
- package/lib/browser/links/link-manager.js +7 -10
- package/lib/browser/links/link-manager.js.map +1 -1
- package/lib/browser/links/validated-local-link-provider.d.ts +0 -1
- package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -1
- package/lib/browser/links/validated-local-link-provider.js +42 -55
- package/lib/browser/links/validated-local-link-provider.js.map +1 -1
- package/lib/browser/terminal.controller.d.ts +2 -1
- package/lib/browser/terminal.controller.d.ts.map +1 -1
- package/lib/browser/terminal.controller.js +6 -6
- package/lib/browser/terminal.controller.js.map +1 -1
- package/lib/browser/terminal.hover.manager.d.ts.map +1 -1
- package/lib/browser/terminal.hover.manager.js +2 -4
- package/lib/browser/terminal.hover.manager.js.map +1 -1
- package/lib/browser/terminal.view.d.ts +0 -1
- package/lib/browser/terminal.view.d.ts.map +1 -1
- package/lib/browser/terminal.view.js +0 -13
- package/lib/browser/terminal.view.js.map +1 -1
- package/lib/common/controller.d.ts +0 -1
- package/lib/common/controller.d.ts.map +1 -1
- package/lib/common/controller.js.map +1 -1
- package/lib/common/pty.d.ts +1 -1
- package/lib/common/pty.d.ts.map +1 -1
- package/lib/common/render.d.ts +0 -3
- package/lib/common/render.d.ts.map +1 -1
- package/lib/common/render.js.map +1 -1
- package/package.json +18 -18
- package/src/browser/component/resize.view.tsx +1 -2
- package/src/browser/component/tab.item.tsx +0 -38
- package/src/browser/component/tab.view.tsx +0 -12
- package/src/browser/component/terminal.module.less +0 -6
- package/src/browser/component/terminal.widget.tsx +3 -8
- package/src/browser/contribution/terminal.view.ts +0 -2
- package/src/browser/links/link-manager.ts +8 -11
- package/src/browser/links/validated-local-link-provider.ts +48 -68
- package/src/browser/terminal.controller.ts +8 -7
- package/src/browser/terminal.hover.manager.ts +4 -4
- package/src/browser/terminal.view.ts +0 -17
- package/src/common/controller.ts +0 -2
- package/src/common/pty.ts +1 -1
- package/src/common/render.ts +0 -3
- package/src/common/xterm-private.d.ts +4 -7
- package/lib/browser/links/word-link-provider.d.ts +0 -29
- package/lib/browser/links/word-link-provider.d.ts.map +0 -1
- package/lib/browser/links/word-link-provider.js +0 -153
- package/lib/browser/links/word-link-provider.js.map +0 -1
- package/src/browser/links/word-link-provider.ts +0 -175
|
@@ -56,8 +56,6 @@ export class TerminalRenderContribution implements ComponentContribution, TabBar
|
|
|
56
56
|
activateKeyBinding: 'ctrl+`',
|
|
57
57
|
containerId: TerminalRenderContribution.viewId,
|
|
58
58
|
titleComponent: TerminalTabs,
|
|
59
|
-
draggable: true,
|
|
60
|
-
hideLocationTab: ['right'],
|
|
61
59
|
},
|
|
62
60
|
);
|
|
63
61
|
}
|
|
@@ -41,7 +41,6 @@ import {
|
|
|
41
41
|
winLineAndColumnMatchIndex,
|
|
42
42
|
winLocalLinkClause,
|
|
43
43
|
} from './validated-local-link-provider';
|
|
44
|
-
import { TerminalWordLinkProvider } from './word-link-provider';
|
|
45
44
|
|
|
46
45
|
const { posix, win32 } = path;
|
|
47
46
|
|
|
@@ -137,13 +136,6 @@ export class TerminalLinkManager extends Disposable {
|
|
|
137
136
|
]);
|
|
138
137
|
this._standardLinkProviders.push(validatedProvider);
|
|
139
138
|
|
|
140
|
-
const wordLinkProvider = this.injector.get(TerminalWordLinkProvider, [
|
|
141
|
-
this._xterm,
|
|
142
|
-
async (link, cb) => cb(await this._resolvePath(link)),
|
|
143
|
-
wrappedTextLinkActivateCallback,
|
|
144
|
-
]);
|
|
145
|
-
this._standardLinkProviders.push(wordLinkProvider);
|
|
146
|
-
|
|
147
139
|
this._registerStandardLinkProviders();
|
|
148
140
|
}
|
|
149
141
|
|
|
@@ -173,8 +165,8 @@ export class TerminalLinkManager extends Disposable {
|
|
|
173
165
|
) {
|
|
174
166
|
const core = (this._xterm as any)._core as XTermCore;
|
|
175
167
|
const cellDimensions = {
|
|
176
|
-
width: core._renderService.dimensions.
|
|
177
|
-
height: core._renderService.dimensions.
|
|
168
|
+
width: core._renderService.dimensions.actualCellWidth,
|
|
169
|
+
height: core._renderService.dimensions.actualCellHeight,
|
|
178
170
|
};
|
|
179
171
|
const terminalDimensions = {
|
|
180
172
|
width: this._xterm.cols,
|
|
@@ -383,8 +375,13 @@ export class TerminalLinkManager extends Disposable {
|
|
|
383
375
|
return undefined;
|
|
384
376
|
}
|
|
385
377
|
|
|
378
|
+
const linkUrl = this.extractLinkUrl(preprocessedLink);
|
|
379
|
+
if (!linkUrl) {
|
|
380
|
+
return undefined;
|
|
381
|
+
}
|
|
382
|
+
|
|
386
383
|
try {
|
|
387
|
-
const uri = URI.file(
|
|
384
|
+
const uri = URI.file(linkUrl);
|
|
388
385
|
const stat = await this._fileService.getFileStat(uri.toString());
|
|
389
386
|
if (stat) {
|
|
390
387
|
return { uri, isDirectory: stat.isDirectory };
|
|
@@ -138,6 +138,7 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
138
138
|
let match;
|
|
139
139
|
let stringIndex = -1;
|
|
140
140
|
while ((match = rex.exec(text)) !== null) {
|
|
141
|
+
// const link = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];
|
|
141
142
|
let link = match[0];
|
|
142
143
|
if (!link) {
|
|
143
144
|
// something matched but does not comply with the given matchIndex
|
|
@@ -168,81 +169,60 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
168
169
|
link = link.substring(2);
|
|
169
170
|
stringIndex += 2;
|
|
170
171
|
}
|
|
171
|
-
const validatedLinks = await this.detectLocalLink(link, lines, startLine, stringIndex, 1);
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
173
|
+
// Convert the link text's string index into a wrapped buffer range
|
|
174
|
+
const bufferRange = convertLinkRangeToBuffer(
|
|
175
|
+
lines,
|
|
176
|
+
this._xterm.cols,
|
|
177
|
+
{
|
|
178
|
+
startColumn: stringIndex + 1,
|
|
179
|
+
startLineNumber: 1,
|
|
180
|
+
endColumn: stringIndex + link.length + 1,
|
|
181
|
+
endLineNumber: 1,
|
|
182
|
+
},
|
|
183
|
+
startLine,
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
const validatedLink = await new Promise<TerminalLink | undefined>((r) => {
|
|
187
|
+
this._validationCallback(link, async (result) => {
|
|
188
|
+
if (result) {
|
|
189
|
+
const label = result.isDirectory
|
|
190
|
+
? (await this._isDirectoryInsideWorkspace(result.uri))
|
|
191
|
+
? FOLDER_IN_WORKSPACE_LABEL
|
|
192
|
+
: FOLDER_NOT_IN_WORKSPACE_LABEL
|
|
193
|
+
: OPEN_FILE_LABEL;
|
|
194
|
+
const activateCallback = this._wrapLinkHandler((event: MouseEvent | undefined, text: string) => {
|
|
195
|
+
if (result.isDirectory) {
|
|
196
|
+
this._handleLocalFolderLink(result.uri);
|
|
197
|
+
} else {
|
|
198
|
+
this._activateFileCallback(event, text);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
r(
|
|
202
|
+
this.injector.get(TerminalLink, [
|
|
203
|
+
this._xterm,
|
|
204
|
+
bufferRange,
|
|
205
|
+
link,
|
|
206
|
+
this._xterm.buffer.active.viewportY,
|
|
207
|
+
activateCallback,
|
|
208
|
+
this._tooltipCallback,
|
|
209
|
+
true,
|
|
210
|
+
label,
|
|
211
|
+
]),
|
|
212
|
+
);
|
|
213
|
+
} else {
|
|
214
|
+
r(undefined);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
if (validatedLink) {
|
|
219
|
+
result.push(validatedLink);
|
|
182
220
|
}
|
|
183
221
|
}
|
|
184
222
|
|
|
185
223
|
return result;
|
|
186
224
|
}
|
|
187
225
|
|
|
188
|
-
private async detectLocalLink(
|
|
189
|
-
text: string,
|
|
190
|
-
bufferLines: IBufferLine[],
|
|
191
|
-
startLine: number,
|
|
192
|
-
stringIndex: number,
|
|
193
|
-
offset,
|
|
194
|
-
) {
|
|
195
|
-
const result: TerminalLink[] = [];
|
|
196
|
-
const validatedLink = await new Promise<TerminalLink | undefined>((r) => {
|
|
197
|
-
this._validationCallback(text, async (result) => {
|
|
198
|
-
if (result) {
|
|
199
|
-
const label = result.isDirectory
|
|
200
|
-
? (await this._isDirectoryInsideWorkspace(result.uri))
|
|
201
|
-
? FOLDER_IN_WORKSPACE_LABEL
|
|
202
|
-
: FOLDER_NOT_IN_WORKSPACE_LABEL
|
|
203
|
-
: OPEN_FILE_LABEL;
|
|
204
|
-
const activateCallback = this._wrapLinkHandler((event: MouseEvent | undefined, text: string) => {
|
|
205
|
-
if (result.isDirectory) {
|
|
206
|
-
this._handleLocalFolderLink(result.uri);
|
|
207
|
-
} else {
|
|
208
|
-
this._activateFileCallback(event, text);
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
// Convert the link text's string index into a wrapped buffer range
|
|
212
|
-
const bufferRange = convertLinkRangeToBuffer(
|
|
213
|
-
bufferLines,
|
|
214
|
-
this._xterm.cols,
|
|
215
|
-
{
|
|
216
|
-
startColumn: stringIndex + 1,
|
|
217
|
-
startLineNumber: 1,
|
|
218
|
-
endColumn: stringIndex + text.length + offset,
|
|
219
|
-
endLineNumber: 1,
|
|
220
|
-
},
|
|
221
|
-
startLine,
|
|
222
|
-
);
|
|
223
|
-
r(
|
|
224
|
-
this.injector.get(TerminalLink, [
|
|
225
|
-
this._xterm,
|
|
226
|
-
bufferRange,
|
|
227
|
-
text,
|
|
228
|
-
this._xterm.buffer.active.viewportY,
|
|
229
|
-
activateCallback,
|
|
230
|
-
this._tooltipCallback,
|
|
231
|
-
true,
|
|
232
|
-
label,
|
|
233
|
-
]),
|
|
234
|
-
);
|
|
235
|
-
} else {
|
|
236
|
-
r(undefined);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
if (validatedLink) {
|
|
241
|
-
result.push(validatedLink);
|
|
242
|
-
}
|
|
243
|
-
return result;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
226
|
protected get _localLinkRegex(): RegExp {
|
|
247
227
|
const baseLocalLinkClause = this._client.os === OperatingSystem.Windows ? winLocalLinkClause : unixLocalLinkClause;
|
|
248
228
|
// Append line and column number regex
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
} from '@opensumi/ide-core-common';
|
|
24
24
|
import { WorkbenchEditorService } from '@opensumi/ide-editor';
|
|
25
25
|
import { IMainLayoutService } from '@opensumi/ide-main-layout';
|
|
26
|
+
import { TabBarHandler } from '@opensumi/ide-main-layout/lib/browser/tabbar-handler';
|
|
26
27
|
import { IThemeService } from '@opensumi/ide-theme';
|
|
27
28
|
|
|
28
29
|
import {
|
|
@@ -61,6 +62,7 @@ import { TerminalGroupViewService } from './terminal.view';
|
|
|
61
62
|
@Injectable()
|
|
62
63
|
export class TerminalController extends WithEventBus implements ITerminalController {
|
|
63
64
|
protected _focus: boolean;
|
|
65
|
+
protected _tabBarHandler: TabBarHandler | undefined;
|
|
64
66
|
protected _clients: Map<string, ITerminalClient>;
|
|
65
67
|
protected _onDidOpenTerminal = new Emitter<ITerminalInfo>();
|
|
66
68
|
protected _onDidCloseTerminal = new Emitter<ITerminalExitEvent>();
|
|
@@ -197,10 +199,6 @@ export class TerminalController extends WithEventBus implements ITerminalControl
|
|
|
197
199
|
return this._clientId;
|
|
198
200
|
}
|
|
199
201
|
|
|
200
|
-
get _tabBarHandler() {
|
|
201
|
-
return this.layoutService.getTabbarHandler(TERMINAL_CONTAINER_ID);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
202
|
private async _createClientOrIgnore(widget: IWidget) {
|
|
205
203
|
if (this._clients.has(widget.id)) {
|
|
206
204
|
return this._clients.get(widget.id)!;
|
|
@@ -399,9 +397,11 @@ export class TerminalController extends WithEventBus implements ITerminalControl
|
|
|
399
397
|
}
|
|
400
398
|
|
|
401
399
|
initContextKey(dom: HTMLDivElement) {
|
|
402
|
-
this.terminalContextKey
|
|
403
|
-
|
|
404
|
-
|
|
400
|
+
if (!this.terminalContextKey) {
|
|
401
|
+
this.terminalContextKey = this.injector.get(TerminalContextKey, [dom]);
|
|
402
|
+
this.terminalContextKey.isTerminalFocused.set(this._focus);
|
|
403
|
+
this.terminalContextKey.isTerminalViewInitialized.set(true);
|
|
404
|
+
}
|
|
405
405
|
}
|
|
406
406
|
|
|
407
407
|
async firstInitialize() {
|
|
@@ -418,6 +418,7 @@ export class TerminalController extends WithEventBus implements ITerminalControl
|
|
|
418
418
|
}),
|
|
419
419
|
]);
|
|
420
420
|
|
|
421
|
+
this._tabBarHandler = this.layoutService.getTabbarHandler(TERMINAL_CONTAINER_ID);
|
|
421
422
|
this.themeBackground = this.terminalTheme.terminalTheme.background || '';
|
|
422
423
|
|
|
423
424
|
this.addDispose(
|
|
@@ -14,12 +14,10 @@ export class TerminalHoverManagerService implements ITerminalHoverManagerService
|
|
|
14
14
|
private hoverWidget: HTMLElement | undefined;
|
|
15
15
|
|
|
16
16
|
private appendTerminalHoverOverlay() {
|
|
17
|
-
|
|
17
|
+
const overlayContainer = document.querySelector('#ide-overlay');
|
|
18
18
|
|
|
19
19
|
if (!overlayContainer) {
|
|
20
|
-
|
|
21
|
-
overlayContainer.id = 'terminal-link-hover-overlay';
|
|
22
|
-
document.body.appendChild(overlayContainer);
|
|
20
|
+
throw new Error('ide-overlay is requried');
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
const overlay = document.createElement('div');
|
|
@@ -74,11 +72,13 @@ export class TerminalHoverManagerService implements ITerminalHoverManagerService
|
|
|
74
72
|
this.hoverWidget.style.top = `${
|
|
75
73
|
(viewportRange.start.y - 1) * cellDimensions.height + boundingClientRect.y - TIPS_OFFSET_Y
|
|
76
74
|
}px`;
|
|
75
|
+
|
|
77
76
|
let tooltipsLeft = viewportRange.start.x * cellDimensions.width + boundingClientRect.x + TIPS_OFFSET_X;
|
|
78
77
|
// if the tooltip is too close to the right edge of the terminal, move it to the left
|
|
79
78
|
if (tooltipsLeft + this.hoverWidget.clientWidth > boundingClientRect.x + boundingClientRect.width) {
|
|
80
79
|
tooltipsLeft = boundingClientRect.x + boundingClientRect.width - this.hoverWidget.clientWidth - TIPS_OFFSET_X;
|
|
81
80
|
}
|
|
81
|
+
|
|
82
82
|
this.hoverWidget.style.left = `${tooltipsLeft}px`;
|
|
83
83
|
}
|
|
84
84
|
});
|
|
@@ -275,23 +275,6 @@ export class TerminalGroupViewService implements ITerminalGroupViewService {
|
|
|
275
275
|
return this.groups.get()[index];
|
|
276
276
|
}
|
|
277
277
|
|
|
278
|
-
swapGroup(i: number, j: number) {
|
|
279
|
-
const groups = this.groups.get();
|
|
280
|
-
|
|
281
|
-
if (i === -1 || j === -1) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const newGroups = [...groups];
|
|
286
|
-
const temp = newGroups[i];
|
|
287
|
-
newGroups[i] = newGroups[j];
|
|
288
|
-
newGroups[j] = temp;
|
|
289
|
-
|
|
290
|
-
transaction((tx) => {
|
|
291
|
-
this.groups.set(newGroups, tx);
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
|
|
295
278
|
private _doSelectGroup(index: number) {
|
|
296
279
|
const group = this.getGroup(index);
|
|
297
280
|
transaction((tx) => {
|
package/src/common/controller.ts
CHANGED
|
@@ -140,8 +140,6 @@ export interface ITerminalGroupViewService {
|
|
|
140
140
|
selectGroup(index: number): void;
|
|
141
141
|
removeGroup(index: number): void;
|
|
142
142
|
|
|
143
|
-
swapGroup(i: number, j: number): void;
|
|
144
|
-
|
|
145
143
|
createWidget(group: IWidgetGroup, id?: string, reuse?: boolean, isSimpleWidget?: boolean): IWidget;
|
|
146
144
|
getWidget(id: string): IWidget;
|
|
147
145
|
selectWidget(widgetId: string): void;
|
package/src/common/pty.ts
CHANGED
|
@@ -539,7 +539,7 @@ export interface IShellLaunchConfig {
|
|
|
539
539
|
/**
|
|
540
540
|
* The color ID to use for this terminal. If not specified it will use the default fallback
|
|
541
541
|
*/
|
|
542
|
-
color?:
|
|
542
|
+
color?: vscode.ThemeColor;
|
|
543
543
|
|
|
544
544
|
/**
|
|
545
545
|
* When a parent terminal is provided via API, the group needs
|
package/src/common/render.ts
CHANGED
|
@@ -18,11 +18,8 @@ export interface ItemProps {
|
|
|
18
18
|
onDropdown?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
19
19
|
onContextMenu?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
20
20
|
getKeybinding?: (command: string) => string;
|
|
21
|
-
onDrop?: (event: React.DragEvent) => void;
|
|
22
|
-
onDragStart?: (event: React.DragEvent) => void;
|
|
23
21
|
provider: ITerminalRenderProvider;
|
|
24
22
|
theme: ThemeType;
|
|
25
|
-
draggable?: boolean;
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
export const ITerminalRenderProvider = Symbol('TerminalRenderProvider');
|
|
@@ -25,16 +25,13 @@ export interface XTermCore {
|
|
|
25
25
|
|
|
26
26
|
_renderService: {
|
|
27
27
|
dimensions: {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
width: number;
|
|
31
|
-
height: number;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
28
|
+
actualCellWidth: number;
|
|
29
|
+
actualCellHeight: number;
|
|
34
30
|
};
|
|
35
31
|
_renderer: {
|
|
36
|
-
|
|
32
|
+
_renderLayers: any[];
|
|
37
33
|
};
|
|
34
|
+
_onIntersectionChange: any;
|
|
38
35
|
};
|
|
39
36
|
}
|
|
40
37
|
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Terminal } from '@xterm/xterm';
|
|
2
|
-
import { PrefixQuickOpenService } from '@opensumi/ide-core-browser/lib/quick-open';
|
|
3
|
-
import { IWindowService } from '@opensumi/ide-core-browser/lib/window';
|
|
4
|
-
import { URI } from '@opensumi/ide-core-common';
|
|
5
|
-
import { TerminalBaseLinkProvider } from './base';
|
|
6
|
-
import { TerminalLink } from './link';
|
|
7
|
-
export declare const USUAL_WORD_SEPARATORS = " ()[]{}',\"`\u2500\u2018\u2019\u201C\u201D|";
|
|
8
|
-
export declare class TerminalWordLinkProvider extends TerminalBaseLinkProvider {
|
|
9
|
-
private readonly _xterm;
|
|
10
|
-
private readonly _validationCallback;
|
|
11
|
-
private readonly _activateFileCallback;
|
|
12
|
-
private _separatorRegex;
|
|
13
|
-
private readonly appConfig;
|
|
14
|
-
private readonly commandService;
|
|
15
|
-
protected readonly windowService: IWindowService;
|
|
16
|
-
private readonly injector;
|
|
17
|
-
private readonly workspaceService;
|
|
18
|
-
protected readonly quickOpenService: PrefixQuickOpenService;
|
|
19
|
-
constructor(_xterm: Terminal, _validationCallback: (link: string, callback: (result: {
|
|
20
|
-
uri: URI;
|
|
21
|
-
isDirectory: boolean;
|
|
22
|
-
} | undefined) => void) => void, _activateFileCallback: (event: MouseEvent | undefined, link: string) => void);
|
|
23
|
-
private _refreshSeparatorCodes;
|
|
24
|
-
protected _provideLinks(bufferLineNumber: number): Promise<TerminalLink[]> | TerminalLink[];
|
|
25
|
-
private _handleLocalFolderLink;
|
|
26
|
-
private _parseWords;
|
|
27
|
-
private _isDirectoryInsideWorkspace;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=word-link-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"word-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/word-link-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAMhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,eAAO,MAAM,qBAAqB,gDAAuB,CAAC;AAQ1D,qBACa,wBAAyB,SAAQ,wBAAwB;IAsBlE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAIpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IA1BxC,OAAO,CAAC,eAAe,CAAU;IAGjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAGtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAGhD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAGjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAGpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;gBAGzC,MAAM,EAAE,QAAQ,EAChB,mBAAmB,EAAE,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,KAAK,IAAI,KACvE,IAAI,EACQ,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;IAM/F,OAAO,CAAC,sBAAsB;IAQ9B,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE;YAsE7E,sBAAsB;IAapC,OAAO,CAAC,WAAW;YAgBL,2BAA2B;CAS1C"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TerminalWordLinkProvider = exports.USUAL_WORD_SEPARATORS = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const xterm_1 = require("@xterm/xterm");
|
|
6
|
-
const di_1 = require("@opensumi/di");
|
|
7
|
-
const quick_open_1 = require("@opensumi/ide-core-browser/lib/quick-open");
|
|
8
|
-
const config_provider_1 = require("@opensumi/ide-core-browser/lib/react-providers/config-provider");
|
|
9
|
-
const window_1 = require("@opensumi/ide-core-browser/lib/window");
|
|
10
|
-
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
11
|
-
const command_1 = require("@opensumi/ide-core-common/lib/command");
|
|
12
|
-
const workspace_interface_1 = require("@opensumi/ide-workspace/lib/common/workspace.interface");
|
|
13
|
-
const terminal_typeAhead_addon_1 = require("../terminal.typeAhead.addon");
|
|
14
|
-
const base_1 = require("./base");
|
|
15
|
-
const helpers_1 = require("./helpers");
|
|
16
|
-
const link_1 = require("./link");
|
|
17
|
-
exports.USUAL_WORD_SEPARATORS = ' ()[]{}\',"`─‘’“”|';
|
|
18
|
-
let TerminalWordLinkProvider = class TerminalWordLinkProvider extends base_1.TerminalBaseLinkProvider {
|
|
19
|
-
constructor(_xterm, _validationCallback, _activateFileCallback) {
|
|
20
|
-
super();
|
|
21
|
-
this._xterm = _xterm;
|
|
22
|
-
this._validationCallback = _validationCallback;
|
|
23
|
-
this._activateFileCallback = _activateFileCallback;
|
|
24
|
-
this._refreshSeparatorCodes();
|
|
25
|
-
}
|
|
26
|
-
_refreshSeparatorCodes() {
|
|
27
|
-
let powerlineSymbols = '';
|
|
28
|
-
for (let i = 0xe0b0; i <= 0xe0bf; i++) {
|
|
29
|
-
powerlineSymbols += String.fromCharCode(i);
|
|
30
|
-
}
|
|
31
|
-
this._separatorRegex = new RegExp(`[${(0, terminal_typeAhead_addon_1.escapeRegExpCharacters)(exports.USUAL_WORD_SEPARATORS)}${powerlineSymbols}]`, 'g');
|
|
32
|
-
}
|
|
33
|
-
_provideLinks(bufferLineNumber) {
|
|
34
|
-
const links = [];
|
|
35
|
-
const startLine = bufferLineNumber - 1;
|
|
36
|
-
const endLine = startLine;
|
|
37
|
-
const lines = [this._xterm.buffer.active.getLine(startLine)];
|
|
38
|
-
const text = (0, helpers_1.getXtermLineContent)(this._xterm.buffer.active, startLine, endLine, this._xterm.cols);
|
|
39
|
-
if (text === '' || text.length > 1024) {
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
// Parse out all words from the wrapped line
|
|
43
|
-
const words = this._parseWords(text);
|
|
44
|
-
// Map the words to ITerminalLink objects
|
|
45
|
-
for (const word of words) {
|
|
46
|
-
if (word.text === '') {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (word.text.length > 0 && word.text.charAt(word.text.length - 1) === ':') {
|
|
50
|
-
word.text = word.text.slice(0, -1);
|
|
51
|
-
word.endIndex--;
|
|
52
|
-
}
|
|
53
|
-
const bufferRange = (0, helpers_1.convertLinkRangeToBuffer)(lines, this._xterm.cols, {
|
|
54
|
-
startColumn: word.startIndex + 1,
|
|
55
|
-
startLineNumber: 1,
|
|
56
|
-
endColumn: word.endIndex + 1,
|
|
57
|
-
endLineNumber: 1,
|
|
58
|
-
}, startLine);
|
|
59
|
-
// Search links
|
|
60
|
-
const activateHandler = (event, text) => {
|
|
61
|
-
this._validationCallback(text, async (result) => {
|
|
62
|
-
if (result) {
|
|
63
|
-
if (result.isDirectory) {
|
|
64
|
-
this._handleLocalFolderLink(result.uri);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this._activateFileCallback(event, text);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
this.quickOpenService.open(text);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
links.push(this.injector.get(link_1.TerminalLink, [
|
|
76
|
-
this._xterm,
|
|
77
|
-
bufferRange,
|
|
78
|
-
word.text,
|
|
79
|
-
this._xterm.buffer.active.viewportY,
|
|
80
|
-
activateHandler,
|
|
81
|
-
undefined,
|
|
82
|
-
true,
|
|
83
|
-
word.text,
|
|
84
|
-
]));
|
|
85
|
-
}
|
|
86
|
-
return links;
|
|
87
|
-
}
|
|
88
|
-
async _handleLocalFolderLink(uri) {
|
|
89
|
-
// If the folder is within one of the window's workspaces, focus it in the explorer
|
|
90
|
-
if (await this._isDirectoryInsideWorkspace(uri)) {
|
|
91
|
-
await this.commandService.executeCommand('revealInExplorer', uri);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
// Open a new window for the folder
|
|
95
|
-
if (this.appConfig.isElectronRenderer) {
|
|
96
|
-
this.windowService.openWorkspace(uri, { newWindow: true });
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
_parseWords(text) {
|
|
100
|
-
const words = [];
|
|
101
|
-
const splitWords = text.split(this._separatorRegex);
|
|
102
|
-
let runningIndex = 0;
|
|
103
|
-
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
104
|
-
for (let i = 0; i < splitWords.length; i++) {
|
|
105
|
-
words.push({
|
|
106
|
-
text: splitWords[i],
|
|
107
|
-
startIndex: runningIndex,
|
|
108
|
-
endIndex: runningIndex + splitWords[i].length,
|
|
109
|
-
});
|
|
110
|
-
runningIndex += splitWords[i].length + 1;
|
|
111
|
-
}
|
|
112
|
-
return words;
|
|
113
|
-
}
|
|
114
|
-
async _isDirectoryInsideWorkspace(uri) {
|
|
115
|
-
const folders = await this.workspaceService.roots;
|
|
116
|
-
for (const folder of folders) {
|
|
117
|
-
if (ide_core_common_1.URI.parse(folder.uri).isEqualOrParent(uri)) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
exports.TerminalWordLinkProvider = TerminalWordLinkProvider;
|
|
125
|
-
tslib_1.__decorate([
|
|
126
|
-
(0, di_1.Autowired)(config_provider_1.AppConfig),
|
|
127
|
-
tslib_1.__metadata("design:type", Object)
|
|
128
|
-
], TerminalWordLinkProvider.prototype, "appConfig", void 0);
|
|
129
|
-
tslib_1.__decorate([
|
|
130
|
-
(0, di_1.Autowired)(command_1.CommandService),
|
|
131
|
-
tslib_1.__metadata("design:type", Object)
|
|
132
|
-
], TerminalWordLinkProvider.prototype, "commandService", void 0);
|
|
133
|
-
tslib_1.__decorate([
|
|
134
|
-
(0, di_1.Autowired)(window_1.IWindowService),
|
|
135
|
-
tslib_1.__metadata("design:type", Object)
|
|
136
|
-
], TerminalWordLinkProvider.prototype, "windowService", void 0);
|
|
137
|
-
tslib_1.__decorate([
|
|
138
|
-
(0, di_1.Autowired)(di_1.INJECTOR_TOKEN),
|
|
139
|
-
tslib_1.__metadata("design:type", di_1.Injector)
|
|
140
|
-
], TerminalWordLinkProvider.prototype, "injector", void 0);
|
|
141
|
-
tslib_1.__decorate([
|
|
142
|
-
(0, di_1.Autowired)(workspace_interface_1.IWorkspaceService),
|
|
143
|
-
tslib_1.__metadata("design:type", Object)
|
|
144
|
-
], TerminalWordLinkProvider.prototype, "workspaceService", void 0);
|
|
145
|
-
tslib_1.__decorate([
|
|
146
|
-
(0, di_1.Autowired)(quick_open_1.PrefixQuickOpenService),
|
|
147
|
-
tslib_1.__metadata("design:type", Object)
|
|
148
|
-
], TerminalWordLinkProvider.prototype, "quickOpenService", void 0);
|
|
149
|
-
exports.TerminalWordLinkProvider = TerminalWordLinkProvider = tslib_1.__decorate([
|
|
150
|
-
(0, di_1.Injectable)({ multiple: true }),
|
|
151
|
-
tslib_1.__metadata("design:paramtypes", [xterm_1.Terminal, Function, Function])
|
|
152
|
-
], TerminalWordLinkProvider);
|
|
153
|
-
//# sourceMappingURL=word-link-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"word-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/word-link-provider.ts"],"names":[],"mappings":"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"}
|