我正在使用 Eclipse 插件基础架构扩展 Eclipse,但遇到了一个问题:
我创建了一个 Eclipse 编辑器,我想禁用 Eclipse 的助记词菜单,例如:ALT + a 相当于菜单搜索。因为我的编辑器中需要这些组合(Alt +...)。该怎么办?
我正在使用 Eclipse 插件基础架构扩展 Eclipse,但遇到了一个问题:
我创建了一个 Eclipse 编辑器,我想禁用 Eclipse 的助记词菜单,例如:ALT + a 相当于菜单搜索。因为我的编辑器中需要这些组合(Alt +...)。该怎么办?
正如此线程中所推荐的:
创建您自己的方案并添加您需要的键绑定。在自定义 ini 文件中添加以下行:
org.eclipse.ui/KEY_CONFIGURATION_ID = <your scheme id>
请参阅键绑定。
替代文字 http://www.vogella.de/articles/EclipseCommands/images/keybinding30.gif
正如保罗韦伯斯特所说:
您可以通过 3 种方式之一覆盖快捷方式
- 创建一个没有父级的新方案。然后,您可以根据需要定义任意数量的键绑定,因为您将看不到任何默认绑定。
- 使用默认方案父级创建一个新方案。您将继承所有默认键绑定,但您在方案中定义的任何键绑定都将优先(我认为 :)
- 从包含一些绑定的上下文中创建一个子上下文。您在上下文中定义的任何键都将优先于原始上下文。
另一种解决方案,对于仅针对一个 SWT 组件的特定键事件处理,同时为其余组件保留默认方案,是添加一个侦听器(请参阅此线程):
final Listener keyDownFilter = new Listener()
{
private void postKeyEvent( final int type, final char character, final int keyCode )
{
final Display display = PlatformUI.getWorkbench().getDisplay();
final Event event = new Event();
event.type = type;
event.character = character;
event.keyCode = keyCode;
display.post( event );
}
/* (non-Javadoc)
* @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
public void handleEvent( Event ev )
{
if ( ev.widget == RichText.this.editorControl )
{
if ( ( ev.keyCode == SWT.CR || ev.keyCode == SWT.KEYPAD_CR ) && ( ev.stateMask & SWT.SHIFT ) == 0 )
{
ev.doit = false;
postKeyEvent( SWT.KeyDown, ( char ) 0, SWT.SHIFT );
postKeyEvent( SWT.KeyDown, ev.character, ev.keyCode );
postKeyEvent( SWT.KeyUp, ( char ) 0, SWT.SHIFT );
}
}
}
};
final Display display = PlatformUI.getWorkbench().getDisplay();
display.addFilter( SWT.KeyDown, keyDownFilter );
this.editorControl.addDisposeListener( new DisposeListener()
{
/* (non-Javadoc)
* @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
*/
public void widgetDisposed( final DisposeEvent ev )
{
display.removeFilter( SWT.KeyDown, keyDownFilter );
}
} );
一个方案一个键来覆盖 Alt
<extension
point="org.eclipse.ui.bindings">
<scheme
id="myscheme"
name="My Scheme"
parentId="org.eclipse.ui.defaultAcceleratorConfiguration">
</scheme>
<key
commandId="mycommand"
contextId="mycontext"
schemeId="myscheme"
sequence="Alt+A">
</key>
<key
commandId="mycommand"
contextId="mycontext"
schemeId="myscheme"
sequence="Alt">
</key>
一个命令
<extension
point="org.eclipse.ui.commands">
<command
id="mycommand"
name="My Command">
</command>
这对我有帮助empty.scheme
:把它放在你的上面IApplication.start()
public Object start(IApplicationContext context) {
// set the default shortcuts
PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.KEY_CONFIGURATION_ID, "your.scheme"); //$NON-NLS-1$
// start your app
}
并且您将默认方案设置为您的。