将 Super+[左|右] 映射到 Home/End

将 Super+[左|右] 映射到 Home/End

如何映射键“Super”,以便在与左/右组合时产生键码 Home/End?

我当前的setxkbmap:

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

答案1

您不能仅使用 setkxbmap 选项来完成此操作,因为没有默认选项可以满足您的要求。

但您可以通过在较低级别定义关键行为来做到这一点。

这一页http://madduck.net/docs/extending-xkb/帮助我理解并找到一种方法来做到这一点。

创建一个文件 ~/.xkb/keymap/mykbd ,在其中放置 setxkbmap 的输出,它将作为您的基本键盘定义;例如:

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”类型的使用,这意味着按下 Super 键(而不是 Shift 键)时会触发符号行上的第二个(2 级)符号。

最后,编辑~/.xkb/keymap/mykbd文件以加载我们编写的片段:

  • 在行中xkb_types添加+mytypes(super_level2)引号内
  • 在行中xkb_symbols添加+mysymbols(super_arrows_home_end)引号。

现在你可以加载它

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

测试你的左/右键,它们应该按你想要的方式工作。

相关内容