pry で文字色変更されず ESC とか表示される

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 も設定している。これが何者かまだ調べてないが。