Eclipse plugin 激活jface TextViewer eclipse工作台操作的查找/替换

Eclipse plugin 激活jface TextViewer eclipse工作台操作的查找/替换,eclipse-plugin,Eclipse Plugin,我制作了一个带有TextViewer界面的eclipse插件,用于显示文本文档,但标准的查找/替换仍处于灰色模式 我假设您在视图中使用TextViewer,而不是编辑器。在这种情况下: 使用TextViewer的视图必须“适应”到org.eclipse.jface.text.IFindReplaceTarget,即其getAdapter()必须从查看器返回目标 您需要显式注册“org.eclipse.ui.edit.findReplace”命令的处理程序(可以是org.eclipse.ui.te

我制作了一个带有TextViewer界面的eclipse插件,用于显示文本文档,但标准的查找/替换仍处于灰色模式

我假设您在视图中使用TextViewer,而不是编辑器。在这种情况下:

  • 使用TextViewer的视图必须“适应”到
    org.eclipse.jface.text.IFindReplaceTarget
    ,即其
    getAdapter()
    必须从查看器返回目标
  • 您需要显式注册“org.eclipse.ui.edit.findReplace”命令的处理程序(可以是
    org.eclipse.ui.texteditorFindReplaceAction
    )。退房开始吧

  • 我用Martii Kärik的指针找到了这个问题的答案。我已经让它使用以下代码,但是它使用了TextEditor中的内部字符串标识符。不过,事情还是这样

  • 视图中的
    getAdapter()
    必须像这样实现(
    viewer
    TextViewer
    的一个实例)

  • 在视图的
    createPartControl()
    中,添加以下代码:

    FindReplaceAction findAction= new FindReplaceAction(ResourceBundle.getBundle("org.eclipse.ui.texteditor.ConstructedTextEditorMessages"), null, this);
    IHandlerService handlerService= (IHandlerService) getSite().getService(IHandlerService.class);
    IHandler handler= new AbstractHandler() {
      public Object execute(ExecutionEvent event) throws ExecutionException {
        if (viewer != null && viewer.getDocument() != null)
          findAction.run();
        return null;
      }
    };
    handlerService.activateHandler("org.eclipse.ui.edit.findReplace", handler);
    
  • 不需要XML

  • FindReplaceAction findAction= new FindReplaceAction(ResourceBundle.getBundle("org.eclipse.ui.texteditor.ConstructedTextEditorMessages"), null, this);
    IHandlerService handlerService= (IHandlerService) getSite().getService(IHandlerService.class);
    IHandler handler= new AbstractHandler() {
      public Object execute(ExecutionEvent event) throws ExecutionException {
        if (viewer != null && viewer.getDocument() != null)
          findAction.run();
        return null;
      }
    };
    handlerService.activateHandler("org.eclipse.ui.edit.findReplace", handler);