2021年5月3日月曜日

irbの色をカスタマイズする

macOS 11.3に上げたときだろうか? Rubyのバージョンが上がったのか、irbに色が付くようになった。

それだけ聞いたら悪くなさそうなんだけど、問題はその色の設定。ターミナルと言えば黒バックに白文字と刷り込まれているオッサンにとって、文字を青くされると非常に読みづらいんだわ、これが。

で、とりあえず色付けを無効化するには、~/.irbrcで以下のように設定すればOK。

IRB.conf[:USE_COLORIZE] = false

とは言え、せっかくなら色をカスタマイズして使いたいと思うのがプログラマというもの。ググっても設定が見つからなかったのでgems/irb-1.3.5/以下を覗いてみたところ、color.rbの中のTOKEN_SEQ_EXPRSで色を決めているらしい。そして、これを外から弄ることは想定されていない模様。そこで、~/.irbrcで以下のように無理矢理設定して、青を水色に変更した。

module IRB
  module Color
    TOKEN_SEQ_EXPRS[:on_CHAR] =      [[CYAN, BOLD], ALL]
    TOKEN_SEQ_EXPRS[:on_comment] =   [[CYAN, BOLD], ALL]
    TOKEN_SEQ_EXPRS[:on_const] =     [[CYAN, BOLD, UNDERLINE], ALL]
    TOKEN_SEQ_EXPRS[:on_ident] =     [[CYAN, BOLD], Ripper::EXPR_ENDFN]
    TOKEN_SEQ_EXPRS[:on_imaginary] = [[CYAN, BOLD], ALL]
    TOKEN_SEQ_EXPRS[:on_int] =       [[CYAN, BOLD], ALL]
    TOKEN_SEQ_EXPRS[:on_rational] =  [[CYAN, BOLD], ALL]
  end
end

ただ、問題はまだある。ざっと眺めてみただけでもcolor.rb, color_printer.rb, workspace.rbあたりで、BLUEとかGREENとか思いっきりハードコーディングされているのだ。こうなるともう、~/libとかにコピーしたものを自分好みの色にして、オリジナルより先にロードされるようにするしかないかなぁ。

酷い荒技として、~/.irbrcで以下のようなことをすれば、青を水色に置き換えられる。定数を書き換えるから怒られるし、前述のTOKEN_SEQ_EXPRSには効果がない(TOKEN_SEQ_EXPRSを定義する時点ではまだBLUEの定義が置き換わっていないので)。

IRB::Color::BLUE = IRB::Color::CYAN

まあ、正式な設定項目ができるまでの繋ぎかな。

0 件のコメント:

コメントを投稿