Как добавить привязку клавиш для quickMenu, аналогичную контекстному меню Refactor в JDT?

Я хочу добавить ярлык к моему плагину eclipse, чтобы показать быстрое меню с существующими привязками. Это должно работать как быстрое меню «Рефакторинг» в JDT.

Ярлык для быстрого меню в JDT: Ярлык для быстрого меню Refactor

Быстрое меню JDT:

JDT quickMenu

Я уже добавил привязку и команду, но, похоже, чего-то не хватает. Пункт Удалить что-либо также работает для контекстного меню, только отсутствует ярлык быстрого меню. Кто-нибудь как это сделать?

<extension point="org.eclipse.ui.bindings">
  <key
        commandId="myplugin.refactoring.actions.DeleteSomething"
        schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
        sequence="M1+5">
  </key>
  <key
        commandId="myplugin.refactoring.quickMenu"
        schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
        sequence="M1+9">
  </key>

<extension point="org.eclipse.ui.commands">
  <command
        categoryId="myplugin.category.refactor"
        description="Delete Something"
        id="myplugin.refactoring.actions.DeleteSomething"
        name="Extract Method">
  </command>
  <command
        categoryId="myplugin.category.refactor"
        id="myplugin.refactoring.quickMenu"
        name="Show Refactor Quick Menu">
  </command>
  <category
        id="myplugin.category.refactor"
        name="Refactor">
  </category>


person Meinhard    schedule 06.10.2011    source источник
comment
вы используете e4 или что-то еще?   -  person Ankit    schedule 29.12.2013


Ответы (2)


Вы также можете сделать это следующим образом:

Добавьте команду для быстрого меню и установите обработчик по умолчанию.

      <command
        defaultHandler="myplugin.refactoring.QuickmenuHandler"
        id="myplugin.refactoring.quickMenu"
        name="Show Refactor Quick Menu">
      </command>

Обработчик должен уметь создавать меню. Что-то вроде этого:

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    ...
    Menu menu = new Menu(some parent);
    new MenuItem(menu, SWT.PUSH).setText("...");
    menu.setVisible(true);
    return null;
}

Добавьте ярлык к команде (как вы это сделали):

 <key
    commandId="myplugin.refactoring.quickMenu"
    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
    sequence="M1+9">
 </key>

Наконец, свяжите все это вместе в точке расширения меню:

   <extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="popup:ch.arenae.dnp.frame.popup?after=additions">
     <menu
           commandId="myplugin.refactoring.quickMenu"
           label="Refactor">
        <command
              commandId="<first refactoring command>"
              style="push">
        </command>
     </menu>
     ...
  </menuContribution>

The important point is the commandId attribute in the menu element. It is used to display the keyboard shortcut in the menu.

person Peter    schedule 17.12.2014
comment
Питер, я реализовал минимальный пример. Хотя контекстное меню появляется, и сочетание клавиш также работает для отображения быстрого меню, привязка сочетания клавиш не отображается в контекстном меню. Таким образом, пользователь должен знать ярлык. Есть ли какой-то дополнительный шаг, чтобы ярлык отображался в контекстном меню? - person Johannes Dorn; 17.11.2015

Вы можете посмотреть, как JDT реализует то же самое. Например, взглянув на исходный код Eclipse 3.8.2, вы увидите интересный метод:

org.eclipse.jdt.ui.actions.RefactorActionGroup.installQuickAccessAction()

который вызывается при открытии редактора Java. Здесь происходит ассоциация программного обработчика с текущим редактором.

Подводя итог, как это делается в JDT:

  1. Во-первых, у них есть объявление команды в plugin.xml:

    ‹command name="%ActionDefinition.refactorQuickMenu.name" description="%ActionDefinition.refactorQuickMenu.description" categoryId="org.eclipse.jdt.ui.category.refactoring" id="org.eclipse.jdt.ui.edit. text.java.refactor.quickMenu"›

  2. Они объявляют привязку ключа:

    ‹последовательность клавиш="M2+M3+T" commandId="org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu" SchemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/›

  3. Они связывают эту команду с обработчиком после создания редактора. Сам обработчик (org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator) заботится о наполнении быстрого меню пунктами.

Вам не нужно программно связывать команду с обработчиком — другой вариант — использовать org.eclipse.ui.handlers.

person Michael Spector    schedule 02.12.2014