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 つの方法のいずれかでショートカットを上書きできます
- 親のない新しいスキームを作成します。デフォルトのバインディングは表示されないため、必要な数のキーバインディングを定義できます。
- デフォルトのスキームの親で新しいスキームを作成します。デフォルトのキーバインディングはすべて継承しますが、スキームで定義したものはすべて優先されます(私はそう思います:)
- いくつかのバインディングを含むコンテキストから子コンテキストを作成します。コンテキストで定義したキーは、元のコンテキストよりも優先されます。
別の解決策として、1 つの 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>