Zsh 获取带有修饰符的 terminfo 键

Zsh 获取带有修饰符的 terminfo 键

Zsh 上的 Arch Linux Wiki 页面有一个从 terminfo 获取按键序列的示例。

typeset -g -A key

key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...

但是我怎样才能得到带有修饰符的呢?具体来说是 Alt+j 和 Alt+k。

谢谢。

答案1

终端ncurses数据库定义了这些(参见如何使用移位或控制修饰符?ncurses常见问题解答中)。

其中大部分是基于所做的工作xterm(参见这一页, 例如)。

这些是唯一的名称(会zsh被忽略,因为它们不在预定义终端名称的字典中 - 请参阅src/Modules/terminfo.c)。例如,您必须对 的输出进行一些 shell 赋值,才能tput将数据放入变量中。

Alt通常不被视为修饰语当应用于普通键时,例如j或者k在里面xterm

它有一个模式(修改其他键),它可以告诉它发送不同组合的转义序列(请参阅我的程序如何区分 control-I 和 tab?xterm常见问题解答中)。

在这种情况下,zsh根本不提供任何帮助。同样,终端不会提供结果表(它处理特殊键)。需要定制应用程序。

您可能想到的是特征。那确实有一个 terminfo 功能(smm启用,rmm禁用)。然而,大多数终端(除了xterm)的实现方式与记录在案行为。在terminfo(5)

如果终端有一个充当 Shift 键的“元键”,设置传输的任何字符的第 8 位,则可以用以下命令表示这一事实: km。否则,软件将假定第 8 位是奇偶校验位,并且通常会被清除。如果存在用于打开和关闭此“元模式”的字符串,则可以将它们指定为smmrmm

这部分是由于bash文档中发现的向后定义(请参阅我的答案了解详情)。但无论如何,terminfo 都不会保存告诉您的脚本哪些字符可能以 为前缀的信息Escape

相关内容