From 2695f193b212025b65473f02d997cf4c3b98cbdb Mon Sep 17 00:00:00 2001 From: Peter Flannery Date: Fri, 26 Feb 2016 14:42:46 +0000 Subject: [PATCH 1/8] adds terminal command configuration for windows and linux --- .../electron-browser/terminal.contribution.ts | 33 ++++++++++ .../electron-browser/terminalService.ts | 60 +++++++++++++++++-- 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts index fd86b17fb405d..49cddc460d521 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts @@ -19,6 +19,39 @@ import {ITerminalService} from 'vs/workbench/parts/execution/common/execution'; import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; +import {Extensions, IConfigurationRegistry} from 'vs/platform/configuration/common/configurationRegistry'; + +let configurationRegistry = Registry.as(Extensions.Configuration); +configurationRegistry.registerConfiguration({ + 'id': 'terminal', + 'order': 100, + 'title': nls.localize('terminalConfigurationTitle', "Terminal configuration"), + 'type': 'object', + 'properties': { + 'terminal.windows': { + 'description': nls.localize('terminal.windows', "Windows specific settings."), + 'type': 'object', + 'properties': { + 'exec': { + 'type': 'string', + 'description': nls.localize('terminal.windows.exec', "Customizes which terminal to run."), + 'default': 'cmd' + } + } + }, + 'terminal.linux': { + 'description': nls.localize('terminal.linux', "Linux specific settings."), + 'type': 'object', + 'properties': { + 'exec': { + 'type': 'string', + 'description': nls.localize('terminal.linux.exec', "Customizes which terminal to run."), + 'default': 'x-terminal-emulator' + } + } + } + } +}); export class OpenConsoleAction extends Action { diff --git a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts index 1fc0893fcd1b2..54ea05fb18461 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts @@ -9,7 +9,6 @@ import uri from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {ITerminalService} from 'vs/workbench/parts/execution/common/execution'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; -import {IMessageService} from 'vs/platform/message/common/message'; import cp = require('child_process'); import processes = require('vs/base/node/processes'); @@ -18,13 +17,35 @@ export class WinTerminalService implements ITerminalService { public serviceId = ITerminalService; constructor( - @IConfigurationService private _configurationService: IConfigurationService, - @IMessageService private _messageService: IMessageService + @IConfigurationService private _configurationService: IConfigurationService ) { } public openTerminal(path: string): void { - cp.spawn(processes.getWindowsShell(), ['/c', 'start', '/wait'], { cwd: path }); + this._configurationService.loadConfiguration().done(configuration => { + return new Promise((success, failed) => { + this.spawnTerminal( + cp, + configuration, + processes.getWindowsShell(), + path, + success, + err => { + errors.onUnexpectedError(err); + failed(err); + } + ); + }); + }, errors.onUnexpectedError); + } + + private spawnTerminal(spawner, configuration, command: string, path: string, onExit, onError) { + let terminalConfig = configuration.terminal; + let cmdArgs = ['/c', 'start', '/wait', terminalConfig.windows.exec]; + + let child = spawner.spawn(command, cmdArgs, { cwd: path }); + child.on('error', onError); + child.on('exit', onExit); } } @@ -49,14 +70,41 @@ export class MacTerminalService implements ITerminalService { child.on('exit', (code: number) => { c(code === 0 ? 'iterm.scpt' : 'terminal.scpt'); }); - }).then(name => uri.parse(require.toUrl(`vs/workbench/parts/execution/electron-browser/${ name }`)).fsPath); + }).then(name => uri.parse(require.toUrl(`vs/workbench/parts/execution/electron-browser/${name}`)).fsPath); } } export class LinuxTerminalService implements ITerminalService { public serviceId = ITerminalService; + constructor( + @IConfigurationService private _configurationService: IConfigurationService + ) { } + + public openTerminal(path: string): void { - cp.spawn('x-terminal-emulator', [], { cwd: path }); + this._configurationService.loadConfiguration().done(configuration => { + return new Promise((success, failed) => { + this.spawnTerminal( + cp, + configuration, + path, + success, + err => { + errors.onUnexpectedError(err); + failed(err); + } + ); + }); + }, errors.onUnexpectedError); } + + private spawnTerminal(spawner, configuration, path: string, onExit, onError) { + let terminalConfig = configuration.terminal; + + const child = spawner.spawn(terminalConfig.linux.exec, [], { cwd: path }); + child.on('error', onError); + child.on('exit', onExit); + } + } From abe8d1260217c2b167f39c31ea72efaf21334f18 Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 21 Mar 2016 05:08:07 +0000 Subject: [PATCH 2/8] makes gnome-terminal default when running on gnome desktop - ensures terminal default is used when the terminal setting is removed --- src/vs/workbench/parts/execution/common/terminal.ts | 8 ++++++++ .../execution/electron-browser/terminal.contribution.ts | 5 +++-- .../parts/execution/electron-browser/terminalService.ts | 8 +++++--- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 src/vs/workbench/parts/execution/common/terminal.ts diff --git a/src/vs/workbench/parts/execution/common/terminal.ts b/src/vs/workbench/parts/execution/common/terminal.ts new file mode 100644 index 0000000000000..25d5cf84cbf78 --- /dev/null +++ b/src/vs/workbench/parts/execution/common/terminal.ts @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +export const defaultLinuxTerm = process.env.DESKTOP_SESSION === 'gnome' ? + 'gnome-terminal' : 'x-terminal-emulator'; + +export const defaultWindowsTerm = 'cmd'; \ No newline at end of file diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts index 49cddc460d521..3585107ce7a76 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts @@ -20,6 +20,7 @@ import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; import {Extensions, IConfigurationRegistry} from 'vs/platform/configuration/common/configurationRegistry'; +import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; let configurationRegistry = Registry.as(Extensions.Configuration); configurationRegistry.registerConfiguration({ @@ -35,7 +36,7 @@ configurationRegistry.registerConfiguration({ 'exec': { 'type': 'string', 'description': nls.localize('terminal.windows.exec', "Customizes which terminal to run."), - 'default': 'cmd' + 'default': defaultWindowsTerm } } }, @@ -46,7 +47,7 @@ configurationRegistry.registerConfiguration({ 'exec': { 'type': 'string', 'description': nls.localize('terminal.linux.exec', "Customizes which terminal to run."), - 'default': 'x-terminal-emulator' + 'default': defaultLinuxTerm } } } diff --git a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts index 54ea05fb18461..8d0fc12207f99 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts @@ -9,6 +9,7 @@ import uri from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {ITerminalService} from 'vs/workbench/parts/execution/common/execution'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; +import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; import cp = require('child_process'); import processes = require('vs/base/node/processes'); @@ -41,7 +42,8 @@ export class WinTerminalService implements ITerminalService { private spawnTerminal(spawner, configuration, command: string, path: string, onExit, onError) { let terminalConfig = configuration.terminal; - let cmdArgs = ['/c', 'start', '/wait', terminalConfig.windows.exec]; + let exec = terminalConfig.windows.exec || defaultWindowsTerm; + let cmdArgs = ['/c', 'start', '/wait', exec]; let child = spawner.spawn(command, cmdArgs, { cwd: path }); child.on('error', onError); @@ -101,8 +103,8 @@ export class LinuxTerminalService implements ITerminalService { private spawnTerminal(spawner, configuration, path: string, onExit, onError) { let terminalConfig = configuration.terminal; - - const child = spawner.spawn(terminalConfig.linux.exec, [], { cwd: path }); + let exec = terminalConfig.linux.exec || defaultLinuxTerm; + const child = spawner.spawn(exec, [], { cwd: path }); child.on('error', onError); child.on('exit', onExit); } From aa17b93740fe79921c7b2b5cc2f689148e237e7e Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 21 Mar 2016 16:33:01 +0000 Subject: [PATCH 3/8] adds debian check for default terminal --- .../workbench/parts/execution/common/terminal.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/parts/execution/common/terminal.ts b/src/vs/workbench/parts/execution/common/terminal.ts index 25d5cf84cbf78..13860a1141124 100644 --- a/src/vs/workbench/parts/execution/common/terminal.ts +++ b/src/vs/workbench/parts/execution/common/terminal.ts @@ -2,7 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export const defaultLinuxTerm = process.env.DESKTOP_SESSION === 'gnome' ? - 'gnome-terminal' : 'x-terminal-emulator'; +import fs = require('fs'); +import env = require('vs/base/common/platform'); + +export let defaultLinuxTerm = 'x-terminal-emulator'; + +// if we're not on debian and using gnome then +// set default to gnome-terminal +if (env.isLinux + && fs.existsSync('/etc/debian_version') === false + && process.env.DESKTOP_SESSION === 'gnome') { + defaultLinuxTerm = 'gnome-terminal'; +} export const defaultWindowsTerm = 'cmd'; \ No newline at end of file From aa3f8d74fb83367f8c9e56cd9bd27624d866945d Mon Sep 17 00:00:00 2001 From: pflannery Date: Wed, 23 Mar 2016 17:10:21 +0000 Subject: [PATCH 4/8] adds TerminalService tests --- .../test/browser/terminalService.test.ts | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/vs/workbench/parts/execution/test/browser/terminalService.test.ts diff --git a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts new file mode 100644 index 0000000000000..a83a0e17e13c5 --- /dev/null +++ b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts @@ -0,0 +1,129 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import {equal} from 'assert'; +import {WinTerminalService, LinuxTerminalService} from 'vs/workbench/parts/execution/electron-browser/terminalService'; +import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; + +suite('Execution - TerminalService', () => { + let mockOnExit; + let mockOnError; + let mockConfig; + + setup(() => { + mockConfig = { + terminal: { + windows: { + exec: 'testWindowsShell' + }, + linux: { + exec: 'testLinuxShell' + } + } + }; + mockOnExit = s => s; + mockOnError = e => e; + }); + + test("WinTerminalService - uses terminal from configuration", done => { + let testShell = 'cmd'; + let testCwd = 'path/to/workspace'; + let mockSpawner = { + spawn: (command, args, opts) => { + // assert + equal(command, testShell, 'shell should equal expected'); + equal(args[args.length - 1], mockConfig.terminal.windows.exec, 'terminal should equal expected') + equal(opts.cwd, testCwd, 'opts.cwd should equal expected'); + done(); + return { + on: (evt) => evt + } + } + }; + let testService = new WinTerminalService(mockConfig); + (testService).spawnTerminal( + mockSpawner, + mockConfig, + testShell, + testCwd, + mockOnExit, + mockOnError + ); + }); + + test("WinTerminalService - uses default terminal when configuration.terminal.windows.exec is undefined", done => { + let testShell = 'cmd'; + let testCwd = 'path/to/workspace'; + let mockSpawner = { + spawn: (command, args, opts) => { + // assert + equal(args[args.length - 1], defaultWindowsTerm, 'terminal should equal expected') + done(); + return { + on: (evt) => evt + } + } + }; + mockConfig.terminal.windows.exec = undefined; + let testService = new WinTerminalService(mockConfig); + (testService).spawnTerminal( + mockSpawner, + mockConfig, + testShell, + testCwd, + mockOnExit, + mockOnError + ); + }); + + test("LinuxTerminalService - uses terminal from configuration", done => { + let testCwd = 'path/to/workspace'; + let mockSpawner = { + spawn: (command, args, opts) => { + // assert + equal(command, mockConfig.terminal.linux.exec, 'terminal should equal expected'); + equal(opts.cwd, testCwd, 'opts.cwd should equal expected'); + done(); + return { + on: (evt) => evt + } + } + }; + let testService = new LinuxTerminalService(mockConfig); + (testService).spawnTerminal( + mockSpawner, + mockConfig, + testCwd, + mockOnExit, + mockOnError + ); + }); + + test("LinuxTerminalService - uses default terminal when configuration.terminal.linux.exec is undefined", done => { + let testCwd = 'path/to/workspace'; + let mockSpawner = { + spawn: (command, args, opts) => { + // assert + equal(command, defaultLinuxTerm, 'terminal should equal expected') + done(); + return { + on: (evt) => evt + } + } + }; + mockConfig.terminal.linux.exec = undefined; + let testService = new LinuxTerminalService(mockConfig); + (testService).spawnTerminal( + mockSpawner, + mockConfig, + testCwd, + mockOnExit, + mockOnError + ); + }); + +}); \ No newline at end of file From c84a7156acdfc815e1670b3e32ac07d6e2e7f8a9 Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 18 Apr 2016 19:38:07 +0100 Subject: [PATCH 5/8] Response to ALL_CAPS_NAMING and code org. --- .../execution/electron-browser/terminal.contribution.ts | 6 +++--- .../execution/{common => electron-browser}/terminal.ts | 6 +++--- .../parts/execution/electron-browser/terminalService.ts | 6 +++--- .../parts/execution/test/browser/terminalService.test.ts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) rename src/vs/workbench/parts/execution/{common => electron-browser}/terminal.ts (82%) diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts index 3585107ce7a76..ccc14d3039ba3 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts @@ -20,7 +20,7 @@ import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; import {Extensions, IConfigurationRegistry} from 'vs/platform/configuration/common/configurationRegistry'; -import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; +import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; let configurationRegistry = Registry.as(Extensions.Configuration); configurationRegistry.registerConfiguration({ @@ -36,7 +36,7 @@ configurationRegistry.registerConfiguration({ 'exec': { 'type': 'string', 'description': nls.localize('terminal.windows.exec', "Customizes which terminal to run."), - 'default': defaultWindowsTerm + 'default': DEFAILT_WINDOWS_TERM } } }, @@ -47,7 +47,7 @@ configurationRegistry.registerConfiguration({ 'exec': { 'type': 'string', 'description': nls.localize('terminal.linux.exec', "Customizes which terminal to run."), - 'default': defaultLinuxTerm + 'default': DEFAULT_LINUX_TERM } } } diff --git a/src/vs/workbench/parts/execution/common/terminal.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.ts similarity index 82% rename from src/vs/workbench/parts/execution/common/terminal.ts rename to src/vs/workbench/parts/execution/electron-browser/terminal.ts index 13860a1141124..a577ac0ed45cc 100644 --- a/src/vs/workbench/parts/execution/common/terminal.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.ts @@ -5,14 +5,14 @@ import fs = require('fs'); import env = require('vs/base/common/platform'); -export let defaultLinuxTerm = 'x-terminal-emulator'; +export let DEFAULT_LINUX_TERM = 'x-terminal-emulator'; // if we're not on debian and using gnome then // set default to gnome-terminal if (env.isLinux && fs.existsSync('/etc/debian_version') === false && process.env.DESKTOP_SESSION === 'gnome') { - defaultLinuxTerm = 'gnome-terminal'; + DEFAULT_LINUX_TERM = 'gnome-terminal'; } -export const defaultWindowsTerm = 'cmd'; \ No newline at end of file +export const DEFAILT_WINDOWS_TERM = 'cmd'; \ No newline at end of file diff --git a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts index 8d0fc12207f99..6cf38ff1c915d 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts @@ -9,7 +9,7 @@ import uri from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {ITerminalService} from 'vs/workbench/parts/execution/common/execution'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; -import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; +import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; import cp = require('child_process'); import processes = require('vs/base/node/processes'); @@ -42,7 +42,7 @@ export class WinTerminalService implements ITerminalService { private spawnTerminal(spawner, configuration, command: string, path: string, onExit, onError) { let terminalConfig = configuration.terminal; - let exec = terminalConfig.windows.exec || defaultWindowsTerm; + let exec = terminalConfig.windows.exec || DEFAILT_WINDOWS_TERM; let cmdArgs = ['/c', 'start', '/wait', exec]; let child = spawner.spawn(command, cmdArgs, { cwd: path }); @@ -103,7 +103,7 @@ export class LinuxTerminalService implements ITerminalService { private spawnTerminal(spawner, configuration, path: string, onExit, onError) { let terminalConfig = configuration.terminal; - let exec = terminalConfig.linux.exec || defaultLinuxTerm; + let exec = terminalConfig.linux.exec || DEFAULT_LINUX_TERM; const child = spawner.spawn(exec, [], { cwd: path }); child.on('error', onError); child.on('exit', onExit); diff --git a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts index a83a0e17e13c5..c5af7ef8cf23e 100644 --- a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts +++ b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts @@ -7,7 +7,7 @@ import {equal} from 'assert'; import {WinTerminalService, LinuxTerminalService} from 'vs/workbench/parts/execution/electron-browser/terminalService'; -import {defaultWindowsTerm, defaultLinuxTerm} from 'vs/workbench/parts/execution/common/terminal'; +import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; suite('Execution - TerminalService', () => { let mockOnExit; @@ -61,7 +61,7 @@ suite('Execution - TerminalService', () => { let mockSpawner = { spawn: (command, args, opts) => { // assert - equal(args[args.length - 1], defaultWindowsTerm, 'terminal should equal expected') + equal(args[args.length - 1], DEFAILT_WINDOWS_TERM, 'terminal should equal expected') done(); return { on: (evt) => evt @@ -108,7 +108,7 @@ suite('Execution - TerminalService', () => { let mockSpawner = { spawn: (command, args, opts) => { // assert - equal(command, defaultLinuxTerm, 'terminal should equal expected') + equal(command, DEFAULT_LINUX_TERM, 'terminal should equal expected') done(); return { on: (evt) => evt From ef72b65ae3b2dd3c28925a1117eeb8a01a27cc89 Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 18 Apr 2016 20:00:27 +0100 Subject: [PATCH 6/8] Response to typo --- .../parts/execution/electron-browser/terminal.contribution.ts | 4 ++-- src/vs/workbench/parts/execution/electron-browser/terminal.ts | 2 +- .../parts/execution/electron-browser/terminalService.ts | 4 ++-- .../parts/execution/test/browser/terminalService.test.ts | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts index ccc14d3039ba3..01a254cca2501 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts @@ -20,7 +20,7 @@ import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; import {Extensions, IConfigurationRegistry} from 'vs/platform/configuration/common/configurationRegistry'; -import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; +import {DEFAULT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; let configurationRegistry = Registry.as(Extensions.Configuration); configurationRegistry.registerConfiguration({ @@ -36,7 +36,7 @@ configurationRegistry.registerConfiguration({ 'exec': { 'type': 'string', 'description': nls.localize('terminal.windows.exec', "Customizes which terminal to run."), - 'default': DEFAILT_WINDOWS_TERM + 'default': DEFAULT_WINDOWS_TERM } } }, diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.ts index a577ac0ed45cc..76c016508d020 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.ts @@ -15,4 +15,4 @@ if (env.isLinux DEFAULT_LINUX_TERM = 'gnome-terminal'; } -export const DEFAILT_WINDOWS_TERM = 'cmd'; \ No newline at end of file +export const DEFAULT_WINDOWS_TERM = 'cmd'; \ No newline at end of file diff --git a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts index 6cf38ff1c915d..0800472fcd4e7 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts @@ -9,7 +9,7 @@ import uri from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {ITerminalService} from 'vs/workbench/parts/execution/common/execution'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; -import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; +import {DEFAULT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; import cp = require('child_process'); import processes = require('vs/base/node/processes'); @@ -42,7 +42,7 @@ export class WinTerminalService implements ITerminalService { private spawnTerminal(spawner, configuration, command: string, path: string, onExit, onError) { let terminalConfig = configuration.terminal; - let exec = terminalConfig.windows.exec || DEFAILT_WINDOWS_TERM; + let exec = terminalConfig.windows.exec || DEFAULT_WINDOWS_TERM; let cmdArgs = ['/c', 'start', '/wait', exec]; let child = spawner.spawn(command, cmdArgs, { cwd: path }); diff --git a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts index c5af7ef8cf23e..2181861805393 100644 --- a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts +++ b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts @@ -7,7 +7,7 @@ import {equal} from 'assert'; import {WinTerminalService, LinuxTerminalService} from 'vs/workbench/parts/execution/electron-browser/terminalService'; -import {DEFAILT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; +import {DEFAULT_WINDOWS_TERM, DEFAULT_LINUX_TERM} from 'vs/workbench/parts/execution/electron-browser/terminal'; suite('Execution - TerminalService', () => { let mockOnExit; @@ -61,7 +61,7 @@ suite('Execution - TerminalService', () => { let mockSpawner = { spawn: (command, args, opts) => { // assert - equal(args[args.length - 1], DEFAILT_WINDOWS_TERM, 'terminal should equal expected') + equal(args[args.length - 1], DEFAULT_WINDOWS_TERM, 'terminal should equal expected') done(); return { on: (evt) => evt From 5d46df9c14e9ea09a9e4ba7fa70c965f9e2751e0 Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 18 Apr 2016 20:16:49 +0100 Subject: [PATCH 7/8] Response to configuration property name change --- .../electron-browser/terminal.contribution.ts | 20 +++++++------------ .../electron-browser/terminalService.ts | 8 ++++---- .../test/browser/terminalService.test.ts | 20 +++++++++---------- 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts index 01a254cca2501..84899ae3b2109 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts @@ -29,24 +29,18 @@ configurationRegistry.registerConfiguration({ 'title': nls.localize('terminalConfigurationTitle', "Terminal configuration"), 'type': 'object', 'properties': { - 'terminal.windows': { - 'description': nls.localize('terminal.windows', "Windows specific settings."), + 'terminal.external': { + 'description': nls.localize('terminal.external', "External terminal settings."), 'type': 'object', 'properties': { - 'exec': { + 'windowsExec': { 'type': 'string', - 'description': nls.localize('terminal.windows.exec', "Customizes which terminal to run."), + 'description': nls.localize('terminal.external.windowsExec', "Customizes which terminal to run on Windows."), 'default': DEFAULT_WINDOWS_TERM - } - } - }, - 'terminal.linux': { - 'description': nls.localize('terminal.linux', "Linux specific settings."), - 'type': 'object', - 'properties': { - 'exec': { + }, + 'linuxExec': { 'type': 'string', - 'description': nls.localize('terminal.linux.exec', "Customizes which terminal to run."), + 'description': nls.localize('terminal.external.linuxExec', "Customizes which terminal to on Linux."), 'default': DEFAULT_LINUX_TERM } } diff --git a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts index 0800472fcd4e7..61640dc6a5d1b 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/execution/electron-browser/terminalService.ts @@ -41,8 +41,8 @@ export class WinTerminalService implements ITerminalService { } private spawnTerminal(spawner, configuration, command: string, path: string, onExit, onError) { - let terminalConfig = configuration.terminal; - let exec = terminalConfig.windows.exec || DEFAULT_WINDOWS_TERM; + let terminalConfig = configuration.terminal.external; + let exec = terminalConfig.windowsExec || DEFAULT_WINDOWS_TERM; let cmdArgs = ['/c', 'start', '/wait', exec]; let child = spawner.spawn(command, cmdArgs, { cwd: path }); @@ -102,8 +102,8 @@ export class LinuxTerminalService implements ITerminalService { } private spawnTerminal(spawner, configuration, path: string, onExit, onError) { - let terminalConfig = configuration.terminal; - let exec = terminalConfig.linux.exec || DEFAULT_LINUX_TERM; + let terminalConfig = configuration.terminal.external; + let exec = terminalConfig.linuxExec || DEFAULT_LINUX_TERM; const child = spawner.spawn(exec, [], { cwd: path }); child.on('error', onError); child.on('exit', onExit); diff --git a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts index 2181861805393..49713dc1f42ab 100644 --- a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts +++ b/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts @@ -17,11 +17,9 @@ suite('Execution - TerminalService', () => { setup(() => { mockConfig = { terminal: { - windows: { - exec: 'testWindowsShell' - }, - linux: { - exec: 'testLinuxShell' + external: { + windowsExec: 'testWindowsShell', + linuxExec: 'testLinuxShell' } } }; @@ -36,7 +34,7 @@ suite('Execution - TerminalService', () => { spawn: (command, args, opts) => { // assert equal(command, testShell, 'shell should equal expected'); - equal(args[args.length - 1], mockConfig.terminal.windows.exec, 'terminal should equal expected') + equal(args[args.length - 1], mockConfig.terminal.external.windowsExec, 'terminal should equal expected') equal(opts.cwd, testCwd, 'opts.cwd should equal expected'); done(); return { @@ -55,7 +53,7 @@ suite('Execution - TerminalService', () => { ); }); - test("WinTerminalService - uses default terminal when configuration.terminal.windows.exec is undefined", done => { + test("WinTerminalService - uses default terminal when configuration.terminal.external.windowsExec is undefined", done => { let testShell = 'cmd'; let testCwd = 'path/to/workspace'; let mockSpawner = { @@ -68,7 +66,7 @@ suite('Execution - TerminalService', () => { } } }; - mockConfig.terminal.windows.exec = undefined; + mockConfig.terminal.external.windowsExec = undefined; let testService = new WinTerminalService(mockConfig); (testService).spawnTerminal( mockSpawner, @@ -85,7 +83,7 @@ suite('Execution - TerminalService', () => { let mockSpawner = { spawn: (command, args, opts) => { // assert - equal(command, mockConfig.terminal.linux.exec, 'terminal should equal expected'); + equal(command, mockConfig.terminal.external.linuxExec, 'terminal should equal expected'); equal(opts.cwd, testCwd, 'opts.cwd should equal expected'); done(); return { @@ -103,7 +101,7 @@ suite('Execution - TerminalService', () => { ); }); - test("LinuxTerminalService - uses default terminal when configuration.terminal.linux.exec is undefined", done => { + test("LinuxTerminalService - uses default terminal when configuration.terminal.external.linuxExec is undefined", done => { let testCwd = 'path/to/workspace'; let mockSpawner = { spawn: (command, args, opts) => { @@ -115,7 +113,7 @@ suite('Execution - TerminalService', () => { } } }; - mockConfig.terminal.linux.exec = undefined; + mockConfig.terminal.external.linuxExec = undefined; let testService = new LinuxTerminalService(mockConfig); (testService).spawnTerminal( mockSpawner, From 58317c2f7d66505b081754b0643ac0a8bf0bcfce Mon Sep 17 00:00:00 2001 From: pflannery Date: Mon, 18 Apr 2016 20:27:49 +0100 Subject: [PATCH 8/8] Response to move test to electron-browser folder --- .../test/{browser => electron-browser}/terminalService.test.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/vs/workbench/parts/execution/test/{browser => electron-browser}/terminalService.test.ts (100%) diff --git a/src/vs/workbench/parts/execution/test/browser/terminalService.test.ts b/src/vs/workbench/parts/execution/test/electron-browser/terminalService.test.ts similarity index 100% rename from src/vs/workbench/parts/execution/test/browser/terminalService.test.ts rename to src/vs/workbench/parts/execution/test/electron-browser/terminalService.test.ts