mirror of
https://github.com/Microsoft/vscode
synced 2024-10-13 06:48:17 +00:00
Get instance labels working
This commit is contained in:
parent
982620a825
commit
3d93bad53e
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue