Caps LockをHyper / Additional Modifierに変更できますか?

Caps LockをHyper / Additional Modifierに変更できますか?

Arch Linuxでは、Ctrlの代わりにCaps Lock機能を使用します。コンソールでは、プライベートキーマップを介して、Xではxorg.conf

Caps LockをHyper修飾子に変更する方法を調べたところ、コンソールでは可能ではないようですが、Xではこれを行う方法はありますか?

これは私が現在Xで使用しているものです:

Option "XkbOptions" "ctrl:nocaps"

XkbOptionsCaps Lockを追加の修飾子として機能させるオプションやこれに似たものはありますか?

私の目標は、新しい修飾子を使用してEmacsでより多くのカスタムキーマップを生成できることです。

ベストアンサー1

xmodmapを使用すると、これが簡単になります。 .xsessionまたは.xinitrcに次のように入力します。

xmodmap -e "keysym Caps_Lock = Hyper_L"

また、Hyper_Lが他のキーと共有されていない修飾子マップに割り当てられていることを確認する必要があります。それ以外の場合、そのキーの修飾子が生成される可能性があります(またはそのキーがHyperになる可能性があります)。引数なしで実行しますxmodmap(出力は異なる場合があります)。

> xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce), Hyper_L (0x4e)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

この例では、Hyper_Lにはハイパーキーと同じ修飾子が割り当てられているため、スーパーキーと見なされます。次のコマンドはこれをmod4から削除し、空のmod3修飾子マップに配置します。

xmodmap -e "remove Mod4 = Hyper_L" -e "add Mod3 = Hyper_L"

Hyper_L が修飾子マップのリストに表示されない場合、削除コマンドは不要な場合があります。

修飾子マッピングの謎は、X11が修飾子がオフになっているかどうかを伝える方法によって異なります。 「Hyper」または「Super」を送信するのではなく、シングルバイトのビットフィールドを送信します。各ビットは修飾子マップに対応する。アプリケーションは修飾子マップを見て、特定のビットが実際に何を意味するのかを調べる必要があります。たとえば、SuperキーとHyperキーの両方をmod4に割り当てると、アプリケーションはSuperキーまたはHyperキー(または両方)を押したかどうかを知りません。

おすすめ記事