Merge pull request #125340 from microsoft/merogge/onExit

This commit is contained in:
Megan Rogge
2021-06-02 20:28:00 -05:00
committed by GitHub
4 changed files with 17 additions and 6 deletions
@@ -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);
}
}));