提交 fec1d6a4 编写于 作者: D Daniel Imms 提交者: GitHub

Merge pull request #11982 from Microsoft/octref/10917

Add shellArgs. Fix #10917
...@@ -3500,7 +3500,7 @@ declare namespace vscode { ...@@ -3500,7 +3500,7 @@ declare namespace vscode {
* @param shellPath Optional path to a custom shell executable to be used in the terminal. * @param shellPath Optional path to a custom shell executable to be used in the terminal.
* @return A new Terminal. * @return A new Terminal.
*/ */
export function createTerminal(name?: string, shellPath?: string): Terminal; export function createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): Terminal;
} }
/** /**
......
...@@ -260,8 +260,8 @@ export class ExtHostAPIImplementation { ...@@ -260,8 +260,8 @@ export class ExtHostAPIImplementation {
createOutputChannel(name: string): vscode.OutputChannel { createOutputChannel(name: string): vscode.OutputChannel {
return extHostOutputService.createOutputChannel(name); return extHostOutputService.createOutputChannel(name);
}, },
createTerminal(name?: string, shellPath?: string): vscode.Terminal { createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): vscode.Terminal {
return extHostTerminalService.createTerminal(name, shellPath); return extHostTerminalService.createTerminal(name, shellPath, shellArgs);
} }
}; };
......
...@@ -153,7 +153,7 @@ export abstract class MainThreadOutputServiceShape { ...@@ -153,7 +153,7 @@ export abstract class MainThreadOutputServiceShape {
} }
export abstract class MainThreadTerminalServiceShape { export abstract class MainThreadTerminalServiceShape {
$createTerminal(name?: string, shellPath?: string): number { throw ni(); } $createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): number { throw ni(); }
$dispose(terminalId: number): void { throw ni(); } $dispose(terminalId: number): void { throw ni(); }
$hide(terminalId: number): void { throw ni(); } $hide(terminalId: number): void { throw ni(); }
$sendText(terminalId: number, text: string, addNewLine: boolean): void { throw ni(); } $sendText(terminalId: number, text: string, addNewLine: boolean): void { throw ni(); }
......
...@@ -11,17 +11,15 @@ import {MainContext, MainThreadTerminalServiceShape} from './extHost.protocol'; ...@@ -11,17 +11,15 @@ import {MainContext, MainThreadTerminalServiceShape} from './extHost.protocol';
export class ExtHostTerminal implements vscode.Terminal { export class ExtHostTerminal implements vscode.Terminal {
public _name: string; public _name: string;
public _shellPath: string;
private _id: number; private _id: number;
private _proxy: MainThreadTerminalServiceShape; private _proxy: MainThreadTerminalServiceShape;
private _disposed: boolean; private _disposed: boolean;
constructor(proxy: MainThreadTerminalServiceShape, id: number, name?: string, shellPath?: string) { constructor(proxy: MainThreadTerminalServiceShape, id: number, name?: string, shellPath?: string, shellArgs?: string[]) {
this._name = name; this._name = name;
this._shellPath = shellPath;
this._proxy = proxy; this._proxy = proxy;
this._id = this._proxy.$createTerminal(name, shellPath); this._id = this._proxy.$createTerminal(name, shellPath, shellArgs);
} }
public get name(): string { public get name(): string {
...@@ -66,7 +64,7 @@ export class ExtHostTerminalService { ...@@ -66,7 +64,7 @@ export class ExtHostTerminalService {
this._proxy = threadService.get(MainContext.MainThreadTerminalService); this._proxy = threadService.get(MainContext.MainThreadTerminalService);
} }
public createTerminal(name?: string, shellPath?: string): vscode.Terminal { public createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): vscode.Terminal {
return new ExtHostTerminal(this._proxy, -1, name, shellPath); return new ExtHostTerminal(this._proxy, -1, name, shellPath, shellArgs);
} }
} }
...@@ -19,8 +19,8 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape { ...@@ -19,8 +19,8 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
super(); super();
} }
public $createTerminal(name?: string, shellPath?: string): number { public $createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): number {
return this.terminalService.createInstance(name, shellPath).id; return this.terminalService.createInstance(name, shellPath, shellArgs).id;
} }
public $show(terminalId: number, preserveFocus: boolean): void { public $show(terminalId: number, preserveFocus: boolean): void {
......
...@@ -62,7 +62,7 @@ export interface ITerminalService { ...@@ -62,7 +62,7 @@ export interface ITerminalService {
onInstanceTitleChanged: Event<string>; onInstanceTitleChanged: Event<string>;
terminalInstances: ITerminalInstance[]; terminalInstances: ITerminalInstance[];
createInstance(name?: string, shellPath?: string): ITerminalInstance; createInstance(name?: string, shellPath?: string, shellArgs?: string[]): ITerminalInstance;
getInstanceFromId(terminalId: number): ITerminalInstance; getInstanceFromId(terminalId: number): ITerminalInstance;
getInstanceLabels(): string[]; getInstanceLabels(): string[];
getActiveInstance(): ITerminalInstance; getActiveInstance(): ITerminalInstance;
......
...@@ -52,13 +52,13 @@ export class TerminalInstance implements ITerminalInstance { ...@@ -52,13 +52,13 @@ export class TerminalInstance implements ITerminalInstance {
private container: HTMLElement, private container: HTMLElement,
private workspace: IWorkspace, private workspace: IWorkspace,
name: string, name: string,
shellPath: string, shell: IShell,
@IKeybindingService private keybindingService: IKeybindingService, @IKeybindingService private keybindingService: IKeybindingService,
@IMessageService private messageService: IMessageService @IMessageService private messageService: IMessageService
) { ) {
this._id = TerminalInstance.ID_COUNTER++; this._id = TerminalInstance.ID_COUNTER++;
this._onTitleChanged = new Emitter<string>(); this._onTitleChanged = new Emitter<string>();
this.createProcess(workspace, name, shellPath); this.createProcess(workspace, name, shell);
if (container) { if (container) {
this.attachToElement(container); this.attachToElement(container);
...@@ -210,9 +210,11 @@ export class TerminalInstance implements ITerminalInstance { ...@@ -210,9 +210,11 @@ export class TerminalInstance implements ITerminalInstance {
return typeof data === 'string' ? data.replace(TerminalInstance.EOL_REGEX, os.EOL) : data; return typeof data === 'string' ? data.replace(TerminalInstance.EOL_REGEX, os.EOL) : data;
} }
private createProcess(workspace: IWorkspace, name?: string, shellPath?: string) { private createProcess(workspace: IWorkspace, name?: string, shell?: IShell) {
let locale = this.configHelper.isSetLocaleVariables() ? platform.locale : undefined; let locale = this.configHelper.isSetLocaleVariables() ? platform.locale : undefined;
let shell = shellPath ? { executable: shellPath, args: [] } : this.configHelper.getShell(); if (!shell) {
shell = this.configHelper.getShell();
}
let env = TerminalInstance.createTerminalEnv(process.env, shell, workspace, locale); let env = TerminalInstance.createTerminalEnv(process.env, shell, workspace, locale);
this._title = name ? name : ''; this._title = name ? name : '';
this.process = cp.fork('./terminalProcess', [], { this.process = cp.fork('./terminalProcess', [], {
......
...@@ -14,7 +14,7 @@ import { IPartService } from 'vs/workbench/services/part/common/partService'; ...@@ -14,7 +14,7 @@ import { IPartService } from 'vs/workbench/services/part/common/partService';
import { ITerminalInstance, ITerminalService, KEYBINDING_CONTEXT_TERMINAL_FOCUS, TERMINAL_PANEL_ID } from 'vs/workbench/parts/terminal/electron-browser/terminal'; import { ITerminalInstance, ITerminalService, KEYBINDING_CONTEXT_TERMINAL_FOCUS, TERMINAL_PANEL_ID } from 'vs/workbench/parts/terminal/electron-browser/terminal';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { TerminalConfigHelper } from 'vs/workbench/parts/terminal/electron-browser/terminalConfigHelper'; import { TerminalConfigHelper, IShell } from 'vs/workbench/parts/terminal/electron-browser/terminalConfigHelper';
import { TerminalInstance } from 'vs/workbench/parts/terminal/electron-browser/terminalInstance'; import { TerminalInstance } from 'vs/workbench/parts/terminal/electron-browser/terminalInstance';
export class TerminalService implements ITerminalService { export class TerminalService implements ITerminalService {
...@@ -51,7 +51,11 @@ export class TerminalService implements ITerminalService { ...@@ -51,7 +51,11 @@ export class TerminalService implements ITerminalService {
this._configHelper = <TerminalConfigHelper>this.instantiationService.createInstance(TerminalConfigHelper, platform.platform); this._configHelper = <TerminalConfigHelper>this.instantiationService.createInstance(TerminalConfigHelper, platform.platform);
} }
public createInstance(name?: string, shellPath?: string): ITerminalInstance { public createInstance(name?: string, shellPath?: string, shellArgs?: string[]): ITerminalInstance {
let shell: IShell = {
executable: shellPath,
args: shellArgs
};
let terminalInstance = <TerminalInstance>this.instantiationService.createInstance(TerminalInstance, let terminalInstance = <TerminalInstance>this.instantiationService.createInstance(TerminalInstance,
this.terminalFocusContextKey, this.terminalFocusContextKey,
this.onTerminalInstanceDispose.bind(this), this.onTerminalInstanceDispose.bind(this),
...@@ -59,7 +63,7 @@ export class TerminalService implements ITerminalService { ...@@ -59,7 +63,7 @@ export class TerminalService implements ITerminalService {
this.terminalContainer, this.terminalContainer,
this.workspaceContextService.getWorkspace(), this.workspaceContextService.getWorkspace(),
name, name,
shellPath); shell);
terminalInstance.addDisposable(terminalInstance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged)); terminalInstance.addDisposable(terminalInstance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged));
this.terminalInstances.push(terminalInstance); this.terminalInstances.push(terminalInstance);
if (this.terminalInstances.length === 1) { if (this.terminalInstances.length === 1) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册