提交 8a67041e 编写于 作者: R Ramya Achutha Rao

Pass env via extension api when creating terminal

上级 49e570e1
......@@ -4852,6 +4852,10 @@ declare module 'vscode' {
* Args for the custom shell executable, this does not work on Windows (see #8429)
*/
shellArgs?: string[];
/**
* Object with environment variables that will be added to the VS Code process.
*/
env?: { [key: string]: string };
}
/**
......
......@@ -33,13 +33,14 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
// when the extension host process goes down ?
}
public $createTerminal(name?: string, shellPath?: string, shellArgs?: string[], waitOnExit?: boolean): TPromise<number> {
public $createTerminal(name?: string, shellPath?: string, shellArgs?: string[], env?: { [key: string]: string }, waitOnExit?: boolean): TPromise<number> {
const shellLaunchConfig: IShellLaunchConfig = {
name,
executable: shellPath,
args: shellArgs,
waitOnExit,
ignoreConfigurationCwd: true
ignoreConfigurationCwd: true,
env
};
return TPromise.as(this.terminalService.createInstance(shellLaunchConfig).id);
}
......
......@@ -280,7 +280,7 @@ export interface MainThreadProgressShape extends IDisposable {
}
export interface MainThreadTerminalServiceShape extends IDisposable {
$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], waitOnExit?: boolean): TPromise<number>;
$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], env?: { [key: string]: string }, waitOnExit?: boolean): TPromise<number>;
$dispose(terminalId: number): void;
$hide(terminalId: number): void;
$sendText(terminalId: number, text: string, addNewLine: boolean): void;
......
......@@ -24,6 +24,7 @@ export class ExtHostTerminal implements vscode.Terminal {
name?: string,
shellPath?: string,
shellArgs?: string[],
env?: { [key: string]: string },
waitOnExit?: boolean
) {
this._name = name;
......@@ -32,7 +33,7 @@ export class ExtHostTerminal implements vscode.Terminal {
this._pidPromise = new TPromise<number>(c => {
this._pidPromiseComplete = c;
});
this._proxy.$createTerminal(name, shellPath, shellArgs, waitOnExit).then((id) => {
this._proxy.$createTerminal(name, shellPath, shellArgs, env, waitOnExit).then((id) => {
this._id = id;
this._queuedRequests.forEach((r) => {
r.run(this._proxy, this._id);
......@@ -113,7 +114,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
}
public createTerminalFromOptions(options: vscode.TerminalOptions): vscode.Terminal {
let terminal = new ExtHostTerminal(this._proxy, options.name, options.shellPath, options.shellArgs/*, options.waitOnExit*/);
let terminal = new ExtHostTerminal(this._proxy, options.name, options.shellPath, options.shellArgs, options.env/*, options.waitOnExit*/);
this._terminals.push(terminal);
return terminal;
}
......
......@@ -549,14 +549,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem {
shellLaunchConfig.cwd = options.cwd;
}
if (options.env) {
let env: IStringDictionary<string> = Object.create(null);
Object.keys(process.env).forEach((key) => {
env[key] = process.env[key];
});
Object.keys(options.env).forEach((key) => {
env[key] = options.env[key];
});
shellLaunchConfig.env = env;
shellLaunchConfig.env = options.env;
}
let prefersSameTerminal = task.command.presentation.panel === PanelKind.Dedicated;
let allowsSharedTerminal = task.command.presentation.panel === PanelKind.Shared;
......
......@@ -775,7 +775,13 @@ export class TerminalInstance implements ITerminalInstance {
// TODO: This should be private/protected
// TODO: locale should not be optional
public static createTerminalEnv(parentEnv: IStringDictionary<string>, shell: IShellLaunchConfig, cwd: string, locale?: string, cols?: number, rows?: number): IStringDictionary<string> {
const env = shell.env ? shell.env : TerminalInstance._cloneEnv(parentEnv);
const env = TerminalInstance._cloneEnv(parentEnv);
if (shell.env) {
Object.keys(shell.env).forEach((key) => {
env[key] = shell.env[key];
});
}
env['PTYPID'] = process.pid.toString();
env['PTYSHELL'] = shell.executable;
env['TERM_PROGRAM'] = 'vscode';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册