gem の pry で、文字色が変わるべき表示で、ESC[31m などと ESC が英文字として表示されてしまうという現象が起きていた。
設定が何かおかしいだろうけど、色とか別にいいので、~/.pryrc で、Pry.config.color = false にして回避してた。
ふと、less が原因じゃないかと気づいた。
$ clear | less ESC[HESC[J $
やっぱり、ESC が "ESC" という文字に変換されている。
PAGER 環境変数を見ているところを探してみる。
$ grep -R -C5 PAGER . ./pager.rb- # `SystemPager` buffers output until we're pretty sure it's at least a page ./pager.rb- # long, then invokes an external pager and starts streaming output to it. If ./pager.rb- # `#close` is called before then, it just prints out the buffered content. ./pager.rb- class SystemPager < NullPager ./pager.rb- def self.default_pager ./pager.rb: pager = ENV["PAGER"] || "" ./pager.rb- ./pager.rb- # Default to less, and make sure less is being passed the correct options ./pager.rb- if pager.strip.empty? or pager =~ /^less\b/ ./pager.rb- pager = "less -R -F -X" ./pager.rb- end
PAGER が、フルパスでない less のときに、-R オプション ( エスケープシーケンスをそのまま表示 )が設定されている。
現状の私の設定では、
PAGER=/usr/bin/less LESS=-MXei~
なので、less が ESC を "ESC" という文字に変換して表示していたのが原因。
解決策としては、3通り考えられる。
・PAGER を設定しない
・PAGER=less にする
・LESS に -R を追加設定しておく
で、PAGER=less にすると色が付いた。
しかし、色分けってやっぱりいまいちなので、Pry.config.color = false のままにしておく。
普通の人で、問題が起こっていないのは、PAGER を設定していないせい?
あと、動作が不審なので、Pry.config.correct_indent = false も設定している。これが何者かまだ調べてないが。