変更されたキーを透過的にマッピングする(xkbを使用)

変更されたキーを透過的にマッピングする(xkbを使用)

頑張るアナログ数字キーボードキーデフォルトのキーボードにありますが、xkbで問題が発生しています。

<LWIN>+<AD07>を「左」に変換するには? (別名スーパー+u)

Shift、Ctrl(Altも望ましい)とうまく機能するはずです。

私が得た最も近いものは次のとおりです。

    type "wkafk1" {
        modifiers = Shift+Super;
        map[Shift]= Level2;
        map[Super] = Level3;
        level_name[Level1] = "Base";
        level_name[Level2] = "Shift"; 
        level_name[Level3] = "Fn"; 
    };

...
    key <AD07> {
        type= "wkafk1",
        symbols[Group1]= [               u,               U, Left ]
    };

ただし、Shift+Super+u は処理されません。

これも非常に近いです。

    type "wkafk1" {
        modifiers = Shift+Super;
        map[Shift]= Level2;
        map[Super] = Level3;
        map[Shift+Super]=Level4;
        level_name[Level1] = "Base";
        level_name[Level2] = "Shift"; 
        level_name[Level3] = "Fn"; 
        level_name[Level4] = "Fn Shift";
    };
...
    key <AD07> {
        type= "wkafk1",
        symbols[Group1]= [               u,               U, Left, Shift+Left ]
    };

ただし、変更されたシンボルをエクスポートする方法がわからないため、コンパイルされません(Shift + Leftは許可されていません)。

action = RedirectKey(...)を使用して「説明」ステートメントが必要ですか?

答え1

ありがとう現在の技術、次のように進みなさい:

  1. 現在の構成のコピーを作成します。
xkbcomp $DISPLAY custom.xkb
  1. 編集者によって作成されましたcustom.xkb
  2. セクションの終わりを見つけて、xkb_types次を追加します。
     type "wkafk1" {
        modifiers = Shift+Super;
        map[Shift] = level2;
        map[Super] = level3;
        map[Super+Shift] = level3;
        level_name[Level1] = "Base";
        level_name[Level2] = "Caps";
        level_name[Level3] = "Arrows";
     };
  1. <AD07>セクションのキー定義をxkb_symbols次に置き換えます。
     key <AD07> {
         type= "wkafk1",
         symbols[Group1]= [ u, U, NoSymbol],
         actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=<LEFT>,clearmods=Super)]
     };
  1. カスタム構成をコンパイルして使用します。
xkbcomp custom.xkb $DISPLAY

この点に注意してくださいShift キーと Ctrl キーで使用コンビネーション。

関連情報