反向控制代码查找终端

反向控制代码查找终端

我的理解是,终端通常使用 ANSI 控制代码来表示非字母数字字符序列。例如,.inputrc在 Linux 中编辑 Bash 时,很容易找到如下所示的代码序列:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word

上面的命令定义Bash 命令的键绑定history-search-backward等。

现在,在 bash 中,我可以read查看键盘中键入的字符如何映射到 ANSI 控制代码。例如,如果我运行read,然后输入Ctrl-P,我会得到:^P。同样,如果我输入 Alt-W,我会得到:^[W

我的问题是:是否有一个程序、工具或网站可以起到相反的作用?即输出或显示键盘按键序列的工具,我需要在键盘上键入这些按键序列以获得给定的 ANSI 控制代码序列。例如,输入^[W应输出:Alt-W

谢谢!

答案1

infocmp可以帮助。它将 escape 写成\E而不是\eor ^[

例如,要查找\e[A,这是您的历史搜索向后:

$ infocmp -1x | grep -F '=\E[A,'
       cuu1=\E[A,
$ man 5 terminfo | grep '  cuu1  '
       cursor_up                     cuu1       up       up one line

它告诉您向上按光标,又称向上箭头。

请注意,您将需要-x标志(如上所示)来显示某些组合,例如Ctrl+ <-

这些扩展键不是标准的一部分,因此它们没有在 terminfo 手册页中列出,但它们记录在术语信息文件

另请注意,控制序列根据您使用的终端而有所不同。

infocmp -1x <terminal>您可以使用、 例如infocmp -1x rxvtinfocmp -1x putty等获取有关不同终端的信息。

一旦你弄清楚 terminfo 认为你拥有哪一个,如果你设置你的TERM变量来匹配,事情就会变得更容易。

答案2

cat函数是执行此操作的常用方法,因为您可以使用它来显示键盘实际发送的内容。 bash 不使用终端数据库中的任何扩展信息(它使用子集传统 termcap 功能的一部分)。

cat当然,使用 的缺点是确定是否

^[[A

^[A 或者 escapeA(请注意 bash 提供了一个可打印的内容\e来表示该escape字符)。

在实践中,您可以忽略前者:基本上没有人发送这三个文字字符,“每个人”都将其^[作为escape字符发送)。

进一步阅读:

相关内容