自定义数字锁定键盘布局

自定义数字锁定键盘布局

我和许多人一样,始终保持数字锁定键处于启用状态。但是,我想创建一个自定义 XKB 键盘布局,将数字锁定关闭时的键盘映射到通常打开数字锁定时的键盘,并且当数字锁定打开时,我希望它具有自定义布局(更具体地说,我希望、、、、、和键KP_Decimal分别映射到、、、、、和(大写和小写,取决于 shift 或 caps lock),换句话说,我希望数字锁定键的功能更像“十六进制锁”)。首先,我尝试编写一个脚本,该脚本将根据数字锁定状态映射按键,但当我发现它非常慢并且我无法让脚本在按下数字锁定键时自动运行(因为它是一个奇怪的键,按下时会使窗口失去焦点)时,我最终放弃了这个想法。这是我目前拥有的(开头部分是从美国键盘布局文件中复制的):KP_EnterKP_AddKP_SubtractKP_MultiplyKP_DivideABCDEFxmodmap

partial alphanumeric_keys modifier_keys keypad_keys
xkb_symbols "basic" {

    name[Group1]= "English (US) (Hex Lock)";

    modifier_map Mod2 { Num_Lock };

    key <TLDE> {    [     grave,    asciitilde  ]   };
    key <AE01> {    [     1,    exclam      ]   };
    key <AE02> {    [     2,    at      ]   };
    key <AE03> {    [     3,    numbersign  ]   };
    key <AE04> {    [     4,    dollar      ]   };
    key <AE05> {    [     5,    percent     ]   };
    key <AE06> {    [     6,    asciicircum ]   };
    key <AE07> {    [     7,    ampersand   ]   };
    key <AE08> {    [     8,    asterisk    ]   };
    key <AE09> {    [     9,    parenleft   ]   };
    key <AE10> {    [     0,    parenright  ]   };
    key <AE11> {    [     minus,    underscore  ]   };
    key <AE12> {    [     equal,    plus        ]   };

    key <AD01> {    [     q,    Q       ]   };
    key <AD02> {    [     w,    W       ]   };
    key <AD03> {    [     e,    E       ]   };
    key <AD04> {    [     r,    R       ]   };
    key <AD05> {    [     t,    T       ]   };
    key <AD06> {    [     y,    Y       ]   };
    key <AD07> {    [     u,    U       ]   };
    key <AD08> {    [     i,    I       ]   };
    key <AD09> {    [     o,    O       ]   };
    key <AD10> {    [     p,    P       ]   };
    key <AD11> {    [ bracketleft,  braceleft   ]   };
    key <AD12> {    [ bracketright, braceright  ]   };

    key <AC01> {    [     a,    A       ]   };
    key <AC02> {    [     s,    S       ]   };
    key <AC03> {    [     d,    D       ]   };
    key <AC04> {    [     f,    F       ]   };
    key <AC05> {    [     g,    G       ]   };
    key <AC06> {    [     h,    H       ]   };
    key <AC07> {    [     j,    J       ]   };
    key <AC08> {    [     k,    K       ]   };
    key <AC09> {    [     l,    L       ]   };
    key <AC10> {    [ semicolon,    colon       ]   };
    key <AC11> {    [ apostrophe,   quotedbl    ]   };

    key <AB01> {    [     z,    Z       ]   };
    key <AB02> {    [     x,    X       ]   };
    key <AB03> {    [     c,    C       ]   };
    key <AB04> {    [     v,    V       ]   };
    key <AB05> {    [     b,    B       ]   };
    key <AB06> {    [     n,    N       ]   };
    key <AB07> {    [     m,    M       ]   };
    key <AB08> {    [     comma,    less        ]   };
    key <AB09> {    [    period,    greater     ]   };
    key <AB10> {    [     slash,    question    ]   };

    key <BKSL> {    [ backslash,         bar    ]   };

    key <KP0>   {   [ KP_0,     KP_0,       KP_0,       KP_0        ]   };
    key <KP1>   {   [ KP_1,     KP_1,       KP_1,       KP_1        ]   };
    key <KP2>   {   [ KP_2,     KP_2,       KP_2,       KP_2        ]   };
    key <KP3>   {   [ KP_3,     KP_3,       KP_3,       KP_3        ]   };
    key <KP4>   {   [ KP_4,     KP_4,       KP_4,       KP_4        ]   };
    key <KP5>   {   [ KP_5,     KP_5,       KP_5,       KP_5        ]   };
    key <KP6>   {   [ KP_6,     KP_6,       KP_6,       KP_6        ]   };
    key <KP7>   {   [ KP_7,     KP_7,       KP_7,       KP_7        ]   };
    key <KP8>   {   [ KP_8,     KP_8,       KP_8,       KP_8        ]   };
    key <KP9>   {   [ KP_9,     KP_9,       KP_9,       KP_9        ]   };
    key <KPDL>  {   [ KP_Decimal,   KP_Decimal, a,      A       ]   };
    key <KPEN>  {   [ KP_Enter, KP_Enter,   b,      B       ]   };
    key <KPAD>  {   [ KP_Add,   KP_Add,     c,      C       ]   };
    key <KPSU>  {   [ KP_Subtract,  KP_Subtract,    d,      D       ]   };
    key <KPMU>  {   [ KP_Multiply,  KP_Multiply,    e,      E       ]   };
    key <KPDV>  {   [ KP_Divide,    KP_Divide,  f,      F       ]   };
};

我还尝试了Mod1修饰键(按下 shift 键时会插入十六进制字符)和其他一些键。我不知道现在该怎么办。

顺便说一下,上面的代码在文件中/usr/share/X11/xkb/symbol/hex,我使用 选择它setxkbmap hex

相关内容