提交 a6e747b7 编写于 作者: J Jackson Kearl

Add triggerSearch and focusResults search editor args

Closes #97823
上级 1d03c052
......@@ -213,6 +213,7 @@ CommandsRegistry.registerCommand(
//#region Actions
const category = localize('search', "Search Editor");
export type OpenSearchEditorArgs = Partial<SearchConfiguration & { triggerSearch: boolean, focusResults: boolean }>;
const openArgDescription = {
description: 'Open a new search editor. Arguments passed can include variables like ${relativeFileDirname}.',
args: [{
......@@ -228,6 +229,8 @@ const openArgDescription = {
regexp: { type: 'boolean' },
useIgnores: { type: 'boolean' },
showIncludesExcludes: { type: 'boolean' },
triggerSearch: { type: 'boolean' },
focusResults: { type: 'boolean' },
}
}
}]
......@@ -243,7 +246,7 @@ registerAction2(class extends Action2 {
description: openArgDescription
});
}
async run(accessor: ServicesAccessor, args: Partial<SearchConfiguration>) {
async run(accessor: ServicesAccessor, args: OpenSearchEditorArgs) {
await accessor.get(IInstantiationService).invokeFunction(openNewSearchEditor, args);
}
});
......@@ -258,7 +261,7 @@ registerAction2(class extends Action2 {
description: openArgDescription
});
}
async run(accessor: ServicesAccessor, args: Partial<SearchConfiguration>) {
async run(accessor: ServicesAccessor, args: OpenSearchEditorArgs) {
await accessor.get(IInstantiationService).invokeFunction(openNewSearchEditor, args, true);
}
});
......
......@@ -410,7 +410,7 @@ export class SearchEditor extends BaseTextEditor {
this.searchResultEditor.focus();
}
async triggerSearch(_options?: { resetCursor?: boolean; delay?: number; }) {
async triggerSearch(_options?: { resetCursor?: boolean; delay?: number; focusResults?: boolean }) {
const options = { resetCursor: true, delay: 0, ..._options };
if (!this.pauseSearching) {
......@@ -421,6 +421,9 @@ export class SearchEditor extends BaseTextEditor {
this.searchResultEditor.setPosition(new Position(1, 1));
this.searchResultEditor.setScrollPosition({ scrollTop: 0, scrollLeft: 0 });
}
if (options.focusResults) {
this.searchResultEditor.focus();
}
}, options.delay);
}
}
......
......@@ -14,7 +14,7 @@ import { ILabelService } from 'vs/platform/label/common/label';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { SearchResult } from 'vs/workbench/contrib/search/common/searchModel';
import { SearchEditor } from 'vs/workbench/contrib/searchEditor/browser/searchEditor';
import { getOrMakeSearchEditorInput, SearchEditorInput, SearchConfiguration } from 'vs/workbench/contrib/searchEditor/browser/searchEditorInput';
import { getOrMakeSearchEditorInput, SearchEditorInput } from 'vs/workbench/contrib/searchEditor/browser/searchEditorInput';
import { serializeSearchResultForEditor } from 'vs/workbench/contrib/searchEditor/browser/searchEditorSerialization';
import { IEditorService, SIDE_GROUP, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
import { ISearchConfigurationProperties } from 'vs/workbench/services/search/common/search';
......@@ -25,6 +25,7 @@ import { IHistoryService } from 'vs/workbench/services/history/common/history';
import { Schemas } from 'vs/base/common/network';
import { withNullAsUndefined } from 'vs/base/common/types';
import { OpenNewEditorCommandId } from 'vs/workbench/contrib/searchEditor/browser/constants';
import { OpenSearchEditorArgs } from 'vs/workbench/contrib/searchEditor/browser/searchEditor.contribution';
export const toggleSearchEditorCaseSensitiveCommand = (accessor: ServicesAccessor) => {
const editorService = accessor.get(IEditorService);
......@@ -99,7 +100,7 @@ export class OpenSearchEditorAction extends Action {
}
export const openNewSearchEditor =
async (accessor: ServicesAccessor, args: Partial<SearchConfiguration> = {}, toSide = false) => {
async (accessor: ServicesAccessor, _args: OpenSearchEditorArgs = {}, toSide = false) => {
const editorService = accessor.get(IEditorService);
const telemetryService = accessor.get(ITelemetryService);
const instantiationService = accessor.get(IInstantiationService);
......@@ -111,11 +112,6 @@ export const openNewSearchEditor =
const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(Schemas.file);
const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined;
const resolvedArgs: Record<string, any> = {};
Object.entries(args).forEach(([name, value]) => {
resolvedArgs[name as any] = (typeof value === 'string') ? configurationResolverService.resolve(lastActiveWorkspaceRoot, value) : value;
});
const activeEditorControl = editorService.activeTextEditorControl;
let activeModel: ICodeEditor | undefined;
let selected = '';
......@@ -140,11 +136,20 @@ export const openNewSearchEditor =
telemetryService.publicLog2('searchEditor/openNewSearchEditor');
const input = instantiationService.invokeFunction(getOrMakeSearchEditorInput, { config: { query: selected, ...resolvedArgs }, text: '' });
const args: Record<string, any> = { query: selected };
Object.entries(_args).forEach(([name, value]) => {
args[name as any] = (typeof value === 'string') ? configurationResolverService.resolve(lastActiveWorkspaceRoot, value) : value;
});
const input = instantiationService.invokeFunction(getOrMakeSearchEditorInput, { config: args, text: '' });
const editor = await editorService.openEditor(input, { pinned: true }, toSide ? SIDE_GROUP : ACTIVE_GROUP) as SearchEditor;
if (selected && configurationService.getValue<ISearchConfigurationProperties>('search').searchOnType) {
editor.triggerSearch();
const searchOnType = configurationService.getValue<ISearchConfigurationProperties>('search').searchOnType;
if (
args.triggerSearch === true ||
args.triggerSearch !== false && searchOnType && args.query
) {
editor.triggerSearch({ focusResults: args.focusResults !== false });
}
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册