提交 97938005 编写于 作者: D Daniel Imms

Set pty size when terminal is reused

Fixes #20618
上级 d287583f
......@@ -65,6 +65,8 @@ export class TerminalInstance implements ITerminalInstance {
private _xterm: any;
private _xtermElement: HTMLDivElement;
private _terminalHasTextContextKey: IContextKey<boolean>;
private _cols: number;
private _rows: number;
public get id(): number { return this._id; }
public get processId(): number { return this._processId; }
......@@ -385,7 +387,7 @@ export class TerminalInstance implements ITerminalInstance {
if (!shell.executable) {
this._configHelper.mergeDefaultShellPathAndArgs(shell);
}
const env = TerminalInstance.createTerminalEnv(process.env, shell, this._getCwd(shell, workspace), locale);
const env = TerminalInstance.createTerminalEnv(process.env, shell, this._getCwd(shell, workspace), locale, this._cols, this._rows);
this._title = shell.name || '';
this._process = cp.fork('./terminalProcess', [], {
env: env,
......@@ -501,7 +503,7 @@ 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): IStringDictionary<string> {
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);
env['PTYPID'] = process.pid.toString();
env['PTYSHELL'] = shell.executable;
......@@ -514,6 +516,10 @@ export class TerminalInstance implements ITerminalInstance {
if (locale) {
env['LANG'] = TerminalInstance._getLangEnvVariable(locale);
}
if (cols && rows) {
env['PTYCOLS'] = cols.toString();
env['PTYROWS'] = rows.toString();
}
return env;
}
......@@ -649,17 +655,17 @@ export class TerminalInstance implements ITerminalInstance {
// Use left padding as right padding, right padding is not defined in CSS just in case
// xterm.js causes an unexpected overflow.
const innerWidth = dimension.width - padding * 2;
const cols = Math.floor(innerWidth / font.charWidth);
const rows = Math.floor(dimension.height / font.charHeight);
this._cols = Math.floor(innerWidth / font.charWidth);
this._rows = Math.floor(dimension.height / font.charHeight);
if (this._xterm) {
this._xterm.resize(cols, rows);
this._xterm.resize(this._cols, this._rows);
this._xterm.element.style.width = innerWidth + 'px';
}
if (this._process.connected) {
this._process.send({
event: 'resize',
cols: cols,
rows: rows
cols: this._cols,
rows: this._rows
});
}
}
......
......@@ -22,15 +22,23 @@ if (os.platform() === 'win32') {
var shell = process.env.PTYSHELL;
var args = getArgs();
var cwd = process.env.PTYCWD;
var cols = process.env.PTYCOLS;
var rows = process.env.PTYROWS;
var currentTitle = '';
setupPlanB(process.env.PTYPID);
cleanEnv();
var ptyProcess = ptyJs.fork(shell, args, {
var options = {
name: name,
cwd: cwd
});
};
if (cols && rows) {
options.cols = parseInt(cols, 10);
options.rows = parseInt(rows, 10);
}
var ptyProcess = ptyJs.fork(shell, args, options);
ptyProcess.on('data', function (data) {
process.send({
......@@ -69,7 +77,9 @@ function cleanEnv() {
'ELECTRON_RUN_AS_NODE',
'PTYCWD',
'PTYPID',
'PTYSHELL'
'PTYSHELL',
'PTYCOLS',
'PTYROWS'
];
keys.forEach(function (key) {
if (process.env[key]) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册