如何禁用助记符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁用助记符?相关的知识,希望对你有一定的参考价值。

我正在使用Eclipse插件基础结构扩展Eclipse,我遇到了一个问题:

我创建了一个Eclipse编辑器,我想禁用助记符菜单Eclipse,例如:ALT + a等同于菜单Search。因为我在编辑器中需要这些组合(Alt + ...)。该怎么办?

答案

正如this thread所推荐:

创建自己的方案并添加所需的键绑定。在自定义ini文件中添加以下行:

org.eclipse.ui/KEY_CONFIGURATION_ID = <your scheme id>

Keybindings

alt text http://www.vogella.de/articles/EclipseCommands/images/keybinding30.gif

作为Paul Webster puts it

您可以通过3种方式之一覆盖快捷方式

  1. 创建一个没有父级的新方案。然后,您可以根据需要定义任意数量的键绑定,因为您将看不到任何默认绑定。
  2. 使用默认方案父级创建新方案。您将继承所有默认的键绑定,但您在方案中定义的任何键都将优先(我认为:)
  3. 从包含某些绑定的上下文创建子上下文。您在上下文中定义的任何键都将优先于原始上下文。

另一个解决方案,对于仅针对一个SWT组件的特定键事件处理,同时保持其余的默认方案,是添加一个监听器(请参阅this thread):

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 
} 

并且您将默认方案设置为您的。

以上是关于如何禁用助记符?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用在android片段类中按下的后退按钮

Java Swing JMenu 助记符

片段交易后如何禁用按钮?

如何在 Android 片段中禁用屏幕截图?

Eclipse 自动创建片段布局,我该如何禁用它

在 Firebase 中禁用自动活动跟踪