`

Eclipse 插件开发 快捷键冲突(A conflict occurred for xxx)

阅读更多

问题:

 

Binding(CTRL+S,

ParameterizedCommand(Command(org.eclipse.ui.file.save,Save,

Save the current contents,

Category(org.eclipse.ui.category.file,File,null,true),

org.eclipse.ui.internal.handlers.SaveHandler@fbd1fc,

,,true),null),

org.eclipse.ui.defaultAcceleratorConfiguration,

org.eclipse.ui.contexts.window,,,system)

Binding(CTRL+S,

ParameterizedCommand(Command(cn.com.bankit.ide.bsp.navigator.command.shield,屏蔽 F2,

,

Category(org.eclipse.core.commands.categories.autogenerated,Uncategorized,Commands that were either auto-generated or have no category,true),

,

,,true),null),

org.eclipse.ui.defaultAcceleratorConfiguration,

org.eclipse.ui.contexts.window,,,system)

 

 

 

如何屏蔽掉Eclipse插件本身的快捷键,使自定义的快捷键功能有效。


1. 屏蔽所有快捷键 (这个方法显然是杀鸡取卵)


((IBindingService)PlatformUI.getWorkbench().getAdapter(IBindingService.class)).setKeyFilterEnabled(false);

PS.:这个能屏蔽所有的Binding 包括自定义的,这显然不合适。


2. 采用默认的ContextID:org.eclipse.ui.contexts.window。 这里有一个缺点,输入快捷键时,同时出现两个快捷键。

  在plugin.xml中实现:

   <extension

         point="org.eclipse.ui.bindings">

      <key

            commandId="org.xxx.SaveConfigHandler"

            contextId="org.eclipse.ui.contexts.window"

            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"

            sequence="CTRL+S">

      </key>

   </extension>


3. 屏蔽eclipse的快捷键,使自己的快捷键生效。(这就是所谓的走别人的路,让别人无路可走)

指定自定义ContextID,只有在该ContextID下快捷键才有效。

在plugin.xml中实现扩展点org.eclipse.ui.bindings

 <extension

         point="org.eclipse.ui.bindings">

      <key

            commandId="org.xxxx.SaveConfigHandler"

            contextId="cn.com.xxx.Context"

            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"

            sequence="F2">

      </key>

   </extension>

同时扩展:

   <extension

         point="org.eclipse.ui.contexts">

      <context

            id="cn.com.xxx.Context"

            name="MY Context"

            parentId="org.eclipse.ui.contexts.window">

      </context>

   </extension>

(以 CommonNavigatorView的F2为例,editor也是一样的道理。

重写起init方法如下:

    public void init(IViewSite site, IMemento memento) throws PartInitException

    {

        super.init(site, memento);

        ....

....

        IContextService contextService = (IContextService) getSite()

                .getService(IContextService.class);

        contextService.activateContext("cn.com.xxx.Context");

    }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics