2
(Numlockがオンのとき)2という数字パッドキーが2を生成するようにキーボードをマッピングしたいのですが、KP_2
Shiftキーまたは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 + Down
preserve[...]=None
Ctrl + 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
置き換えるか、両方を消去したい場合でも可能です。その後、前の記号コードを作成したコードに置き換える必要があります。Shift
Control
Control+Shift
KP_Left
key <KP4> {
type[Group1]= "FOUR_LEVEL_MIXED_KEYPAD",
symbols[Group1]= [ osfLeft, KP_4, U2190, U21D0 ]
};
したがって、KP_Leftを生成する代わりに(そして最終的に押した項目に従って関連項目を生成する代わりに)修飾子をShift/Control
削除します(再度、で設定した内容に従って)。Shift/Control
osfLeft
したがって、このステップの最初の解決策は次のとおりです。
# 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+Down
Control+2
Down
osfLeft
Control
Shift
Ctrl
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> };
シンボルセクションで!