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

How can I bind a function key to emit a color code?

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

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

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

没有。我该怎么做?

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

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

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