提交 eefc56f8 编写于 作者: D Daniel Imms

Set active instance in tab when instance focus changes

上级 6544ae5d
......@@ -221,6 +221,8 @@ export interface ITerminalInstance {
*/
onDisposed: Event<ITerminalInstance>;
onFocused: Event<ITerminalInstance>;
onProcessIdReady: Event<ITerminalInstance>;
/**
......
......@@ -78,6 +78,7 @@ export class TerminalInstance implements ITerminalInstance {
private _processReady: TPromise<void>;
private _isDisposed: boolean;
private _onDisposed: Emitter<ITerminalInstance>;
private _onFocused: Emitter<ITerminalInstance>;
private _onProcessIdReady: Emitter<ITerminalInstance>;
private _onTitleChanged: Emitter<string>;
private _process: cp.ChildProcess;
......@@ -105,6 +106,7 @@ export class TerminalInstance implements ITerminalInstance {
public get id(): number { return this._id; }
public get processId(): number { return this._processId; }
public get onDisposed(): Event<ITerminalInstance> { return this._onDisposed.event; }
public get onFocused(): Event<ITerminalInstance> { return this._onFocused.event; }
public get onProcessIdReady(): Event<ITerminalInstance> { return this._onProcessIdReady.event; }
public get onTitleChanged(): Event<string> { return this._onTitleChanged.event; }
public get title(): string { return this._title; }
......@@ -142,6 +144,7 @@ export class TerminalInstance implements ITerminalInstance {
this._preLaunchInputQueue = '';
this._onDisposed = new Emitter<TerminalInstance>();
this._onFocused = new Emitter<TerminalInstance>();
this._onProcessIdReady = new Emitter<TerminalInstance>();
this._onTitleChanged = new Emitter<string>();
......@@ -407,6 +410,7 @@ export class TerminalInstance implements ITerminalInstance {
this._instanceDisposables.push(dom.addDisposableListener(this._xterm.textarea, 'focus', (event: KeyboardEvent) => {
this._terminalFocusContextKey.set(true);
this._onFocused.fire(this);
}));
this._instanceDisposables.push(dom.addDisposableListener(this._xterm.textarea, 'blur', (event: KeyboardEvent) => {
this._terminalFocusContextKey.reset();
......
......@@ -208,6 +208,7 @@ export class TerminalTab extends Disposable implements ITerminalTab {
this._terminalInstances.push(instance);
this._activeInstanceIndex = 0;
instance.addDisposable(instance.onDisposed(instance => this._onInstanceDisposed(instance)));
instance.addDisposable(instance.onFocused(instance => this._setActiveInstance(instance)));
this._rootSplitPane = new RootSplitPane();
this._rootSplitPane.instance = instance;
......@@ -218,8 +219,6 @@ export class TerminalTab extends Disposable implements ITerminalTab {
if (this._container) {
this.attachToElement(this._container);
}
// TODO: Listen to instance focus and update activeInstanceIndex accordingly
}
public dispose(): void {
......@@ -275,6 +274,24 @@ export class TerminalTab extends Disposable implements ITerminalTab {
return null;
}
private _setActiveInstance(instance: ITerminalInstance): void {
this.setActiveInstanceByIndex(this._getIndexFromId(instance.id));
}
// TODO: This is duplicated in ITerminalService
private _getIndexFromId(terminalId: number): number {
let terminalIndex = -1;
this.terminalInstances.forEach((terminalInstance, i) => {
if (terminalInstance.id === terminalId) {
terminalIndex = i;
}
});
if (terminalIndex === -1) {
throw new Error(`Terminal with ID ${terminalId} does not exist (has it already been disposed?)`);
}
return terminalIndex;
}
public setActiveInstanceByIndex(index: number): boolean {
// Check for invalid value
if (index >= this._terminalInstances.length) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册