我正在制作终端录音,我想更改终端前景色以强调录音中的某些部分(例如某些命令行参数)。
如何映射功能键以在 bash/readline 中发出颜色代码?
我可以使用bind '"e[21~":"e[A"'
绑定到其他东西,例如箭头键,所以我认为做类似bind '"e[21~":"e[[31m"'
的事情应该发出颜色代码并更改 fg 颜色。
其实不然。我该如何完成这项工作?
如果将键绑定到像e[A
这样的字符串,那么这个键会发出这个字符串,而这个字符串又被readline库再次解析并解释(在这种情况下意味着"up",然后指向函数previous-history
)。 字符串永远不会打印到终端。
因此,如果要打印某些内容,则需要将密钥绑定到打印任意内容的函数(ANSI 颜色转义序列)。 我不知道有这样的阅读行功能,因为如果你仔细考虑一下,它没有多大意义。 问题是readline没有彩色字符的概念(没有内部模型)。 Readline 仅适用于原始字符,不带字符样式。 切换颜色,输入一些可见字符,然后使用光标键编辑已经键入的(可能是彩色的,也许是标准)的字符 - 这样的东西将导致整行的重绘。 在这个过程中,颜色将被迅速消除(因为readline并不真正了解它们)。
所以我想你想要的是不可能的。 这是readline不支持的功能,您不能简单地从外部(正确)添加到它而不会破坏东西。