@opensumi/ide-terminal-next 3.7.2-next-1740448398.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.
- 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 +27 -3
- package/lib/browser/component/terminal.view.d.ts.map +1 -1
- package/lib/browser/component/terminal.view.js +32 -2
- package/lib/browser/component/terminal.view.js.map +1 -1
- 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.client.d.ts +1 -7
- package/lib/browser/terminal.client.d.ts.map +1 -1
- package/lib/browser/terminal.client.js +2 -9
- package/lib/browser/terminal.client.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.search.d.ts +1 -9
- package/lib/browser/terminal.search.d.ts.map +1 -1
- package/lib/browser/terminal.search.js +1 -49
- package/lib/browser/terminal.search.js.map +1 -1
- package/lib/browser/terminal.view.d.ts +5 -6
- 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/browser/xterm.d.ts +1 -7
- package/lib/browser/xterm.d.ts.map +1 -1
- package/lib/browser/xterm.js +1 -12
- package/lib/browser/xterm.js.map +1 -1
- package/lib/common/client.d.ts +2 -8
- package/lib/common/client.d.ts.map +1 -1
- package/lib/common/client.js.map +1 -1
- package/lib/common/controller.d.ts +0 -16
- 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/lib/common/xterm.d.ts +2 -8
- package/lib/common/xterm.d.ts.map +1 -1
- package/lib/common/xterm.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 +27 -3
- package/src/browser/component/terminal.view.tsx +56 -3
- 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.client.ts +2 -13
- package/src/browser/terminal.controller.ts +8 -7
- package/src/browser/terminal.hover.manager.ts +4 -4
- package/src/browser/terminal.search.ts +2 -49
- package/src/browser/terminal.view.ts +0 -17
- package/src/browser/xterm.ts +1 -14
- package/src/common/client.ts +2 -7
- package/src/common/controller.ts +0 -20
- package/src/common/pty.ts +1 -1
- package/src/common/render.ts +0 -3
- package/src/common/xterm-private.d.ts +4 -7
- package/src/common/xterm.ts +2 -6
- package/lib/browser/component/search.module.less +0 -61
- package/lib/browser/component/search.view.d.ts +0 -3
- package/lib/browser/component/search.view.d.ts.map +0 -1
- package/lib/browser/component/search.view.js +0 -89
- package/lib/browser/component/search.view.js.map +0 -1
- 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/component/search.module.less +0 -61
- package/src/browser/component/search.view.tsx +0 -142
- package/src/browser/links/word-link-provider.ts +0 -175
package/src/common/xterm.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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 +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
|
-
});
|