终端不是这样工作的。

终端不是这样工作的。

从哪里可以获得 zsh bindkey 的代码?特殊性我需要左移。

到目前为止,我找到了获取代码的不同方法:

1)key[Down]=${terminfo[kcud1]}但是在哪里可以找到 terminfo 中的所有键名?

2)sudo showkey -a打印某些值的输出,例如^[[C 右箭头,但 ctrl、shitf、space 等的输出为空。

3)Ctrl+V在终端中,

它返回一些值,但对于shift、ctrl等来说又是空的。

还有xmodmap -pk | grep Shift返回0xffe1 (Shift_L),但是当我尝试绑定此代码时,它不起作用,为什么会这样?

答案1

终端不是这样工作的。

终端不发送修饰键。修改器被终端吞掉并且不会通过线路发送到主机。终端输入的形式为字符序列不是键盘事件。 (是的,一些真实的终端,例如 DEC VT520 支持“扫描代码”模式,但这将无法修复您的情况实际上尝试做,并且几乎可以肯定你是不是使用 DEC VT520 或任何完全模拟它的东西。)这些序列是预先组成的字符,或表示某些非图形键(即功能、光标键盘、编辑键盘和计算器键盘键)的 ECMA-48 控制序列。

使用终端 I/O 的程序根本不将其作为其 I/O 范例的一部分。

顺便说一句,Terminfo 不具备几乎全部甚至大部分 ECMA-48 控制序列。这实际上是处理终端输入的一种非常低劣的方式,具有讽刺意味的是,因为它对密钥的处理非常糟糕和弦包括非图形键和修饰键。因此,不要去查找 terminfo 来告诉您有关终端输入的信息。

GUI、其他操作系统上的“控制台”以及内核(和某些用户空间)虚拟终端所基于的低级 HID 是不同的概念。那些具有应用程序可见的键盘按下/释放输入事件的概念。但是POSIX通用终端接口,如 ZLE 在 Z shell 中所使用的那样,并不按您想象的方式工作。

进一步阅读

答案2

该线程中有一些有趣的点,其中没有一个显示 Shift 键的键绑定。

键绑定表?

查看“系统偏好设置”->“键盘”->“修饰键”中的修饰键,似乎两个 Shift 键都无法更改。 Shift 锁是,但不是任一 Shift 键

相关内容