quickopen.ts 5.5 KB
Newer Older
1 2 3 4 5 6 7 8
/*---------------------------------------------------------------------------------------------
 *  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 { TPromise } from 'vs/base/common/winjs.base';
9
import * as nls from 'vs/nls';
10 11
import { Action } from 'vs/base/common/actions';
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
12
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
13
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
B
Benjamin Pasero 已提交
14
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
15
import { ICommandHandler, CommandsRegistry } from 'vs/platform/commands/common/commands';
B
Benjamin Pasero 已提交
16
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
17 18 19 20 21

export const inQuickOpenContext = ContextKeyExpr.has('inQuickOpen');
export const defaultQuickOpenContextKey = 'inFilesPicker';
export const defaultQuickOpenContext = ContextKeyExpr.and(inQuickOpenContext, ContextKeyExpr.has(defaultQuickOpenContextKey));

22 23
export const QUICKOPEN_ACTION_ID = 'workbench.action.quickOpen';
export const QUICKOPEN_ACION_LABEL = nls.localize('quickOpen', "Go to File...");
24

25 26
CommandsRegistry.registerCommand(QUICKOPEN_ACTION_ID, function (accessor: ServicesAccessor, prefix: string = null) {
	const quickOpenService = accessor.get(IQuickOpenService);
27

B
Benjamin Pasero 已提交
28
	return quickOpenService.show(typeof prefix === 'string' ? prefix : null).then(() => {
29 30 31
		return void 0;
	});
});
32

33 34 35 36 37 38 39 40 41
export const QUICKOPEN_FOCUS_SECONDARY_ACTION_ID = 'workbench.action.quickOpenPreviousEditor';
CommandsRegistry.registerCommand(QUICKOPEN_FOCUS_SECONDARY_ACTION_ID, function (accessor: ServicesAccessor, prefix: string = null) {
	const quickOpenService = accessor.get(IQuickOpenService);

	return quickOpenService.show(null, { autoFocus: { autoFocusSecondEntry: true } }).then(() => {
		return void 0;
	});
});

42 43 44 45 46 47 48 49
export class BaseQuickOpenNavigateAction extends Action {

	constructor(
		id: string,
		label: string,
		private next: boolean,
		private quickNavigate: boolean,
		@IQuickOpenService private quickOpenService: IQuickOpenService,
50
		@IQuickInputService private quickInputService: IQuickInputService,
51 52 53 54 55
		@IKeybindingService private keybindingService: IKeybindingService
	) {
		super(id, label);
	}

B
Benjamin Pasero 已提交
56
	run(event?: any): TPromise<any> {
57 58 59 60
		const keys = this.keybindingService.lookupKeybindings(this.id);
		const quickNavigate = this.quickNavigate ? { keybindings: keys } : void 0;

		this.quickOpenService.navigate(this.next, quickNavigate);
C
Christof Marti 已提交
61
		this.quickInputService.navigate(this.next, quickNavigate);
62

63
		return Promise.resolve(true);
64 65 66 67 68 69 70
	}
}

export function getQuickNavigateHandler(id: string, next?: boolean): ICommandHandler {
	return accessor => {
		const keybindingService = accessor.get(IKeybindingService);
		const quickOpenService = accessor.get(IQuickOpenService);
71
		const quickInputService = accessor.get(IQuickInputService);
72 73 74 75 76

		const keys = keybindingService.lookupKeybindings(id);
		const quickNavigate = { keybindings: keys };

		quickOpenService.navigate(next, quickNavigate);
C
Christof Marti 已提交
77
		quickInputService.navigate(next, quickNavigate);
78 79 80 81 82
	};
}

export class QuickOpenNavigateNextAction extends BaseQuickOpenNavigateAction {

B
Benjamin Pasero 已提交
83 84
	static readonly ID = 'workbench.action.quickOpenNavigateNext';
	static readonly LABEL = nls.localize('quickNavigateNext', "Navigate Next in Quick Open");
85 86 87 88 89

	constructor(
		id: string,
		label: string,
		@IQuickOpenService quickOpenService: IQuickOpenService,
90
		@IQuickInputService quickInputService: IQuickInputService,
91 92
		@IKeybindingService keybindingService: IKeybindingService
	) {
93
		super(id, label, true, true, quickOpenService, quickInputService, keybindingService);
94 95 96 97 98
	}
}

export class QuickOpenNavigatePreviousAction extends BaseQuickOpenNavigateAction {

B
Benjamin Pasero 已提交
99 100
	static readonly ID = 'workbench.action.quickOpenNavigatePrevious';
	static readonly LABEL = nls.localize('quickNavigatePrevious', "Navigate Previous in Quick Open");
101 102 103 104 105

	constructor(
		id: string,
		label: string,
		@IQuickOpenService quickOpenService: IQuickOpenService,
106
		@IQuickInputService quickInputService: IQuickInputService,
107 108
		@IKeybindingService keybindingService: IKeybindingService
	) {
109
		super(id, label, false, true, quickOpenService, quickInputService, keybindingService);
110 111 112 113 114
	}
}

export class QuickOpenSelectNextAction extends BaseQuickOpenNavigateAction {

B
Benjamin Pasero 已提交
115 116
	static readonly ID = 'workbench.action.quickOpenSelectNext';
	static readonly LABEL = nls.localize('quickSelectNext', "Select Next in Quick Open");
117 118 119 120 121

	constructor(
		id: string,
		label: string,
		@IQuickOpenService quickOpenService: IQuickOpenService,
122
		@IQuickInputService quickInputService: IQuickInputService,
123 124
		@IKeybindingService keybindingService: IKeybindingService
	) {
125
		super(id, label, true, false, quickOpenService, quickInputService, keybindingService);
126 127 128 129 130
	}
}

export class QuickOpenSelectPreviousAction extends BaseQuickOpenNavigateAction {

B
Benjamin Pasero 已提交
131 132
	static readonly ID = 'workbench.action.quickOpenSelectPrevious';
	static readonly LABEL = nls.localize('quickSelectPrevious', "Select Previous in Quick Open");
133 134 135 136 137

	constructor(
		id: string,
		label: string,
		@IQuickOpenService quickOpenService: IQuickOpenService,
138
		@IQuickInputService quickInputService: IQuickInputService,
139 140
		@IKeybindingService keybindingService: IKeybindingService
	) {
141
		super(id, label, false, false, quickOpenService, quickInputService, keybindingService);
142
	}
143
}