Terminal 在zsh中,如何对已输出的文本重新着色?

Terminal 在zsh中,如何对已输出的文本重新着色?,terminal,zsh,tput,Terminal,Zsh,Tput,当我已经在终端上键入文本时,我可以修改其属性吗 (我想tput rev在preexec()上显示我的命令提示符)终端允许您在编写文本时为文本着色。如果您想更改某些文本的颜色,您必须知道已经存在的内容,然后重写它(当然,括号中有tput rev和tput sgr0命令) 重写提示符意味着您必须知道屏幕上写入提示符的位置。对于简单的情况(提示不在屏幕底部,导致输入命令时向上滚动),您可以保存当前光标位置(使用tput sc)并将其恢复到提示以重新编写(使用tput rc) 但是,这只对简单的情况有帮

当我已经在终端上键入文本时,我可以修改其属性吗


(我想
tput rev
preexec()
上显示我的命令提示符)

终端允许您在编写文本时为文本着色。如果您想更改某些文本的颜色,您必须知道已经存在的内容,然后重写它(当然,括号中有
tput rev
tput sgr0
命令)

重写提示符意味着您必须知道屏幕上写入提示符的位置。对于简单的情况(提示不在屏幕底部,导致输入命令时向上滚动),您可以保存当前光标位置(使用
tput sc
)并将其恢复到提示以重新编写(使用
tput rc

但是,这只对简单的情况有帮助,因为多行(或滚动)命令会使返回到提示符并重写该提示符变得不可行


人们使用诅咒来编写这样的应用程序,但是zsh的terminfo支持无法提供对屏幕内容的控制。

也许你可以通过操纵调色板来获得近似值。在
xterm-256color
中,您可以动态更改256种颜色中的每种颜色,并使用控制序列为其指定任意RGB值。例如,要将调色板转换为256级中性阶梯楔块,请使用此
gray\u colors
功能(和
reset\u colors
将其撤消)。这是最好的,当你有一个颜色测试(颜色立方体)在你的屏幕上

操作系统控制。 OSC=$(printf'\033]') BEL=$(printf'\a') 重置颜色(){ printf“${OSC}104${BEL}” } 灰色(){ c=0 而测试$c-lt 256;则 printf“${OSC}4;$c;rgb:%02x/%02x/%02x${BEL}”$c$c$c :$(++c)) 完成 } 现在,如果您的当前命令在执行后将变为红色并变为灰色,请将类似10种颜色分配给相同的红色色调,并且在显示下一个提示后,将其更改为灰色,并使用下一个红色槽作为新提示。然后循环10种红色(假设这大约是屏幕上任何时候的命令数)。根据您的喜好进行调整。

您使用的是什么终端(
术语
变量)?xterm-256color是获取“已有内容”的任何方法?(包括其当前属性/颜色);对于多行,我可能会以某种方式向后搜索,直到遇到提示前面的某个符号——这在我的情况下是非常独特的。有没有关于如何进行搜索的提示?