web-dev-qa-db-ja.com

AltGr + keyをシンボルにバインドするにはどうすればよいですか?

バインドしたい AltGr+W to æ、および他のいくつかの組み合わせ、どうすればこれを行うことができますか?私も必要があります AltGr+Shift+W to Æ

私は通常、setxkbmapを使用してキーマップを変更します。

5
Alice Ryhl

カスタムXKBマップでそれを実現できます。現在のマップを_xkbcomp $DISPLAY dump.xkb_でダンプし、編集して_xkbcomp newmap.xkb $DISPLAY_でロードすることをお勧めします。ダンプファイルはかなり大きく、余分な情報がたくさんあります。

編集を行う最も簡単な方法は、現在のマップでaltgrがどのように使用されているかを調べることです。通常はISO_LEVEL3修飾子です。現在のキーマップがaltgrを使用していない場合は、altgrを使用してロードしてみて、どのように実行できるかを確認できます。たとえば、_-layout us -variant altgr-intl_はかなり広範であり、すべてではないにしてもほとんどのヨーロッパのキーがバインドされています。以下は、何が起こっているかの短い入門書です。

xkbはカーネルからキーコードを取得し、それぞれにラベルを設定し、そのラベルキーと修飾キーを使用して、出力するキーシムを決定します。各キーにはタイプが割り当てられており、予想される修飾キーと、各組み合わせに対して何を出力するかを定義します。 xkbcompで取得したダンプを見ると、ラベルは_xkb_keycodes_で定義され、タイプは_xkb_types_で、label-to-keysymは_xkb_symbols_で定義されています。これらのうち、_xkb_symbols_は編集したいものであり、他の2つを参照して何を変更するかを知っています。 _xkb_symbols_を見て、現在どのように行われているかを確認し、必要に応じて編集することもできます。

_xkb_types_セクションには、キー定義のさまざまな修飾子レベルがあり、altgrモードとshiftモードがあるものが必要になります。例:

_type "FOUR_LEVEL_ALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level4;
    map[Shift+Lock+LevelThree]= Level3;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};
_

つまり、_FOUR_LEVEL_ALPHABETIC_とマークされたキーには4つのモードがあります。 Normal、shift/caps、altgr、altgr-あなたが探しているもののように聞こえるshift。

ここで、wのキーコードがまだわからない場合は、それが何であるかを調べたいと思います。 xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'は、押したキーのキーコードを提供します。 grepは、出力を読みやすくするためにあります。

取得したキーコードを、以前に取得したダンプマップの_xkb_keycodes_セクションと相互参照します。私の場合、wはキーコード25を与えます。lessダンプを取得し、_<LABEL> = ##;_の形式で正しいキーコードを見つけます(例_<AD02> = 25;_)。または、_cat dump.xkb| grep ' = 25;'_ラベルは、xkbが後のセクションでキーを参照するために使用する名前です。

ラベルができたので、_xkb_symbols_に移動します。これにより、実際にラベルがキーシムにマップされます。フォーマットは

_key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, aring, Aring ]
    };
_

_type=_は、_xkb_types_セクションから必要なタイプです。_symbols[Group1]=_には、タイプに必要なモードごとに1つのkeysymがあります。繰り返しますが、このタイプの法線、shift/caps、altgr、shift-altgr。 _[Group1]_、私が理解している限り、複数のキーマップを使用する方法は、設定したロックキーを使用してその場で変更できます。私は自分でグループを使用しないので、すべてが私にとってgroup1です。

ここで使用できるさまざまなキーシムをすべて見つけるには、_/usr/include/X11/keysymdef.h_を確認してください。探している2つの記号は、æの場合はae、Æの場合はAEです。

_key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, ae, AE ]
    };
_

私は少し歩き回ったかもしれません。 XKBの Arch Wiki's ページをチェックしてください。使用しているOSやディストリビューションに関係なく、これは良いことです。

2
WhimsicalWombat

これは xmodmap で簡単に行えます。 keysymディレクティブを使用して、キーに関連付けられたキーシムを変更できます。これは、現在このkeysymを任意の修飾子の組み合わせで送信しているすべてのキーに影響します。通常の印刷可能な文字の場合、4つのキーシムは、ベアキーのキーシムです。 Shift、キー AltGr とキー AltGr+Shift それぞれ。

keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE

これらのディレクティブをファイルに入れます。 ~/.Xmodmap、およびxmodmap ~/.Xmodmapをロードします。一部の環境にログインすると、~/.Xmodmapというファイルが自動的にロードされます(これは、UNIXバリアントとデスクトップ環境によって異なります)。

キーシム名は/usr/share/X11/locale/en_US.UTF-8/Composeまたは/usr/include/X11/keysymdef.hにあります(Debianの場所は他のシステムによって異なる場合があります)。記号のkeysym名がわからない場合は、Unicode番号を使用できます:Uの後に16進数を続けます。

keysym W = w W U00e6 U00c6

あなたのシンボルで(/usr/share/X11/xkb/symbols/XY)ファイル、キーボードバリアントの下で次の行を見つけます{ [ w, W,。これらの2つは、明らかに小文字と大文字のwに対応します。その後、3番目と4番目のエントリは、を押したときに得られるものに対応します。 AltGr +w そして AltGr+Shift+w それぞれ。

これらの3番目と4番目の文字を目的の文字に置き換えるか、存在しない場合は追加する必要があります。

ウィキペディアによると、それらの(ae、AE)ユニコードポイントはそれぞれU + 00E6とU + 00C6であるため、シンボルファイルの新しく編集された行は(+記号を省略)になります。

{ [         w,          W,   U00E6,   U00C6 ]   };

このファイルを更新するシステムアップデートはファイルを上書きするため、この編集済みファイルのコピーを自宅のどこかに保存し、アップデートで上書きされるたびにコマンドに置き換えてください。

Sudo cp /YOUR/BACKUP/SYMBOL_FILE /usr/share/X11/xkb/symbols/SYMBOL_FILE
0
LyXTeX