未验证 提交 dfefc700 编写于 作者: A Alex Ross 提交者: GitHub

Minimum size for new split terminals (#59140)

Fixes #45678
上级 5131aa48
......@@ -11,6 +11,7 @@ import { SplitView, Orientation, IView, Sizing } from 'vs/base/browser/ui/splitv
import { IPartService, Position } from 'vs/workbench/services/part/common/partService';
const SPLIT_PANE_MIN_SIZE = 120;
const TERMINAL_MIN_USEFUL_SIZE = 250;
class SplitPaneContainer {
private _height: number;
......@@ -361,6 +362,10 @@ export class TerminalTab extends Disposable implements ITerminalTab {
configHelper: ITerminalConfigHelper,
shellLaunchConfig: IShellLaunchConfig
): ITerminalInstance {
const newTerminalSize = ((this._panelPosition === Position.BOTTOM ? this._container.clientWidth : this._container.clientHeight) / (this._terminalInstances.length + 1));
if (newTerminalSize < TERMINAL_MIN_USEFUL_SIZE) {
return undefined;
}
const instance = this._terminalService.createInstance(
terminalFocusContextKey,
configHelper,
......
......@@ -83,6 +83,7 @@ export abstract class TerminalService implements ITerminalService {
}
protected abstract _showTerminalCloseConfirmation(): TPromise<boolean>;
protected abstract _showNotEnoughSpaceToast(): void;
public abstract createTerminal(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
public abstract createTerminalRenderer(name: string): ITerminalInstance;
public abstract createInstance(terminalFocusContextKey: IContextKey<boolean>, configHelper: ITerminalConfigHelper, container: HTMLElement, shellLaunchConfig: IShellLaunchConfig, doCreateProcess: boolean): ITerminalInstance;
......@@ -263,10 +264,14 @@ export abstract class TerminalService implements ITerminalService {
}
const instance = tab.split(this._terminalFocusContextKey, this.configHelper, shellLaunchConfig);
this._initInstanceListeners(instance);
this._onInstancesChanged.fire();
if (instance) {
this._initInstanceListeners(instance);
this._onInstancesChanged.fire();
this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex));
this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex));
} else {
this._showNotEnoughSpaceToast();
}
}
protected _initInstanceListeners(instance: ITerminalInstance): void {
......
......@@ -56,7 +56,6 @@ export class TerminalService extends AbstractTerminalService implements ITermina
this._terminalTabs = [];
this._configHelper = this._instantiationService.createInstance(TerminalConfigHelper);
ipc.on('vscode:openFiles', (_event: any, request: IOpenFileRequest) => {
// if the request to open files is coming in from the integrated terminal (identified though
// the termProgram variable) and we are instructed to wait for editors close, wait for the
......@@ -287,6 +286,10 @@ export class TerminalService extends AbstractTerminalService implements ITermina
}).then(res => !res.confirmed);
}
protected _showNotEnoughSpaceToast(): void {
this._notificationService.warn(nls.localize('terminal.minWidth', "Not enough space to split terminal."));
}
public setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void {
this._configHelper.panelContainer = panelContainer;
this._terminalContainer = terminalContainer;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册