如何让Eclipse插件上下文菜单项对特定扩展名可见?
Eclipse插件:让Project Explorer上下文菜单仅对特定扩展名文件可见
看起来你是卡在了菜单项的可见性控制上——Eclipse的菜单扩展默认是对所有选中项显示的,要让它只针对特定扩展名的文件出现,你需要给命令加上<visibleWhen>的条件判断。我帮你调整一下代码,应该就能解决问题:
<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?after=additions"> <menu label="Sample Menu" mnemonic="M" id="TTT.menus.sampleMenu"> <command commandId="TTT.commands.sampleCommand" mnemonic="S" id="TTT.menus.sampleCommand"> <!-- 关键:添加可见性约束,只对特定扩展名文件显示 --> <visibleWhen checkEnabled="false"> <with variable="selection"> <iterate ifEmpty="false"> <adapt type="org.eclipse.core.resources.IFile"> <!-- 替换成你需要的扩展名,比如*.java、*.xml --> <test property="org.eclipse.core.resources.name" value="*.txt"/> </adapt> </iterate> </with> </visibleWhen> </command> </menu> </menuContribution> </extension>
关键部分解释:
<visibleWhen checkEnabled="false">:告诉Eclipse只依据这里的条件判断菜单项是否可见,不依赖命令自身的启用状态<with variable="selection">:获取当前在Project Explorer中选中的对象<iterate ifEmpty="false">:遍历所有选中元素,支持多选场景(如果选中多个文件,只有全部符合条件才会显示)<adapt type="org.eclipse.core.resources.IFile">:确保选中的对象是Eclipse的文件资源,过滤掉文件夹、项目等非文件项<test property="org.eclipse.core.resources.name" value="*.txt"/>:匹配文件名以.txt结尾的文件,把*.txt改成你需要的扩展名即可
扩展:匹配多个扩展名
如果需要让菜单项对多种扩展名的文件显示,可以用<or>标签组合多个条件:
<adapt type="org.eclipse.core.resources.IFile"> <or> <test property="org.eclipse.core.resources.name" value="*.txt"/> <test property="org.eclipse.core.resources.name" value="*.md"/> <test property="org.eclipse.core.resources.name" value="*.java"/> </or> </adapt>
最后要注意的点:
- 确保你的
TTT.commands.sampleCommand命令已经在插件中正确定义 - 修改代码后,记得清理并重新构建插件项目,然后重启Eclipse再验证效果
内容的提问来源于stack exchange,提问作者Yahya ahmed




