这个问题可能应该去回顾计算,因为人们应该使用 XKB,但我真的很好奇他们是如何做到的闩锁使用 xmodmap / 进行组切换XChangeKeyboardMapping()
。
我阅读了 xmodmap man 和 X11 lib 文档,似乎要拥有英语和俄语键盘布局,您需要将键符号映射到某些键码(例如[code_for_letter_l] --> XK_l XK_L XK_Cyrillic_de XK_Cyrillic_DE
),然后将某些键码映射到 MODE_SWITCH。
按下此代码和 L 会给出俄语字母“Д”。
但我怎样才能锁住它呢?有 Lock 修饰符,但它只能与 XK_Caps_Lock 键符号(以及我不理解的 ShiftLock)一起使用。
给 MODE_SWITCH 添加锁没有任何影响。
使用 Linux 控制台键盘映射,我可以向 AltGr 添加组,然后向 AltGr_Lock 添加一些键代码以使其锁定。它有效。但在 X 中我该怎么做呢?
我检查了几个西里尔文和其他非拉丁布局的 modmap(古代发行版有很多),在所有情况下,人们要么使用大写锁定,要么根本没有锁/闩锁。
因此,我想到在 XKB 之前(1996 年之前?)不可能使用“CTRL+Shift”之类的键切换布局,但这听起来很荒谬。
我对吗?
答案1
首先这叫做锁因为闩锁表示键只会影响下一个键。
有不在核心协议中锁定组的方法,但 XKB 扩展根据以下内容添加了一些密钥ISO/IEC 9995。
XKB,附录 C。新的 KeySyms:ISO NEXT GROUP
keysymdefs.h
#define XK_ISO_Next_Group 0xfe08
所以,我添加keycode 133 = ISO_Next_Group_Lock
到~/.xmodmap
而不是 Win 键切换我的组