代码之家  ›  专栏  ›  技术社区  ›  marc esher

在Eclipse中,如何向编辑器上下文菜单提供命令

  •  4
  • marc esher  · 技术社区  · 15 年前

    我想在选择文本时向任何文本编辑器的上下文菜单提供一个命令。在“过去的日子”中,我会使用ObjectContribution和一个嵌套的操作“EnablesForr='+”,来完成这项工作。

    如何使用命令而不是操作来实现这一点?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community Paul Sweatte    7 年前

    如果我重温我的答案” Eclipse RCP: Actions VS Commands “,您需要一个命令处理程序。

    This thread 似乎总结了你的选择:

    • 一种是通用模式,在视图本身中实例化处理程序,让处理程序只查看视图选择并控制其自己的启用状态。
      处理程序API允许它在启用更改时触发事件,请参见 org.eclipse.core.commands.AbstractHandler .

    • 另一种方法是创建一个属性测试程序,以获取视图选择。

    IWorkbenchPart p = page.findViewReference("your.id").getPart(false);
    if (p!=null) {
      p.getSite().getSelectionProvider().getSelection() ... whatever
    }
    

    您的视图将监视自己的选择更改事件,并调用 org.eclipse.ui.services.IEvaluationService.requestEvaluation(String) (源) here )对于该属性(这将导致使用该属性测试仪的所有核心表达式都被重新计算)。
    重要的一点是,简单地更改视图不会导致重新评估(也不会更改启用状态)。

    您可以将属性测试仪设置为特定于您需要它的每个视图,或者创建一个视图。 com.example.views.localSelection 和使用 args 指定视图 id .

        2
  •  2
  •   marc esher    15 年前

    我阅读了更多关于命令表达式中可用变量的信息,然后 关闭 我自己解决,但失败了。然后我在Eclipse新闻组上问了一个类似的问题,并被引导到了正确的方向。下面是一个例子,说明了如何主要完成我想要的工作:

     <command
          commandId="org.marcesher.blogcodeformatter.commands.wikiFormatterCommand"
          tooltip="Format And Copy to Clipboard"
          id="org.marcesher.blogcodeformatter.popup.wikiFormatterCommand">
        <visibleWhen>
           <with variable="selection">
              <instanceof value="org.eclipse.jface.text.ITextSelection"/>
           </with>
        </visibleWhen>