Get instance labels working

This commit is contained in:
Daniel Imms 2016-09-10 12:25:12 -07:00
parent 982620a825
commit 3d93bad53e
4 changed files with 24 additions and 13 deletions

View file

@ -95,16 +95,17 @@ export interface ITerminalConfiguration {
export interface ITerminalService {
_serviceBrand: any;
activeTerminalInstanceIndex: number;
configHelper: TerminalConfigHelper;
onActiveInstanceChanged: Event<string>;
onInstancesChanged: Event<string>;
onInstanceTitleChanged: Event<string>;
activeTerminalInstanceIndex: number;
configHelper: TerminalConfigHelper;
// If this needed if getTerminalInstanceTitles is exposed?
terminalInstances: ITerminalInstance[];
createInstance(name?: string, shellPath?: string): ITerminalInstance;
getInstanceFromId(terminalId: number): ITerminalInstance;
getInstanceTitles(): string[];
getActiveInstance(): ITerminalInstance;
setActiveInstance(terminalInstance: ITerminalInstance): void;
setActiveInstanceByIndex(terminalIndex: number): void;
@ -118,6 +119,7 @@ export interface ITerminalService {
export interface ITerminalInstance {
id: number;
onTitleChanged: Event<string>;
title: string;
//ptyProcess: cp.ChildProcess;
//xterm: any;

View file

@ -241,7 +241,8 @@ export class SwitchTerminalInstanceActionItem extends SelectActionItem {
}
private updateItems(): void {
this.setOptions(this.terminalService.terminalInstances.map((t) => t.title), this.terminalService.activeTerminalInstanceIndex);
console.log('updateItems');
this.setOptions(this.terminalService.getInstanceTitles(), this.terminalService.activeTerminalInstanceIndex);
}
}

View file

@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import DOM = require('vs/base/browser/dom');
import Event, {Emitter} from 'vs/base/common/event';
import URI from 'vs/base/common/uri';
import cp = require('child_process');
import lifecycle = require('vs/base/common/lifecycle');
@ -28,10 +29,13 @@ export class TerminalInstance implements ITerminalInstance {
private static ID_COUNTER = 1;
private static EOL_REGEX = /\r?\n/g;
private _id: number;
private _title: string;
private _onTitleChanged: Emitter<string>;
public get id(): number { return this._id; }
public get title(): string { return this._title; }
public get onTitleChanged(): Event<string> { return this._onTitleChanged.event; }
private isExiting: boolean = false;
private toDispose: lifecycle.IDisposable[] = [];
@ -56,6 +60,7 @@ export class TerminalInstance implements ITerminalInstance {
@IWorkspaceContextService private contextService: IWorkspaceContextService
) {
this._id = TerminalInstance.ID_COUNTER++;
this._onTitleChanged = new Emitter<string>();
this.createProcess(name, shellPath);
if (container) {
@ -164,9 +169,9 @@ export class TerminalInstance implements ITerminalInstance {
// Only listen for process title changes when a name is not provided
this.process.on('message', (message) => {
if (message.type === 'title') {
process.title = message.content ? message.content : '';
this._title = message.content ? message.content : '';
// TODO: Send title change notification to service/panel
//this._onInstanceTitleChanged.fire();
this._onTitleChanged.fire();
}
});
}

View file

@ -21,17 +21,16 @@ export class TerminalService implements ITerminalService {
private _activeTerminalInstanceIndex: number = 0;
private _configHelper: TerminalConfigHelper;
private _terminalInstances: ITerminalInstance[] = [];
public get activeTerminalInstanceIndex(): number { return this._activeTerminalInstanceIndex; }
public get configHelper(): TerminalConfigHelper { return this._configHelper; }
public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; }
private _onActiveInstanceChanged: Emitter<string>;
private _onInstancesChanged: Emitter<string>;
private _onInstanceTitleChanged: Emitter<string>;
private _terminalInstances: ITerminalInstance[] = [];
public get activeTerminalInstanceIndex(): number { return this._activeTerminalInstanceIndex; }
public get configHelper(): TerminalConfigHelper { return this._configHelper; }
public get onActiveInstanceChanged(): Event<string> { return this._onActiveInstanceChanged.event; }
public get onInstancesChanged(): Event<string> { return this._onInstancesChanged.event; }
public get onInstanceTitleChanged(): Event<string> { return this._onInstanceTitleChanged.event; }
public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; }
private terminalContainer: HTMLElement;
private terminalFocusContextKey: IContextKey<boolean>;
@ -53,6 +52,8 @@ export class TerminalService implements ITerminalService {
public createInstance(name?: string, shellPath?: string): ITerminalInstance {
let terminalInstance = <TerminalInstance>this.instantiationService.createInstance(TerminalInstance,
this.terminalFocusContextKey, this.onTerminalInstanceDispose.bind(this), this._configHelper, this.terminalContainer, name, shellPath);
// TODO: Dispose when terminalInstance is disposed
terminalInstance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged);
this.terminalInstances.push(terminalInstance);
if (this.terminalInstances.length === 1) {
// It's the first instance so it should be focused
@ -62,6 +63,10 @@ export class TerminalService implements ITerminalService {
return terminalInstance;
}
public getInstanceTitles(): string[] {
return this._terminalInstances.map((instance, index) => `${index + 1}: ${instance.title}`);
}
private onTerminalInstanceDispose(terminalInstance: TerminalInstance): void {
// TODO: Handle terminal exit here
}
@ -83,9 +88,7 @@ export class TerminalService implements ITerminalService {
public setActiveInstanceByIndex(terminalIndex: number): void {
this._activeTerminalInstanceIndex = terminalIndex;
// TODO: Inform the panel
this._terminalInstances.forEach((terminalInstance, i) => {
console.log('setting visibility', i === terminalIndex);
terminalInstance.setVisible(i === terminalIndex);
});
this._onActiveInstanceChanged.fire();