Mode_switch修饰符是做什么用的?


29

在玩游戏时,xmodmap我遇到了一个听说过的修饰键:Mode_switch。似乎与插入特殊字符有关。

我将其分配给了一个键,但它似乎没有作用。这是为了什么 与ISO_Level3_Shift(Alt Gr)有什么不同吗?



:链接在一个相关的问题unix.stackexchange.com/questions/461972/...
杰夫·夏勒

Answers:


29

Mode_switchAltGr在许多键盘布局上调用的键的旧式(XKB之前)名称。它与相似Shift,因为当您按下对应于某个字符的键时,如果同时按下Shift或,则会得到另一个字符AltGr。与X9不同ShiftMod_switch它不是X11意义上的修饰符,因为它通常适用于字符,不适用于功能键,因此应用程序仅需要执行字符查找即可获得所需的效果。

ISO_Level3_Shift是此密钥的XKB版本。一般来说,XKB复杂得多,并且可以做一些额外的花哨的东西。XKB的机制更为通用,因为它允许键盘布局改变哪个键受哪个修饰符影响,它概括了粘滞(CapsLock-style)和同时按下(Shift-style)修饰符,等等。


大知道,ISO_Level3_Shift可以充当“粘粘”,我一直在寻找了很久,而功能:unix.stackexchange.com/questions/39014/...
vemv

@Gilles那么,AltGrMode_switch相同的密钥?如果不是,在此链接中,它们听起来好像是一样的东西。你能澄清一下吗?
Utku

@Utku Mode_switchISO_Level3_Shift以略有不同的方式执行相同的操作。我并不是说要了解这些差异。在大多数情况下,它们并不重要,但我确实记得,将xmodmap与XKB名称混合有时会导致修饰符无法正常工作。
吉尔(Gilles)'所以

@Gilles我也弄不明白的差异,但我有两种结束了us(cz_sk_de)功能或取决于是否对于某些按键自定义的xmodmap映射(逗号为例)AltGrMode_switchISO_Level3_Shift,但在同一时间不能得到这两个功能。
帕维尔·西默达(PavelŠimerda)

4
粘滞键不是CapsLock样式。粘滞键称为“闩锁”,而锁键称为锁。在锁定键有效之前,按下下一个非修饰符后,释放粘滞键,直到再次按下它们为止。
Guildenstern

12

这个答案并不意味着要与@Gilles的答案相矛盾,而是要描述输入处理的另一个方面,我认为他的答案“未充分说明”。

您可以同时使用ISO_Level3_Shift(ALT-GR)和Mode_switch在同一时间用不同的结果。它需要一些配置,但是您可以同时拥有它们,并使用它们为每个物理键盘键产生6个不同的键!

您可以例如配置TabMode_switch当举行 ,然后如标有“H”键盘上的按键可能会产生下列字符/键:

h
H
← (Cursor)
← (Symbol)

with H
with ShiftH
with AltGrH
with AltGrShiftH
with TabH
with TabShiftH

因此,回到您的问题所在:IL3S并且Mode_switch可以配置为表示不同的含义,因此您可以在35个按键上使用光标键和来自(重音)语言的约200个有用字符,方框图和技术字符集。 3个字母行。

要完成上述任务:

# Initial Setup
xmodmap -e 'keycode 23 = Mode_switch ISO_Left_Tab Tab ISO_Left_Tab Tab ISO_Left_Tab'
xmodmap -e 'keycode any = Tab'
xcape -e "Mode_switch=Tab"

例如H

xmodmap -pke | grep 'h H'
# Make note of the keycode, note the 8 columns after the `=`,
# then edit and feed back into xmodmap with:
xmodmap -e 'keycode  43 = h H lowrightcorner uprightcorner Left leftarrow h H'

哇!我现在明白了您在第二段中所说的意思,您刚刚过了我的日子😉我不再需要从htmlarrows.com复制和粘贴来编写类似的内容fn: A → B
帕特里克·迈凯轮

我认为通常的做法是使用ISO_Level5_Shift。这将产生8个级别,第7个级别是lvl3+lvl5+H&c。
牙轮

1

Mode_shiftXkb中的Shift键是组或布局的移位键。如果您的布局包含多个组,则可以按住此键以访问下一个组。如果有多个布局,可以按住此键在布局之间切换(†1)。

因此Mode_shift是将级别Shift(或使用keyym名称,使用Shift_L和 )进行分组Shift_R

如果我们认为Mode_shift别名为ISO_Group_Shift(†2),则可能会更清楚。也有称为ISO_Group_Latch和的键 ,ISO_Group_Lock分别对应于 ISO_Level2_Latch(锁存移位)和Shift_Lock(†3)。

对于不同的脚本,还有许多别名:

  • kana_switch
  • Arabic_switch
  • Greek_switch
  • Hebrew_switch
  • Hangul_switch

†1:这是基于我对Xkb的“组”和“布局”的理解。似乎就象使用这样的键在它们之间进行选择一样对待它们。

†2:我上的文件这个基础keysymdef.h这个Git仓库 在修订ab8666661fc6(“添加XF86XK_AudioPreset”,2017年5月10日)。在安装中,您可能会在找到此文件 /usr/include/X11/keysymdef.h

†3:还有一个钥匙ISO_Lock,一种通用锁定钥匙。

AltGr钥匙的含义

吉尔斯在回答中提到AltGr钥匙的联系:

Mode_switchAltGr在许多键盘布局上调用的键的旧式(XKB之前)名称。

这使我怀疑“ AltGr”可能代表“替代/替代组”,因为Mode_switch它用于转移组。然而,事实证明这是错误的。根据按键AltGrWikipedia页面,“ AltGr”似乎来自IBM键盘,并且在其手册中表示“ AltGr”是“备用图形”的缩写。这是有道理的,因为在很好地支持在多个脚本之间快速切换之前,似乎很可能使用键盘来绘制“图形”(文本用户界面中使用的箱形绘制字符)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.