【问题标题】:How do you contribute a command to an editor context menu in Eclipse如何在 Eclipse 中向编辑器上下文菜单提供命令
【发布时间】:2010-11-24 07:34:38
【问题描述】:

我想在选择文本时向任何文本编辑器的上下文菜单提供一个命令。在“过去”中,我会使用 objectContribution 和带有“enablesFor='+'”的嵌套操作来完成此操作。

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

【问题讨论】:

    标签: eclipse eclipse-plugin


    【解决方案1】:

    如果我重新审视我的回答“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

    【讨论】:

    • 感谢 VonC。所以看着这个,我看不出用命令与 objectContributions 和 Actions 来做这件事没有任何好处。想法?
    • 如果Command/handler 没有在许多编辑器/视图中重用,它可能有点矫枉过正,一个Action 就足够了。
    【解决方案2】:

    我阅读了有关命令表达式中可用变量的更多信息,并且我接近自己想弄清楚它,但失败了。然后我在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2015-09-13
      相关资源
      最近更新 更多