diff --git a/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.ts b/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.ts
index 7fabfc6d86999e948ad7e91478541ffa3e94a0f0..6ebec683b8db1f3f6276a895b95b1482dbb7649a 100644
--- a/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.ts
+++ b/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.ts
@@ -14,7 +14,7 @@ import { QuickOpenModel, QuickOpenEntryGroup, QuickOpenEntry } from 'vs/base/par
import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
import { ITerminalService } from 'vs/workbench/parts/terminal/common/terminal';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
-
+import { ContributableActionProvider } from 'vs/workbench/browser/actions';
export class TerminalEntry extends QuickOpenEntryGroup {
constructor(
@@ -79,7 +79,7 @@ export class TerminalPickerHandler extends QuickOpenHandler {
return true;
});
- return TPromise.as(new QuickOpenModel(entries));
+ return TPromise.as(new QuickOpenModel(entries, new ContributableActionProvider()));
}
private getTerminals(): TerminalEntry[] {
diff --git a/src/vs/workbench/parts/terminal/electron-browser/media/configure-inverse.svg b/src/vs/workbench/parts/terminal/electron-browser/media/configure-inverse.svg
new file mode 100644
index 0000000000000000000000000000000000000000..61baaea2b8b21ee34356db99c28bb40719643392
--- /dev/null
+++ b/src/vs/workbench/parts/terminal/electron-browser/media/configure-inverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/vs/workbench/parts/terminal/electron-browser/media/configure.svg b/src/vs/workbench/parts/terminal/electron-browser/media/configure.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3dec2ba50fd1a3dfdb241d947dc9a4adb2ded64c
--- /dev/null
+++ b/src/vs/workbench/parts/terminal/electron-browser/media/configure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css b/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css
index 6e777ea549feb024aeb89487f4cc1e17530d44c0..8fc3d445adcc9ccd6fa739931f8ad0d116b90d79 100644
--- a/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css
+++ b/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css
@@ -79,4 +79,13 @@
.vs-dark .monaco-workbench.mac .panel.integrated-terminal .xterm-rows,
.hc-black .monaco-workbench.mac .panel.integrated-terminal .xterm-rows {
cursor: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAL0lEQVQoz2NgCD3x//9/BhBYBWdhgFVAiVW4JBFKGIa4AqD0//9D3pt4I4tAdAMAHTQ/j5Zom30AAAAASUVORK5CYII=') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAz0lEQVRIx2NgYGBY/R8I/vx5eelX3n82IJ9FxGf6tksvf/8FiTMQAcAGQMDvSwu09abffY8QYSAScNk45G198eX//yev73/4///701eh//kZSARckrNBRvz//+8+6ZohwCzjGNjdgQxkAg7B9WADeBjIBqtJCbhRA0YNoIkBSNmaPEMoNmA0FkYNoFKhapJ6FGyAH3nauaSmPfwI0v/3OukVi0CIZ+F25KrtYcx/CTIy0e+rC7R1Z4KMICVTQQ14feVXIbR695u14+Ir4gwAAD49E54wc1kWAAAAAElFTkSuQmCC') 2x) 5 8, text;
-}
\ No newline at end of file
+}
+
+.monaco-workbench .quick-open-terminal-configure {
+ background-image: url('configure.svg');
+}
+
+.vs-dark .monaco-workbench .quick-open-terminal-configure,
+.hc-black .monaco-workbench .quick-open-terminal-configure {
+ background-image: url('configure-inverse.svg');
+}
diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts
index a72ed6f9319d423bfbe46c1d0ae43418629b78e3..4190efec3f844db727052626d28112fbd4bdf183 100644
--- a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts
+++ b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts
@@ -17,7 +17,7 @@ import { TERMINAL_DEFAULT_SHELL_LINUX, TERMINAL_DEFAULT_SHELL_OSX, TERMINAL_DEFA
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
-import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusActiveTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, FocusTerminalAtIndexAction, SelectDefaultShellWindowsTerminalAction, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction, AllowWorkspaceShellTerminalCommand, DisallowWorkspaceShellTerminalCommand, RenameTerminalAction, SelectAllTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
+import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusActiveTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, FocusTerminalAtIndexAction, SelectDefaultShellWindowsTerminalAction, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction, AllowWorkspaceShellTerminalCommand, DisallowWorkspaceShellTerminalCommand, RenameTerminalAction, SelectAllTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction, QuickOpenActionTermContributor, QuickOpenTermAction, TERMINAL_PICKER_PREFIX } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import { Registry } from 'vs/platform/registry/common/platform';
import { ShowAllCommandsAction } from 'vs/workbench/parts/quickopen/browser/commandsHandler';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
@@ -31,8 +31,8 @@ import { registerColors } from './terminalColorRegistry';
import { NavigateUpAction, NavigateDownAction, NavigateLeftAction, NavigateRightAction } from "vs/workbench/electron-browser/actions";
import { QUICKOPEN_ACTION_ID } from "vs/workbench/browser/parts/quickopen/quickopen";
import { IQuickOpenRegistry, Extensions as QuickOpenExtensions, QuickOpenHandlerDescriptor } from 'vs/workbench/browser/quickopen';
+import { Scope, IActionBarRegistry, Extensions as ActionBarExtensions } from 'vs/workbench/browser/actions';
-export const TERMINAL_PICKER_PREFIX = 'term ';
const quickOpenRegistry = (Registry.as(QuickOpenExtensions.Quickopen));
quickOpenRegistry.registerQuickOpenHandler(
@@ -45,6 +45,11 @@ quickOpenRegistry.registerQuickOpenHandler(
)
);
+const registry = Registry.as(ActionExtensions.WorkbenchActions);
+registry.registerWorkbenchAction(new SyncActionDescriptor(QuickOpenTermAction, QuickOpenTermAction.ID, QuickOpenTermAction.LABEL), 'Quick Open Terminal');
+const actionBarRegistry = Registry.as(ActionBarExtensions.Actionbar);
+actionBarRegistry.registerActionBarContributor(Scope.VIEWER, QuickOpenActionTermContributor);
+
let configurationRegistry = Registry.as(Extensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'terminal',
diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts
index 4d3632ba2d0ee7de8f8b0e7978a2bc82ab10183a..826182206a2747bb9e19c37161c902ed24c309c5 100644
--- a/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts
+++ b/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts
@@ -18,6 +18,12 @@ import { IMessageService, Severity } from 'vs/platform/message/common/message';
import { attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
+import { ActionBarContributor } from 'vs/workbench/browser/actions';
+import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
+import { TerminalEntry } from 'vs/workbench/parts/terminal/browser/terminalQuickOpen';
+import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
+
+export const TERMINAL_PICKER_PREFIX = 'term ';
export class ToggleTerminalAction extends TogglePanelAction {
@@ -661,3 +667,77 @@ export class HideTerminalFindWidgetAction extends Action {
return TPromise.as(this.terminalService.hideFindWidget());
}
}
+
+
+export class QuickOpenActionTermContributor extends ActionBarContributor {
+
+ constructor(
+ @ITerminalService private terminalService: ITerminalService,
+ @IQuickOpenService private quickOpenService: IQuickOpenService,
+ @IInstantiationService private instantiationService: IInstantiationService
+ ) {
+ super();
+ }
+
+ public getActions(context: any): IAction[] {
+ let actions: Action[] = [];
+ if (context.element instanceof TerminalEntry) {
+ actions.push(new RenameTerminalQuickOpenAction(RenameTerminalAction.ID, RenameTerminalAction.LABEL, this.quickOpenService, this.terminalService, this.instantiationService, context.element));
+ }
+ return actions;
+ }
+
+ public hasActions(context: any): boolean {
+ return true;
+ }
+}
+
+export class QuickOpenTermAction extends Action {
+
+ public static ID = 'workbench.action.quickOpenTerm';
+ public static LABEL = nls.localize('quickOpenTerm', "Quick Open Terminal");
+
+ constructor(
+ id: string,
+ label: string,
+ @IQuickOpenService private quickOpenService: IQuickOpenService,
+ @IKeybindingService private keybindingService: IKeybindingService
+ ) {
+ super(id, label);
+ }
+
+ public run(): TPromise {
+ this.quickOpenService.show(TERMINAL_PICKER_PREFIX, null);
+
+ return TPromise.as(true);
+ }
+}
+
+export class RenameTerminalQuickOpenAction extends Action {
+
+ public static ID = 'workbench.action.terminal.renameQuickPick';
+ public static LABEL = nls.localize('workbench.action.terminal.renameQuickPick', "Rename Quick Pick");
+ private _terminal: TerminalEntry;
+
+ constructor(
+ id: string, label: string,
+ @IQuickOpenService private quickOpenService: IQuickOpenService,
+ @ITerminalService private terminalService: ITerminalService,
+ @IInstantiationService private instantiationService: IInstantiationService,
+ private terminal: TerminalEntry
+ ) {
+ super(id, label);
+ this._terminal = terminal;
+ this.class = 'quick-open-terminal-configure';
+ }
+
+ public run(): TPromise {
+ const currentTerminal = this.terminalService.getActiveInstance();
+ this.terminalService.setActiveInstanceByIndex(parseInt(this._terminal.getLabel().split(':')[0], 10) - 1);
+ this.instantiationService.createInstance(RenameTerminalAction, RenameTerminalAction.ID, RenameTerminalAction.LABEL).run().then(result => {
+ this.quickOpenService.show(TERMINAL_PICKER_PREFIX, null);
+ });
+ this.terminalService.setActiveInstance(currentTerminal);
+ return TPromise.as(null);
+ }
+}
\ No newline at end of file