2008-12-27

colordiff で色とりどりな世界へ

実は今まで diff はすべてモノクロで見ていた。Emacs の vc-diff 以外では。どうにかならんかなぁと思ってはいたがこんなもんかなとも思って長いこと過ごしていた。

しかし

coderepos の commit 数ナンバー1の人が github を練習したメモ - TokuLog 改めB日記

を読んで git では設定次第で color 出力できることが分かった。だったら他のツールでもそういう方法は必ずあるはずだと思ってググったらいきなり

ColorDiff

が出てきた。そこら中でパッケージとして利用できるみたいなので使い始めるのは十分簡単。中身は Perl スクリプトで、diff の出力を解析してエスケープシーケンスで色づけしてくれる。

使い方は

diff [options] FILE1 FILE2 | colordiff

みたいなのでもいいし、

colordiff [options] FILE1 FILE2

でもいい。基本的に diff の代わりとして使えるように配慮されているようだ。手っ取り早くは

svn diff | colordiff

みたいにしても使える。調子に乗って

.subversion/config

 diff-cmd = colordiff

にしてみたけど、これは失敗。というのも Emacs の vc-diff がエスケープシーケンスをそのまま吐き出して意味不明になってしまうから。ということは

svn diff | colordiff
hg diff | colordiff
git diff

で color 出力できるって感じか。

また、普段ページャとして less を使っているんだけど、less は標準ではエスケープシーケンスによる色づけには対応していない。man を読むと

-R or --RAW-CONTROL-CHARS
       Like -r, but only ANSI "color" escape sequences  are  output  in
       "raw" form.  Unlike -r, the screen appearance is maintained cor-
       rectly  in  most  cases.   ANSI  "color"  escape  sequences  are
       sequences of the form:

ということは、-r か -R でエスケープシーケンスをそのまま terminal に解釈させられそう。

最終的には .zshrc で

export LESS=R
alias diff='colordiff -u'

しといた。簡単な色づけだけど、分かりやすさが段違いだ。こりゃ便利。

あと直接関係ないけど

alias ls='ls --color=auto'

alias ls='ls --color'

にした。(BSD では export CLICOLOR_FORCE=1 )これで ls の出力を less に渡しても色付きで見ることができる。

ぐりもんアップデート時は load 順に注意

まぁ別に LDRize に限ったことじゃないんだろうけど。JavaScript には require の仕組みがないことが原因、ということなのかな?

とにかく

  1. minibuffer
  2. AutoPagerize
  3. LDRize

の順番を守ること。どれかアップデートすると新しくなったものが最後に読み込まれるようになってしまうので、その都度修正が必要。

ちょっとメンドイけどしょうがないのかな。

About

例によって個人のなんちゃらです