@codingame/monaco-vscode-xterm-common 28.4.1 → 29.1.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/package.json +3 -3
- package/vscode/src/vs/workbench/contrib/terminal/browser/environmentVariableInfo.js +5 -5
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalActions.js +61 -61
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalInstance.js +29 -28
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.js +14 -4
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalTabsList.js +5 -5
- package/vscode/src/vs/workbench/contrib/terminal/browser/terminalTooltip.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.js +2 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChat.js +9 -9
- package/vscode/src/vs/workbench/contrib/terminalContrib/stickyScroll/browser/terminalStickyScrollColorRegistry.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/stickyScroll/browser/terminalStickyScrollOverlay.js +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-xterm-common",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "29.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - common package depending on xterm",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
19
|
-
"@codingame/monaco-vscode-xterm-addons-common": "
|
|
18
|
+
"@codingame/monaco-vscode-api": "29.1.0",
|
|
19
|
+
"@codingame/monaco-vscode-xterm-addons-common": "29.1.0",
|
|
20
20
|
"@xterm/xterm": "6.1.0-beta.168"
|
|
21
21
|
},
|
|
22
22
|
"exports": {
|
|
@@ -24,7 +24,7 @@ let EnvironmentVariableInfoStale = class EnvironmentVariableInfoStale {
|
|
|
24
24
|
addExtensionIdentifiers(extSet, ( this._diff.removed.values()));
|
|
25
25
|
addExtensionIdentifiers(extSet, ( this._diff.changed.values()));
|
|
26
26
|
let message = ( localize(
|
|
27
|
-
|
|
27
|
+
13267,
|
|
28
28
|
"The following extensions want to relaunch the terminal to contribute to its environment:"
|
|
29
29
|
));
|
|
30
30
|
message += getMergedDescription(this._collection, scope, this._extensionService, extSet);
|
|
@@ -32,7 +32,7 @@ let EnvironmentVariableInfoStale = class EnvironmentVariableInfoStale {
|
|
|
32
32
|
}
|
|
33
33
|
_getActions() {
|
|
34
34
|
return [{
|
|
35
|
-
label: ( localize(
|
|
35
|
+
label: ( localize(13268, "Relaunch Terminal")),
|
|
36
36
|
run: () => this._terminalService.getInstanceFromId(this._terminalId)?.relaunch(),
|
|
37
37
|
commandId: TerminalCommandId.Relaunch
|
|
38
38
|
}];
|
|
@@ -59,7 +59,7 @@ let EnvironmentVariableInfoChangesActive = class EnvironmentVariableInfoChangesA
|
|
|
59
59
|
const extSet = ( new Set());
|
|
60
60
|
addExtensionIdentifiers(extSet, ( this._collection.getVariableMap(scope).values()));
|
|
61
61
|
let message = ( localize(
|
|
62
|
-
|
|
62
|
+
13269,
|
|
63
63
|
"The following extensions have contributed to this terminal's environment:"
|
|
64
64
|
));
|
|
65
65
|
message += getMergedDescription(this._collection, scope, this._extensionService, extSet);
|
|
@@ -67,7 +67,7 @@ let EnvironmentVariableInfoChangesActive = class EnvironmentVariableInfoChangesA
|
|
|
67
67
|
}
|
|
68
68
|
_getActions(scope) {
|
|
69
69
|
return [{
|
|
70
|
-
label: ( localize(
|
|
70
|
+
label: ( localize(13270, "Show Environment Contributions")),
|
|
71
71
|
run: () => this._commandService.executeCommand(TerminalCommandId.ShowEnvironmentContributions, scope),
|
|
72
72
|
commandId: TerminalCommandId.ShowEnvironmentContributions
|
|
73
73
|
}];
|
|
@@ -95,7 +95,7 @@ function getMergedDescription(collection, scope, extensionService, extSet) {
|
|
|
95
95
|
}
|
|
96
96
|
const workspaceDescription = workspaceDescriptions.get(ext);
|
|
97
97
|
if (workspaceDescription) {
|
|
98
|
-
const workspaceSuffix = globalDescription ? ` (${( localize(
|
|
98
|
+
const workspaceSuffix = globalDescription ? ` (${( localize(13271, "workspace"))})` : "";
|
|
99
99
|
message.push(`\n- \`${getExtensionName(ext, extensionService)}${workspaceSuffix}\``);
|
|
100
100
|
message.push(`: ${workspaceDescription}`);
|
|
101
101
|
}
|
|
@@ -63,7 +63,7 @@ import { ResourceContextKey } from '@codingame/monaco-vscode-api/vscode/vs/workb
|
|
|
63
63
|
import { SeparatorSelectOption } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/selectBox/selectBox';
|
|
64
64
|
import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
|
|
65
65
|
|
|
66
|
-
const switchTerminalShowTabsTitle = ( localize(
|
|
66
|
+
const switchTerminalShowTabsTitle = ( localize(13274, "Show Tabs"));
|
|
67
67
|
const category = terminalStrings.actionCategory;
|
|
68
68
|
const sharedWhenClause = (() => {
|
|
69
69
|
const terminalAvailable = ( ContextKeyExpr.or(
|
|
@@ -86,7 +86,7 @@ async function getCwdForSplit(instance, folders, commandService, configService)
|
|
|
86
86
|
return folders[0].uri;
|
|
87
87
|
} else if (folders.length > 1) {
|
|
88
88
|
const options = {
|
|
89
|
-
placeHolder: ( localize(
|
|
89
|
+
placeHolder: ( localize(13275, "Select current working directory for new terminal"))
|
|
90
90
|
};
|
|
91
91
|
const workspace = await commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND_ID, [options]);
|
|
92
92
|
if (!workspace) {
|
|
@@ -104,7 +104,7 @@ async function getCwdForSplit(instance, folders, commandService, configService)
|
|
|
104
104
|
}
|
|
105
105
|
let TerminalLaunchHelpAction = class TerminalLaunchHelpAction extends Action {
|
|
106
106
|
constructor(_openerService) {
|
|
107
|
-
super("workbench.action.terminal.launchHelp", ( localize(
|
|
107
|
+
super("workbench.action.terminal.launchHelp", ( localize(13276, "Open Help")));
|
|
108
108
|
this._openerService = _openerService;
|
|
109
109
|
}
|
|
110
110
|
async run() {
|
|
@@ -205,7 +205,7 @@ function getTerminalServices(accessor) {
|
|
|
205
205
|
function registerTerminalActions() {
|
|
206
206
|
registerTerminalAction({
|
|
207
207
|
id: TerminalCommandId.NewInActiveWorkspace,
|
|
208
|
-
title: ( localize2(
|
|
208
|
+
title: ( localize2(13277, "Create New Terminal (In Active Workspace)")),
|
|
209
209
|
run: async c => {
|
|
210
210
|
if (c.service.isProcessSupportRegistered) {
|
|
211
211
|
const instance = await c.service.createTerminal({
|
|
@@ -222,7 +222,7 @@ function registerTerminalActions() {
|
|
|
222
222
|
refreshTerminalActions([]);
|
|
223
223
|
registerTerminalAction({
|
|
224
224
|
id: TerminalCommandId.CreateTerminalEditor,
|
|
225
|
-
title: ( localize2(
|
|
225
|
+
title: ( localize2(13278, "Create New Terminal in Editor Area")),
|
|
226
226
|
run: async (c, _, args) => {
|
|
227
227
|
function isCreateTerminalOptions(obj) {
|
|
228
228
|
return isObject(obj) && "location" in obj;
|
|
@@ -238,7 +238,7 @@ function registerTerminalActions() {
|
|
|
238
238
|
});
|
|
239
239
|
registerTerminalAction({
|
|
240
240
|
id: TerminalCommandId.CreateTerminalEditorSameGroup,
|
|
241
|
-
title: ( localize2(
|
|
241
|
+
title: ( localize2(13278, "Create New Terminal in Editor Area")),
|
|
242
242
|
f1: false,
|
|
243
243
|
run: async (c, accessor, args) => {
|
|
244
244
|
const editorGroupsService = accessor.get(IEditorGroupsService);
|
|
@@ -252,7 +252,7 @@ function registerTerminalActions() {
|
|
|
252
252
|
});
|
|
253
253
|
registerTerminalAction({
|
|
254
254
|
id: TerminalCommandId.CreateTerminalEditorSide,
|
|
255
|
-
title: ( localize2(
|
|
255
|
+
title: ( localize2(13279, "Create New Terminal in Editor Area to the Side")),
|
|
256
256
|
run: async c => {
|
|
257
257
|
const instance = await c.service.createTerminal({
|
|
258
258
|
location: {
|
|
@@ -313,7 +313,7 @@ function registerTerminalActions() {
|
|
|
313
313
|
});
|
|
314
314
|
registerTerminalAction({
|
|
315
315
|
id: TerminalCommandId.FocusPreviousPane,
|
|
316
|
-
title: ( localize2(
|
|
316
|
+
title: ( localize2(13280, "Focus Previous Terminal in Terminal Group")),
|
|
317
317
|
keybinding: {
|
|
318
318
|
primary: KeyMod.Alt | KeyCode.LeftArrow,
|
|
319
319
|
secondary: [KeyMod.Alt | KeyCode.UpArrow],
|
|
@@ -332,7 +332,7 @@ function registerTerminalActions() {
|
|
|
332
332
|
});
|
|
333
333
|
registerTerminalAction({
|
|
334
334
|
id: TerminalCommandId.FocusNextPane,
|
|
335
|
-
title: ( localize2(
|
|
335
|
+
title: ( localize2(13281, "Focus Next Terminal in Terminal Group")),
|
|
336
336
|
keybinding: {
|
|
337
337
|
primary: KeyMod.Alt | KeyCode.RightArrow,
|
|
338
338
|
secondary: [KeyMod.Alt | KeyCode.DownArrow],
|
|
@@ -351,7 +351,7 @@ function registerTerminalActions() {
|
|
|
351
351
|
});
|
|
352
352
|
registerTerminalAction({
|
|
353
353
|
id: TerminalCommandId.ResizePaneLeft,
|
|
354
|
-
title: ( localize2(
|
|
354
|
+
title: ( localize2(13282, "Resize Terminal Left")),
|
|
355
355
|
keybinding: {
|
|
356
356
|
linux: {
|
|
357
357
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.LeftArrow
|
|
@@ -367,7 +367,7 @@ function registerTerminalActions() {
|
|
|
367
367
|
});
|
|
368
368
|
registerTerminalAction({
|
|
369
369
|
id: TerminalCommandId.ResizePaneRight,
|
|
370
|
-
title: ( localize2(
|
|
370
|
+
title: ( localize2(13283, "Resize Terminal Right")),
|
|
371
371
|
keybinding: {
|
|
372
372
|
linux: {
|
|
373
373
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.RightArrow
|
|
@@ -383,7 +383,7 @@ function registerTerminalActions() {
|
|
|
383
383
|
});
|
|
384
384
|
registerTerminalAction({
|
|
385
385
|
id: TerminalCommandId.ResizePaneUp,
|
|
386
|
-
title: ( localize2(
|
|
386
|
+
title: ( localize2(13284, "Resize Terminal Up")),
|
|
387
387
|
keybinding: {
|
|
388
388
|
mac: {
|
|
389
389
|
primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.UpArrow
|
|
@@ -396,7 +396,7 @@ function registerTerminalActions() {
|
|
|
396
396
|
});
|
|
397
397
|
registerTerminalAction({
|
|
398
398
|
id: TerminalCommandId.ResizePaneDown,
|
|
399
|
-
title: ( localize2(
|
|
399
|
+
title: ( localize2(13285, "Resize Terminal Down")),
|
|
400
400
|
keybinding: {
|
|
401
401
|
mac: {
|
|
402
402
|
primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.DownArrow
|
|
@@ -433,7 +433,7 @@ function registerTerminalActions() {
|
|
|
433
433
|
});
|
|
434
434
|
registerTerminalAction({
|
|
435
435
|
id: TerminalCommandId.FocusTabs,
|
|
436
|
-
title: ( localize2(
|
|
436
|
+
title: ( localize2(13286, "Focus Terminal Tabs View")),
|
|
437
437
|
keybinding: {
|
|
438
438
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Backslash,
|
|
439
439
|
weight: KeybindingWeight.WorkbenchContrib,
|
|
@@ -444,7 +444,7 @@ function registerTerminalActions() {
|
|
|
444
444
|
});
|
|
445
445
|
registerTerminalAction({
|
|
446
446
|
id: TerminalCommandId.FocusNext,
|
|
447
|
-
title: ( localize2(
|
|
447
|
+
title: ( localize2(13287, "Focus Next Terminal Group")),
|
|
448
448
|
precondition: sharedWhenClause.terminalAvailable,
|
|
449
449
|
keybinding: {
|
|
450
450
|
primary: KeyMod.CtrlCmd | KeyCode.PageDown,
|
|
@@ -461,7 +461,7 @@ function registerTerminalActions() {
|
|
|
461
461
|
});
|
|
462
462
|
registerTerminalAction({
|
|
463
463
|
id: TerminalCommandId.FocusPrevious,
|
|
464
|
-
title: ( localize2(
|
|
464
|
+
title: ( localize2(13288, "Focus Previous Terminal Group")),
|
|
465
465
|
precondition: sharedWhenClause.terminalAvailable,
|
|
466
466
|
keybinding: {
|
|
467
467
|
primary: KeyMod.CtrlCmd | KeyCode.PageUp,
|
|
@@ -478,7 +478,7 @@ function registerTerminalActions() {
|
|
|
478
478
|
});
|
|
479
479
|
registerTerminalAction({
|
|
480
480
|
id: TerminalCommandId.RunSelectedText,
|
|
481
|
-
title: ( localize2(
|
|
481
|
+
title: ( localize2(13289, "Run Selected Text In Active Terminal")),
|
|
482
482
|
run: async (c, accessor) => {
|
|
483
483
|
const codeEditorService = accessor.get(ICodeEditorService);
|
|
484
484
|
const editor = codeEditorService.getActiveCodeEditor();
|
|
@@ -502,7 +502,7 @@ function registerTerminalActions() {
|
|
|
502
502
|
});
|
|
503
503
|
registerTerminalAction({
|
|
504
504
|
id: TerminalCommandId.RunActiveFile,
|
|
505
|
-
title: ( localize2(
|
|
505
|
+
title: ( localize2(13290, "Run Active File In Active Terminal")),
|
|
506
506
|
precondition: sharedWhenClause.terminalAvailable,
|
|
507
507
|
run: async (c, accessor) => {
|
|
508
508
|
const codeEditorService = accessor.get(ICodeEditorService);
|
|
@@ -518,7 +518,7 @@ function registerTerminalActions() {
|
|
|
518
518
|
const isRemote = instance ? instance.hasRemoteAuthority : (workbenchEnvironmentService.remoteAuthority ? true : false);
|
|
519
519
|
const uri = editor.getModel().uri;
|
|
520
520
|
if ((!isRemote && uri.scheme !== Schemas.file && uri.scheme !== Schemas.vscodeUserData) || (isRemote && uri.scheme !== Schemas.vscodeRemote)) {
|
|
521
|
-
notificationService.warn(( localize(
|
|
521
|
+
notificationService.warn(( localize(13291, "Only files on disk can be run in the terminal")));
|
|
522
522
|
return;
|
|
523
523
|
}
|
|
524
524
|
await instance.sendPath(uri, true);
|
|
@@ -527,7 +527,7 @@ function registerTerminalActions() {
|
|
|
527
527
|
});
|
|
528
528
|
registerActiveXtermAction({
|
|
529
529
|
id: TerminalCommandId.ScrollDownLine,
|
|
530
|
-
title: ( localize2(
|
|
530
|
+
title: ( localize2(13292, "Scroll Down (Line)")),
|
|
531
531
|
keybinding: {
|
|
532
532
|
primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.PageDown,
|
|
533
533
|
linux: {
|
|
@@ -541,7 +541,7 @@ function registerTerminalActions() {
|
|
|
541
541
|
});
|
|
542
542
|
registerActiveXtermAction({
|
|
543
543
|
id: TerminalCommandId.ScrollDownPage,
|
|
544
|
-
title: ( localize2(
|
|
544
|
+
title: ( localize2(13293, "Scroll Down (Page)")),
|
|
545
545
|
keybinding: {
|
|
546
546
|
primary: KeyMod.Shift | KeyCode.PageDown,
|
|
547
547
|
mac: {
|
|
@@ -555,7 +555,7 @@ function registerTerminalActions() {
|
|
|
555
555
|
});
|
|
556
556
|
registerActiveXtermAction({
|
|
557
557
|
id: TerminalCommandId.ScrollToBottom,
|
|
558
|
-
title: ( localize2(
|
|
558
|
+
title: ( localize2(13294, "Scroll to Bottom")),
|
|
559
559
|
keybinding: {
|
|
560
560
|
primary: KeyMod.CtrlCmd | KeyCode.End,
|
|
561
561
|
linux: {
|
|
@@ -569,7 +569,7 @@ function registerTerminalActions() {
|
|
|
569
569
|
});
|
|
570
570
|
registerActiveXtermAction({
|
|
571
571
|
id: TerminalCommandId.ScrollUpLine,
|
|
572
|
-
title: ( localize2(
|
|
572
|
+
title: ( localize2(13295, "Scroll Up (Line)")),
|
|
573
573
|
keybinding: {
|
|
574
574
|
primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.PageUp,
|
|
575
575
|
linux: {
|
|
@@ -583,7 +583,7 @@ function registerTerminalActions() {
|
|
|
583
583
|
});
|
|
584
584
|
registerActiveXtermAction({
|
|
585
585
|
id: TerminalCommandId.ScrollUpPage,
|
|
586
|
-
title: ( localize2(
|
|
586
|
+
title: ( localize2(13296, "Scroll Up (Page)")),
|
|
587
587
|
f1: true,
|
|
588
588
|
keybinding: {
|
|
589
589
|
primary: KeyMod.Shift | KeyCode.PageUp,
|
|
@@ -598,7 +598,7 @@ function registerTerminalActions() {
|
|
|
598
598
|
});
|
|
599
599
|
registerActiveXtermAction({
|
|
600
600
|
id: TerminalCommandId.ScrollToTop,
|
|
601
|
-
title: ( localize2(
|
|
601
|
+
title: ( localize2(13297, "Scroll to Top")),
|
|
602
602
|
keybinding: {
|
|
603
603
|
primary: KeyMod.CtrlCmd | KeyCode.Home,
|
|
604
604
|
linux: {
|
|
@@ -612,7 +612,7 @@ function registerTerminalActions() {
|
|
|
612
612
|
});
|
|
613
613
|
registerActiveXtermAction({
|
|
614
614
|
id: TerminalCommandId.ClearSelection,
|
|
615
|
-
title: ( localize2(
|
|
615
|
+
title: ( localize2(13298, "Clear Selection")),
|
|
616
616
|
keybinding: {
|
|
617
617
|
primary: KeyCode.Escape,
|
|
618
618
|
when: ( ContextKeyExpr.and(
|
|
@@ -731,12 +731,12 @@ function registerTerminalActions() {
|
|
|
731
731
|
});
|
|
732
732
|
registerActiveInstanceAction({
|
|
733
733
|
id: TerminalCommandId.DetachSession,
|
|
734
|
-
title: ( localize2(
|
|
734
|
+
title: ( localize2(13299, "Detach Session")),
|
|
735
735
|
run: activeInstance => activeInstance.detachProcessAndDispose(TerminalExitReason.User)
|
|
736
736
|
});
|
|
737
737
|
registerTerminalAction({
|
|
738
738
|
id: TerminalCommandId.AttachToSession,
|
|
739
|
-
title: ( localize2(
|
|
739
|
+
title: ( localize2(13300, "Attach to Session")),
|
|
740
740
|
run: async (c, accessor) => {
|
|
741
741
|
const quickInputService = accessor.get(IQuickInputService);
|
|
742
742
|
const labelService = accessor.get(ILabelService);
|
|
@@ -760,7 +760,7 @@ function registerTerminalActions() {
|
|
|
760
760
|
};
|
|
761
761
|
}));
|
|
762
762
|
if (items.length === 0) {
|
|
763
|
-
notificationService.info(( localize(
|
|
763
|
+
notificationService.info(( localize(13301, "There are no unattached terminals to attach to")));
|
|
764
764
|
return;
|
|
765
765
|
}
|
|
766
766
|
const selected = await quickInputService.pick(items, {
|
|
@@ -832,7 +832,7 @@ function registerTerminalActions() {
|
|
|
832
832
|
});
|
|
833
833
|
registerActiveInstanceAction({
|
|
834
834
|
id: TerminalCommandId.SelectToPreviousCommand,
|
|
835
|
-
title: ( localize2(
|
|
835
|
+
title: ( localize2(13302, "Select to Previous Command")),
|
|
836
836
|
keybinding: {
|
|
837
837
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.UpArrow,
|
|
838
838
|
when: TerminalContextKeys.focus,
|
|
@@ -846,7 +846,7 @@ function registerTerminalActions() {
|
|
|
846
846
|
});
|
|
847
847
|
registerActiveInstanceAction({
|
|
848
848
|
id: TerminalCommandId.SelectToNextCommand,
|
|
849
|
-
title: ( localize2(
|
|
849
|
+
title: ( localize2(13303, "Select to Next Command")),
|
|
850
850
|
keybinding: {
|
|
851
851
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.DownArrow,
|
|
852
852
|
when: TerminalContextKeys.focus,
|
|
@@ -860,7 +860,7 @@ function registerTerminalActions() {
|
|
|
860
860
|
});
|
|
861
861
|
registerActiveXtermAction({
|
|
862
862
|
id: TerminalCommandId.SelectToPreviousLine,
|
|
863
|
-
title: ( localize2(
|
|
863
|
+
title: ( localize2(13304, "Select to Previous Line")),
|
|
864
864
|
precondition: sharedWhenClause.terminalAvailable,
|
|
865
865
|
run: async (xterm, _, instance) => {
|
|
866
866
|
xterm.markTracker.selectToPreviousLine();
|
|
@@ -869,7 +869,7 @@ function registerTerminalActions() {
|
|
|
869
869
|
});
|
|
870
870
|
registerActiveXtermAction({
|
|
871
871
|
id: TerminalCommandId.SelectToNextLine,
|
|
872
|
-
title: ( localize2(
|
|
872
|
+
title: ( localize2(13305, "Select to Next Line")),
|
|
873
873
|
precondition: sharedWhenClause.terminalAvailable,
|
|
874
874
|
run: async (xterm, _, instance) => {
|
|
875
875
|
xterm.markTracker.selectToNextLine();
|
|
@@ -888,7 +888,7 @@ function registerTerminalActions() {
|
|
|
888
888
|
required: ["cwd"],
|
|
889
889
|
properties: {
|
|
890
890
|
cwd: {
|
|
891
|
-
description: ( localize(
|
|
891
|
+
description: ( localize(13306, "The directory to start the terminal at")),
|
|
892
892
|
type: "string"
|
|
893
893
|
}
|
|
894
894
|
}
|
|
@@ -919,7 +919,7 @@ function registerTerminalActions() {
|
|
|
919
919
|
required: ["name"],
|
|
920
920
|
properties: {
|
|
921
921
|
name: {
|
|
922
|
-
description: ( localize(
|
|
922
|
+
description: ( localize(13307, "The new name for the terminal")),
|
|
923
923
|
type: "string",
|
|
924
924
|
minLength: 1
|
|
925
925
|
}
|
|
@@ -933,7 +933,7 @@ function registerTerminalActions() {
|
|
|
933
933
|
const notificationService = accessor.get(INotificationService);
|
|
934
934
|
const name = args ? toOptionalString(args.name) : undefined;
|
|
935
935
|
if (!name) {
|
|
936
|
-
notificationService.warn(( localize(
|
|
936
|
+
notificationService.warn(( localize(13308, "No name argument provided")));
|
|
937
937
|
return;
|
|
938
938
|
}
|
|
939
939
|
activeInstance.rename(name);
|
|
@@ -941,7 +941,7 @@ function registerTerminalActions() {
|
|
|
941
941
|
});
|
|
942
942
|
registerActiveInstanceAction({
|
|
943
943
|
id: TerminalCommandId.Relaunch,
|
|
944
|
-
title: ( localize2(
|
|
944
|
+
title: ( localize2(13309, "Relaunch Active Terminal")),
|
|
945
945
|
run: activeInstance => activeInstance.relaunch()
|
|
946
946
|
});
|
|
947
947
|
registerTerminalAction({
|
|
@@ -1033,7 +1033,7 @@ function registerTerminalActions() {
|
|
|
1033
1033
|
});
|
|
1034
1034
|
registerTerminalAction({
|
|
1035
1035
|
id: TerminalCommandId.JoinActiveTab,
|
|
1036
|
-
title: ( localize2(
|
|
1036
|
+
title: ( localize2(13310, "Join Terminals")),
|
|
1037
1037
|
precondition: ( ContextKeyExpr.and(sharedWhenClause.terminalAvailable, ( TerminalContextKeys.tabsSingularSelection.toNegated()))),
|
|
1038
1038
|
run: async (c, accessor) => {
|
|
1039
1039
|
const instances = getSelectedViewInstances(accessor);
|
|
@@ -1044,7 +1044,7 @@ function registerTerminalActions() {
|
|
|
1044
1044
|
});
|
|
1045
1045
|
registerTerminalAction({
|
|
1046
1046
|
id: TerminalCommandId.Join,
|
|
1047
|
-
title: ( localize2(
|
|
1047
|
+
title: ( localize2(13311, "Join Terminals...")),
|
|
1048
1048
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1049
1049
|
run: async (c, accessor) => {
|
|
1050
1050
|
const themeService = accessor.get(IThemeService);
|
|
@@ -1052,7 +1052,7 @@ function registerTerminalActions() {
|
|
|
1052
1052
|
const quickInputService = accessor.get(IQuickInputService);
|
|
1053
1053
|
const picks = [];
|
|
1054
1054
|
if (c.groupService.instances.length <= 1) {
|
|
1055
|
-
notificationService.warn(( localize(
|
|
1055
|
+
notificationService.warn(( localize(13312, "Insufficient terminals for the join action")));
|
|
1056
1056
|
return;
|
|
1057
1057
|
}
|
|
1058
1058
|
const otherInstances = c.groupService.instances.filter(i => i.instanceId !== c.groupService.activeInstance?.instanceId);
|
|
@@ -1078,7 +1078,7 @@ function registerTerminalActions() {
|
|
|
1078
1078
|
}
|
|
1079
1079
|
}
|
|
1080
1080
|
if (picks.length === 0) {
|
|
1081
|
-
notificationService.warn(( localize(
|
|
1081
|
+
notificationService.warn(( localize(13313, "All terminals are joined already")));
|
|
1082
1082
|
return;
|
|
1083
1083
|
}
|
|
1084
1084
|
const result = await quickInputService.pick(picks, {});
|
|
@@ -1089,7 +1089,7 @@ function registerTerminalActions() {
|
|
|
1089
1089
|
});
|
|
1090
1090
|
registerActiveInstanceAction({
|
|
1091
1091
|
id: TerminalCommandId.SplitInActiveWorkspace,
|
|
1092
|
-
title: ( localize2(
|
|
1092
|
+
title: ( localize2(13314, "Split Terminal (In Active Workspace)")),
|
|
1093
1093
|
run: async (instance, c) => {
|
|
1094
1094
|
const newInstance = await c.service.createTerminal({
|
|
1095
1095
|
location: {
|
|
@@ -1103,7 +1103,7 @@ function registerTerminalActions() {
|
|
|
1103
1103
|
});
|
|
1104
1104
|
registerActiveXtermAction({
|
|
1105
1105
|
id: TerminalCommandId.SelectAll,
|
|
1106
|
-
title: ( localize2(
|
|
1106
|
+
title: ( localize2(13315, "Select All")),
|
|
1107
1107
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1108
1108
|
keybinding: [{
|
|
1109
1109
|
primary: 0,
|
|
@@ -1117,7 +1117,7 @@ function registerTerminalActions() {
|
|
|
1117
1117
|
});
|
|
1118
1118
|
registerTerminalAction({
|
|
1119
1119
|
id: TerminalCommandId.New,
|
|
1120
|
-
title: ( localize2(
|
|
1120
|
+
title: ( localize2(13316, "Create New Terminal")),
|
|
1121
1121
|
precondition: ( ContextKeyExpr.or(
|
|
1122
1122
|
TerminalContextKeys.processSupported,
|
|
1123
1123
|
TerminalContextKeys.webExtensionContributedProfile
|
|
@@ -1184,7 +1184,7 @@ function registerTerminalActions() {
|
|
|
1184
1184
|
}
|
|
1185
1185
|
registerTerminalAction({
|
|
1186
1186
|
id: TerminalCommandId.Kill,
|
|
1187
|
-
title: ( localize2(
|
|
1187
|
+
title: ( localize2(13317, "Kill the Active Terminal Instance")),
|
|
1188
1188
|
precondition: ( ContextKeyExpr.or(sharedWhenClause.terminalAvailable, TerminalContextKeys.isOpen)),
|
|
1189
1189
|
icon: killTerminalIcon,
|
|
1190
1190
|
run: async c => killInstance(c, c.groupService.activeInstance)
|
|
@@ -1198,7 +1198,7 @@ function registerTerminalActions() {
|
|
|
1198
1198
|
});
|
|
1199
1199
|
registerTerminalAction({
|
|
1200
1200
|
id: TerminalCommandId.KillAll,
|
|
1201
|
-
title: ( localize2(
|
|
1201
|
+
title: ( localize2(13318, "Kill All Terminals")),
|
|
1202
1202
|
precondition: ( ContextKeyExpr.or(sharedWhenClause.terminalAvailable, TerminalContextKeys.isOpen)),
|
|
1203
1203
|
icon: Codicon.trash,
|
|
1204
1204
|
run: async c => {
|
|
@@ -1211,7 +1211,7 @@ function registerTerminalActions() {
|
|
|
1211
1211
|
});
|
|
1212
1212
|
registerTerminalAction({
|
|
1213
1213
|
id: TerminalCommandId.KillEditor,
|
|
1214
|
-
title: ( localize2(
|
|
1214
|
+
title: ( localize2(13319, "Kill the Active Terminal in Editor Area")),
|
|
1215
1215
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1216
1216
|
keybinding: {
|
|
1217
1217
|
primary: KeyMod.CtrlCmd | KeyCode.KeyW,
|
|
@@ -1260,7 +1260,7 @@ function registerTerminalActions() {
|
|
|
1260
1260
|
});
|
|
1261
1261
|
registerActiveInstanceAction({
|
|
1262
1262
|
id: TerminalCommandId.Clear,
|
|
1263
|
-
title: ( localize2(
|
|
1263
|
+
title: ( localize2(13320, "Clear")),
|
|
1264
1264
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1265
1265
|
keybinding: [{
|
|
1266
1266
|
primary: 0,
|
|
@@ -1274,12 +1274,12 @@ function registerTerminalActions() {
|
|
|
1274
1274
|
});
|
|
1275
1275
|
registerTerminalAction({
|
|
1276
1276
|
id: TerminalCommandId.SelectDefaultProfile,
|
|
1277
|
-
title: ( localize2(
|
|
1277
|
+
title: ( localize2(13321, "Select Default Profile")),
|
|
1278
1278
|
run: c => c.service.showProfileQuickPick("setDefault")
|
|
1279
1279
|
});
|
|
1280
1280
|
registerTerminalAction({
|
|
1281
1281
|
id: TerminalCommandId.ConfigureTerminalSettings,
|
|
1282
|
-
title: ( localize2(
|
|
1282
|
+
title: ( localize2(13322, "Configure Terminal Settings")),
|
|
1283
1283
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1284
1284
|
run: (c, accessor) => accessor.get(IPreferencesService).openSettings({
|
|
1285
1285
|
jsonEditor: false,
|
|
@@ -1288,7 +1288,7 @@ function registerTerminalActions() {
|
|
|
1288
1288
|
});
|
|
1289
1289
|
registerActiveInstanceAction({
|
|
1290
1290
|
id: TerminalCommandId.SetDimensions,
|
|
1291
|
-
title: ( localize2(
|
|
1291
|
+
title: ( localize2(13323, "Set Fixed Dimensions")),
|
|
1292
1292
|
precondition: sharedWhenClause.terminalAvailable_and_opened,
|
|
1293
1293
|
run: activeInstance => activeInstance.setFixedDimensions()
|
|
1294
1294
|
});
|
|
@@ -1305,7 +1305,7 @@ function registerTerminalActions() {
|
|
|
1305
1305
|
});
|
|
1306
1306
|
registerTerminalAction({
|
|
1307
1307
|
id: TerminalCommandId.SwitchTerminal,
|
|
1308
|
-
title: ( localize2(
|
|
1308
|
+
title: ( localize2(13324, "Switch Terminal")),
|
|
1309
1309
|
precondition: sharedWhenClause.terminalAvailable,
|
|
1310
1310
|
run: async (c, accessor, args) => {
|
|
1311
1311
|
const item = toOptionalString(args);
|
|
@@ -1388,7 +1388,7 @@ function getSelectedViewInstances(accessor, args, args2) {
|
|
|
1388
1388
|
function validateTerminalName(name) {
|
|
1389
1389
|
if (!name || name.trim().length === 0) {
|
|
1390
1390
|
return {
|
|
1391
|
-
content: ( localize(
|
|
1391
|
+
content: ( localize(13325, "Providing no name will reset it to the default value")),
|
|
1392
1392
|
severity: Severity.Info
|
|
1393
1393
|
};
|
|
1394
1394
|
}
|
|
@@ -1414,7 +1414,7 @@ function refreshTerminalActions(detectedProfiles) {
|
|
|
1414
1414
|
constructor() {
|
|
1415
1415
|
super({
|
|
1416
1416
|
id: TerminalCommandId.NewWithProfile,
|
|
1417
|
-
title: ( localize2(
|
|
1417
|
+
title: ( localize2(13326, "Create New Terminal (With Profile)")),
|
|
1418
1418
|
f1: true,
|
|
1419
1419
|
precondition: ( ContextKeyExpr.or(
|
|
1420
1420
|
TerminalContextKeys.processSupported,
|
|
@@ -1429,16 +1429,16 @@ function refreshTerminalActions(detectedProfiles) {
|
|
|
1429
1429
|
required: ["profileName"],
|
|
1430
1430
|
properties: {
|
|
1431
1431
|
profileName: {
|
|
1432
|
-
description: ( localize(
|
|
1432
|
+
description: ( localize(13327, "The name of the profile to create")),
|
|
1433
1433
|
type: "string",
|
|
1434
1434
|
enum: profileEnum.values,
|
|
1435
1435
|
markdownEnumDescriptions: profileEnum.markdownDescriptions
|
|
1436
1436
|
},
|
|
1437
1437
|
location: {
|
|
1438
|
-
description: ( localize(
|
|
1438
|
+
description: ( localize(13328, "Where to create the terminal")),
|
|
1439
1439
|
type: "string",
|
|
1440
1440
|
enum: ["view", "editor"],
|
|
1441
|
-
enumDescriptions: [( localize(
|
|
1441
|
+
enumDescriptions: [( localize(13329, "Create the terminal in the terminal view")), ( localize(13330, "Create the terminal in the editor"))]
|
|
1442
1442
|
}
|
|
1443
1443
|
}
|
|
1444
1444
|
}
|
|
@@ -1500,7 +1500,7 @@ function refreshTerminalActions(detectedProfiles) {
|
|
|
1500
1500
|
const folders = workspaceContextService.getWorkspace().folders;
|
|
1501
1501
|
if (folders.length > 1) {
|
|
1502
1502
|
const options = {
|
|
1503
|
-
placeHolder: ( localize(
|
|
1503
|
+
placeHolder: ( localize(13275, "Select current working directory for new terminal"))
|
|
1504
1504
|
};
|
|
1505
1505
|
const workspace = await commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND_ID, [options]);
|
|
1506
1506
|
if (!workspace) {
|
|
@@ -1546,7 +1546,7 @@ async function pickTerminalCwd(accessor, cancel) {
|
|
|
1546
1546
|
}
|
|
1547
1547
|
const folderPicks = ( shrinkedPairs.map(pair => {
|
|
1548
1548
|
const label = pair.folder.name;
|
|
1549
|
-
const description = pair.isOverridden ? ( localize(
|
|
1549
|
+
const description = pair.isOverridden ? ( localize(13331, "(Overridden) {0}", labelService.getUriLabel(pair.cwd, {
|
|
1550
1550
|
relative: !pair.isAbsolute
|
|
1551
1551
|
}))) : labelService.getUriLabel(dirname(pair.cwd), {
|
|
1552
1552
|
relative: true
|
|
@@ -1559,7 +1559,7 @@ async function pickTerminalCwd(accessor, cancel) {
|
|
|
1559
1559
|
};
|
|
1560
1560
|
}));
|
|
1561
1561
|
const options = {
|
|
1562
|
-
placeHolder: ( localize(
|
|
1562
|
+
placeHolder: ( localize(13275, "Select current working directory for new terminal")),
|
|
1563
1563
|
matchOnDescription: true,
|
|
1564
1564
|
canPickMany: false
|
|
1565
1565
|
};
|
|
@@ -1626,7 +1626,7 @@ async function renameWithQuickPick(c, accessor, resource) {
|
|
|
1626
1626
|
if (instance) {
|
|
1627
1627
|
const title = await accessor.get(IQuickInputService).input({
|
|
1628
1628
|
value: instance.title,
|
|
1629
|
-
prompt: ( localize(
|
|
1629
|
+
prompt: ( localize(13332, "Enter terminal name"))
|
|
1630
1630
|
});
|
|
1631
1631
|
if (title) {
|
|
1632
1632
|
instance.rename(title);
|
|
@@ -770,13 +770,13 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
770
770
|
}
|
|
771
771
|
xtermConstructor = Promises.withAsyncBody(async resolve => {
|
|
772
772
|
const Terminal = (await import('@xterm/xterm')).Terminal;
|
|
773
|
-
Terminal.strings.promptLabel = ( localize(
|
|
773
|
+
Terminal.strings.promptLabel = ( localize(13350, "Terminal input"));
|
|
774
774
|
Terminal.strings.tooMuchOutput = keybinding ? ( localize(
|
|
775
|
-
|
|
775
|
+
13351,
|
|
776
776
|
"Use the accessible buffer {0} to manually review output",
|
|
777
777
|
keybinding.getLabel()
|
|
778
778
|
)) : ( localize(
|
|
779
|
-
|
|
779
|
+
13352,
|
|
780
780
|
"Use the Terminal: Focus Accessible Buffer command to manually review output"
|
|
781
781
|
));
|
|
782
782
|
resolve(Terminal);
|
|
@@ -829,7 +829,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
829
829
|
id: TerminalStatus.Bell,
|
|
830
830
|
severity: Severity.Warning,
|
|
831
831
|
icon: Codicon.bell,
|
|
832
|
-
tooltip: ( localize(
|
|
832
|
+
tooltip: ( localize(13353, "Bell"))
|
|
833
833
|
}, this._terminalConfigurationService.config.bellDuration);
|
|
834
834
|
}
|
|
835
835
|
this._accessibilitySignalService.playSignal(AccessibilitySignal.terminalBell);
|
|
@@ -858,6 +858,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
858
858
|
lineDataEventAddon.setOperatingSystem(this._processManager.os);
|
|
859
859
|
}
|
|
860
860
|
xterm.raw.options.windowsPty = processTraits.windowsPty;
|
|
861
|
+
xterm.raw.options.reflowCursorLine = processTraits?.windowsPty?.backend === "conpty" && !!this._terminalConfigurationService.config.windowsUseConptyDll;
|
|
861
862
|
}));
|
|
862
863
|
this._register(
|
|
863
864
|
this._processManager.onRestoreCommands(e => this.xterm?.shellIntegration.deserialize(e))
|
|
@@ -906,7 +907,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
906
907
|
if (!instance.xterm) {
|
|
907
908
|
return;
|
|
908
909
|
}
|
|
909
|
-
const cmdDetectionType = (instance.capabilities.get(TerminalCapability.CommandDetection)?.hasRichCommandDetection ? ( localize(
|
|
910
|
+
const cmdDetectionType = (instance.capabilities.get(TerminalCapability.CommandDetection)?.hasRichCommandDetection ? ( localize(13354, "Rich")) : ( instance.capabilities.has(TerminalCapability.CommandDetection)) ? ( localize(13355, "Basic")) : instance.usedShellIntegrationInjection ? ( localize(13356, "Injection failed to activate")) : ( localize(13357, "No")));
|
|
910
911
|
const detailedAdditions = [];
|
|
911
912
|
if (instance.shellType) {
|
|
912
913
|
detailedAdditions.push(`Shell type: \`${instance.shellType}\``);
|
|
@@ -931,8 +932,8 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
931
932
|
instance.statusList.add({
|
|
932
933
|
id: TerminalStatus.ShellIntegrationInfo,
|
|
933
934
|
severity: Severity.Info,
|
|
934
|
-
tooltip: `${( localize(
|
|
935
|
-
detailedTooltip: `${( localize(
|
|
935
|
+
tooltip: `${( localize(13358, "Shell integration"))}: ${cmdDetectionType}`,
|
|
936
|
+
detailedTooltip: `${( localize(13358, "Shell integration"))}: ${cmdDetectionType}${detailedAdditionsString}`
|
|
936
937
|
});
|
|
937
938
|
}
|
|
938
939
|
async runCommand(commandLine, shouldExecute, commandId) {
|
|
@@ -1043,7 +1044,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1043
1044
|
event.preventDefault();
|
|
1044
1045
|
return false;
|
|
1045
1046
|
}
|
|
1046
|
-
if (!this._terminalConfigurationService.config.sendKeybindingsToShell && resolveResult.kind === ResultKind.KbFound && resolveResult.commandId && ( this._skipTerminalCommands.some(k => k === resolveResult.commandId))) {
|
|
1047
|
+
if (!this._terminalConfigurationService.config.sendKeybindingsToShell && resolveResult.kind === ResultKind.KbFound && resolveResult.commandId && (event.metaKey || ( this._skipTerminalCommands.some(k => k === resolveResult.commandId)))) {
|
|
1047
1048
|
event.preventDefault();
|
|
1048
1049
|
return false;
|
|
1049
1050
|
}
|
|
@@ -1394,7 +1395,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1394
1395
|
id: TerminalStatus.Disconnected,
|
|
1395
1396
|
severity: Severity.Error,
|
|
1396
1397
|
icon: Codicon.debugDisconnect,
|
|
1397
|
-
tooltip: ( localize(
|
|
1398
|
+
tooltip: ( localize(13359, "Lost connection to process"))
|
|
1398
1399
|
});
|
|
1399
1400
|
}));
|
|
1400
1401
|
this._register(processManager.onPtyReconnect(() => {
|
|
@@ -1412,12 +1413,12 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1412
1413
|
const trusted = await this._trust();
|
|
1413
1414
|
if (!trusted && !this.remoteAuthority && !this._workbenchEnvironmentService.remoteAuthority) {
|
|
1414
1415
|
this._onProcessExit({
|
|
1415
|
-
message: ( localize(
|
|
1416
|
+
message: ( localize(13360, "Cannot launch a terminal process in an untrusted workspace"))
|
|
1416
1417
|
});
|
|
1417
1418
|
} else if (this._workspaceContextService.getWorkspace().folders.length === 0 && this._cwd && this._userHome && normalizeDriveLetter(this._cwd) !== normalizeDriveLetter(this._userHome)) {
|
|
1418
1419
|
this._onProcessExit({
|
|
1419
1420
|
message: ( localize(
|
|
1420
|
-
|
|
1421
|
+
13361,
|
|
1421
1422
|
"Cannot launch a terminal process in an empty workspace with cwd {0} different from userHome {1}",
|
|
1422
1423
|
this._cwd,
|
|
1423
1424
|
this._userHome
|
|
@@ -1587,10 +1588,10 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1587
1588
|
id: TerminalStatus.ShellIntegrationAttentionNeeded,
|
|
1588
1589
|
severity: Severity.Warning,
|
|
1589
1590
|
icon: Codicon.warning,
|
|
1590
|
-
tooltip: `${exitMessage} ` + ( localize(
|
|
1591
|
+
tooltip: `${exitMessage} ` + ( localize(13362, "Disabling shell integration in user settings might help.")),
|
|
1591
1592
|
hoverActions: [{
|
|
1592
1593
|
commandId: TerminalCommandId.ShellIntegrationLearnMore,
|
|
1593
|
-
label: ( localize(
|
|
1594
|
+
label: ( localize(13363, "Learn more about shell integration")),
|
|
1594
1595
|
run: () => {
|
|
1595
1596
|
this._openerService.open(
|
|
1596
1597
|
"https://code.visualstudio.com/docs/editor/integrated-terminal#_shell-integration"
|
|
@@ -1598,7 +1599,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1598
1599
|
}
|
|
1599
1600
|
}, {
|
|
1600
1601
|
commandId: "workbench.action.openSettings",
|
|
1601
|
-
label: ( localize(
|
|
1602
|
+
label: ( localize(13364, "Open user settings")),
|
|
1602
1603
|
run: () => {
|
|
1603
1604
|
this._commandService.executeCommand(
|
|
1604
1605
|
"workbench.action.openSettings",
|
|
@@ -1715,7 +1716,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1715
1716
|
return true;
|
|
1716
1717
|
}
|
|
1717
1718
|
const trustRequest = await this._workspaceTrustRequestService.requestWorkspaceTrust({
|
|
1718
|
-
message: ( localize(
|
|
1719
|
+
message: ( localize(13365, "Creating a terminal process requires executing code"))
|
|
1719
1720
|
});
|
|
1720
1721
|
return trustRequest === true;
|
|
1721
1722
|
}
|
|
@@ -1846,21 +1847,21 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1846
1847
|
const labelParts = [];
|
|
1847
1848
|
if (xterm && xterm.textarea) {
|
|
1848
1849
|
if (title && title.length > 0) {
|
|
1849
|
-
labelParts.push(( localize(
|
|
1850
|
+
labelParts.push(( localize(13366, "Terminal {0}, {1}", terminalId, title)));
|
|
1850
1851
|
} else {
|
|
1851
|
-
labelParts.push(( localize(
|
|
1852
|
+
labelParts.push(( localize(13367, "Terminal {0}", terminalId)));
|
|
1852
1853
|
}
|
|
1853
1854
|
const screenReaderOptimized = this._accessibilityService.isScreenReaderOptimized();
|
|
1854
1855
|
if (!screenReaderOptimized) {
|
|
1855
1856
|
labelParts.push(( localize(
|
|
1856
|
-
|
|
1857
|
+
13368,
|
|
1857
1858
|
"Run the command: Toggle Screen Reader Accessibility Mode for an optimized screen reader experience"
|
|
1858
1859
|
)));
|
|
1859
1860
|
}
|
|
1860
1861
|
const accessibilityHelpKeybinding = this._keybindingService.lookupKeybinding(AccessibilityCommandId.OpenAccessibilityHelp)?.getLabel();
|
|
1861
1862
|
if (this._configurationService.getValue(AccessibilityVerbositySettingId.Terminal) && accessibilityHelpKeybinding) {
|
|
1862
1863
|
labelParts.push(( localize(
|
|
1863
|
-
|
|
1864
|
+
13369,
|
|
1864
1865
|
"Use {0} for terminal accessibility help",
|
|
1865
1866
|
accessibilityHelpKeybinding
|
|
1866
1867
|
)));
|
|
@@ -1914,7 +1915,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1914
1915
|
}
|
|
1915
1916
|
async setFixedDimensions() {
|
|
1916
1917
|
const cols = await this._quickInputService.input({
|
|
1917
|
-
title: ( localize(
|
|
1918
|
+
title: ( localize(13370, "Set Fixed Dimensions: Column")),
|
|
1918
1919
|
placeHolder: "Enter a number of columns or leave empty for automatic width",
|
|
1919
1920
|
validateInput: async text => text.length > 0 && !text.match(/^\d+$/) ? {
|
|
1920
1921
|
content: "Enter a number or leave empty size automatically",
|
|
@@ -1928,7 +1929,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
1928
1929
|
this._labelComputer?.refreshLabel(this);
|
|
1929
1930
|
this._terminalHasFixedWidth.set(!!this._fixedCols);
|
|
1930
1931
|
const rows = await this._quickInputService.input({
|
|
1931
|
-
title: ( localize(
|
|
1932
|
+
title: ( localize(13371, "Set Fixed Dimensions: Row")),
|
|
1932
1933
|
placeHolder: "Enter a number of rows or leave empty for automatic height",
|
|
1933
1934
|
validateInput: async text => text.length > 0 && !text.match(/^\d+$/) ? {
|
|
1934
1935
|
content: "Enter a number or leave empty size automatically",
|
|
@@ -2038,7 +2039,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
2038
2039
|
_onEnvironmentVariableInfoChanged(info) {
|
|
2039
2040
|
if (info.requiresAction) {
|
|
2040
2041
|
this.xterm?.raw.textarea?.setAttribute("aria-label", ( localize(
|
|
2041
|
-
|
|
2042
|
+
13372,
|
|
2042
2043
|
"Terminal {0} environment is stale, run the 'Show Environment Information' command for more information",
|
|
2043
2044
|
this._instanceId
|
|
2044
2045
|
)));
|
|
@@ -2194,7 +2195,7 @@ let TerminalInstance = class TerminalInstance extends Disposable {
|
|
|
2194
2195
|
disposables.push(quickPick);
|
|
2195
2196
|
quickPick.items = items;
|
|
2196
2197
|
quickPick.matchOnDescription = true;
|
|
2197
|
-
quickPick.placeholder = ( localize(
|
|
2198
|
+
quickPick.placeholder = ( localize(13373, "Select a color for the terminal"));
|
|
2198
2199
|
quickPick.show();
|
|
2199
2200
|
const result = await ( new Promise(r => {
|
|
2200
2201
|
disposables.push(quickPick.onDidHide(() => r(undefined)));
|
|
@@ -2522,24 +2523,24 @@ function parseExitResult(exitCodeOrError, shellLaunchConfig, processState, initi
|
|
|
2522
2523
|
if (processState === ProcessState.KilledDuringLaunch) {
|
|
2523
2524
|
if (commandLine) {
|
|
2524
2525
|
message = ( localize(
|
|
2525
|
-
|
|
2526
|
+
13374,
|
|
2526
2527
|
"The terminal process \"{0}\" failed to launch (exit code: {1}).",
|
|
2527
2528
|
commandLine,
|
|
2528
2529
|
code
|
|
2529
2530
|
));
|
|
2530
2531
|
} else {
|
|
2531
|
-
message = ( localize(
|
|
2532
|
+
message = ( localize(13375, "The terminal process failed to launch (exit code: {0}).", code));
|
|
2532
2533
|
}
|
|
2533
2534
|
} else {
|
|
2534
2535
|
if (commandLine) {
|
|
2535
2536
|
message = ( localize(
|
|
2536
|
-
|
|
2537
|
+
13376,
|
|
2537
2538
|
"The terminal process \"{0}\" terminated with exit code: {1}.",
|
|
2538
2539
|
commandLine,
|
|
2539
2540
|
code
|
|
2540
2541
|
));
|
|
2541
2542
|
} else {
|
|
2542
|
-
message = ( localize(
|
|
2543
|
+
message = ( localize(13377, "The terminal process terminated with exit code: {0}.", code));
|
|
2543
2544
|
}
|
|
2544
2545
|
}
|
|
2545
2546
|
break;
|
|
@@ -2565,7 +2566,7 @@ function parseExitResult(exitCodeOrError, shellLaunchConfig, processState, initi
|
|
|
2565
2566
|
break;
|
|
2566
2567
|
}
|
|
2567
2568
|
}
|
|
2568
|
-
message = ( localize(
|
|
2569
|
+
message = ( localize(13378, "The terminal process failed to launch: {0}.", innerMessage));
|
|
2569
2570
|
break;
|
|
2570
2571
|
}
|
|
2571
2572
|
}
|
|
@@ -25,7 +25,7 @@ import { MergedEnvironmentVariableCollection } from '../../../../platform/termin
|
|
|
25
25
|
import { serializeEnvironmentVariableCollections } from '@codingame/monaco-vscode-api/vscode/vs/platform/terminal/common/environmentVariableShared';
|
|
26
26
|
import { ProcessState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/common/terminal';
|
|
27
27
|
import { ITerminalProfileResolverService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/common/terminal.service';
|
|
28
|
-
import { getWorkspaceForTerminal, createVariableResolver, createTerminalEnvironment, getCwd } from '../common/terminalEnvironment.js';
|
|
28
|
+
import { getWorkspaceForTerminal, mergeEnvironments, createVariableResolver, createTerminalEnvironment, getCwd } from '../common/terminalEnvironment.js';
|
|
29
29
|
import { IConfigurationResolverService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/configurationResolver/common/configurationResolver.service';
|
|
30
30
|
import { IWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service';
|
|
31
31
|
import { IHistoryService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/history/common/history.service';
|
|
@@ -202,7 +202,7 @@ let TerminalProcessManager = class TerminalProcessManager extends Disposable {
|
|
|
202
202
|
} catch (e) {
|
|
203
203
|
this._notificationService.notify({
|
|
204
204
|
message: ( localize(
|
|
205
|
-
|
|
205
|
+
13409,
|
|
206
206
|
"Could not kill process listening on port {0}, command exited with error {1}",
|
|
207
207
|
port,
|
|
208
208
|
e
|
|
@@ -254,9 +254,13 @@ let TerminalProcessManager = class TerminalProcessManager extends Disposable {
|
|
|
254
254
|
));
|
|
255
255
|
}
|
|
256
256
|
this.backend = backend;
|
|
257
|
+
const envForResolver = {
|
|
258
|
+
...(await this._terminalProfileResolverService.getEnvironment(this.remoteAuthority))
|
|
259
|
+
};
|
|
260
|
+
mergeEnvironments(envForResolver, await backend.getShellEnvironment());
|
|
257
261
|
const variableResolver = createVariableResolver(
|
|
258
262
|
this._cwdWorkspaceFolder,
|
|
259
|
-
|
|
263
|
+
envForResolver,
|
|
260
264
|
this._configurationResolverService
|
|
261
265
|
);
|
|
262
266
|
this.userHome = this._pathService.resolvedUserHome?.fsPath;
|
|
@@ -426,15 +430,20 @@ let TerminalProcessManager = class TerminalProcessManager extends Disposable {
|
|
|
426
430
|
const workspaceFolder = getWorkspaceForTerminal(shellLaunchConfig.cwd, this._workspaceContextService, this._historyService);
|
|
427
431
|
const platformKey = isWindows ? "windows" : (isMacintosh ? "osx" : "linux");
|
|
428
432
|
const envFromConfigValue = this._configurationService.getValue(`terminal.integrated.env.${platformKey}`);
|
|
433
|
+
this._logService.debug(
|
|
434
|
+
`Resolving environment (useShellEnvironment=${shellLaunchConfig.useShellEnvironment}, platformKey=${platformKey}, envFromConfig=${envFromConfigValue ? ( Object.keys(envFromConfigValue)).join(",") : "none"})`
|
|
435
|
+
);
|
|
429
436
|
let baseEnv;
|
|
430
437
|
if (shellLaunchConfig.useShellEnvironment) {
|
|
431
438
|
const shellEnv = await backend.getShellEnvironment();
|
|
432
439
|
if (!shellEnv) {
|
|
433
440
|
throw ( new BugIndicatingError("Cannot fetch shell environment to use"));
|
|
434
441
|
}
|
|
442
|
+
this._logService.debug(`Shell environment resolved with ${( Object.keys(shellEnv)).length} variables: ${( Object.keys(shellEnv)).sort().join(", ")}`);
|
|
435
443
|
baseEnv = shellEnv;
|
|
436
444
|
} else {
|
|
437
445
|
baseEnv = await this._terminalProfileResolverService.getEnvironment(this.remoteAuthority);
|
|
446
|
+
this._logService.debug(`Profile environment resolved with ${( Object.keys(baseEnv)).length} variables`);
|
|
438
447
|
}
|
|
439
448
|
const env = await createTerminalEnvironment(
|
|
440
449
|
shellLaunchConfig,
|
|
@@ -444,6 +453,7 @@ let TerminalProcessManager = class TerminalProcessManager extends Disposable {
|
|
|
444
453
|
this._terminalConfigurationService.config.detectLocale,
|
|
445
454
|
baseEnv
|
|
446
455
|
);
|
|
456
|
+
this._logService.debug(`Terminal environment created with ${( Object.keys(env)).length} variables: ${( Object.keys(env)).sort().join(", ")}`);
|
|
447
457
|
if (!this._isDisposed && shouldUseEnvironmentVariableCollection(shellLaunchConfig)) {
|
|
448
458
|
this._extEnvironmentVariableCollection = this._environmentVariableService.mergedCollection;
|
|
449
459
|
this._register(this._environmentVariableService.onDidChangeCollections(
|
|
@@ -528,7 +538,7 @@ let TerminalProcessManager = class TerminalProcessManager extends Disposable {
|
|
|
528
538
|
this._onExit(-1);
|
|
529
539
|
} else {
|
|
530
540
|
const message = ( localize(
|
|
531
|
-
|
|
541
|
+
13410,
|
|
532
542
|
"Restarting the terminal because the connection to the shell process was lost..."
|
|
533
543
|
));
|
|
534
544
|
this._onProcessData.fire({
|
|
@@ -435,7 +435,7 @@ let TerminalTabsRenderer = class TerminalTabsRenderer {
|
|
|
435
435
|
};
|
|
436
436
|
}
|
|
437
437
|
},
|
|
438
|
-
ariaLabel: ( localize(
|
|
438
|
+
ariaLabel: ( localize(13437, "Type terminal name. Press Enter to confirm or Escape to cancel.")),
|
|
439
439
|
inputBoxStyles: defaultInputBoxStyles
|
|
440
440
|
}));
|
|
441
441
|
inputBox.element.style.height = "22px";
|
|
@@ -566,7 +566,7 @@ let TerminalTabsAccessibilityProvider = class TerminalTabsAccessibilityProvider
|
|
|
566
566
|
this._terminalGroupService = _terminalGroupService;
|
|
567
567
|
}
|
|
568
568
|
getWidgetAriaLabel() {
|
|
569
|
-
return localize(
|
|
569
|
+
return localize(13438, "Terminal tabs");
|
|
570
570
|
}
|
|
571
571
|
getAriaLabel(instance) {
|
|
572
572
|
let ariaLabel = "";
|
|
@@ -574,7 +574,7 @@ let TerminalTabsAccessibilityProvider = class TerminalTabsAccessibilityProvider
|
|
|
574
574
|
if (tab && tab.terminalInstances?.length > 1) {
|
|
575
575
|
const terminalIndex = tab.terminalInstances.indexOf(instance);
|
|
576
576
|
ariaLabel = ( localize(
|
|
577
|
-
|
|
577
|
+
13439,
|
|
578
578
|
"Terminal {0} {1}, split {2} of {3}",
|
|
579
579
|
instance.instanceId,
|
|
580
580
|
instance.title,
|
|
@@ -582,7 +582,7 @@ let TerminalTabsAccessibilityProvider = class TerminalTabsAccessibilityProvider
|
|
|
582
582
|
tab.terminalInstances.length
|
|
583
583
|
));
|
|
584
584
|
} else {
|
|
585
|
-
ariaLabel = ( localize(
|
|
585
|
+
ariaLabel = ( localize(13440, "Terminal {0} {1}", instance.instanceId, instance.title));
|
|
586
586
|
}
|
|
587
587
|
return ariaLabel;
|
|
588
588
|
}
|
|
@@ -770,7 +770,7 @@ let TabDecorationsProvider = class TabDecorationsProvider extends Disposable {
|
|
|
770
770
|
constructor(_terminalService) {
|
|
771
771
|
super();
|
|
772
772
|
this._terminalService = _terminalService;
|
|
773
|
-
this.label = ( localize(
|
|
773
|
+
this.label = ( localize(13441, "Terminal"));
|
|
774
774
|
this._onDidChange = this._register(( new Emitter()));
|
|
775
775
|
this.onDidChange = this._onDidChange.event;
|
|
776
776
|
this._register(
|
|
@@ -29,7 +29,7 @@ function getInstanceHoverInfo(instance, storageService) {
|
|
|
29
29
|
}
|
|
30
30
|
actions.push({
|
|
31
31
|
commandId: "toggleDetailedInfo",
|
|
32
|
-
label: showDetailed ? ( localize(
|
|
32
|
+
label: showDetailed ? ( localize(13442, "Hide Details")) : ( localize(13443, "Show Details")),
|
|
33
33
|
run() {
|
|
34
34
|
storageService.store(
|
|
35
35
|
TerminalStorageKeys.TabsShowDetailed,
|
|
@@ -51,7 +51,7 @@ function getInstanceHoverInfo(instance, storageService) {
|
|
|
51
51
|
function getShellProcessTooltip(instance, showDetailed) {
|
|
52
52
|
const lines = [];
|
|
53
53
|
if (instance.processId && instance.processId > 0) {
|
|
54
|
-
lines.push(( localize(
|
|
54
|
+
lines.push(( localize(13444, "Process ID ({0}): {1}", "PID", instance.processId)) + "\n");
|
|
55
55
|
}
|
|
56
56
|
if (instance.shellLaunchConfig.executable) {
|
|
57
57
|
let commandLine = "";
|
|
@@ -67,7 +67,7 @@ function getShellProcessTooltip(instance, showDetailed) {
|
|
|
67
67
|
if (args) {
|
|
68
68
|
commandLine += ` ${args}`;
|
|
69
69
|
}
|
|
70
|
-
lines.push(( localize(
|
|
70
|
+
lines.push(( localize(13445, "Command line: {0}", commandLine)));
|
|
71
71
|
}
|
|
72
72
|
return lines.length ? `\n\n---\n\n${lines.join("\n")}` : "";
|
|
73
73
|
}
|
|
@@ -304,6 +304,8 @@ function getShellIntegrationTimeout(configurationService, siInjectionEnabled, is
|
|
|
304
304
|
let timeoutMs;
|
|
305
305
|
if (!isNumber(timeoutValue) || timeoutValue < 0) {
|
|
306
306
|
timeoutMs = siInjectionEnabled ? 5000 : (isRemote ? 3000 : 2000);
|
|
307
|
+
} else if (timeoutValue === 0) {
|
|
308
|
+
timeoutMs = 0;
|
|
307
309
|
} else {
|
|
308
310
|
timeoutMs = Math.max(timeoutValue, 500);
|
|
309
311
|
}
|
|
@@ -44,26 +44,26 @@ var TerminalChatContextKeyStrings;
|
|
|
44
44
|
})(TerminalChatContextKeyStrings || (TerminalChatContextKeyStrings = {}));
|
|
45
45
|
var TerminalChatContextKeys;
|
|
46
46
|
(function(TerminalChatContextKeys) {
|
|
47
|
-
TerminalChatContextKeys.focused = ( new RawContextKey(TerminalChatContextKeyStrings.ChatFocus, false, ( localize(
|
|
48
|
-
TerminalChatContextKeys.visible = ( new RawContextKey(TerminalChatContextKeyStrings.ChatVisible, false, ( localize(
|
|
49
|
-
TerminalChatContextKeys.requestActive = ( new RawContextKey(TerminalChatContextKeyStrings.ChatActiveRequest, false, ( localize(
|
|
50
|
-
TerminalChatContextKeys.inputHasText = ( new RawContextKey(TerminalChatContextKeyStrings.ChatInputHasText, false, ( localize(
|
|
47
|
+
TerminalChatContextKeys.focused = ( new RawContextKey(TerminalChatContextKeyStrings.ChatFocus, false, ( localize(13746, "Whether the chat view is focused."))));
|
|
48
|
+
TerminalChatContextKeys.visible = ( new RawContextKey(TerminalChatContextKeyStrings.ChatVisible, false, ( localize(13747, "Whether the chat view is visible."))));
|
|
49
|
+
TerminalChatContextKeys.requestActive = ( new RawContextKey(TerminalChatContextKeyStrings.ChatActiveRequest, false, ( localize(13748, "Whether there is an active chat request."))));
|
|
50
|
+
TerminalChatContextKeys.inputHasText = ( new RawContextKey(TerminalChatContextKeyStrings.ChatInputHasText, false, ( localize(13749, "Whether the chat input has text."))));
|
|
51
51
|
TerminalChatContextKeys.responseContainsCodeBlock = ( new RawContextKey(
|
|
52
52
|
TerminalChatContextKeyStrings.ChatResponseContainsCodeBlock,
|
|
53
53
|
false,
|
|
54
|
-
( localize(
|
|
54
|
+
( localize(13750, "Whether the chat response contains a code block."))
|
|
55
55
|
));
|
|
56
56
|
TerminalChatContextKeys.responseContainsMultipleCodeBlocks = ( new RawContextKey(
|
|
57
57
|
TerminalChatContextKeyStrings.ChatResponseContainsMultipleCodeBlocks,
|
|
58
58
|
false,
|
|
59
|
-
( localize(
|
|
59
|
+
( localize(13751, "Whether the chat response contains multiple code blocks."))
|
|
60
60
|
));
|
|
61
|
-
TerminalChatContextKeys.hasChatAgent = ( new RawContextKey(TerminalChatContextKeyStrings.ChatAgentRegistered, false, ( localize(
|
|
62
|
-
TerminalChatContextKeys.hasChatTerminals = ( new RawContextKey(TerminalChatContextKeyStrings.ChatHasTerminals, false, ( localize(
|
|
61
|
+
TerminalChatContextKeys.hasChatAgent = ( new RawContextKey(TerminalChatContextKeyStrings.ChatAgentRegistered, false, ( localize(13752, "Whether a chat agent is registered for the terminal location."))));
|
|
62
|
+
TerminalChatContextKeys.hasChatTerminals = ( new RawContextKey(TerminalChatContextKeyStrings.ChatHasTerminals, false, ( localize(13753, "Whether there are any chat terminals."))));
|
|
63
63
|
TerminalChatContextKeys.hasHiddenChatTerminals = ( new RawContextKey(
|
|
64
64
|
TerminalChatContextKeyStrings.ChatHasHiddenTerminals,
|
|
65
65
|
false,
|
|
66
|
-
( localize(
|
|
66
|
+
( localize(13754, "Whether there are any hidden chat terminals."))
|
|
67
67
|
));
|
|
68
68
|
})(TerminalChatContextKeys || (TerminalChatContextKeys = {}));
|
|
69
69
|
|
|
@@ -3,7 +3,7 @@ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
|
3
3
|
import { registerColor } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colorUtils';
|
|
4
4
|
|
|
5
5
|
const terminalStickyScrollBackground = registerColor("terminalStickyScroll.background", null, ( localize(
|
|
6
|
-
|
|
6
|
+
14114,
|
|
7
7
|
"The background color of the sticky scroll overlay in the terminal."
|
|
8
8
|
)));
|
|
9
9
|
const terminalStickyScrollHoverBackground = registerColor("terminalStickyScrollHover.background", {
|
|
@@ -12,7 +12,7 @@ const terminalStickyScrollHoverBackground = registerColor("terminalStickyScrollH
|
|
|
12
12
|
hcDark: "#E48B39",
|
|
13
13
|
hcLight: "#0f4a85"
|
|
14
14
|
}, ( localize(
|
|
15
|
-
|
|
15
|
+
14115,
|
|
16
16
|
"The background color of the sticky scroll overlay in the terminal when hovered."
|
|
17
17
|
)));
|
|
18
18
|
registerColor("terminalStickyScroll.border", {
|
|
@@ -20,6 +20,6 @@ registerColor("terminalStickyScroll.border", {
|
|
|
20
20
|
light: null,
|
|
21
21
|
hcDark: "#6fc3df",
|
|
22
22
|
hcLight: "#0f4a85"
|
|
23
|
-
}, ( localize(
|
|
23
|
+
}, ( localize(14116, "The border of the sticky scroll overlay in the terminal.")));
|
|
24
24
|
|
|
25
25
|
export { terminalStickyScrollBackground, terminalStickyScrollHoverBackground };
|
|
@@ -304,19 +304,19 @@ let TerminalStickyScrollOverlay = class TerminalStickyScrollOverlay extends Disp
|
|
|
304
304
|
this._element = $(".terminal-sticky-scroll", undefined, hoverOverlay);
|
|
305
305
|
this._xterm.raw.element.parentElement.append(this._element);
|
|
306
306
|
this._register(toDisposable(() => this._element?.remove()));
|
|
307
|
-
let hoverTitle = ( localize(
|
|
307
|
+
let hoverTitle = ( localize(14117, "Navigate to Command"));
|
|
308
308
|
const scrollToPreviousCommandKeybinding = this._keybindingService.lookupKeybinding(TerminalCommandId.ScrollToPreviousCommand);
|
|
309
309
|
if (scrollToPreviousCommandKeybinding) {
|
|
310
310
|
const label = scrollToPreviousCommandKeybinding.getLabel();
|
|
311
311
|
if (label) {
|
|
312
|
-
hoverTitle += "\n" + ( localize(
|
|
312
|
+
hoverTitle += "\n" + ( localize(14118, "{0} ({1})", terminalStrings.scrollToPreviousCommand.value, label));
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
315
|
const scrollToNextCommandKeybinding = this._keybindingService.lookupKeybinding(TerminalCommandId.ScrollToNextCommand);
|
|
316
316
|
if (scrollToNextCommandKeybinding) {
|
|
317
317
|
const label = scrollToNextCommandKeybinding.getLabel();
|
|
318
318
|
if (label) {
|
|
319
|
-
hoverTitle += "\n" + ( localize(
|
|
319
|
+
hoverTitle += "\n" + ( localize(14118, "{0} ({1})", terminalStrings.scrollToNextCommand.value, label));
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
322
|
hoverOverlay.title = hoverTitle;
|