You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让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>

最后要注意的点:

  1. 确保你的TTT.commands.sampleCommand命令已经在插件中正确定义
  2. 修改代码后,记得清理并重新构建插件项目,然后重启Eclipse再验证效果

内容的提问来源于stack exchange,提问作者Yahya ahmed

火山引擎 最新活动