如何绑定功能键发出颜色代码?



我正在制作终端录音,我想更改终端前景色以强调录音中的某些部分(例如某些命令行参数)。

如何映射功能键以在 bash/readline 中发出颜色代码?

我可以使用bind '"e[21~":"e[A"'绑定到其他东西,例如箭头键,所以我认为做类似bind '"e[21~":"e[[31m"'的事情应该发出颜色代码并更改 fg 颜色。

其实不然。我该如何完成这项工作?

如果将键绑定到像e[A这样的字符串,那么这个键会发出这个字符串,而这个字符串又被readline库再次解析并解释(在这种情况下意味着"up",然后指向函数previous-history)。 字符串永远不会打印到终端。

因此,如果要打印某些内容,则需要将密钥绑定到打印任意内容的函数(ANSI 颜色转义序列)。 我不知道有这样的阅读行功能,因为如果你仔细考虑一下,它没有多大意义。 问题是readline没有彩色字符的概念(没有内部模型)。 Readline 仅适用于原始字符,不带字符样式。 切换颜色,输入一些可见字符,然后使用光标键编辑已经键入的(可能是彩色的,也许是标准)的字符 - 这样的东西将导致整行的重绘。 在这个过程中,颜色将被迅速消除(因为readline并不真正了解它们)。

所以我想你想要的是不可能的。 这是readline不支持的功能,您不能简单地从外部(正确)添加到它而不会破坏东西。

最新更新