有没有办法获得键盘布局(哪个字母在哪里)?

有没有办法获得键盘布局(哪个字母在哪里)?

我有一个很少使用的键盘布局,并且有很多东西显然没有针对我的特定布局进行优化。我想更改程序的热键,但我也希望它可以帮助其他人。有没有办法获取按键盘上的 j 键返回的字母?
具体来说,我想重新映射哪些字母使光标在 vi (neovim) 中移动(这只是 jkgh 等,没有修饰符)。如果我碰巧需要切换到 qwerty,我也不想毁了自己的事情。

答案1

不。

WASD两者HJKL都存在一个问题,即它们高度依赖于其发明者使用特定键盘布局的事实。不,你无法完全改善这一点。

您当然可以从 X 服务器和 KVT 读取 X 和内核 VT 键盘映射,或者至少通过读取它们的各种配置文件来知道您首先放置了哪些。但这只能让你知道哪个关键代码产生哪些字符。它没有告诉您通过线路生成这些键代码的按键的物理位置。

因此,您充其量可以猜测,当(例如)fr.kbd使用键盘映射(使用 FreeBSD 名称)时,通过WASD线路传入的键码会变成ZQSD应用程序所看到的那样。但您无法知道这些按键在实际键盘上实际上形成了所需的形状。

因为:

键盘根本无法通过网络提供这些信息。键盘内部有内部映射,其微处理器使用这些映射将物理矩阵转换为 USB HID 用法或 PS/2 扫描代码,并通过线路发送。它们没有标准形式,主机也无法从键盘上读取它们。

举些例子:

  • 无法判断键盘制造商已决定让整个数字键盘可通过一个Fn关键修饰符应用于主字母数字块内的几列,就像一些小型笔记本电脑键盘所做的那样。通过线路发送的是与其他地方的数字键盘相同的 USB HID 用法和 PS/2 扫描代码。
  • 通常在 104 键 Windows 键盘上雕刻的按键~#位于 ISO 9995-1 位置 D13,但在 105 键、106 键、107 键和 109 键 Windows 键盘上则位于位置 C12。密钥的这种物理移动不会通过连接到主机的任何地方表示出来。主机接收到同一个单曲USB HID 使用和 PS/2 扫描码。
  • 最适用于WASDHJKL,在键盘端重新映射矩阵的键盘,响应键盘本身的开关,炸毁了WASD成为的想法ZQSD
    • 转变Maltron 键盘使用键盘上的开关从 QWERTY 模式进入 Maltron 模式,然后按键突然通过线路WASD发送键码。将地图PANI应用fr.kbd到该应用程序上,应用程序就会看到PQNI字符。
    • 转变Maltron 键盘使用键盘上的开关从 QWERTY 模式进入 Maltron 模式,然后按键突然通过线路HJKL发送键码。将地图DTHO应用us.dvorak.kbd到该应用程序上,应用程序就会看到EYDR字符。

有些讽刺

讽刺的是,光标菱形布局的存在时间比 Unix 还要长。 1966 年的 GE Datapro-760 有光标键,虽然不完全符合现代菱形布局,但也很接近。对于普遍依赖的物理形状来说,这已经很接近了;因为很少有键盘制造商将光标键实际定位在菱形、方形或单行以外的位置。

可悲的是,我们在 Unix 中处于现在的位置是因为 Bill Joy 拥有 ADM 3A。如果 xe 有 DEC VT52 或 Beehive B100(这两款产品也在 1976 年推出,但都有光标键),那么我们现在可能会有一个相当不同的 vi 传统,并且您不会试图找出如何知道HJKL键盘上的物理布局。

答案2

您可以从这里开始阅读:https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-教程(第1部分)

另外,您可以发出如下命令:

cat /dev/tty

按下实际的按键 - 您将看到键盘驱动程序如何识别它们。

相关内容