XKB:ShiftまたはCtrl + Numpad =下、Shiftなし

XKB:ShiftまたはCtrl + Numpad =下、Shiftなし

2(Numlockがオンのとき)2という数字パッドキーが2を生成するようにキーボードをマッピングしたいのですが、KP_2ShiftキーまたはControlキーを押すと、Down下キーと同じキーがイベントを生成したいと思います。

だから、次の行を追加して新しいタイプを作成しました。

    modifiers= Shift+Control+NumLock+LevelThree;
    map[Shift+NumLock]= Level1;
    preserve[Shift+NumLock]= None;
    ...
    map[Control+NumLock]= Level1;
    preserve[Control+NumLock]= None;

したがって、全体の種類は次のようになります。

type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
    modifiers= Shift+Control+NumLock+LevelThree;
    map[Shift+NumLock]= Level1;
    preserve[Shift+NumLock]= None;
    map[NumLock]= Level2;
    map[Shift]= Level2;
    map[LevelThree]= Level3;
    map[NumLock+LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Shift+NumLock+LevelThree]= Level4;
    map[Control+NumLock]= Level1;
    preserve[Control+NumLock]= None;
    level_name[Level1]= "Base";
    level_name[Level2]= "Number";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
    };

KP_2これを考慮してセクションを変更しました。

    key  <KP2> {
        type= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
        symbols[Group1]= [         Down,            KP_2,           U2193,           U21D3 ]
    };

(グループ名がKP_Down変わったのを見て変えました)Down

xkbcomp preserve_none.xkb $DISPLAY残念ながら、LibreOffice Calcで実行すると(すべてドロップダウンして選択したにもかかわらず)などShift + (NumLock) + KP2の結果が生成され、それを押すとデフォルトでは何も起こりません。Shift + Downpreserve[...]=NoneCtrl + KP2

何が間違っているのか知っていますか?ありがとうございます!

注:ここでファイル全体を見つけることができます。http://paste.debian.net/1063341

ベストアンサー1

まあ、私はこの答えに基づいたものを使って解決策を見つけたようです。https://superuser.com/questions/801611/how-to-make-all-applications-Respect-my-modified-xkb-layout/1000320#1000320

だからまずなぜそんなのか分からないが、時には効果があるtype[Group1]=...のになぜか代わりに使うべきだと思います。type=...

次に、コアはいくつかの新しいシンボルコードを導入することです(これが良い言葉であるかどうかはわかりません)、osfDown / osfUp / ....たとえば、シンボルコードはキーを押すとosfLeft解釈されるべきです<LEFT>Shift鍵が解放されました(少なくともこれが私が理解したものです):

    interpret osfLeft {
        repeat= True;
        action = RedirectKey(keycode=<LEFT>, clearmodifiers=Shift);
    };

修飾子をオフにするには、にControl置き換えるか、両方を消去したい場合でも可能です。その後、前の記号コードを作成したコードに置き換える必要があります。ShiftControlControl+ShiftKP_Left

    key  <KP4> {
        type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD",
        symbols[Group1]= [ osfLeft,            KP_4,           U2190,           U21D0 ]
    };

したがって、KP_Leftを生成する代わりに(そして最終的に押した項目に従って関連項目を生成する代わりに)修飾子をShift/Control削除します(再度、で設定した内容に従って)。Shift/ControlosfLeft

したがって、このステップの最初の解決策は次のとおりです。

# Load with xkbcomp shift_numpad.xkb $DISPLAY
# List modifiers: xmodmap -pm
xkb_keymap {
    xkb_keycodes { 
        include "evdev+aliases(azerty)"
    };
    xkb_types { 
        include "complete"  
    };
    xkb_compat { 
        include "complete"
        interpret osfLeft {
            repeat True;
            action = RedirectKey(keycode=<LEFT>, clearmodifiers=Shift);
        };
        interpret osfRight {
            repeat= True;
            action = RedirectKey(keycode=<RGHT>, clearmodifiers=Shift);
        };
        interpret osfUp {
            repeat= True;
            action = RedirectKey(keycode=<UP>, clearmodifiers=Shift);
        };
        interpret osfDown {
            repeat= True;
            action = RedirectKey(keycode=<DOWN>, clearmodifiers=Shift);
        };
    };
    xkb_symbols { 
        include "pc+fr(oss)+fr(bepo):2+inet(evdev)+ctrl(swapcaps)"
        key  <KP8> {
            type= "FOUR_LEVEL_MIXED_KEYPAD",
            symbols[Group1]= [ osfUp,            KP_8,           U2191,           U21D1 ]
        };
        key  <KP4> {
            type= "FOUR_LEVEL_MIXED_KEYPAD",
            symbols[Group1]= [ osfLeft,            KP_4,           U2190,           U21D0 ]
        };
        key  <KP5> {
            type= "FOUR_LEVEL_MIXED_KEYPAD",
            symbols[Group1]= [ osfDown,            KP_5,           U2194,           U21D4 ]
        };
        key  <KP6> {
            type= "FOUR_LEVEL_MIXED_KEYPAD",
            symbols[Group1]= [ osfRight,            KP_6,           U2192,           U21D2 ]
        };
        key  <KP2> {
            type= "FOUR_LEVEL_MIXED_KEYPAD",
            symbols[Group1]= [ osfDown,            KP_2,           U2193,           U21D3 ]
        };

    };
    xkb_geometry { 
        include "pc(pc105)" 
    };
};

ただし、型"FOUR_LEVEL_MIXED_KEYPAD"に定義されているものがないことに注意しControlてください。私の場合は(例:選択)Shift+2と同じでなければなりませんが、修飾子なしでaを生成する必要があります。したがって、修飾子を削除し、修飾子がすでに存在する場合は、修飾子を保持するために更新された定義が必要です。その後、レベル1にもマッピングされるカスタムタイプを定義する必要があります。Shift+DownControl+2DownosfLeftControlShiftCtrl

    type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
        modifiers= Shift+NumLock+LevelThree+Control;
        map[Shift+NumLock]= Level1;
        map[Control+NumLock]= Level1;
        map[NumLock]= Level2;
        map[Shift]= Level2;
        map[Control]= Level2;
        map[LevelThree]= Level3;
        map[NumLock+LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Shift+NumLock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };

それらを合わせると、次のような結果が得られます。

# Load with xkbcomp shift_numpad.xkb $DISPLAY
# List modifiers: xmodmap -pm
xkb_keymap {
    xkb_keycodes { 
        include "evdev+aliases(azerty)"
    };
    xkb_types { 
        include "complete"
        type "FOUR_LEVEL_MIXED_KEYPAD_CUST" {
            modifiers= Shift+NumLock+LevelThree+Control;
            map[Shift+NumLock]= Level1;
            map[Control+NumLock]= Level1;
            map[NumLock]= Level2;
            map[Shift]= Level2;
            map[Control]= Level2;
            map[LevelThree]= Level3;
            map[NumLock+LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Shift+NumLock+LevelThree]= Level4;
            level_name[Level1]= "Base";
            level_name[Level2]= "Number";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
        };
    };
    xkb_compat { 
        include "complete"
        interpret osfLeft {
            repeat= True;
            action = RedirectKey(keycode=<LEFT>, clearmodifiers=Control);
        };
        interpret osfRight {
            repeat= True;
            action = RedirectKey(keycode=<RGHT>, clearmodifiers=Control);
        };
        interpret osfUp {
            repeat= True;
            action = RedirectKey(keycode=<UP>, clearmodifiers=Control);
        };
        interpret osfDown {
            repeat= True;
            action = RedirectKey(keycode=<DOWN>, clearmodifiers=Control);
        };
    };
    xkb_symbols { 
        include "pc+fr(oss)+fr(bepo):2+inet(evdev)+ctrl(swapcaps)"
        key  <KP8> {
            type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
            symbols[Group1]= [ osfUp,            KP_8,           U2191,           U21D1 ]
        };
        key  <KP4> {
            type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
            symbols[Group1]= [ osfLeft,            KP_4,           U2190,           U21D0 ]
        };
        key  <KP5> {
            type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
            symbols[Group1]= [ osfDown,            KP_5,           U2194,           U21D4 ]
        };
        key  <KP6> {
            type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
            symbols[Group1]= [ osfRight,            KP_6,           U2192,           U21D2 ]
        };
        key  <KP2> {
            type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD_CUST",
            symbols[Group1]= [ osfDown,            KP_2,           U2193,           U21D3 ]
        };

    };
    xkb_geometry { 
        include "pc(pc105)" 
    };
};

注:Super / LWINキーを使用する場合はまったく同じですが、Mod4代わりに使用しShiftて次のことがあることを確認してください。

            modifier_map Mod4 { <LWIN> };

シンボルセクションで!

おすすめ記事