2012-08-16 72 views
4

我試圖使用OS X應用程序GeekTool將彩色文本輸出打印到桌面上。 GeekTool允許您在桌面上放置稱爲「geeklets」的小窗口。一種Geeklet顯示shell命令的輸出。運行Ruby腳本以輸出到Geektool時,ANSI轉義序列消失

我希望的輸出應該來自我用ruby腳本解析的文本文件。我使用ruby gem colorize在Ruby中的字符串周圍添加ANSI轉義序列。我的目標是將這些字符串輸出到Geektool並顯示彩色文本。

當我在終端(包括Terminal和iTerm2,同時使用zsh和bash)中運行Ruby腳本時,輸出的顏色非常好。但是當我在GeekTool中運行腳本時,它不是 - 轉義序列沒有顯示在輸出中,但沒有顏色。我知道GeekTool支持ANSI轉義序列,因爲當我運行這個shell命令:

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

我得到彩色GeekTool輸出。 echo $SHELL也告訴我,GeekTool正在使用我通常使用的相同的zsh可執行文件。但由於某種原因,我的ruby腳本將不會打印彩色輸出。相反,我看到的是單色輸出,但剝離了轉義序列。

我的腳本使用Ruby的puts來輸出包含轉義序列的字符串。我試過切換到p。在終端中運行時,這會產生非彩色輸出,並且轉義序列保持不變。在GeekTool中運行時,我也獲得了非彩色輸出,但轉義序列再次消失。

任何人都知道我的逃生序列在哪裏?

回答

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前面的雙反斜槓,以防止他們在第一遍消耗。