Edited at

pryでlsした際のオブジェクト名の色を変更する

More than 3 years have passed since last update.


問題


  • Windowsでcmd.exeでpryを使っている


  • cmd.exeの色の設定などは標準のまま

  • たとえばls Loggerとした場合、constantsに表示されるクラス名が青色のため、ほとんど見えない


解決策

.pryrcファイルにて設定を実施

Pry.config.ls['class_constant_color'] = :bright_blue

Pry.config.ls['instance_var_color'] = :bright_cyan


詳細

pry-themeを使用したいので最初はそちらの設定かと思ったが、考えてみればpryのlsコマンドの出力結果であって。

それらしい下記を見ると

https://github.com/pry/pry/tree/master/lib/pry/commands/ls

constants.rbというのがあるので覗いてみた。

https://github.com/pry/pry/blob/master/lib/pry/commands/ls/constants.rb#L33

なんかcolor(:exception_constant, name)とか、それっぽいのを発見

#colorは下記に

https://github.com/pry/pry/blob/master/lib/pry/commands/ls/formatter.rb#L20

      def color(type, str)

Pry::Helpers::Text.send _pry_.config.ls["#{type}_color"], str
end

_pry_.config.lsにkey名投げれば色の名前が返ってくる

Pry.config.ls['class_constant_color'] # => :blue

Pry.config.ls['instance_var_color'] # => :blue

で、先頭に書いたように設定をしてみたら色が変わった。

なお、設定する色の名前は

https://github.com/pry/pry/blob/master/lib/pry/helpers/text.rb

COLORSに定義されていて、key名もしくはkey名にprefixでbright_を付けた9色 x 2パターン、

かと思いきやpurplemagentaは同じだったので8色 x 2パターン = 16種類。


補足

lsに設定されているxxx_colorなもの一覧は下記のようにして確認してみた

Pry.config.ls.keys.sort.grep(/color/).each do |key|

puts "#{key.ljust(25)} = :#{Pry.config.ls[key]}"
end
# builtin_global_color = cyan
# class_constant_color = bright_blue
# class_var_color = bright_blue
# constant_color = default
# exception_constant_color = magenta
# global_var_color = default
# heading_color = bright_blue
# instance_var_color = blue
# local_var_color = yellow
# method_missing_color = bright_red
# private_method_color = blue
# protected_method_color = blue
# pry_var_color = default
# pseudo_global_color = cyan
# public_method_color = default
# unloaded_constant_color = yellow

と思ったらもろ下記にかいてあります

https://github.com/pry/pry/blob/master/lib/pry/commands/ls.rb#L4

require 'pry/commands/ls/ls_entity'

class Pry
class Command::Ls < Pry::ClassCommand
DEFAULT_OPTIONS = {
:heading_color => :bright_blue,
:public_method_color => :default,
:private_method_color => :blue,
:protected_method_color => :blue,
:method_missing_color => :bright_red,
:local_var_color => :yellow,
:pry_var_color => :default, # e.g. _, _pry_, _file_
:instance_var_color => :blue, # e.g. @foo
:class_var_color => :bright_blue, # e.g. @@foo
:global_var_color => :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
:builtin_global_color => :cyan, # e.g. $stdin, $-w, $PID
:pseudo_global_color => :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
:constant_color => :default, # e.g. VERSION, ARGF
:class_constant_color => :blue, # e.g. Object, Kernel
:exception_constant_color => :magenta, # e.g. Exception, RuntimeError
:unloaded_constant_color => :yellow, # Any constant that is still in .autoload? state
:separator => " ",
:ceiling => [Object, Module, Class]
}

...