提交 6d29f144 编写于 作者: D Daniel Imms

Move preparePathForTerminal to terminalEnvironment

上级 29a45bee
......@@ -157,3 +157,27 @@ function _sanitizeCwd(cwd: string): string {
}
return cwd;
}
/**
* Adds quotes to a path if it contains whitespaces
*/
export function preparePathForTerminal(path: string): string {
if (platform.isWindows) {
if (/\s+/.test(path)) {
return `"${path}"`;
}
return path;
}
path = path.replace(/(%5C|\\)/g, '\\\\');
const charsToEscape = [
' ', '\'', '"', '?', ':', ';', '!', '*', '(', ')', '{', '}', '[', ']'
];
for (let i = 0; i < path.length; i++) {
const indexOfChar = charsToEscape.indexOf(path.charAt(i));
if (indexOfChar >= 0) {
path = `${path.substring(0, i)}\\${path.charAt(i)}${path.substring(i + 1)}`;
i++; // Skip char due to escape char being added
}
}
return path;
}
......@@ -6,6 +6,7 @@
import * as dom from 'vs/base/browser/dom';
import * as nls from 'vs/nls';
import * as platform from 'vs/base/common/platform';
import * as terminalEnvironment from 'vs/workbench/parts/terminal/electron-browser/terminalEnvironment';
import { Action, IAction } from 'vs/base/common/actions';
import { IActionItem, Separator } from 'vs/base/browser/ui/actionbar/actionbar';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
......@@ -288,7 +289,7 @@ export class TerminalPanel extends Panel {
}
const terminal = this._terminalService.getActiveInstance();
terminal.sendText(TerminalPanel.preparePathForTerminal(path), false);
terminal.sendText(terminalEnvironment.preparePathForTerminal(path), false);
}
}));
}
......@@ -309,30 +310,6 @@ export class TerminalPanel extends Panel {
// dom.toggleClass(this._parentDomElement, 'enable-ligatures', this._terminalService.configHelper.config.fontLigatures);
this.layout(new dom.Dimension(this._parentDomElement.offsetWidth, this._parentDomElement.offsetHeight));
}
/**
* Adds quotes to a path if it contains whitespaces
*/
public static preparePathForTerminal(path: string): string {
if (platform.isWindows) {
if (/\s+/.test(path)) {
return `"${path}"`;
}
return path;
}
path = path.replace(/(%5C|\\)/g, '\\\\');
const charsToEscape = [
' ', '\'', '"', '?', ':', ';', '!', '*', '(', ')', '{', '}', '[', ']'
];
for (let i = 0; i < path.length; i++) {
const indexOfChar = charsToEscape.indexOf(path.charAt(i));
if (indexOfChar >= 0) {
path = `${path.substring(0, i)}\\${path.charAt(i)}${path.substring(i + 1)}`;
i++; // Skip char due to escape char being added
}
}
return path;
}
}
registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
......
......@@ -165,4 +165,14 @@ suite('Workbench - TerminalEnvironment', () => {
assertPathsMatch(terminalEnvironment.getCwd({ executable: null, args: [], ignoreConfigurationCwd: true }, Uri.file('/bar'), configHelper), '/bar');
});
});
test('preparePathForTerminal', function () {
if (platform.isWindows) {
assert.equal(terminalEnvironment.preparePathForTerminal('C:\\foo'), 'C:\\foo');
assert.equal(terminalEnvironment.preparePathForTerminal('C:\\foo bar'), '"C:\\foo bar"');
return;
}
assert.equal(terminalEnvironment.preparePathForTerminal('/a/\\foo bar"\'? ;\'?? :'), '/a/\\\\foo\\ bar\\"\\\'\\?\\ \\;\\\'\\?\\?\\ \\ \\:');
assert.equal(terminalEnvironment.preparePathForTerminal('/\\\'"?:;!*(){}[]'), '/\\\\\\\'\\"\\?\\:\\;\\!\\*\\(\\)\\{\\}\\[\\]');
});
});
\ No newline at end of file
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { TerminalPanel } from 'vs/workbench/parts/terminal/electron-browser/terminalPanel';
import * as platform from 'vs/base/common/platform';
suite('Workbench - TerminalPanel', () => {
test('preparePathForTerminal', function () {
if (platform.isWindows) {
assert.equal(TerminalPanel.preparePathForTerminal('C:\\foo'), 'C:\\foo');
assert.equal(TerminalPanel.preparePathForTerminal('C:\\foo bar'), '"C:\\foo bar"');
return;
}
assert.equal(TerminalPanel.preparePathForTerminal('/a/\\foo bar"\'? ;\'?? :'), '/a/\\\\foo\\ bar\\"\\\'\\?\\ \\;\\\'\\?\\?\\ \\ \\:');
assert.equal(TerminalPanel.preparePathForTerminal('/\\\'"?:;!*(){}[]'), '/\\\\\\\'\\"\\?\\:\\;\\!\\*\\(\\)\\{\\}\\[\\]');
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册