web-dev-qa-db-ja.com

Super + [左|右]をホーム/エンドにマップ

キー「Super」をマップして、Left/Rightと組み合わせると、キーコードHome/Endが生成されるようにするにはどうすればよいですか?

私の現在のsetxkbmap:

setxkbmap \
  -model pc105 \
  -layout 'us(dvorak-intl),us(alt-intl)' \
  -option \
  -option grp:lctrl_lshift_toggle \
  -option compose:rwin
7
iokevins

デフォルトのオプションがあなたが望むことをしないので、あなたはsetkxbmapオプションだけでそれをすることはできません。

ただし、キーの動作をより低いレベルで定義することでそれを行うことができます。

このページ http://madduck.net/docs/extending-xkb/ は、それを理解し、その方法を見つけるのに役立ちました。

Setxkbmapの出力を配置するファイル〜/ .xkb/keymap/mykbdを作成します。これが基本キーボード定義になります。例えば:

_setxkbmap -print > ~/.xkb/keymap/mykbd
_

次に、_~/.xkb/types/mytypes_ファイルを作成し、以下を入力します。

_partial
xkb_types "super_level2" {
    Virtual_modifiers Super;
    type "SUPER_LEVEL2" {
        modifiers= Super;
        map[Super]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Super";
    };
};
_

キーが押されたときに送信される記号を簡単に定義できるようにするタイプSUPER_LEVEL2を定義します。 Super

次に、_~/.xkb/symbols/mysymbols_に次の行を入力します。

_partial modifier_keys
xkb_symbols "super_arrows_home_end" {
    key <LEFT>  {
        type[Group1] = "SUPER_LEVEL2",
        symbols[Group1] = [    Left,   Home      ]
    };
    key <RGHT>  {
        type[Group1] = "SUPER_LEVEL2",
        symbols[Group1] = [    Right,  End       ]
    };
};
_

(定義した「SUPER_LEVEL2タイプ」の使用に注意してください。これは、(Shiftキーではなく)スーパーキーを押すと、シンボル行の2番目(レベル2)のシンボルがトリガーされることを意味します。

最後に、_~/.xkb/keymap/mykbd_ファイルを編集して、作成したスニペットをロードします。

  • _xkb_types_行の引用符内に+mytypes(super_level2)を追加します
  • _xkb_symbols_行の引用符に+mysymbols(super_arrows_home_end)を追加します。

今、あなたはそれをロードすることができます

_xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
_

左/右のキーをテストします。希望どおりに機能するはずです。

9
Pablo Saratxaga