在终端中着色STDIN

时间:2012-03-20 01:01:11

标签: shell terminal zsh interactive ansi-colors

如何在zsh命令行之外的zsh中为输入着色(STDIN /我输入的反馈)?

作为参考,这是我想要输入的内容: http://en.gentoo-wiki.com/wiki/Zsh#Colorize_STDERR

在设置终端颜色时对STDOUT而不是STDIN进行着色并不是一个真正的选择,因为它会使黑名单应用程序(ncurses stuff:emacs,irssi,...)变得更加困难。

5 个答案:

答案 0 :(得分:2)

我不知道改变标准输入的方法,但这会使标准输出为绿色和标准红色:

exec 1>>(while read line; do
  print '\e[92m'${(q)line}'\e[0m' > /dev/tty; print -n $'\0'; done &)
exec 2>>(while read line; do
  print '\e[91m'${(q)line}'\e[0m' > /dev/tty; print -n $'\0'; done &)
上面的

1指的是stdout(exec 1>> ...),2指的是stderr。 0将用于标准输入,但如果用exec 0>>启动它们,上面的行似乎什么都不做。

我想如果你想改变stdin,你可以将终端颜色改为你想用于stdin的任何颜色,然后使用类似上面命令的东西将stderr和stdout更改为其他东西......

答案 1 :(得分:0)

你不能:程序的输入直接进入终端(tty),输入在没有zsh知道的情况下在终端上回显。

答案 2 :(得分:0)

如果没有通过其他进程管道输出,则无法执行此操作。一种可能性是由yellowantphil发布的zsh版本。不过,其他工具更易于使用,包括但不限于regex-markupsupercatswatch

答案 3 :(得分:0)

fish shell会让你感兴趣,当你输入时它在命令行上有语法高亮,但我不认为它是一个稳定的shell(我去年看到的一些基本错误,还有一些用户)和它不尊重众所周知的约定(如返回代码$?)。

答案 4 :(得分:0)

如果ZSH在执行每个命令之前发送了DEBUG信号(BASH执行此操作),您可以通过在PS1变量末尾添加转义序列并将其重置为默认值来实现所需效果在通过捕获Bash的DEBUG信号显示输出之前。

例如,尝试在\[\e[1m\e[3m\e[93m\]变量的末尾添加PS1(即粗体,斜体,黄色),然后运行trap 'tput sgr0' DEBUG并查看它是否有效。

这是我终端的截图: bold, italic and yellow commands