当我在终端上输入了文本时,我可以修改其属性吗?
(我希望在tput rev
上preexec()
我的命令提示符。)
答案 0 :(得分:1)
终端可让您在写文本时为文本着色。如果您想更改某些文字的颜色,您必须知道已经存在的内容 - 并且重写它(由tput rev
和{{1}括起来当然是命令。)
重写提示意味着您必须知道屏幕上写入提示的位置。对于简单情况(您的提示不在屏幕底部,导致它在您输入命令时向上滚动),您可以保存当前光标位置(使用tput sgr0
)并恢复它以返回重写它的提示(使用tput sc
)。
但是,这只会对简单情况有所帮助,因为多行(或滚动)命令会使返回提示并重写它不可行。
人们使用诅咒来编写类似的应用程序 - 但是zsh的terminfo支持不会对屏幕上的内容进行控制。
答案 1 :(得分:0)
也许你可以通过操纵调色板来获得近似值。在xterm-256color
中,您可以动态更改256种颜色中的每种颜色,并使用控制序列为其指定任意RGB值。例如,要将调色板变为256级中性阶梯楔,请使用此gray_colors
函数(和reset_colors
来撤消它)。当您在屏幕上进行颜色测试(颜色立方体)时,这是最好的。
# Operating System Control.
OSC=$(printf '\033]')
BEL=$(printf '\a')
reset_colors () {
printf "${OSC}104${BEL}"
}
gray_colors () {
c=0
while test $c -lt 256; do
printf "${OSC}4;$c;rgb:%02x/%02x/%02x${BEL}" $c $c $c
: $((++c))
done
}
现在,如果当前命令为红色并且一旦执行就变为灰色,则将10种颜色分配给相同的红色色调,一旦显示下一个提示,将其更改为灰色并使用下一个红色插槽进行新提示。然后循环显示10种红色(假设任何时候都是关于屏幕上命令的数量)。根据自己的喜好调整。