【发布时间】:2010-11-24 07:34:38
【问题描述】:
我想在选择文本时向任何文本编辑器的上下文菜单提供一个命令。在“过去”中,我会使用 objectContribution 和带有“enablesFor='+'”的嵌套操作来完成此操作。
如何使用命令而不是操作来做到这一点?
【问题讨论】:
我想在选择文本时向任何文本编辑器的上下文菜单提供一个命令。在“过去”中,我会使用 objectContribution 和带有“enablesFor='+'”的嵌套操作来完成此操作。
如何使用命令而不是操作来做到这一点?
【问题讨论】:
如果我重新审视我的回答“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。
【讨论】:
Command/handler 没有在许多编辑器/视图中重用,它可能有点矫枉过正,一个Action 就足够了。
我阅读了有关命令表达式中可用变量的更多信息,并且我接近自己想弄清楚它,但失败了。然后我在 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>
【讨论】: