提交 41a422cf 编写于 作者: M Melvin Philips

Add support for macOS globalFindClipboard #11233

TODO: Add test and restrict it to OSX
上级 ede70684
......@@ -9,6 +9,7 @@ import Event, { Emitter } from 'vs/base/common/event';
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
import { TPromise } from 'vs/base/common/winjs.base';
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { IContextKey, IContextKeyServiceTarget, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { CommonEditorConfiguration } from 'vs/editor/common/config/commonEditorConfig';
......@@ -120,7 +121,8 @@ export abstract class CommonCodeEditor extends Disposable implements editorCommo
domElement: IContextKeyServiceTarget,
options: editorOptions.IEditorOptions,
instantiationService: IInstantiationService,
contextKeyService: IContextKeyService
contextKeyService: IContextKeyService,
clipboardService: IClipboardService
) {
super();
this.domElement = domElement;
......
......@@ -14,6 +14,7 @@ import { FindOptionsWidget } from 'vs/editor/contrib/find/browser/findOptionsWid
import { CommonFindController, FindStartFocusAction, IFindStartOptions } from 'vs/editor/contrib/find/common/findController';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IStorageService } from 'vs/platform/storage/common/storage';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
@editorContribution
export class FindController extends CommonFindController implements IFindController {
......@@ -27,9 +28,10 @@ export class FindController extends CommonFindController implements IFindControl
@IContextKeyService contextKeyService: IContextKeyService,
@IKeybindingService keybindingService: IKeybindingService,
@IThemeService themeService: IThemeService,
@IStorageService storageService: IStorageService
@IStorageService storageService: IStorageService,
@IClipboardService clipBoardService: IClipboardService
) {
super(editor, contextKeyService, storageService);
super(editor, contextKeyService, storageService, clipBoardService);
this._widget = this._register(new FindWidget(editor, this, this._state, contextViewService, keybindingService, contextKeyService, themeService));
this._findOptionsWidget = this._register(new FindOptionsWidget(editor, this._state, keybindingService, themeService));
......
......@@ -18,6 +18,7 @@ import { getSelectionSearchString } from 'vs/editor/contrib/find/common/find';
import { Delayer } from 'vs/base/common/async';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
export const enum FindStartFocusAction {
NoFocusChange,
......@@ -48,16 +49,18 @@ export class CommonFindController extends Disposable implements editorCommon.IEd
protected _updateHistoryDelayer: Delayer<void>;
private _model: FindModelBoundToEditorModel;
private _storageService: IStorageService;
private _clipboardService: IClipboardService;
public static get(editor: editorCommon.ICommonCodeEditor): CommonFindController {
return editor.getContribution<CommonFindController>(CommonFindController.ID);
}
constructor(editor: editorCommon.ICommonCodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @IStorageService storageService: IStorageService) {
constructor(editor: editorCommon.ICommonCodeEditor, @IContextKeyService contextKeyService: IContextKeyService, @IStorageService storageService: IStorageService, @IClipboardService clipBoardService: IClipboardService) {
super();
this._editor = editor;
this._findWidgetVisible = CONTEXT_FIND_WIDGET_VISIBLE.bindTo(contextKeyService);
this._storageService = storageService;
this._clipboardService = clipBoardService;
this._updateHistoryDelayer = new Delayer<void>(500);
this._currentHistoryNavigator = new HistoryNavigator<string>();
......@@ -301,6 +304,14 @@ export class CommonFindController extends Disposable implements editorCommon.IEd
}
return true;
}
public showGlobalBufferTerm(): string {
return this._clipboardService.readFindText();
}
public setGlobalBufferTerm(text: string) {
this._clipboardService.writeFindText(text);
}
}
@editorAction
......@@ -332,6 +343,8 @@ export class StartFindAction extends EditorAction {
shouldFocus: FindStartFocusAction.FocusFindInput,
shouldAnimate: true
});
controller.setGlobalBufferTerm(getSelectionSearchString(editor));
}
}
}
......@@ -371,7 +384,21 @@ export class NextMatchFindAction extends MatchFindAction {
}
protected _run(controller: CommonFindController): boolean {
return controller.moveToNextMatch();
let selectionSearchString = controller.showGlobalBufferTerm();
if (controller.getState().searchString === selectionSearchString) {
return controller.moveToNextMatch();
}
if (selectionSearchString) {
controller.setSearchString(selectionSearchString);
controller.start({
forceRevealReplace: false,
seedSearchStringFromSelection: false,
shouldFocus: FindStartFocusAction.NoFocusChange,
shouldAnimate: true
});
return true;
}
return false;
}
}
......
......@@ -17,4 +17,14 @@ export interface IClipboardService {
* Writes text to the system clipboard.
*/
writeText(text: string): void;
/**
* Reads text from the system find pasteboard.
*/
readFindText(): string;
/**
* Writes text to the system find pasteboard.
*/
writeFindText(text: string): void;
}
\ No newline at end of file
......@@ -15,4 +15,12 @@ export class ClipboardService implements IClipboardService {
public writeText(text: string): void {
clipboard.writeText(text);
}
public readFindText(): string {
return clipboard.readFindText();
}
public writeFindText(text: string): void {
clipboard.writeFindText(text);
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册