提交 9b4aa065 编写于 作者: B Benjamin Pasero

Open: Cmd + click opens in new window (fixes #6956)

上级 4c813d8b
......@@ -13,7 +13,7 @@ import {EventType} from 'vs/base/common/events';
import types = require('vs/base/common/types');
import errors = require('vs/base/common/errors');
import uuid = require('vs/base/common/uuid');
import {IQuickNavigateConfiguration, IAutoFocus, IContext, IModel, Mode} from 'vs/base/parts/quickopen/common/quickOpen';
import {IQuickNavigateConfiguration, IAutoFocus, IEntryRunContext, IModel, Mode} from 'vs/base/parts/quickopen/common/quickOpen';
import {Filter, Renderer, DataSource, IModelProvider, AccessibilityProvider} from 'vs/base/parts/quickopen/browser/quickOpenViewer';
import {Dimension, Builder, $} from 'vs/base/browser/builder';
import {ISelectionEvent, IFocusEvent, ITree, ContextMenuEvent} from 'vs/base/parts/tree/browser/tree';
......@@ -25,7 +25,7 @@ import {StandardKeyboardEvent} from 'vs/base/browser/keyboardEvent';
import {DefaultController, ClickBehavior} from 'vs/base/parts/tree/browser/treeDefaults';
import DOM = require('vs/base/browser/dom');
import {IActionProvider} from 'vs/base/parts/tree/browser/actionsRenderer';
import {KeyCode} from 'vs/base/common/keyCodes';
import {KeyCode, KeyMod} from 'vs/base/common/keyCodes';
import {IDisposable, dispose} from 'vs/base/common/lifecycle';
import {ScrollbarVisibility} from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';
......@@ -395,7 +395,7 @@ export class QuickOpenWidget implements IModelProvider {
// ARIA
this.inputElement.setAttribute('aria-activedescendant', this.treeElement.getAttribute('aria-activedescendant'));
const context: IContext = { event: event, quickNavigateConfiguration: this.quickNavigateConfiguration };
const context: IEntryRunContext = { event: event, keymods: this.extractKeyMods(event), quickNavigateConfiguration: this.quickNavigateConfiguration };
this.model.runner.run(value, Mode.PREVIEW, context);
}
......@@ -404,7 +404,7 @@ export class QuickOpenWidget implements IModelProvider {
// Trigger open of element on selection
if (this.isVisible()) {
const context: IContext = { event: event, quickNavigateConfiguration: this.quickNavigateConfiguration };
const context: IEntryRunContext = { event: event, keymods: this.extractKeyMods(event), quickNavigateConfiguration: this.quickNavigateConfiguration };
hide = this.model.runner.run(value, Mode.OPEN, context);
}
......@@ -422,6 +422,12 @@ export class QuickOpenWidget implements IModelProvider {
}
}
private extractKeyMods(event: any): number[] {
const isCtrlCmd = event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey)));
return isCtrlCmd ? [KeyMod.CtrlCmd] : [];
}
public show(prefix: string, options?: IShowOptions): void;
public show(input: IModel<any>, options?: IShowOptions): void;
public show(param: any, options?: IShowOptions): void {
......
......@@ -41,8 +41,9 @@ export enum Mode {
OPEN
}
export interface IContext {
export interface IEntryRunContext {
event: any;
keymods: number[];
quickNavigateConfiguration: IQuickNavigateConfiguration;
}
......@@ -71,7 +72,7 @@ export interface IAccessiblityProvider<T> {
}
export interface IRunner<T> {
run(entry: T, mode: Mode, context: IContext): boolean;
run(entry: T, mode: Mode, context: IEntryRunContext): boolean;
}
export interface IModel<T> {
......
......@@ -5,7 +5,7 @@
import { IDisposable } from 'vs/base/common/lifecycle';
import { PagedModel } from 'vs/base/common/paging';
import { Mode, IModel, IDataSource, IRenderer, IRunner, IContext } from 'vs/base/parts/quickopen/common/quickOpen';
import { Mode, IModel, IDataSource, IRenderer, IRunner, IEntryRunContext } from 'vs/base/parts/quickopen/common/quickOpen';
interface IStubTemplateData<T> {
data: T;
......@@ -80,7 +80,7 @@ class PagedRunner<T> implements IRunner<IStub> {
private runner: IRunner<T>
) {}
run({ index }: IStub, mode: Mode, context: IContext): boolean {
run({ index }: IStub, mode: Mode, context: IEntryRunContext): boolean {
if (this.model.isResolved(index)) {
return this.runner.run(this.model.get(index), mode, context);
}
......
......@@ -11,7 +11,7 @@ import labels = require('vs/base/common/labels');
import URI from 'vs/base/common/uri';
import errors = require('vs/base/common/errors');
import strings = require('vs/base/common/strings');
import {IAutoFocus, Mode, IContext} from 'vs/base/parts/quickopen/common/quickOpen';
import {IAutoFocus, Mode, IEntryRunContext} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenModel, QuickOpenEntry, QuickOpenEntryGroup} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import scorer = require('vs/base/common/scorer');
import {QuickOpenHandler} from 'vs/workbench/browser/quickopen';
......@@ -65,7 +65,7 @@ export class EditorPickerEntry extends QuickOpenEntryGroup {
return this._group.isPreview(this.editor) ? 'editor-preview' : '';
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
return this.runOpen(context);
}
......@@ -73,7 +73,7 @@ export class EditorPickerEntry extends QuickOpenEntryGroup {
return super.run(mode, context);
}
private runOpen(context: IContext): boolean {
private runOpen(context: IEntryRunContext): boolean {
this.editorService.openEditor(this.editor, null, this.stacks.positionOfGroup(this.group)).done(null, errors.onUnexpectedError);
return true;
......
......@@ -14,11 +14,12 @@ import URI from 'vs/base/common/uri';
import {IDisposable} from 'vs/base/common/lifecycle';
import labels = require('vs/base/common/labels');
import {EventType} from 'vs/base/common/events';
import {Mode, IContext} from 'vs/base/parts/quickopen/common/quickOpen';
import {Mode, IEntryRunContext} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntry, QuickOpenModel, IHighlight} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {EditorInput, getUntitledOrFileResource} from 'vs/workbench/common/editor';
import {IEditorRegistry, Extensions} from 'vs/workbench/browser/parts/editor/baseEditor';
import {EditorQuickOpenEntry} from 'vs/workbench/browser/quickopen';
import {KeyMod} from 'vs/base/common/keyCodes';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace';
......@@ -90,11 +91,9 @@ export class EditorHistoryEntry extends EditorQuickOpenEntry {
return this.input.matches(input);
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
let event = context.event;
let ctrlMetaKeyPressed = event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey)));
let sideBySide = !context.quickNavigateConfiguration && ctrlMetaKeyPressed;
let sideBySide = !context.quickNavigateConfiguration && context.keymods.indexOf(KeyMod.CtrlCmd) >= 0;
this.editorService.openEditor(this.input, null, sideBySide).done(() => {
if (!this.input.matches(this.editorService.getActiveEditorInput())) {
this.model.remove(this.input); // Automatically clean up stale history entries when the input can not be opened
......
......@@ -13,7 +13,7 @@ import strings = require('vs/base/common/strings');
import filters = require('vs/base/common/filters');
import uuid = require('vs/base/common/uuid');
import types = require('vs/base/common/types');
import {Mode, IContext, IAutoFocus, IQuickNavigateConfiguration, IModel} from 'vs/base/parts/quickopen/common/quickOpen';
import {Mode, IEntryRunContext, IAutoFocus, IQuickNavigateConfiguration, IModel} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntryItem, QuickOpenEntry, QuickOpenModel, QuickOpenEntryGroup} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {QuickOpenWidget} from 'vs/base/parts/quickopen/browser/quickOpenWidget';
import {ContributableActionProvider} from 'vs/workbench/browser/actionBarRegistry';
......@@ -270,9 +270,7 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
return item && isAboutStrings ? item.label : item;
}
this.doPick(entryPromise, options).then(item => resolve(onItem(item)),
err => reject(err),
item => progress(onItem(item)));
this.doPick(entryPromise, options).then(item => resolve(onItem(item)), err => reject(err), item => progress(onItem(item)));
});
}
......@@ -334,7 +332,7 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
let picksPromiseDone = false;
// Resolve picks
picksPromise.then((picks) => {
picksPromise.then(picks => {
if (this.currentPickerToken !== currentPickerToken) {
return; // Return if another request came after
}
......@@ -364,19 +362,26 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
// Handlers
this.pickOpenWidget.setCallbacks({
onOk: () => {
if (picks.length === 0) {
return complete(null);
}
let index = -1;
let context: IEntryRunContext;
entries.forEach((entry, i) => {
if (entry.selected) {
if (entry.shouldRunWithContext) {
index = i;
context = entry.shouldRunWithContext;
}
});
complete(picks[index] || null);
const selectedPick = picks[index];
if (typeof selectedPick.run === 'function') {
selectedPick.run(context);
}
complete(selectedPick || null);
},
onCancel: () => complete(void 0),
onFocusLost: () => options.ignoreFocusLost,
......@@ -406,11 +411,8 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
else {
entries.forEach((entry) => {
let labelHighlights = filters.matchesFuzzy(value, entry.getLabel());
let descriptionHighlights = options.matchOnDescription
&& filters.matchesFuzzy(value, entry.getDescription());
let detailHighlights = options.matchOnDetail && entry.getDetail()
&& filters.matchesFuzzy(value, entry.getDetail());
let descriptionHighlights = options.matchOnDescription && filters.matchesFuzzy(value, entry.getDescription());
let detailHighlights = options.matchOnDetail && entry.getDetail() && filters.matchesFuzzy(value, entry.getDetail());
if (labelHighlights || descriptionHighlights || detailHighlights) {
entry.setHighlights(labelHighlights, descriptionHighlights, detailHighlights);
......@@ -918,7 +920,7 @@ class PlaceholderQuickOpenEntry extends QuickOpenEntryGroup {
}
class PickOpenEntry extends PlaceholderQuickOpenEntry {
private _selected: boolean;
private _shouldRunWithContext: IEntryRunContext;
private description: string;
private detail: string;
......@@ -929,8 +931,8 @@ class PickOpenEntry extends PlaceholderQuickOpenEntry {
this.detail = detail;
}
public get selected(): boolean {
return this._selected;
public get shouldRunWithContext(): IEntryRunContext {
return this._shouldRunWithContext;
}
public getDescription(): string {
......@@ -949,9 +951,9 @@ class PickOpenEntry extends PlaceholderQuickOpenEntry {
return this.separatorLabel;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
this._selected = true;
this._shouldRunWithContext = context;
return true;
}
......@@ -965,7 +967,7 @@ class PickOpenEntry extends PlaceholderQuickOpenEntry {
}
class PickOpenItem extends QuickOpenEntryItem {
private _selected: boolean;
private _shouldRunWithContext: IEntryRunContext;
constructor(private label: string, private description: string, private height: number, private renderFn: (tree: ITree, container: HTMLElement, previousCleanupFn: IElementCallback) => IElementCallback, private onPreview?: () => void) {
super();
......@@ -979,8 +981,8 @@ class PickOpenItem extends QuickOpenEntryItem {
return this.renderFn(tree, container, previousCleanupFn);
}
public get selected(): boolean {
return this._selected;
public get shouldRunWithContext(): IEntryRunContext {
return this._shouldRunWithContext;
}
public getLabel(): string {
......@@ -991,9 +993,9 @@ class PickOpenItem extends QuickOpenEntryItem {
return this.description;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
this._selected = true;
this._shouldRunWithContext = context;
return true;
}
......
......@@ -13,7 +13,8 @@ import types = require('vs/base/common/types');
import errors = require('vs/base/common/errors');
import {Registry} from 'vs/platform/platform';
import {Action} from 'vs/base/common/actions';
import {Mode, IContext, IAutoFocus, IModel} from 'vs/base/parts/quickopen/common/quickOpen';
import {KeyMod} from 'vs/base/common/keyCodes';
import {Mode, IEntryRunContext, IAutoFocus, IModel} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntry, IHighlight, QuickOpenEntryGroup, QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {EditorOptions, EditorInput} from 'vs/workbench/common/editor';
import {IResourceInput} from 'vs/platform/editor/common/editor';
......@@ -232,10 +233,9 @@ export class EditorQuickOpenEntry extends QuickOpenEntry implements IEditorQuick
return null;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
let event = context.event;
let sideBySide = (event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey))));
let sideBySide = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0;
let input = this.getInput();
if (input instanceof EditorInput) {
......@@ -293,7 +293,7 @@ class CommandEntry extends QuickOpenEntry {
return nls.localize('entryAriaLabel', "{0}, command", this.getLabel());
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.PREVIEW) {
return false;
}
......
......@@ -18,7 +18,8 @@ import nls = require('vs/nls');
import {IMessageService, Severity} from 'vs/platform/message/common/message';
import {IWindowConfiguration} from 'vs/workbench/electron-browser/window';
import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace';
import {IQuickOpenService} from 'vs/workbench/services/quickopen/common/quickOpenService';
import {IQuickOpenService, IPickOpenEntry} from 'vs/workbench/services/quickopen/common/quickOpenService';
import {KeyMod} from 'vs/base/common/keyCodes';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {KeybindingsRegistry} from 'vs/platform/keybinding/common/keybindingsRegistry';
import {ServicesAccessor} from 'vs/platform/instantiation/common/instantiation';
......@@ -385,21 +386,23 @@ export class OpenRecentAction extends Action {
const recentFolders = this.contextService.getConfiguration().env.recentFolders;
const recentFiles = this.contextService.getConfiguration().env.recentFiles;
let folderPicks = recentFolders.map((p, index) => {
let folderPicks: IPickOpenEntry[] = recentFolders.map((p, index) => {
return {
label: paths.basename(p),
description: paths.dirname(p),
path: p,
separator: index === 0 ? { label: nls.localize('folders', "folders") } : void 0
separator: index === 0 ? { label: nls.localize('folders', "folders") } : void 0,
run: (context) => this.runPick(p, context)
};
});
let filePicks = recentFiles.map((p, index) => {
let filePicks: IPickOpenEntry[] = recentFiles.map((p, index) => {
return {
label: paths.basename(p),
description: paths.dirname(p),
path: p,
separator: index === 0 ? { label: nls.localize('files', "files"), border: true } : void 0
separator: index === 0 ? { label: nls.localize('files', "files"), border: true } : void 0,
run: (context) => this.runPick(p, context)
};
});
......@@ -409,13 +412,13 @@ export class OpenRecentAction extends Action {
autoFocus: { autoFocusFirstEntry: !hasWorkspace, autoFocusSecondEntry: hasWorkspace },
placeHolder: nls.localize('openRecentPlaceHolder', "Select a path to open"),
matchOnDescription: true
}).then(p => {
if (p) {
ipc.send('vscode:windowOpen', [p.path]);
}
}).then(p => true);
}
return true;
});
private runPick(path, context): void {
let newWindow = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0;
ipc.send('vscode:windowOpen', [path], newWindow);
}
}
......
......@@ -12,7 +12,7 @@ import { ThrottledDelayer } from 'vs/base/common/async';
import * as dom from 'vs/base/browser/dom';
import Severity from 'vs/base/common/severity';
import { onUnexpectedError } from 'vs/base/common/errors';
import { IAutoFocus, Mode, IModel, IDataSource, IRenderer, IRunner, IContext, IAccessiblityProvider } from 'vs/base/parts/quickopen/common/quickOpen';
import { IAutoFocus, Mode, IModel, IDataSource, IRenderer, IRunner, IEntryRunContext, IAccessiblityProvider } from 'vs/base/parts/quickopen/common/quickOpen';
import { QuickOpenPagedModel, IPagedRenderer } from 'vs/base/parts/quickopen/common/quickOpenPaging';
import { matchesContiguousSubString } from 'vs/base/common/filters';
import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
......@@ -157,7 +157,7 @@ class InstallRunner implements IRunner<IExtensionEntry> {
@IInstantiationService private instantiationService: IInstantiationService
) {}
run(entry: IExtensionEntry, mode: Mode, context: IContext): boolean {
run(entry: IExtensionEntry, mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.PREVIEW) {
return false;
}
......
......@@ -14,7 +14,7 @@ import {language, LANGUAGE_DEFAULT} from 'vs/base/common/platform';
import strings = require('vs/base/common/strings');
import {IAction, Action} from 'vs/base/common/actions';
import {toErrorMessage} from 'vs/base/common/errors';
import {Mode, IContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {Mode, IEntryRunContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntryGroup, IHighlight, QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {SyncActionDescriptor, IActionsService} from 'vs/platform/actions/common/actions';
import {IWorkbenchActionRegistry, Extensions as ActionExtensions} from 'vs/workbench/common/actionRegistry';
......@@ -148,7 +148,7 @@ class CommandEntry extends BaseCommandEntry {
this.actionDescriptor = actionDescriptor;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
let action = <Action>this.instantiationService.createInstance(this.actionDescriptor.syncDescriptor);
this.runAction(action);
......@@ -180,7 +180,7 @@ class EditorActionCommandEntry extends BaseCommandEntry {
this.action = action;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
this.runAction(this.action);
......@@ -211,7 +211,7 @@ class ActionCommandEntry extends BaseCommandEntry {
this.action = action;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
this.runAction(this.action);
......
......@@ -8,8 +8,9 @@ import {TPromise} from 'vs/base/common/winjs.base';
import nls = require('vs/nls');
import types = require('vs/base/common/types');
import errors = require('vs/base/common/errors');
import {IContext, Mode, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {IEntryRunContext, Mode, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {KeyMod} from 'vs/base/common/keyCodes';
import {QuickOpenHandler, EditorQuickOpenEntry, QuickOpenAction} from 'vs/workbench/browser/quickopen';
import {TextEditorOptions, EditorOptions, EditorInput} from 'vs/workbench/common/editor';
import {BaseTextEditor} from 'vs/workbench/browser/parts/editor/textEditor';
......@@ -79,7 +80,7 @@ class GotoLineEntry extends EditorQuickOpenEntry {
return model && types.isFunction((<ITextModel>model).getLineCount) ? (<ITextModel>model).getLineCount() : -1;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
return this.runOpen(context);
}
......@@ -99,7 +100,7 @@ class GotoLineEntry extends EditorQuickOpenEntry {
return options;
}
public runOpen(context: IContext): boolean {
public runOpen(context: IEntryRunContext): boolean {
// No-op if range is not valid
if (this.invalidRange()) {
......@@ -107,8 +108,7 @@ class GotoLineEntry extends EditorQuickOpenEntry {
}
// Check for sideBySide use
let event = context.event;
let sideBySide = (event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey))));
let sideBySide = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0;
if (sideBySide) {
this.editorService.openEditor(this.getInput(), this.getOptions(), true).done(null, errors.onUnexpectedError);
}
......
......@@ -11,12 +11,13 @@ import nls = require('vs/nls');
import errors = require('vs/base/common/errors');
import types = require('vs/base/common/types');
import strings = require('vs/base/common/strings');
import {IContext, Mode, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {IEntryRunContext, Mode, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenModel, IHighlight} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {QuickOpenHandler, EditorQuickOpenEntryGroup, QuickOpenAction} from 'vs/workbench/browser/quickopen';
import {BaseTextEditor} from 'vs/workbench/browser/parts/editor/textEditor';
import {TextEditorOptions, EditorOptions, EditorInput} from 'vs/workbench/common/editor';
import filters = require('vs/base/common/filters');
import {KeyMod} from 'vs/base/common/keyCodes';
import {IEditor, IModelDecorationsChangeAccessor, OverviewRulerLane, IModelDeltaDecoration, IRange, IModel, ITokenizedModel, IDiffEditorModel, IEditorViewState} from 'vs/editor/common/editorCommon';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {IQuickOpenService} from 'vs/workbench/services/quickopen/common/quickOpenService';
......@@ -299,7 +300,7 @@ class SymbolEntry extends EditorQuickOpenEntryGroup {
return options;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN) {
return this.runOpen(context);
}
......@@ -307,11 +308,10 @@ class SymbolEntry extends EditorQuickOpenEntryGroup {
return this.runPreview();
}
private runOpen(context: IContext): boolean {
private runOpen(context: IEntryRunContext): boolean {
// Check for sideBySide use
let event = context.event;
let sideBySide = (event && (event.ctrlKey || event.metaKey || (event.payload && event.payload.originalEvent && (event.payload.originalEvent.ctrlKey || event.payload.originalEvent.metaKey))));
let sideBySide = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0;
if (sideBySide) {
this.editorService.openEditor(this.getInput(), this.getOptions(), true).done(null, errors.onUnexpectedError);
}
......
......@@ -9,7 +9,7 @@ import nls = require('vs/nls');
import {Builder, $} from 'vs/base/browser/builder';
import types = require('vs/base/common/types');
import {Registry} from 'vs/platform/platform';
import {Mode, IContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {Mode, IEntryRunContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntryItem, QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {ITree, IElementCallback} from 'vs/base/parts/tree/browser/tree';
import {IQuickOpenRegistry, Extensions, QuickOpenHandler} from 'vs/workbench/browser/quickopen';
......@@ -106,7 +106,7 @@ class HelpEntry extends QuickOpenEntryItem {
return null;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
if (mode === Mode.OPEN || this.openOnPreview) {
this.quickOpenService.show(this.prefix);
}
......
......@@ -17,7 +17,7 @@ import {ITree, IElementCallback} from 'vs/base/parts/tree/browser/tree';
import Severity from 'vs/base/common/severity';
import {QuickOpenHandler, QuickOpenAction} from 'vs/workbench/browser/quickopen';
import {BaseTextEditor} from 'vs/workbench/browser/parts/editor/textEditor';
import {Mode, IContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {Mode, IEntryRunContext, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntryItem, QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {IMarkerService, IMarker} from 'vs/platform/markers/common/markers';
......@@ -102,7 +102,7 @@ class MarkerEntry extends QuickOpenEntryItem {
return;
}
public run(mode: Mode, context: IContext): boolean {
public run(mode: Mode, context: IEntryRunContext): boolean {
switch (mode) {
case Mode.OPEN:
this._open();
......
......@@ -6,7 +6,7 @@
import {TPromise} from 'vs/base/common/winjs.base';
import Event from 'vs/base/common/event';
import {IQuickNavigateConfiguration, IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {IQuickNavigateConfiguration, IAutoFocus, IEntryRunContext} from 'vs/base/parts/quickopen/common/quickOpen';
import {createDecorator, ServiceIdentifier} from 'vs/platform/instantiation/common/instantiation';
import {IEditorInput} from 'vs/platform/editor/common/editor';
......@@ -16,6 +16,7 @@ export interface IPickOpenEntry {
description?: string;
detail?: string;
separator?: ISeparator;
run?: (context:IEntryRunContext) => void;
}
export interface ISeparator {
......
......@@ -71,8 +71,8 @@ suite('Workbench QuickOpen', () => {
assert(!entry1.matches(entry2.getInput()));
assert(entry1.matches(entry1.getInput()));
assert(entry1.run(Mode.OPEN, { event: null, quickNavigateConfiguration: null }));
assert(!entry2.run(Mode.PREVIEW, { event: null, quickNavigateConfiguration: null }));
assert(entry1.run(Mode.OPEN, { event: null, quickNavigateConfiguration: null, keymods: [] }));
assert(!entry2.run(Mode.PREVIEW, { event: null, quickNavigateConfiguration: null, keymods: [] }));
});
test('EditorHistoryEntry is removed when open fails', () => {
......@@ -88,7 +88,7 @@ suite('Workbench QuickOpen', () => {
assert.equal(1, model.getEntries().length);
assert(model.getEntries()[0].run(Mode.OPEN, { event: null, quickNavigateConfiguration: null }));
assert(model.getEntries()[0].run(Mode.OPEN, { event: null, quickNavigateConfiguration: null, keymods: [] }));
assert.equal(0, model.getEntries().length);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册