在我的自定义键盘布局中,我已经有这些行:
// row 1 (E)
key <TLDE> { [ question, exclam, masculine, ordfeminine ] };
key <AE01> { [ braceleft, 1 ] };
key <AE02> { [ bracketleft, 2, periodcentered ] };
key <AE03> { [ parenleft, 3, EuroSign ] };
key <AE04> { [ less, 4 ] };
key <AE05> { [ slash, 5 ] };
key <AE06> { [ apostrophe, quotedbl, dead_diaeresis ] };
key <AE07> { [ equal, plus ] };
key <AE08> { [ backslash, 6, notsign ] };
key <AE09> { [ greater, 7 ] };
key <AE10> { [ parenright, 8 ] };
key <AE11> { [ bracketright, 9, exclamdown ] };
key <AE12> { [ braceright, 0, questiondown ] };
这是第 1 行(功能键下方、字母之外的行)。
所以,举个例子,现在如果我按数字1,就会输入{
,当我按shift+1 时,就会输入1
。很好。但是,当我按 Capslock 时,它{
也会输入 ,但我想要1
。 Capslock 适用于字母。
所以现在,我想让大写锁定适用于字母和这一行,但不适用于键盘上的其他键,如shiftlock,我该怎么做?
(Shiftlock:按下某些键然后松开,你按下键盘上的每个键就像按下Shift一样。不仅是字母键,而且Insert
、Home
和箭头键输出都会改变,这不是我想要的)
这在 Windows 中可以通过 Microsoft 键盘布局管理器实现,因为按键定义包含一个按键的所有 4 个级别的状态,以及 Capslock 的另一个级别的状态。但不知道xkb是否允许。
(cap 1:该键启用 cap,cap 0:不启用)
//SC VK_ Cap 0 1 2 6 7
//-- ---- ---- ---- ---- ---- ---- ----
02 1 1 1 007b -1 -1 -1 // DIGIT ONE, LEFT CURLY BRACKET, <none>, <none>, <none>
答案1
如果我理解正确,您不想更改 的默认行为,而只想更改 的状态打开CAPS LOCK时数字行的行为。CAPS LOCK在这种情况下,您可以选择以下选项。
a) 按块更改类型
基本上使用:
ALPHABETIC
(或者#_LEVEL_ALPHABETIC
如果您希望有更多级别)对于那些应始终受 状态影响的键CAPS LOCK。TWO_LEVEL
(或THREE_LEVEL
、FOUR_LEVEL
等)表示不应受 状态影响CAPS LOCK而仅受该键影响的Shift键。
...
// row 1 (E)
key.type[group1]="ALPHABETIC"; <<-----------
key <TLDE> { [ question, exclam, masculine, ordfeminine ] };
key <AE01> { [ braceleft, 1 ] };
key <AE02> { [ bracketleft, 2, periodcentered ] };
key <AE03> { [ parenleft, 3, EuroSign ] };
key <AE04> { [ less, 4 ] };
key <AE05> { [ slash, 5 ] };
...
// for further definitions where caps lock should not affect, use the following:
key.type[group1]="TWO_LEVEL";
...
...
b) 更改每个单独的密钥
这是另一个上下文中的示例,以防您希望为每个键单独设置不同的键类型。基本上,键类型是在键定义“内部”设置的,而在块情况下,它是在外部定义的并应用于后续键定义。
partial xkb_symbols "swap_menu_rctrl_print" {
// for newer thinkpad keyboards with print screen in the wrong place
key <PRSC> {
type= "TWO_LEVEL",
symbols[Group1]= [ Control_R, Menu ]
};
key <RCTL> {
type= "ONE_LEVEL",
symbols[Group1]= [ Menu ]
};
};
一般来说,你可以看看更复杂的布局的定义,例如德国T3布局的定义/usr/share/X11/xkb/de