为什么匈牙利语键盘上的 Ctrl+“特殊字符”会翻译为相应的英语布局键?

为什么匈牙利语键盘上的 Ctrl+“特殊字符”会翻译为相应的英语布局键?

我有一个匈牙利语键盘在终端中按 Ctrl 和任何一个öüóéá都会产生出现在英文布局,因此0-=;'分别在kitty和中gnome-terminal。 Ctrl +őúű不会产生字符,并且在两个模拟器中执行的操作似乎略有不同。在 kitty 中,Ctrl+0 生成 0,Ctrl+í 生成 <,而在 gnome 终端中,Ctrl+0 似乎什么也不做,而 Ctrl+í 生成 í。

我有两个相关的问题:

  • 如何弄清楚非字符生成序列实际上是做什么的?
  • 这种行为的解释是什么?我假设这些非 ASCII 字符确实遇到了“ctrl-i is tab”类型的问题。

(这可能没有明确的答案,并且也稍微无关,但是将来终端是否有可能像 GUI 软件一样“正常”处理按键?当尝试在 vim 中映射按键时,这种行为真的很烦人:) )

答案1

键盘映射可能取决于环境(X、控制台、应用程序……),并且不是最容易处理的事情,但这可能会有所帮助。

键映射在文件中定义。您的环境选择一个,然后开始根据键盘映射中的规则解释每个键代码。

假设您正在使用此匈牙利语键盘映射(其他发行版的位置可能有所不同,这适用于 Debian):/usr/share/keymaps/i386/qwerty/hu101.kmap

如果您查看它(zless,,zcat...),您会发现您正在查看的信息,嗯,几乎:

# Hungarian keymap for 101 key keyboards (iso8859-2)
...
include "linux-with-alt-and-altgr"
...
keycode  11 = +odiaeresis   +Odiaeresis doubleacute
alt     keycode  11 = Meta_zero

这仅定义了普通的键和Alt+ 键。

那么,Ctrl+ 组合从何而来?您必须检查包含的文件以及它们包含的文件,直到找到为止。

您可以添加新的键盘映射,更改现有的键盘映射,或者只是执行居住修改xmodmap(联机帮助页中的许多示例)。xmodmap适用于某种编译版本,因此您不必自己遍历包含链。

为什么会这样?嗯,本地化键盘的人们通常只修改每个人都同意的内容,例如Ö匈牙利键盘的位置,并从更通用的键盘继承其余配置,例如linux-bare-keyspc101

Ctrl+应该返回什么Ö?如果没有全球共识的明确答案,那么它就保持不变,但可以由用户自定义。

您可以创建一个新键盘,将这些Ctrl+ ÖÜ、... 映射到没有分音符的版本。它会是类似的东西hungarian-ctrl-diaresisless。如果您认为每个人都可以使用它们,您可以向软件包维护者提出建议。

相关内容