diff --git a/packages/search-in-workspace/src/browser/search-in-workspace-frontend-contribution.ts b/packages/search-in-workspace/src/browser/search-in-workspace-frontend-contribution.ts index f7d249cd52f54..bec20605a2944 100644 --- a/packages/search-in-workspace/src/browser/search-in-workspace-frontend-contribution.ts +++ b/packages/search-in-workspace/src/browser/search-in-workspace-frontend-contribution.ts @@ -41,6 +41,11 @@ export namespace SearchInWorkspaceCommands { category: SEARCH_CATEGORY, label: 'Find in Files' }, 'vscode/search.contribution/findInFiles', SEARCH_CATEGORY_KEY); + export const REPLACE_IN_FILES = Command.toLocalizedCommand({ + id: 'search-in-workspace.replace', + category: SEARCH_CATEGORY, + label: 'Replace in Files' + }, 'vscode/searchActions/replaceInFiles', SEARCH_CATEGORY_KEY); export const FIND_IN_FOLDER = Command.toLocalizedCommand({ id: 'search-in-workspace.in-folder', category: SEARCH_CATEGORY, @@ -125,6 +130,14 @@ export class SearchInWorkspaceFrontendContribution extends AbstractViewContribut } }); + commands.registerCommand(SearchInWorkspaceCommands.REPLACE_IN_FILES, { + isEnabled: () => this.workspaceService.tryGetRoots().length > 0, + execute: async () => { + const widget = await this.openView({ activate: true }); + widget.updateSearchTerm(this.getSearchTerm(), true); + } + }); + commands.registerCommand(SearchInWorkspaceCommands.FIND_IN_FOLDER, this.newMultiUriAwareCommandHandler({ execute: async uris => { const resources: string[] = []; @@ -214,7 +227,12 @@ export class SearchInWorkspaceFrontendContribution extends AbstractViewContribut commandId: SearchInWorkspaceCommands.FIND_IN_FOLDER.id }); menus.registerMenuAction(CommonMenus.EDIT_FIND, { - commandId: SearchInWorkspaceCommands.OPEN_SIW_WIDGET.id + commandId: SearchInWorkspaceCommands.OPEN_SIW_WIDGET.id, + order: '2' + }); + menus.registerMenuAction(CommonMenus.EDIT_FIND, { + commandId: SearchInWorkspaceCommands.REPLACE_IN_FILES.id, + order: '3' }); } diff --git a/packages/search-in-workspace/src/browser/search-in-workspace-widget.tsx b/packages/search-in-workspace/src/browser/search-in-workspace-widget.tsx index 719ac4337284d..e8930c482c4ee 100644 --- a/packages/search-in-workspace/src/browser/search-in-workspace-widget.tsx +++ b/packages/search-in-workspace/src/browser/search-in-workspace-widget.tsx @@ -230,13 +230,17 @@ export class SearchInWorkspaceWidget extends BaseWidget implements StatefulWidge /** * Update the search term and input field. * @param term the search term. + * @param showReplaceField controls if the replace field should be displayed. */ - updateSearchTerm(term: string): void { + updateSearchTerm(term: string, showReplaceField?: boolean): void { this.searchTerm = term; const search = document.getElementById('search-input-field'); if (search) { (search as HTMLInputElement).value = term; } + if (showReplaceField) { + this.showReplaceField = true; + } this.refresh(); }