我有一个匈牙利语键盘在终端中按 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-keys
,pc101
。
Ctrl+应该返回什么Ö?如果没有全球共识的明确答案,那么它就保持不变,但可以由用户自定义。
您可以创建一个新键盘,将这些Ctrl+ Ö、Ü、... 映射到没有分音符的版本。它会是类似的东西hungarian-ctrl-diaresisless
。如果您认为每个人都可以使用它们,您可以向软件包维护者提出建议。