Zsh 上的 Arch Linux Wiki 页面有一个从 terminfo 获取键序列的示例。
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...
但是我怎样才能得到带有修饰符的呢?特别是 Alt+j 和 Alt+k。
谢谢你。
Zsh 上的 Arch Linux Wiki 页面有一个从 terminfo 获取键序列的示例。
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...
但是我怎样才能得到带有修饰符的呢?特别是 Alt+j 和 Alt+k。
谢谢你。
ncurses
终端数据库定义了这些(请参阅常见问题解答中的如何使用移位或控制修饰符?ncurses
)。其中大部分是基于完成的工作
xterm
(例如,请参阅此页面)。这些是唯一的名称(
zsh
忽略,因为它们不在其预定义终端名称的字典中 - 请参阅Src/Modules/terminfo.c)。例如,您必须对 的输出进行一些 shell 分配,tput
才能将数据放入变量中。Alt当应用于普通键(例如或中)时,通常不被视为修饰符。
j
k
xterm
它有一个模式(modifyOtherKeys),可以告诉它为不同的组合发送一个转义序列(参见常见问题解答中的我的程序如何区分 control-I 和选项卡?
xterm
)。在这种情况下,
zsh
根本没有提供任何帮助。同样,终端不会提供结果表(它处理特殊键)。需要一个定制的应用程序。您可能想到了元功能。那确实有一个 terminfo 功能(
smm
启用,rmm
禁用)。但是,大多数终端(除了xterm
)实现这一点的方式与记录的行为不同。在terminfo(5)
:这部分是由于
bash
文档中的向后定义(有关详细信息,请参阅我的答案)。但在任何情况下,terminfo 都不会保存告诉您的脚本哪些字符可能带有前缀的信息Escape。