首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

Eclipse 插件开发 快捷键矛盾(A conflict occurred for xxx)

2012-10-27 
Eclipse 插件开发 快捷键冲突(A conflict occurred for xxx)问题:?Binding(CTRL+S,ParameterizedCommand(C

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");

? ? }

热点排行