CapsLock+矢印キーバインディングを設定しようとしています。xkb
ArchLinux、KDE、Xorgの使用
私が達成したいこと(希望事項)
結局のところ、完璧な解決策は
修飾子なし | CapsLock修飾子として |
---|---|
Left | Home |
Up | PageUp |
Right | End |
Down | PageDown |
押すと、CapsLock通常のロックのようにキーを離したときにのみ機能しますCapsLock。
Shiftミックスに追加またはマッピングされたキーを使用するキーバインディングは引き続き機能する必要があります。
さらに、より互換性のために、これらのバインディングは(ステータス、キー)を使用する代わりにキーシムレベルで機能する必要があります。
質問
私はこれが私が望むことを達成すると信じておらず、さらに解析することもできません。
capslock_nav
(に追加/usr/share/X11/xkb/symbols
)
xkb_symbols "lv3-arrow-nav" {
include "level3(caps_switch)"
key.type = "THREE_LEVEL";
key <UP> { [ Up, Up, Prior, NoSymbol] };
key <LEFT> { [ Left, Left, Home, NoSymbol ] };
key <RGHT> { [ Right, Right, End, NoSymbol ] };
key <DOWN> { [ Down, Down, Next, NoSymbol ] };
}
私はこれをステートメントに設定して使用して達成しようとしましたが、CapsLock成功しませんでしたISO_Level3_Shift
。symbols
これまでの進行
私の変更はKDEリストに表示され、次のようにSettings > Keyboard > Advanced
エントリを追加できます。
evdev.xml
<!-- ... under <optionList> ... -->
<group allowMultipleSelection="true">
<configItem>
<name>capslock_nav</name>
<description>Navigation using CapsLock</description>
</configItem>
<option>
<configItem>
<name>capslock_nav:lv3-arrow-nav</name>
<description>Caps Lock Arrow Navigation</description>
</configItem>
</option>
</group>
そしてこれはevdev.lst
確かにしようとします
...
capslock_nav Navigation using CapsLock
capslock_nav:lv3-arrow-nav Caps Lock Arrow Navigation
...
これは次にも反映されますsetxkbmap
。
setxkbmap -print -query
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+pl+inet(evdev)" };
xkb_geometry { include "pc(pc86)" };
};
rules: evdev
model: pc86
layout: pl
options: capslock_nav:lv3-arrow-nav
options
私の変更は含まれていますが、私には含まれず、私の変更も言及されませんxkb_symbols
。
xkbcomp $DISPLAY -
このトピックに関するArchWikiとさまざまなオンライン記事を見てみましたが、少し複雑です。ゆっくり、発展しているようです。
編集:これまでの進捗状況
構成を削除して操作を開始しました。 Archwikiのxkb#caps hjkl
compat
この構成を準備し、対応するファイル(、、symbols
types
)に分割しました。
partial xkb_types "lv3-arrow-nav" {
include "complete";
type "CUST_CAPSLOCK" {
modifiers= Shift+Lock;
map[Shift] = Level2; //maps shift and no Lock. Shift+Alt goes here, too, because Alt isn't in modifiers.
map[Lock] = Level3;
map[Shift+Lock] = Level3; //maps shift and Lock. Shift+Lock+Alt goes here, too.
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Lock";
};
}
partial xkb_compatibility "lv3-arrow-nav" {
interpret Caps_Lock {
action= SetMods(modifiers=Lock);
};
augment "complete";
augment "caps(caps_lock)";
}
partial xkb_symbols "lv3-arrow-nav" {
include "pc";
key <LEFT> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Left, Left, Home],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<LEFT>, clearmods=Lock) ]
};
key <UP> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Up, Up, Prior],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<UP>, clearmods=Lock) ]
};
key <RGHT> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Right, Right, End],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<RGHT>, clearmods=Lock) ]
};
key <DOWN> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Down, Down, Next],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(keycode=<DOWN>, clearmods=Lock) ]
};
}
を使用して確認しましたが、xkbcomp
まだ期待どおりに機能しません。
編集2
まあ、少なくともそれは本当です。何、この構成により
xkb
├── compat
│ └── capslock_nav
├── rules
│ └── evdev
├── symbols
│ └── capslock_nav
├── types
│ └── capslock_nav
└── xkb_keymap.xkb
アプリケーションの使い方
xkbcomp -I$HOME/xkb/ $HOME/xkb/xkb_keymap.xkb $DISPLAY
少なくとも Caps Lock を無効にしてください...
編集3
定義NoAction()
ですべてのタスクを定義してある程度進歩を遂げたようです。symbols
答え1
私が知ることができる限り、次のようです。
布材
- CapsLock+ Left、Up、Right、Down、Home、、PageUpEndPageDown
pl
既存のレイアウト設定を維持する(KDEのキーボード設定で設定されたレイアウトを引き続き使用できます)
動作しない
- KDEとのトグル統合
keyboard > advanced
- トグルがありますが、次のようにsymbols
クエリするときにのみ変更されます。setxkbmap -query
- CapsLockCapsLockいつものようにラッチを外してください
解決策
以下のように、xkeyboard-configに準拠したフォルダ構造を作成しました(xkb / ** / *セクション)。
$HOME/xkb_mod
├── xkb
│ ├── compat
│ │ └── capslock_nav
│ ├── symbols
│ │ └── capslock_nav
│ └── types
│ └── capslock_nav
└── xkb_keymap.xkb
xkb/
-I
包含の一部になります
文書内容
(からインスピレーションを受けるhttps://wiki.archlinux.org/title/X_keyboard_extension#Caps_hjkl_as_vimlike_arrow_keys)
compat/capslock_nav
partial xkb_compatibility "caps-arrow-nav" {
interpret Caps_Lock {
action= SetMods(modifiers=Lock);
};
};
symbols/capslock_nav
partial xkb_symbols "caps-arrow-nav" {
key <LEFT> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Left, Left, Home]
};
key <UP> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Up, Up, Prior]
};
key <RGHT> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Right, Right, End]
};
key <DOWN> {
type= "CUST_CAPSLOCK",
symbols[Group1]= [ Down, Down, Next]
};
};
types/capslock_nav
partial xkb_types "caps-arrow-nav" {
type "CUST_CAPSLOCK" {
modifiers= Shift+Lock;
map[Shift] = Level2; //maps shift and no Lock. Shift+Alt goes here, too, because Alt isn't in modifiers.
map[Lock] = Level3;
map[Shift+Lock] = Level3; //maps shift and Lock. Shift+Lock+Alt goes here, too.
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Lock";
};
};
その後、既存の設定を照会して設定しました。xkb_keymap.xkb
setxkbmap -query > ~/xkb_mod/xkb_keymap.xkb
+capslock_nav(caps-arrow-nav)
以下のすべての項目に手動で含められますinclude
。
xkb_keymap.xkb
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete+capslock_nav(caps-arrow-nav)" };
xkb_compat { include "complete+capslock_nav(caps-arrow-nav)" };
xkb_symbols { include "pc+pl+inet(evdev)+capslock_nav(caps-arrow-nav)" };
xkb_geometry { include "pc(pc86)" };
};
最後に、以下を実行して設定を適用しました。
xkbcomp -I$HOME/xkb_mod/xkb xkb_mod/xkb_keymap.xkb $DISPLAY