mirror of
https://github.com/Microsoft/vscode
synced 2024-10-13 06:48:17 +00:00
Add shellArgs. Fix #10917
This commit is contained in:
parent
da4a174b3d
commit
2966990272
2
src/vs/vscode.d.ts
vendored
2
src/vs/vscode.d.ts
vendored
|
@ -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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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(); }
|
||||||
|
|
|
@ -12,16 +12,17 @@ export class ExtHostTerminal implements vscode.Terminal {
|
||||||
|
|
||||||
public _name: string;
|
public _name: string;
|
||||||
public _shellPath: string;
|
public _shellPath: string;
|
||||||
|
public _shellArgs: 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._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 +67,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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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';
|
||||||
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 {
|
||||||
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 {
|
||||||
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) {
|
||||||
|
|
Loading…
Reference in a new issue