我尝试使用OS X应用程序GeekTool将彩色文本输出打印到桌面上。GeekTool允许您将称为“geeklets”的小窗口放置到桌面上。一种Geeklet显示shell命令的输出。
我想要的输出应该来自一个文本文件,我正在用ruby脚本进行解析。我正在使用ruby gem colorize来添加Ruby中字符串的ANSI转义序列。我的目标是将这些字符串输出到Geektool并显示彩色文本。
当我在terminal中运行Ruby脚本时(包括Terminal和iTerm 2,同时使用zsh和bash),输出的颜色非常好。但是当我在GeekTool中运行脚本时,它不是-输出中没有显示转义序列,但是没有颜色。我知道GeekTool支持ANSI转义序列,因为当我运行这个shell命令时:
printf "\e[0;35;49mabcd\e[0m"
我得到了彩色的GeekTool输出。echo $SHELL
还告诉我GeekTool使用的是我通常使用的zsh可执行文件。但由于某种原因,我的ruby脚本不会打印彩色输出。相反,我看到的是单色输出,但转义序列被剥离。
我的脚本使用Ruby的puts
来输出包含转义序列的字符串。我尝试切换到p
。当在终端中运行时,这会产生非彩色输出,转义序列完好无损。当在GeekTool中运行时,我也会得到非彩色输出,但转义序列再次消失。
有人知道我的转义序列在哪里吗?
1条答案
按热度按时间2vuwiymt1#
我找到了一个解决这个问题的方法。我需要删除着色的gem并对转义序列进行“双重转义”。我通过用下面的字符串 Package 字符串来为字符串着色:
在构建了一个包含许多转义序列的大字符串之后,我就这样做了
这就成功了。似乎字符串在输出到Geektool时被处理了两次。需要在转义符
\\e
前面加上双反斜杠,以防止它们在第一次传递时被消耗。