Zsh 上的 Arch Linux Wiki 页面有一个从 terminfo 获取按键序列的示例。
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能得到带有修饰符的呢?具体来说是 Alt+j 和 Alt+k。
谢谢。
终端ncurses
数据库定义了这些(请参阅常见问题解答中的如何使用移位或控制修饰符?ncurses
)。
其中大部分是基于所做的工作xterm
(例如,请参见此页)。
这些是唯一的名称(会zsh
被忽略,因为它们不在预定义终端名称的字典中 - 请参阅Src/Modules/terminfo.c)。例如,您必须对 的输出进行一些 shell 赋值,tput
才能将数据放入变量中。
Alt当应用于普通键(例如中的或)时,通常不被视为修饰符。j
k
xterm
它有一个模式(modifyOtherKeys),可以告诉它发送不同组合的转义序列(请参阅常见问题解答中的如何让我的程序区分 control-I 和 tab?xterm
)。
在这种情况下,zsh
根本不提供任何帮助。同样,终端不会提供结果表(它处理特殊键)。需要定制应用程序。
您可能想到了元功能。它确实有一个 terminfo 功能(smm
启用、rmm
禁用)。然而,大多数终端(除了)的实现方式与记录的xterm
行为不同。在:terminfo(5)
如果终端具有充当移位键的“元键”,设置所传输的任何字符的第 8 位,则可以用 来指示这一事实
km
。否则,软件将假定第 8 位是奇偶校验位,并且通常会被清除。如果存在用于打开和关闭此“元模式”的字符串,则可以将它们指定为smm
和rmm
。
这部分是由于bash
文档中发现的向后定义(有关详细信息,请参阅我的答案)。但无论如何,terminfo 都不会保存告诉您的脚本哪些字符可能以 为前缀的信息Escape。
归档时间: |
|
查看次数: |
1373 次 |
最近记录: |