提交 f58289fd 编写于 作者: S Sandeep Somavarapu

fix #8284

上级 6054036f
......@@ -501,6 +501,7 @@ export class VSCodeMenu {
let find = this.createMenuItem(nls.localize({ key: 'miFind', comment: ['&& denotes a mnemonic'] }, "&&Find"), 'actions.find');
let replace = this.createMenuItem(nls.localize({ key: 'miReplace', comment: ['&& denotes a mnemonic'] }, "&&Replace"), 'editor.action.startFindReplaceAction');
let findInFiles = this.createMenuItem(nls.localize({ key: 'miFindInFiles', comment: ['&& denotes a mnemonic'] }, "Find &&in Files"), 'workbench.view.search');
let replaceInFiles = this.createMenuItem(nls.localize({ key: 'miReplaceInFiles', comment: ['&& denotes a mnemonic'] }, "Replace &&in Files"), 'workbench.action.replaceInFiles');
[
undo,
......@@ -514,7 +515,8 @@ export class VSCodeMenu {
find,
replace,
__separator__(),
findInFiles
findInFiles,
replaceInFiles
].forEach(item => winLinuxEditMenu.append(item));
}
......
......@@ -25,7 +25,7 @@ import {KbExpr, IKeybindings} from 'vs/platform/keybinding/common/keybindingServ
import {IQuickOpenService} from 'vs/workbench/services/quickopen/common/quickOpenService';
import {IViewletService} from 'vs/workbench/services/viewlet/common/viewletService';
import {KeyMod, KeyCode} from 'vs/base/common/keyCodes';
import {OpenSearchViewletAction} from 'vs/workbench/parts/search/browser/searchActions';
import {OpenSearchViewletAction, ReplaceInFilesAction} from 'vs/workbench/parts/search/browser/searchActions';
import {VIEWLET_ID} from 'vs/workbench/parts/search/common/constants';
import { registerContributions } from 'vs/workbench/parts/search/browser/replaceContributions';
......@@ -120,6 +120,14 @@ const openSearchViewletKb: IKeybindings = {
nls.localize('view', "View")
);
(<IWorkbenchActionRegistry>Registry.as(ActionExtensions.WorkbenchActions)).registerWorkbenchAction(
new SyncActionDescriptor(ReplaceInFilesAction, ReplaceInFilesAction.ID, ReplaceInFilesAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_H
}),
'Edit: Replace in Files',
nls.localize('edit', "Edit")
);
// Contribute to Explorer Viewer
const actionBarRegistry = <IActionBarRegistry>Registry.as(ActionBarExtensions.Actionbar);
actionBarRegistry.registerActionBarContributor(Scope.VIEWER, ExplorerViewerActionContributor);
......
......@@ -32,6 +32,24 @@ export class OpenSearchViewletAction extends ToggleViewletAction {
}
export class ReplaceInFilesAction extends Action {
public static ID = 'workbench.action.replaceInFiles';
public static LABEL = nls.localize('replaceInFiles', "Replace in Files");
constructor(id: string, label: string, @IViewletService private viewletService: IViewletService) {
super(id, label);
}
public run(): TPromise<any> {
return this.viewletService.openViewlet(Constants.VIEWLET_ID, true).then((viewlet) => {
(<SearchViewlet>viewlet).showReplace();
});
}
}
export class FindInFolderAction extends Action {
private resource: URI;
......
......@@ -38,7 +38,7 @@ import {VIEWLET_ID} from 'vs/workbench/parts/search/common/constants';
import {MessageType, InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
import {ISearchProgressItem, IFileMatch, ISearchComplete, ISearchQuery, IQueryOptions, ISearchConfiguration} from 'vs/platform/search/common/search';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {IStorageService} from 'vs/platform/storage/common/storage';
import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {IContextViewService} from 'vs/platform/contextview/browser/contextView';
import {IEventService} from 'vs/platform/event/common/event';
......@@ -306,6 +306,10 @@ export class SearchViewlet extends Viewlet {
this.searchWidget.onReplaceAll(() => this.replaceAll());
}
public showReplace(): void {
this.searchWidget.showReplace();
}
private refreshInputs(): void {
if (this.viewModel) {
this.viewModel.matches().forEach((fileMatch) => {
......@@ -462,6 +466,11 @@ export class SearchViewlet extends Viewlet {
this.searchWidget.searchInput.setValue(selectedText);
}
this.searchWidget.focus();
if (this.storageService.getBoolean('show.replace.firstTime', StorageScope.GLOBAL, true)) {
this.searchWidget.showReplace();
this.storageService.store('show.replace.firstTime', false, StorageScope.GLOBAL);
}
}
public moveFocusFromResults(): void {
......@@ -911,6 +920,7 @@ export class SearchViewlet extends Viewlet {
}
}, 200);
this.searchWidget.setReplaceAllActionState(false);
this.replaceService.disposeAllInputs();
this.currentRequest = this.searchService.search(query);
this.currentRequest.then(onComplete, onError, onProgress);
......
......@@ -115,6 +115,12 @@ export class SearchWidget extends Widget {
}
}
public showReplace(): void {
if (!this.isReplaceShown()) {
this.onToggleReplaceButton();;
}
}
private render(container: Builder, options: ISearchWidgetOptions): void {
this.domNode = container.div({ 'class': 'search-widget' }).style({ position: 'relative' }).getHTMLElement();
this.renderToggleReplaceButton(this.domNode);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册