@opensumi/ide-terminal-next 3.7.2-next-1740450374.0 → 3.7.2-next-1741226843.0

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 (97) 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 +27 -3
  11. package/lib/browser/component/terminal.view.d.ts.map +1 -1
  12. package/lib/browser/component/terminal.view.js +32 -2
  13. package/lib/browser/component/terminal.view.js.map +1 -1
  14. package/lib/browser/component/terminal.widget.d.ts.map +1 -1
  15. package/lib/browser/component/terminal.widget.js +3 -9
  16. package/lib/browser/component/terminal.widget.js.map +1 -1
  17. package/lib/browser/contribution/terminal.view.d.ts.map +1 -1
  18. package/lib/browser/contribution/terminal.view.js +0 -2
  19. package/lib/browser/contribution/terminal.view.js.map +1 -1
  20. package/lib/browser/links/link-manager.d.ts.map +1 -1
  21. package/lib/browser/links/link-manager.js +7 -10
  22. package/lib/browser/links/link-manager.js.map +1 -1
  23. package/lib/browser/links/validated-local-link-provider.d.ts +0 -1
  24. package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -1
  25. package/lib/browser/links/validated-local-link-provider.js +42 -55
  26. package/lib/browser/links/validated-local-link-provider.js.map +1 -1
  27. package/lib/browser/terminal.client.d.ts +1 -7
  28. package/lib/browser/terminal.client.d.ts.map +1 -1
  29. package/lib/browser/terminal.client.js +2 -9
  30. package/lib/browser/terminal.client.js.map +1 -1
  31. package/lib/browser/terminal.controller.d.ts +2 -1
  32. package/lib/browser/terminal.controller.d.ts.map +1 -1
  33. package/lib/browser/terminal.controller.js +6 -6
  34. package/lib/browser/terminal.controller.js.map +1 -1
  35. package/lib/browser/terminal.hover.manager.d.ts.map +1 -1
  36. package/lib/browser/terminal.hover.manager.js +2 -4
  37. package/lib/browser/terminal.hover.manager.js.map +1 -1
  38. package/lib/browser/terminal.search.d.ts +1 -9
  39. package/lib/browser/terminal.search.d.ts.map +1 -1
  40. package/lib/browser/terminal.search.js +1 -49
  41. package/lib/browser/terminal.search.js.map +1 -1
  42. package/lib/browser/terminal.view.d.ts +5 -6
  43. package/lib/browser/terminal.view.d.ts.map +1 -1
  44. package/lib/browser/terminal.view.js +0 -13
  45. package/lib/browser/terminal.view.js.map +1 -1
  46. package/lib/browser/xterm.d.ts +1 -7
  47. package/lib/browser/xterm.d.ts.map +1 -1
  48. package/lib/browser/xterm.js +1 -12
  49. package/lib/browser/xterm.js.map +1 -1
  50. package/lib/common/client.d.ts +2 -8
  51. package/lib/common/client.d.ts.map +1 -1
  52. package/lib/common/client.js.map +1 -1
  53. package/lib/common/controller.d.ts +0 -16
  54. package/lib/common/controller.d.ts.map +1 -1
  55. package/lib/common/controller.js.map +1 -1
  56. package/lib/common/pty.d.ts +1 -1
  57. package/lib/common/pty.d.ts.map +1 -1
  58. package/lib/common/render.d.ts +0 -3
  59. package/lib/common/render.d.ts.map +1 -1
  60. package/lib/common/render.js.map +1 -1
  61. package/lib/common/xterm.d.ts +2 -8
  62. package/lib/common/xterm.d.ts.map +1 -1
  63. package/lib/common/xterm.js.map +1 -1
  64. package/package.json +18 -18
  65. package/src/browser/component/resize.view.tsx +1 -2
  66. package/src/browser/component/tab.item.tsx +0 -38
  67. package/src/browser/component/tab.view.tsx +0 -12
  68. package/src/browser/component/terminal.module.less +27 -3
  69. package/src/browser/component/terminal.view.tsx +56 -3
  70. package/src/browser/component/terminal.widget.tsx +3 -8
  71. package/src/browser/contribution/terminal.view.ts +0 -2
  72. package/src/browser/links/link-manager.ts +8 -11
  73. package/src/browser/links/validated-local-link-provider.ts +48 -68
  74. package/src/browser/terminal.client.ts +2 -13
  75. package/src/browser/terminal.controller.ts +8 -7
  76. package/src/browser/terminal.hover.manager.ts +4 -4
  77. package/src/browser/terminal.search.ts +2 -49
  78. package/src/browser/terminal.view.ts +0 -17
  79. package/src/browser/xterm.ts +1 -14
  80. package/src/common/client.ts +2 -7
  81. package/src/common/controller.ts +0 -20
  82. package/src/common/pty.ts +1 -1
  83. package/src/common/render.ts +0 -3
  84. package/src/common/xterm-private.d.ts +4 -7
  85. package/src/common/xterm.ts +2 -6
  86. package/lib/browser/component/search.module.less +0 -61
  87. package/lib/browser/component/search.view.d.ts +0 -3
  88. package/lib/browser/component/search.view.d.ts.map +0 -1
  89. package/lib/browser/component/search.view.js +0 -89
  90. package/lib/browser/component/search.view.js.map +0 -1
  91. package/lib/browser/links/word-link-provider.d.ts +0 -29
  92. package/lib/browser/links/word-link-provider.d.ts.map +0 -1
  93. package/lib/browser/links/word-link-provider.js +0 -153
  94. package/lib/browser/links/word-link-provider.js.map +0 -1
  95. package/src/browser/component/search.module.less +0 -61
  96. package/src/browser/component/search.view.tsx +0 -142
  97. package/src/browser/links/word-link-provider.ts +0 -175
@@ -1,5 +1,4 @@
1
- import { ISearchOptions } from '@xterm/addon-search';
2
- import { IEvent, ITerminalOptions, ITheme, Terminal } from '@xterm/xterm';
1
+ import { ITerminalOptions, ITheme, Terminal } from '@xterm/xterm';
3
2
 
4
3
  import { SupportedOptions } from './preference';
5
4
 
@@ -14,14 +13,11 @@ export interface IXTerm {
14
13
  container: HTMLDivElement;
15
14
  xtermOptions: ITerminalOptions & SupportedOptions;
16
15
 
17
- onSearchResultsChange: IEvent<{ resultIndex: number; resultCount: number }>;
18
-
19
16
  copySelection(): Promise<void>;
20
17
  onSelectionChange(): Promise<void>;
21
18
  open(): void;
22
19
  fit(): void;
23
- findNext(text: string, searchOptions?: ISearchOptions): boolean;
24
- findPrevious(text: string, searchOptions?: ISearchOptions): boolean;
20
+ findNext(text: string): boolean;
25
21
  closeSearch(): void;
26
22
  updatePreferences(options: SupportedOptions): void;
27
23
  updateTheme(theme: ITheme | undefined): void;
@@ -1,61 +0,0 @@
1
- @option-size: 20px;
2
-
3
- .terminalSearch {
4
- display: flex;
5
- justify-content: center;
6
- align-items: center;
7
- position: absolute;
8
- z-index: 999;
9
- right: 16px;
10
- border-radius: 2px;
11
- padding: 6px 8px;
12
- box-shadow: rgba(0, 0, 0, 0.133) 0px 3.2px 7.2px 0px, rgba(0, 0, 0, 0.11) 0px 0.6px 1.8px 0px;
13
- background: var(--kt-panelTitle-background);
14
-
15
- .searchField {
16
- &:focus {
17
- border-color: var(--focusBorder);
18
- }
19
-
20
- .optionBtn {
21
- width: @option-size;
22
- height: @option-size;
23
- margin: 0 1px;
24
- box-sizing: border-box;
25
- display: flex;
26
- justify-content: center;
27
- user-select: none;
28
- background-repeat: no-repeat;
29
- background-position: center;
30
- border: 1px solid transparent;
31
- cursor: pointer;
32
- opacity: 0.7;
33
-
34
- &:hover {
35
- opacity: 1;
36
- }
37
-
38
- &::before {
39
- display: inline-block;
40
- height: @option-size - 2;
41
- line-height: @option-size - 2;
42
- }
43
-
44
- &.select {
45
- background-color: var(--inputOption-activeBackground);
46
- border-color: var(--inputOption-activeBorder);
47
- opacity: 1;
48
- }
49
- }
50
- }
51
-
52
- .panelBtn {
53
- padding: 0px 6px;
54
- cursor: pointer;
55
- }
56
-
57
- .searchResult {
58
- margin: 0 4px;
59
- font-size: 14px;
60
- }
61
- }
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare const TerminalSearch: React.FC<{}>;
3
- //# sourceMappingURL=search.view.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.view.d.ts","sourceRoot":"","sources":["../../../src/browser/component/search.view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAmItC,CAAC"}
@@ -1,89 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TerminalSearch = void 0;
4
- const tslib_1 = require("tslib");
5
- const classnames_1 = tslib_1.__importDefault(require("classnames"));
6
- const react_1 = tslib_1.__importDefault(require("react"));
7
- const ide_components_1 = require("@opensumi/ide-components");
8
- const ide_core_browser_1 = require("@opensumi/ide-core-browser");
9
- const common_1 = require("../../common");
10
- const search_module_less_1 = tslib_1.__importDefault(require("./search.module.less"));
11
- exports.TerminalSearch = react_1.default.memo((props) => {
12
- const searchService = (0, ide_core_browser_1.useInjectable)(common_1.ITerminalSearchService);
13
- const [UIState, setUIState] = react_1.default.useState(searchService.UIState);
14
- const [searchResult, setSearchResult] = react_1.default.useState(null);
15
- const [inputText, setInputText] = react_1.default.useState(searchService.text || '');
16
- const inputRef = react_1.default.useRef(null);
17
- react_1.default.useEffect(() => {
18
- const dispose = searchService.onVisibleChange((show) => {
19
- if (show && inputRef.current) {
20
- inputRef.current.focus();
21
- if (inputRef.current.value.length > 0) {
22
- inputRef.current.setSelectionRange(0, inputRef.current.value.length);
23
- }
24
- }
25
- });
26
- return () => dispose.dispose();
27
- }, [searchService]);
28
- react_1.default.useEffect(() => {
29
- if (!searchService.onResultChange) {
30
- return;
31
- }
32
- const dispose = searchService.onResultChange((event) => {
33
- setSearchResult(event);
34
- });
35
- return () => dispose.dispose();
36
- }, [searchService]);
37
- const searchInput = react_1.default.useCallback((event) => {
38
- searchService.text = event.target.value;
39
- searchService.search();
40
- setInputText(event.target.value);
41
- }, [searchService]);
42
- const searchKeyDown = react_1.default.useCallback((event) => {
43
- if (event.key === 'Enter') {
44
- searchService.search();
45
- }
46
- if (event.key === 'Escape') {
47
- searchService.close();
48
- searchService.clear();
49
- }
50
- }, [searchService]);
51
- const toggleMatchCase = react_1.default.useCallback(() => {
52
- searchService.updateUIState({ isMatchCase: !UIState.isMatchCase });
53
- setUIState(searchService.UIState);
54
- }, [searchService, UIState]);
55
- const toggleRegex = react_1.default.useCallback(() => {
56
- searchService.updateUIState({ isUseRegexp: !UIState.isUseRegexp });
57
- setUIState(searchService.UIState);
58
- }, [searchService, UIState]);
59
- const toggleWholeWord = react_1.default.useCallback(() => {
60
- searchService.updateUIState({ isWholeWord: !UIState.isWholeWord });
61
- setUIState(searchService.UIState);
62
- }, [searchService, UIState]);
63
- const searchNext = react_1.default.useCallback(() => {
64
- searchService.searchNext();
65
- }, [searchService]);
66
- const searchPrev = react_1.default.useCallback(() => {
67
- searchService.searchPrevious();
68
- }, [searchService]);
69
- const close = react_1.default.useCallback(() => {
70
- searchService.close();
71
- }, [searchService]);
72
- return (react_1.default.createElement("div", { className: search_module_less_1.default.terminalSearch },
73
- react_1.default.createElement(ide_components_1.ValidateInput, { className: search_module_less_1.default.searchField, autoFocus: true, id: 'search-input-field', title: (0, ide_core_browser_1.localize)('search.input.placeholder'), type: 'text', value: inputText, placeholder: (0, ide_core_browser_1.localize)('common.find'), onKeyDown: searchKeyDown, onChange: searchInput, ref: inputRef, validateMessage: undefined, addonAfter: [
74
- react_1.default.createElement("span", { key: (0, ide_core_browser_1.localize)('search.caseDescription'), className: (0, classnames_1.default)((0, ide_core_browser_1.getIcon)('ab'), search_module_less_1.default['match-case'], search_module_less_1.default.optionBtn, {
75
- [search_module_less_1.default.select]: UIState.isMatchCase,
76
- }), title: (0, ide_core_browser_1.localize)('search.caseDescription'), onClick: toggleMatchCase }),
77
- react_1.default.createElement("span", { key: (0, ide_core_browser_1.localize)('search.wordsDescription'), className: (0, classnames_1.default)((0, ide_core_browser_1.getIcon)('abl'), search_module_less_1.default['whole-word'], search_module_less_1.default.optionBtn, {
78
- [search_module_less_1.default.select]: UIState.isWholeWord,
79
- }), title: (0, ide_core_browser_1.localize)('search.wordsDescription'), onClick: toggleWholeWord }),
80
- react_1.default.createElement("span", { key: (0, ide_core_browser_1.localize)('search.regexDescription'), className: (0, classnames_1.default)((0, ide_core_browser_1.getIcon)('regex'), search_module_less_1.default['use-regexp'], search_module_less_1.default.optionBtn, {
81
- [search_module_less_1.default.select]: UIState.isUseRegexp,
82
- }), title: (0, ide_core_browser_1.localize)('search.regexDescription'), onClick: toggleRegex }),
83
- ] }),
84
- react_1.default.createElement("div", { className: search_module_less_1.default.searchResult }, searchResult ? `${searchResult.resultIndex + 1}/${searchResult.resultCount}` : '0/0'),
85
- react_1.default.createElement("div", { className: (0, classnames_1.default)(search_module_less_1.default.panelBtn, (0, ide_core_browser_1.getIcon)('up')), onClick: searchPrev }),
86
- react_1.default.createElement("div", { className: (0, classnames_1.default)(search_module_less_1.default.panelBtn, (0, ide_core_browser_1.getIcon)('down')), onClick: searchNext }),
87
- react_1.default.createElement("div", { className: (0, classnames_1.default)(search_module_less_1.default.panelBtn, (0, ide_core_browser_1.getIcon)('close')), onClick: close })));
88
- });
89
- //# sourceMappingURL=search.view.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.view.js","sourceRoot":"","sources":["../../../src/browser/component/search.view.tsx"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -1,61 +0,0 @@
1
- @option-size: 20px;
2
-
3
- .terminalSearch {
4
- display: flex;
5
- justify-content: center;
6
- align-items: center;
7
- position: absolute;
8
- z-index: 999;
9
- right: 16px;
10
- border-radius: 2px;
11
- padding: 6px 8px;
12
- box-shadow: rgba(0, 0, 0, 0.133) 0px 3.2px 7.2px 0px, rgba(0, 0, 0, 0.11) 0px 0.6px 1.8px 0px;
13
- background: var(--kt-panelTitle-background);
14
-
15
- .searchField {
16
- &:focus {
17
- border-color: var(--focusBorder);
18
- }
19
-
20
- .optionBtn {
21
- width: @option-size;
22
- height: @option-size;
23
- margin: 0 1px;
24
- box-sizing: border-box;
25
- display: flex;
26
- justify-content: center;
27
- user-select: none;
28
- background-repeat: no-repeat;
29
- background-position: center;
30
- border: 1px solid transparent;
31
- cursor: pointer;
32
- opacity: 0.7;
33
-
34
- &:hover {
35
- opacity: 1;
36
- }
37
-
38
- &::before {
39
- display: inline-block;
40
- height: @option-size - 2;
41
- line-height: @option-size - 2;
42
- }
43
-
44
- &.select {
45
- background-color: var(--inputOption-activeBackground);
46
- border-color: var(--inputOption-activeBorder);
47
- opacity: 1;
48
- }
49
- }
50
- }
51
-
52
- .panelBtn {
53
- padding: 0px 6px;
54
- cursor: pointer;
55
- }
56
-
57
- .searchResult {
58
- margin: 0 4px;
59
- font-size: 14px;
60
- }
61
- }
@@ -1,142 +0,0 @@
1
- import cls from 'classnames';
2
- import React from 'react';
3
-
4
- import { ValidateInput } from '@opensumi/ide-components';
5
- import { getIcon, localize, useInjectable } from '@opensumi/ide-core-browser';
6
-
7
- import { ISearchResult, ITerminalSearchService } from '../../common';
8
-
9
- import styles from './search.module.less';
10
-
11
- export const TerminalSearch: React.FC<{}> = React.memo((props) => {
12
- const searchService = useInjectable<ITerminalSearchService>(ITerminalSearchService);
13
- const [UIState, setUIState] = React.useState(searchService.UIState);
14
- const [searchResult, setSearchResult] = React.useState<ISearchResult | null>(null);
15
- const [inputText, setInputText] = React.useState(searchService.text || '');
16
- const inputRef = React.useRef<HTMLInputElement>(null);
17
-
18
- React.useEffect(() => {
19
- const dispose = searchService.onVisibleChange((show) => {
20
- if (show && inputRef.current) {
21
- inputRef.current.focus();
22
-
23
- if (inputRef.current.value.length > 0) {
24
- inputRef.current.setSelectionRange(0, inputRef.current.value.length);
25
- }
26
- }
27
- });
28
- return () => dispose.dispose();
29
- }, [searchService]);
30
-
31
- React.useEffect(() => {
32
- if (!searchService.onResultChange) {
33
- return;
34
- }
35
-
36
- const dispose = searchService.onResultChange((event) => {
37
- setSearchResult(event);
38
- });
39
-
40
- return () => dispose.dispose();
41
- }, [searchService]);
42
-
43
- const searchInput = React.useCallback(
44
- (event: React.ChangeEvent<HTMLInputElement>) => {
45
- searchService.text = event.target.value;
46
- searchService.search();
47
- setInputText(event.target.value);
48
- },
49
- [searchService],
50
- );
51
-
52
- const searchKeyDown = React.useCallback(
53
- (event: React.KeyboardEvent<HTMLInputElement>) => {
54
- if (event.key === 'Enter') {
55
- searchService.search();
56
- }
57
-
58
- if (event.key === 'Escape') {
59
- searchService.close();
60
- searchService.clear();
61
- }
62
- },
63
- [searchService],
64
- );
65
-
66
- const toggleMatchCase = React.useCallback(() => {
67
- searchService.updateUIState({ isMatchCase: !UIState.isMatchCase });
68
- setUIState(searchService.UIState);
69
- }, [searchService, UIState]);
70
-
71
- const toggleRegex = React.useCallback(() => {
72
- searchService.updateUIState({ isUseRegexp: !UIState.isUseRegexp });
73
- setUIState(searchService.UIState);
74
- }, [searchService, UIState]);
75
-
76
- const toggleWholeWord = React.useCallback(() => {
77
- searchService.updateUIState({ isWholeWord: !UIState.isWholeWord });
78
- setUIState(searchService.UIState);
79
- }, [searchService, UIState]);
80
-
81
- const searchNext = React.useCallback(() => {
82
- searchService.searchNext();
83
- }, [searchService]);
84
-
85
- const searchPrev = React.useCallback(() => {
86
- searchService.searchPrevious();
87
- }, [searchService]);
88
-
89
- const close = React.useCallback(() => {
90
- searchService.close();
91
- }, [searchService]);
92
-
93
- return (
94
- <div className={styles.terminalSearch}>
95
- <ValidateInput
96
- className={styles.searchField}
97
- autoFocus
98
- id='search-input-field'
99
- title={localize('search.input.placeholder')}
100
- type='text'
101
- value={inputText}
102
- placeholder={localize('common.find')}
103
- onKeyDown={searchKeyDown}
104
- onChange={searchInput}
105
- ref={inputRef}
106
- validateMessage={undefined}
107
- addonAfter={[
108
- <span
109
- key={localize('search.caseDescription')}
110
- className={cls(getIcon('ab'), styles['match-case'], styles.optionBtn, {
111
- [styles.select]: UIState.isMatchCase,
112
- })}
113
- title={localize('search.caseDescription')}
114
- onClick={toggleMatchCase}
115
- ></span>,
116
- <span
117
- key={localize('search.wordsDescription')}
118
- className={cls(getIcon('abl'), styles['whole-word'], styles.optionBtn, {
119
- [styles.select]: UIState.isWholeWord,
120
- })}
121
- title={localize('search.wordsDescription')}
122
- onClick={toggleWholeWord}
123
- ></span>,
124
- <span
125
- key={localize('search.regexDescription')}
126
- className={cls(getIcon('regex'), styles['use-regexp'], styles.optionBtn, {
127
- [styles.select]: UIState.isUseRegexp,
128
- })}
129
- title={localize('search.regexDescription')}
130
- onClick={toggleRegex}
131
- ></span>,
132
- ]}
133
- />
134
- <div className={styles.searchResult}>
135
- {searchResult ? `${searchResult.resultIndex + 1}/${searchResult.resultCount}` : '0/0'}
136
- </div>
137
- <div className={cls(styles.panelBtn, getIcon('up'))} onClick={searchPrev}></div>
138
- <div className={cls(styles.panelBtn, getIcon('down'))} onClick={searchNext}></div>
139
- <div className={cls(styles.panelBtn, getIcon('close'))} onClick={close}></div>
140
- </div>
141
- );
142
- });