Caps Lockを下矢印キーにマップし、Caps LockをShiftキーを上矢印キーにマップしようとしています。
次の入力ファイルでxmodmapを使用してみました。
remove Lock = Caps_Lock
keycode 66 = Down Up
Caps Lockを押しても下矢印キーを送信することはできますが、Caps Lock + Shiftを押してもUpは送信されません。
何が間違っていますか?
このソリューションの技術的な詳細には多くのことがあります。問題を気にせず、解決策だけに関心がある場合は、レイアウトファイルセクションに自由にジャンプしてください。
を介して上下に移動する CAPS そして Shift+CAPS 与えられた.Xmodmap
で私のシステムで期待通りに動作します。
を呼び出して、設定が実際に有効かどうかを確認します
$ xmodmap -pk | grep ^\\s*66
66 0xffe5 (Caps_Lock) 0x0000 (NoSymbol) 0xffe5 (Caps_Lock)
$ setxkbmap -layout us && xmodmap ~/.Xmodmap
$ xmodmap -pk | grep ^\\s*66
66 0xff54 (Down) 0xff52 (Up)
次に来る質問には別の(実際の)問題があります。
LEVEL2 <SHIFT>
修飾子は、 Shift ボタンは、矢印キーで行を移動するときにテキストエディターで文字を視覚的にマークするためにあります。 <UP>
を割り当てた場合 ↑ <CAPS>
の第2レベルまで、あなたが効果的にしているのは Shift+↑。その場合にのみ、Shift修飾子を無効にする必要があります。 xmodmapを使用してこれを行うことはできません。
キーマップを変更する「実際の方法」は、 xkb です。 古いxorgメーリングリスト で解決策を見つけました。 LEVEL2 Caps にリダイレクトする必要があります ↑(<UP>
)キー(Up-Key btwのレベルは1つだけです。)X.orgでは、 Shift 組み込み関数RedirectKey(key=<UP>, clearmods=Shift)
を使用したリダイレクト中の修飾子。 clearmodsは、キーが実際に「押される」前にShift修飾子を「解放」します。
動作をアクティブにする最も簡単な方法は、新しいレイアウトファイルを作成することです。
/ usr/share/X11/xkb/symbols/capslockarrow
default partial xkb_symbols "basic" {
include "de(basic)"
include "shift(both_capslock_cancel)"
key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Down, NoSymbol ],
actions[Group1] = [ NoAction(), RedirectKey(key=<UP>, clearmods=Shift) ]
};
};
で新しいレイアウトをアクティブにします
setxkbmap capslockarrow
新しいレイアウトファイルは、de(basic)
から派生します。これは、標準ドイツ語キーボードのレイアウトです。 us(basic)
やus(euro)
など、他のレイアウトをここに追加できます。 /usr/share/X11/xkb/symbols/
を参照して、可能なことの概要を確認してください。 2文字のコードはファイル名であり、括弧内はファイルのそれぞれのxkb_symbols
定義です。
Capsキー修飾子はもうありません。したがって、私は Caps:shift(both_capslock_cancel)
両方を押す LSHIFT そして RSHIFT 一緒に、あなたはアクティブにすることができます CAPS Lock を押して、ロックを再び解除します Shift キー。
なぜ私がそのために新しい型定義を使用しなかったのかと疑問に思っている場合:Upキーのアクションがトリガーされる前にShift修飾子を放すことができませんでした。ただし、槍のpreserve[Shift] = None
でxkb_types
を明示的に呼び出すことにより、Shiftキーを離すことができます。
以下のコメントで述べられているように、WaylandはXKBにも依存しますが、リダイレクトは許可しません。