【发布时间】:2012-12-07 15:45:07
【问题描述】:
(Crossposted to unix.stackexchange.com)
This question 和the answer 教我们如何在 tcsh 提示中引入颜色。
This webpage 很好地解释了如何将颜色添加到echo 命令的任何输出中:
> echo \\e[1\;30mBLACK\\e[0m
BLACK
> echo '\e[1;30mBLACK\e[0m'
BLACK
上例中的“BLACK”一词以黑色(或深灰色)前景色打印(取决于整体配色方案)。
现在我想将此引入tcsh 的[TAB] 命令自动补全功能。我试过了:
complete testcmd 'p/*/`echo '"'"'\e[1;30mf834fef\e[0m'"'"'`/'
我得到:
> testcmd [TAB]
> testcmd ^[\[1\;30mf834fef^[\[0m
显然这些字符失去了它们的特殊含义。希望我只是没有得到正确的转义。但我尝试了其他几种方法。因此,我们将不胜感激。
真正的用例是我有一个命令完成,它提供三种不同类型的完成,我想在视觉上区分这些类型。备选方案也由外部命令计算。这就是为什么我需要完成以使用带有外部命令的反引号,例如echo。我不关心这个命令的细节。如果您使用tcsh 的complete 命令以任何方式使其工作,我可能能够适应(考虑perl -pe 包装器等)。
我相信这个 必须 以某种方式工作的原因是 tcsh 本身提供彩色命令完成,如果你例如输入ls [TAB]。这在我的设置中正常工作。您也可以在自动完成中使用ls -1F,ls 输出的颜色也可以通过管道传输。一个例子是:
complete testcmd 'p/*/`ls -1F`/'
更新:正如用户 mavin 所指出的,在这个例子中 ls 的着色确实没有通过管道传递。 ls 的颜色会丢失,但自动补全可以根据 LS_COLOURS 变量重新应用颜色,该变量基于 ls 添加的 / 和 * 标记结尾等提示。这可以通过执行来验证
complete testcmd 'p/*/`ls --color -1`/'
无法提供颜色,仅提供乱码输出。 (字面意思是通过转义字符序列)
我在 tcsh 版本 6.13.00
有什么想法吗?指针?
【问题讨论】:
标签: autocomplete colors tcsh