Skip to content

Commit e0598cb

Browse files
authored
1 parent 7c4f4c8 commit e0598cb

File tree

4 files changed

+58
-33
lines changed

4 files changed

+58
-33
lines changed

src/vs/workbench/contrib/terminal/browser/terminalService.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,9 @@ export class TerminalService implements ITerminalService {
296296
this._onDidFocusInstance.fire(instance);
297297
this._evaluateActiveInstance(host, instance);
298298
});
299-
host.onDidChangeInstanceCapability(this._onDidChangeInstanceCapability.fire, this.onDidChangeInstanceCapability);
299+
host.onDidChangeInstanceCapability((instance) => {
300+
this._onDidChangeInstanceCapability.fire(instance);
301+
});
300302
this._hostActiveTerminals.set(host, undefined);
301303
}
302304

src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecy
4646
import { IProcessDetails } from 'vs/platform/terminal/common/terminalProcess';
4747
import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey';
4848
import { getTerminalResourcesFromDragEvent, parseTerminalUri } from 'vs/workbench/contrib/terminal/browser/terminalUri';
49-
import { TerminalCapability } from 'vs/workbench/contrib/terminal/common/capabilities/capabilities';
49+
import { getShellIntegrationTooltip } from 'vs/workbench/contrib/terminal/browser/terminalTooltip';
5050

5151
const $ = DOM.$;
5252

@@ -308,21 +308,7 @@ class TerminalTabsRenderer implements IListRenderer<ITerminalInstance, ITerminal
308308
}
309309
}
310310

311-
let shellIntegrationString = '';
312-
const shellIntegrationCapabilities: TerminalCapability[] = [];
313-
if (instance.capabilities.has(TerminalCapability.CommandDetection)) {
314-
shellIntegrationCapabilities.push(TerminalCapability.CommandDetection);
315-
}
316-
if (instance.capabilities.has(TerminalCapability.CwdDetection)) {
317-
shellIntegrationCapabilities.push(TerminalCapability.CwdDetection);
318-
}
319-
if (shellIntegrationCapabilities.length > 0) {
320-
shellIntegrationString += `\n\n---\n\n ${localize('shellIntegration.enabled', "Shell integration is enabled")}`;
321-
for (const capability of shellIntegrationCapabilities) {
322-
shellIntegrationString += `\n- ${this._getCapabilityName(capability)}`;
323-
}
324-
}
325-
311+
const shellIntegrationString = getShellIntegrationTooltip(instance, true);
326312
const iconId = getIconId(instance);
327313
const hasActionbar = !this.shouldHideActionBar();
328314
let label: string = '';
@@ -514,18 +500,6 @@ class TerminalTabsRenderer implements IListRenderer<ITerminalInstance, ITerminal
514500
this._terminalGroupService.focusTabs();
515501
this._listService.lastFocusedList?.focusNext();
516502
}
517-
518-
private _getCapabilityName(capability: TerminalCapability): string | undefined {
519-
switch (capability) {
520-
case TerminalCapability.CwdDetection:
521-
case TerminalCapability.NaiveCwdDetection:
522-
return localize('capability.cwdDetection', "Current working directory detection");
523-
case TerminalCapability.CommandDetection:
524-
return localize('capability.commandDetection', "Command detection");
525-
case TerminalCapability.PartialCommandDetection:
526-
return localize('capability.partialCommandDetection', "Command detection (partial)");
527-
}
528-
}
529503
}
530504

531505
interface ITerminalTabEntryTemplate {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { localize } from 'vs/nls';
7+
import { ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
8+
import { TerminalCapability } from 'vs/workbench/contrib/terminal/common/capabilities/capabilities';
9+
10+
function getCapabilityName(capability: TerminalCapability): string | undefined {
11+
switch (capability) {
12+
case TerminalCapability.CwdDetection:
13+
case TerminalCapability.NaiveCwdDetection:
14+
return localize('capability.cwdDetection', "Current working directory detection");
15+
case TerminalCapability.CommandDetection:
16+
return localize('capability.commandDetection', "Command detection");
17+
case TerminalCapability.PartialCommandDetection:
18+
return localize('capability.partialCommandDetection', "Command detection (partial)");
19+
}
20+
}
21+
22+
export function getShellIntegrationTooltip(instance: ITerminalInstance, markdown?: boolean): string {
23+
let shellIntegrationString = '';
24+
const shellIntegrationCapabilities: TerminalCapability[] = [];
25+
if (instance.capabilities.has(TerminalCapability.CommandDetection)) {
26+
shellIntegrationCapabilities.push(TerminalCapability.CommandDetection);
27+
}
28+
if (instance.capabilities.has(TerminalCapability.CwdDetection)) {
29+
shellIntegrationCapabilities.push(TerminalCapability.CwdDetection);
30+
}
31+
if (shellIntegrationCapabilities.length > 0) {
32+
shellIntegrationString += `${markdown ? '\n\n---\n\n' : '\n\n'} ${localize('shellIntegration.enabled', "Shell integration is enabled")}`;
33+
for (const capability of shellIntegrationCapabilities) {
34+
shellIntegrationString += `\n- ${getCapabilityName(capability)}`;
35+
}
36+
}
37+
return shellIntegrationString;
38+
}

src/vs/workbench/contrib/terminal/browser/terminalView.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { withNullAsUndefined } from 'vs/base/common/types';
4545
import { DataTransfers } from 'vs/base/browser/dnd';
4646
import { getTerminalActionBarArgs } from 'vs/workbench/contrib/terminal/browser/terminalMenus';
4747
import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey';
48+
import { getShellIntegrationTooltip } from 'vs/workbench/contrib/terminal/browser/terminalTooltip';
4849

4950
export class TerminalViewPane extends ViewPane {
5051
private _actions: IAction[] | undefined;
@@ -391,6 +392,10 @@ class SingleTerminalTabActionViewItem extends MenuEntryActionViewItem {
391392
this.updateLabel();
392393
}
393394
}));
395+
this._register(this._terminalService.onDidChangeInstanceCapability(e => {
396+
this._action.tooltip = getSingleTabTooltip(e, this._terminalService.configHelper.config.tabs.separator);
397+
this.updateLabel(e);
398+
}));
394399

395400
// Clean up on dispose
396401
this._register(toDisposable(() => dispose(this._elementDisposables)));
@@ -504,7 +509,7 @@ function getSingleTabLabel(instance: ITerminalInstance | undefined, separator: s
504509
return '';
505510
}
506511
let iconClass = ThemeIcon.isThemeIcon(instance.icon) ? instance.icon?.id : Codicon.terminal.id;
507-
const label = `$(${icon?.id || iconClass}) ${getSingleTabTooltip(instance, separator)}`;
512+
const label = `$(${icon?.id || iconClass}) ${getSingleTabTitle(instance, separator)}`;
508513

509514
const primaryStatus = instance.statusList.primary;
510515
if (!primaryStatus?.icon) {
@@ -517,10 +522,16 @@ function getSingleTabTooltip(instance: ITerminalInstance | undefined, separator:
517522
if (!instance) {
518523
return '';
519524
}
520-
if (!instance.description) {
521-
return instance.title;
525+
const shellIntegrationString = getShellIntegrationTooltip(instance);
526+
const title = getSingleTabTitle(instance, separator);
527+
return shellIntegrationString ? title + shellIntegrationString : title;
528+
}
529+
530+
function getSingleTabTitle(instance: ITerminalInstance | undefined, separator: string): string {
531+
if (!instance) {
532+
return '';
522533
}
523-
return `${instance.title} ${separator} ${instance.description}`;
534+
return !instance.description ? instance.title : `${instance.title} ${separator} ${instance.description}`;
524535
}
525536

526537
class TerminalThemeIconStyle extends Themable {

0 commit comments

Comments
 (0)