@opensumi/ide-terminal-next 3.7.1-next-1739781685.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.
Files changed (63) hide show
  1. package/lib/browser/component/resize.view.d.ts.map +1 -1
  2. package/lib/browser/component/resize.view.js +2 -2
  3. package/lib/browser/component/resize.view.js.map +1 -1
  4. package/lib/browser/component/tab.item.d.ts.map +1 -1
  5. package/lib/browser/component/tab.item.js +1 -23
  6. package/lib/browser/component/tab.item.js.map +1 -1
  7. package/lib/browser/component/tab.view.d.ts.map +1 -1
  8. package/lib/browser/component/tab.view.js +1 -10
  9. package/lib/browser/component/tab.view.js.map +1 -1
  10. package/lib/browser/component/terminal.module.less +0 -6
  11. package/lib/browser/component/terminal.widget.d.ts.map +1 -1
  12. package/lib/browser/component/terminal.widget.js +3 -9
  13. package/lib/browser/component/terminal.widget.js.map +1 -1
  14. package/lib/browser/contribution/terminal.view.d.ts.map +1 -1
  15. package/lib/browser/contribution/terminal.view.js +0 -2
  16. package/lib/browser/contribution/terminal.view.js.map +1 -1
  17. package/lib/browser/links/link-manager.d.ts.map +1 -1
  18. package/lib/browser/links/link-manager.js +7 -10
  19. package/lib/browser/links/link-manager.js.map +1 -1
  20. package/lib/browser/links/validated-local-link-provider.d.ts +0 -1
  21. package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -1
  22. package/lib/browser/links/validated-local-link-provider.js +42 -55
  23. package/lib/browser/links/validated-local-link-provider.js.map +1 -1
  24. package/lib/browser/terminal.controller.d.ts +2 -1
  25. package/lib/browser/terminal.controller.d.ts.map +1 -1
  26. package/lib/browser/terminal.controller.js +6 -6
  27. package/lib/browser/terminal.controller.js.map +1 -1
  28. package/lib/browser/terminal.hover.manager.d.ts.map +1 -1
  29. package/lib/browser/terminal.hover.manager.js +2 -4
  30. package/lib/browser/terminal.hover.manager.js.map +1 -1
  31. package/lib/browser/terminal.view.d.ts +0 -1
  32. package/lib/browser/terminal.view.d.ts.map +1 -1
  33. package/lib/browser/terminal.view.js +0 -13
  34. package/lib/browser/terminal.view.js.map +1 -1
  35. package/lib/common/controller.d.ts +0 -1
  36. package/lib/common/controller.d.ts.map +1 -1
  37. package/lib/common/controller.js.map +1 -1
  38. package/lib/common/pty.d.ts +1 -1
  39. package/lib/common/pty.d.ts.map +1 -1
  40. package/lib/common/render.d.ts +0 -3
  41. package/lib/common/render.d.ts.map +1 -1
  42. package/lib/common/render.js.map +1 -1
  43. package/package.json +18 -18
  44. package/src/browser/component/resize.view.tsx +1 -2
  45. package/src/browser/component/tab.item.tsx +0 -38
  46. package/src/browser/component/tab.view.tsx +0 -12
  47. package/src/browser/component/terminal.module.less +0 -6
  48. package/src/browser/component/terminal.widget.tsx +3 -8
  49. package/src/browser/contribution/terminal.view.ts +0 -2
  50. package/src/browser/links/link-manager.ts +8 -11
  51. package/src/browser/links/validated-local-link-provider.ts +48 -68
  52. package/src/browser/terminal.controller.ts +8 -7
  53. package/src/browser/terminal.hover.manager.ts +4 -4
  54. package/src/browser/terminal.view.ts +0 -17
  55. package/src/common/controller.ts +0 -2
  56. package/src/common/pty.ts +1 -1
  57. package/src/common/render.ts +0 -3
  58. package/src/common/xterm-private.d.ts +4 -7
  59. package/lib/browser/links/word-link-provider.d.ts +0 -29
  60. package/lib/browser/links/word-link-provider.d.ts.map +0 -1
  61. package/lib/browser/links/word-link-provider.js +0 -153
  62. package/lib/browser/links/word-link-provider.js.map +0 -1
  63. 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.css.cell.width,
177
- height: core._renderService.dimensions.css.cell.height,
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(preprocessedLink);
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
- if (validatedLinks.length > 0) {
174
- result.push(...validatedLinks);
175
- }
176
- }
177
-
178
- if (result.length === 0) {
179
- const validatedLinks = await this.detectLocalLink(text, lines, startLine, stringIndex, 2);
180
- if (validatedLinks.length > 0) {
181
- result.push(...validatedLinks);
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 = this.injector.get(TerminalContextKey, [dom]);
403
- this.terminalContextKey.isTerminalFocused.set(this._focus);
404
- this.terminalContextKey.isTerminalViewInitialized.set(true);
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
- let overlayContainer = document.querySelector('#terminal-link-hover-overlay');
17
+ const overlayContainer = document.querySelector('#ide-overlay');
18
18
 
19
19
  if (!overlayContainer) {
20
- overlayContainer = document.createElement('div');
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) => {
@@ -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?: string | vscode.ThemeColor;
542
+ color?: vscode.ThemeColor;
543
543
 
544
544
  /**
545
545
  * When a parent terminal is provided via API, the group needs
@@ -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
- css: {
29
- cell: {
30
- width: number;
31
- height: number;
32
- };
33
- };
28
+ actualCellWidth: number;
29
+ actualCellHeight: number;
34
30
  };
35
31
  _renderer: {
36
- value?: unknown;
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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"}