mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
Merge pull request #125340 from microsoft/merogge/onExit
This commit is contained in:
@@ -214,6 +214,7 @@ export interface ITerminalService {
|
||||
getEditableData(instance: ITerminalInstance): IEditableData | undefined;
|
||||
setEditable(instance: ITerminalInstance, data: IEditableData | null): Promise<void>;
|
||||
instanceIsSplit(instance: ITerminalInstance): boolean;
|
||||
safeDisposeTerminal(instance: ITerminalInstance): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IRemoteTerminalService extends IOffProcessTerminalService {
|
||||
|
||||
@@ -1627,10 +1627,10 @@ export function registerTerminalActions() {
|
||||
if (!selectedInstances) {
|
||||
return;
|
||||
}
|
||||
for (const instance of selectedInstances) {
|
||||
instance.dispose(true);
|
||||
}
|
||||
const terminalService = accessor.get(ITerminalService);
|
||||
for (const instance of selectedInstances) {
|
||||
terminalService.safeDisposeTerminal(instance);
|
||||
}
|
||||
if (terminalService.terminalInstances.length > 0) {
|
||||
terminalService.focusTabs();
|
||||
focusNext(accessor);
|
||||
|
||||
@@ -220,6 +220,16 @@ export class TerminalService implements ITerminalService {
|
||||
this._refreshAvailableProfiles();
|
||||
}
|
||||
|
||||
async safeDisposeTerminal(instance: ITerminalInstance): Promise<void> {
|
||||
if (this.configHelper.config.confirmOnExit) {
|
||||
const notConfirmed = await this._showTerminalCloseConfirmation(true);
|
||||
if (notConfirmed) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
instance.dispose();
|
||||
}
|
||||
|
||||
private _setConnected() {
|
||||
this._connectionState = TerminalConnectionState.Connected;
|
||||
this._onDidChangeConnectionState.fire();
|
||||
@@ -870,9 +880,9 @@ export class TerminalService implements ITerminalService {
|
||||
return terminalIndex;
|
||||
}
|
||||
|
||||
protected async _showTerminalCloseConfirmation(): Promise<boolean> {
|
||||
protected async _showTerminalCloseConfirmation(singleTerminal?: boolean): Promise<boolean> {
|
||||
let message: string;
|
||||
if (this.terminalInstances.length === 1) {
|
||||
if (this.terminalInstances.length === 1 || singleTerminal) {
|
||||
message = nls.localize('terminalService.terminalCloseConfirmationSingular', "There is an active terminal session, do you want to kill it?");
|
||||
} else {
|
||||
message = nls.localize('terminalService.terminalCloseConfirmationPlural', "There are {0} active terminal sessions, do you want to kill them?", this.terminalInstances.length);
|
||||
|
||||
@@ -309,7 +309,7 @@ class TerminalTabsRenderer implements IListRenderer<ITerminalInstance, ITerminal
|
||||
template.elementDispoables.add(DOM.addDisposableListener(template.element, DOM.EventType.AUXCLICK, e => {
|
||||
e.stopImmediatePropagation();
|
||||
if (e.button === 1/*middle*/) {
|
||||
instance.dispose();
|
||||
this._terminalService.safeDisposeTerminal(instance);
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user