交换 Caps 和 Esc,并且仅在一种键盘布局中设置 Compose 键

交换 Caps 和 Esc,并且仅在一种键盘布局中设置 Compose 键

我使用丹麦和英语(美国)键盘布局,键盘采用北欧几何设计,这意味着它有小/大键。我休闲时使用丹麦布局,工作时使用英语(美国)。

我希望仅当我使用英语(美国)布局时,此键才为 Compose。

同样地,我希望在相同情况下 Caps Lock 和 Escape 可以互换。

也就是说,我需要将此功能切换为“概念上依赖于”键盘布局小部件的状态。这可能意味着我必须在 XKB 中执行某些操作。

这可能吗? 怎么做?

附加信息:

~$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     dk,us
variant:    ,
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+dk+us:2+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+dk+us:2+inet(evdev)"    };
    xkb_geometry  { include "pc(pc105)" };
};

答案1

我无法帮助解决 xkb 问题,但您仍然可以更改xmodmap保持兼容的映射。例如,如果我已使用 xkb 将键盘配置为:

setxkbmap -layout us,fr -option "grp:lctrl_lshift_toggle,compose:102"

然后我转储映射

xmodmap -pke | egrep -i 'less|greater|multi|caps|escape'

它列出了感兴趣的键码和键符号:

keycode   9 = Escape NoSymbol Escape
keycode  59 = comma less semicolon period horizconnector multiply
keycode  60 = period greater colon slash periodcentered division
keycode  66 = Caps_Lock NoSymbol Caps_Lock
keycode  94 = Multi_key Multi_key Multi_key Multi_key
...

我可以简单地移动要更改的键的列并为其设置新的映射。您可以通过查看字母键(如“w”)的键码来猜测这些列的用途:

keycode  25 = w W z Z guillemotleft less

这一行中的列似乎是:us、us-shift、fr、fr-shift、fr-altgr、fr-altgr-shift。

因此,键码 9 的第 1 列中的 Escape 适用于我的键盘我们模式。如果我想在 Caps_Lock 中我们我做的模式:

xmodmap -e 'keycode 9 = Caps_Lock NoSymbol Escape'

更改应立即生效。尝试完所有更改后,将所有新的“keycode =”行放入一个文件中,并xmodmap -在每次登录时将其输入到管道中。

相关内容