“ 1。那么第5级修饰符有什么作用?”
它选择第五级。第二级修饰符(仅常规变速)选择第二级,而第三级选择第三级。
第5级修饰符选择第5级而不是第4级(在第3级修饰符之后)的原因是,这三种修饰符可以以不同的方式组合以选择8种不同的级(包括不使用任何修饰符,只是按下一个没有任何此类修饰符的键)。自2↑3 = 8以来,共有八种组合。对于前两个修饰符,有四种组合:
- 无修饰符(1级)
- 2级修饰符,又名shift(2级)
- 3级修饰符(3级)
- 2 + 3修饰符(4级)
添加第三个修饰符(第5级)会增加四个级别。
“ 2。我该如何设定,让我可以得到5个或六个不同的角色了单个键(按住Shift键修改,Alt Gr并Right
Ctrl举例)?”
首先,您需要一个布局,每个键使用五个或更多字符。您可以选择一个现有的布局,但是如果您只是想向当前使用的布局添加更多级别,那可能不是最佳选择。例如,有一个Neo键盘布局(†1),但是“针对德语进行了优化”,因此对于大多数说英语的人来说并不是很好。
尽管如此,看看Neo为Level 5修改器选择了哪些键还是有启发性的。
Neo显然将第5级修饰符称为“ Mod4”。如您所见,它使用了左shift键(LSGT
)和右alt键/ AltGr
键右边的键。这是在欧洲键盘(105键)上,而在美国键盘(104键)上具有窄的左移键和高而细的返回键。对于基于美式键盘的键盘布局,可能不得不(或倾向于)选择其他键。
选择5级修饰键
在sup的回答中,他选择使用Xmodmap。如今,建议在Xmodmap上使用Setxkbmap之类的工具。Xkb带有许多预定义的选项,可用于选择5级修饰符。如果咨询
man xkeyboard-config并进行搜索,lv5
则会找到以下选项:
┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option │ Description │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│ │ lock when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
└──────────────────────┴───────────────────────────────────────────────────┘
因此,记录的选项是LSGT
键,右alt键,右Windows键和左Windows键。如我们所见,Neo使用前两个选项。
假设您要在lv5:ralt_switch_lock
某些布局中使用该选项。此命令us
使用此5级修饰键设置布局:
setxkbmap -option "lv5:ralt_switch_lock" us
因此,对于中记录的任何选项man xkeyboard-config
,请将该参数用作-option
使用Setxkbmap时的参数。
如果这些选项还不够,并且您想将另一个键定义为5级修饰符,那么查看这些选项的声明将很有帮助。他们似乎在
/usr/share/X11/xkb/symbols/level5
。的声明
lv5:ralt_switch_lock
如下所示:
partial modifier_keys
xkb_symbols "ralt_switch_lock" {
include "level5(lock)"
key <RALT> {
type[Group1] = "EIGHT_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
};
};
的右侧symbols[Group1]
声明密钥的每个级别应产生什么密钥或字符。这将使用所有八个可能的级别,因为当与另一个5级切换键一起按下时应该锁定 5级修饰符。因此,ISO_Level5_Lock
由于按住5级换档和其他Shift键的组合(对于所有这些键都不用),可以访问5-8
级。如果您只想要换档行为,而不想要两次按下锁的行为,则可以进行更简单的声明(来自同一文件):
// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift ]
};
include "level5(modifier_mapping)"
};
向布局添加额外的关卡
Xkb布局是相当模块化的。您可以包括现有布局并进行更改。因此,我们可以选择一个少于5个级别的现有布局,并为其添加一些级别。
您可以通过将带有布局的文件复制/usr/share/X11/xkb/symbols/
到来创建新的布局,或者将Xkb工具查找布局的位置复制到新
位置。但这需要sudo特权,因此它不是最佳解决方案。或者,您可以复制的目录结构,xkb/
并将布局放在的相应目录下xkb/
,即
symbols/
。所以说你已经做了一个文件xkb-tree/symbols/my-layouts
。为了使用此文件中定义的布局,您可以使用-print
选项,setxkbmap
然后将输出通过管道传输到xkbcomp
。该包装器脚本将布局作为输入:
#!/bin/sh
# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
-print |
xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"
就具有布局的文件而言,假设我们要扩展使用四个级别的“美国国际”布局。首先,我们以与Neo相同的方式设置3级和5级移位键:
partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
};
现在我们要添加一些额外的字符。让我们仅以Qwerty布局的前四个键为例。这些键是Q
to R
,对应<AD01>
于<AD04>
。首先,我们需要使密钥能够使用多达八个级别:
key.type[Group1] = "EIGHT_LEVEL";
对于前四个级别,为了不重新定义它们,我们将它们映射到NoSymbol
。然后我们添加两个级别。在级别5上,我们添加箭头←↓↑→
(†2)。在6级上,我们添加了方向键。我们的布局最终看起来像这样:
partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
// Make the following keys capable of using eight levels.
key.type[Group1] = "EIGHT_LEVEL";
key <AD01> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
leftarrow, Left
] };
key <AD02> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
downarrow, Down
] };
key <AD03> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
uparrow, Up
] };
key <AD04> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
rightarrow, Right
] };
};
为了使用它,我们可以使用我们制作的包装器脚本:
./setxkbmap-wrapper "my-layouts(mine)"
†1:Neo为de(neo)
Xkb;setxkbmap "de(neo)"
。
†2:为了找到Xkb使用的符号名,请搜索名为的文件keysymdef.h
。它应该在名为的目录下X11/
。您也可以使用Unicode名称,例如U2192
U + 2192。