"Run" 菜单位于 Eclipse RCP IDE 项目中的其他菜单之前

"Run" menu is placed before other menus in an Eclipse RCP IDE project

我在 Eclipse 3 中为 RCP 和 RAP 开发人员开发了一种自定义语言 IDE。因此,我尽可能使用 IDE 插件。这周我忙于使用 Eclipse for RCP 和 RAP 开发人员 2021-6 将应用程序迁移到 Eclipse e4(具有兼容层)。到目前为止一切正常。

我无法弄清楚的一件事是如何将“运行”菜单放在我想要的位置。它作为菜单栏中的第一个菜单放置。

顺便说一下,另一个奇怪的事情是,如果我使用 Eclipse 2020-6 而不是 2021-6 作为开发环境,搜索菜单也位于错误的位置。

问题是 运行 和搜索菜单来自 IDE 插件,它们是作为操作实现的,因此我无法根据菜单指定任何顺序。对于所有其他菜单,我定义了适当的 menuContibutions、命令和处理程序。对于后者,我可以在 plugin.xml 的帮助下通过指定 ?before=?after=.

来决定每个菜单的放置位置

我搜索了与添加菜单、重新排序运行g 菜单、将操作与命令和处理程序混合等有关的 Whosebug 问题,但我找不到如何放置运行 我想要的菜单。

我希望可以使用 ID 之类的东西在 plugin.xml 中指定为 ?before=?after=,但我认为这不适用于操作。

谁能告诉我如何按所需顺序放置所有菜单?或者在混合动作和命令+处理程序时这根本不可能吗?是否有任何动作包装功能可以让我在 plugin.xml 中的 menuContibution 中指定 ?before=?after=

如果您指的是由 org.eclipse.debug.ui 插件添加的 运行 菜单,这是使用和操作集创建的:

   <extension point="org.eclipse.ui.actionSets">
        <actionSet
            label="%BreakpointActionSet.label"
            visible="false"
            id="org.eclipse.debug.ui.breakpointActionSet">
         <menu
               label="%RunMenu.label"
               path="additions"
               id="org.eclipse.ui.run">

在主菜单的 additions 位置添加 运行 菜单。

org.eclipse.ui.internal.ide.WorkbenchActionBuilder创建的标准主菜单创建主菜单如下:

@Override
protected void fillMenuBar(IMenuManager menuBar) {
    menuBar.add(createFileMenu());
    menuBar.add(createEditMenu());
    menuBar.add(createNavigateMenu());
    menuBar.add(createProjectMenu());

    // This line creates the 'additions' position
    menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));

    menuBar.add(createWindowMenu());
    menuBar.add(createHelpMenu());
}

感谢greg-449,我终于弄明白了。下面的定义终于解决了我的问题(--> ?before=org.eclipse.ui.run):

<extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="menu:org.eclipse.ui.main.menu?before=org.eclipse.ui.run">
     <menu
           id="at.boi.tabex.dvl.mainmenu.file"
           label="&amp;File">
     </menu>
     <menu
           id="at.boi.tabex.dvl.mainmenu.edit"
           label="&amp;Edit">
     </menu>
     <menu
           id="at.boi.tabex.dvl.mainmenu.project"
           label="&amp;Project">
     </menu>
     <menu
           id="at.boi.tabex.dvl.mainmenu.tools"
           label="&amp;Tools">
     </menu>
     <menu
           id="at.boi.tabex.dvl.mainmenu.table"
           label="&amp;Ta&amp;ble">
     </menu>
  </menuContribution>
</extension>