4

我正在尝试使用 OS X 应用程序GeekTool将彩色文本输出打印到我的桌面上。GeekTool 允许您将称为“geeklets”的小窗口放在桌面上。一种 Geeklet 显示 shell 命令的输出。

我想要的输出应该来自我用 ruby​​ 脚本解析的文本文件。我正在使用 ruby​​ gem colorize在 Ruby 中的字符串周围添加 ANSI 转义序列。我的目标是将这些字符串输出到 Geektool 并显示彩色文本。

当我在终端(终端和 iTerm2,同时使用 zsh 和 bash)中运行 Ruby 脚本时,输出的颜色非常好。但是当我在 GeekTool 中运行脚本时,它不是——转义序列没有显示在输出中,但是没有颜色。我知道 GeekTool 支持 ANSI 转义序列,因为当我运行这个 shell 命令时:

printf "\e[0;35;49mabcd\e[0m"

我得到彩色 GeekTool 输出。 echo $SHELL还告诉我 GeekTool 正在使用我通常使用的相同 zsh 可执行文件。但由于某种原因,我的 ruby​​ 脚本不会打印彩色输出。相反,我看到的是单色输出,但转义序列被剥离。

我的脚本使用 Rubyputs输出包含转义序列的字符串。我尝试切换到p. 在终端中运行时,这会产生具有完整转义序列的非彩色输出。在 GeekTool 中运行时,我也得到了非彩色输出,但转义序列再次消失了。

有人知道我的转义序列要去哪里吗?

4

1 回答 1

4

我找到了解决这个问题的方法。我需要删除彩色宝石并“双重转义”转义序列。我通过用如下字符串包裹字符串来着色字符串:

"\\e[0;36;49m"  # example color
"\\e[0m"        # clear

在构建了一个包含许多这些转义序列的大字符串之后,我做到了

command = "printf \"#{mystring}\n\""  # The trailing \n is needed to prevent Geektool from displaying [m at the end for some reason
exec(command)

这成功了。在输出到 Geektool 时,字符串似乎被处理了两次。转义符前面\\e需要双反斜杠,以防止它们在第一次通过时被消耗。

于 2012-08-17T04:47:54.830 回答