QuickLookでソースをカラーリング:QLColorCodeの改良.

MacOSX 10.5 Leopardで導入されたQuickLookは,自分にとっては今ではなくてはならない機能です.
このQuickLokプラグインの有名なものの一つにQLColorCodeがあります.これは様々なソースコードをカラーリングしてQuickLook表示してくれるもので,ちょっとしたプログラムをさくっと見たい時に非常に有り難いプラグインです.
……と,まぁ色々と便利なのですが,日本語環境下でこれを上手く使うにはちょっとした工夫が必要だったりします.特に2バイト文字を扱う際の対処は色々なサイトにも書かれているのですが,自分の環境で他の箇所でも多少つまずいたりしたので,備忘録としてメモ,を.
なお,参考にされる方はat your own riskでお願いします.

Xcode内のプラグイン(SourceCode.qlgenerator)の停止

開発環境を導入している人は,まずはこれをする必要があります.
開発環境?ナニソレ?的な人は後でnkfを導入する時に必要になるので入れておきましょう.「mac XCode インストール」などでググりましょう.
いつからかは分かりませんが,Xcode.app内にソースコード用のQuickLookプラグイン(SourceCode.qlgenerator)が入っています.
これはカラーリングは良いのですが,日本語(2バイト文字かな?)が文字化けってしまいます.しかもQLColorCode.qlgeneratorを入れても先にこちらのSourceCode.qlgeneratorが採用されてしまうようです.なのでこれを使用停止にしてしまいましょう.
SourceCode.qlgeneratorの場所は以下の場所です.
/Developer/Applications/Xcode.app/Contents/Library/QuickLook/SourceCode.qlgenerator
このSourceCode.qlgeneratorをサクッと捨ててしまっても良いのかも入れませんが,何だかそれも怖いので(ビビリ)
SourceCode.qlgenerator_
とリネームしてただのフォルダにしてしまいます.これで無効になりました.再度有効にしたいときは元の名前に戻せばOKです.

SourceCode.qlgeneratorの場所

リネームするとただのフォルダになる

QLColorCode.qlgeneratorの導入

1) ココからダウンロード(2010/8/2現在バージョンはQLColorCode-2.0.2.tgz)
2) 解凍してフォルダ内のQLColorCode.qlgeneratorを~/Library/QuickLook/に入れる(QuickLookが無ければ新規作成)
3) /Applications/Utility/内のTeminal.appを起動して以下のコマンドを実行
qlmanage -r

手動インストールでも簡単なのはMacのいいところ.
さて,このQLColorCode.qlgeneratorなのですが,素のままだといくつか問題点があります.まず,日本語表示が化けること.UTF-8以外の日本語が化けます.次に改行がバグること.LF以外の改行コードだとバグります.これらを解決するための方法を以下から.

文字コードUTF-8,改行コードがLFなら無問題.

文字コードSJIS,改行コードをCRにするとバケバケ.(SJISでCRのシェルスクリプトってどうなん?という疑問は置いといて.)


nkfの導入

nkf文字コードの変換に役立つコマンドです.
デフォルトでは入っていないため,ソースをコンパイルする必要がありますが,自分はこの辺りにはあまり明るくないので,かなり適当です.なので,心配な方は他の解説サイトなどを参考にされた方が良いかと思います.なお,コンパイルには開発環境がインストールされている必要があります.
1) ココからダウンロード(2010/8/2現在バージョンはnkf-2.1.0.tar.gz)
2) 解凍してTerminal.appでそのフォルダまで移動.
3) Terminal.appでmakeと打ち込む.3行くらい何かでてきてコンパイル終了.フォルダ内に「nkf」というファイルができているはず.
5) 「nkf」をパスの通った場所に置く.例えば/usr/bin/とか.
6) Terminal.appでnkf -versionと打ち込んでみて,つらつらとnkfの情報が表示されればOK.


nkf文字コード&改行コード変換

さて,やっと本題です.nkfを使って,QLColorCode.qlgenerator内での処理途中で文字コードと改行コードを変換してしまいます.
1) まず,先ほどインストールしたQLColorCode.qlgenerator上で右クリックし,「パッケージの内容を表示」しましょう.さらに以下のファイルを適当なテキストエディタで開きます.
QLColorCode.qlgenerator/Contents/Resources/colorize.sh
2) 40行目を書き換え.(「$textEncoding」を「utf-8」に)
Before : --font-size $fontSizePoints --encoding $textEncoding ${=extraHLFlags})
After : --font-size $fontSizePoints --encoding utf-8 ${=extraHLFlags})
3) 45行目を書き換え.
Before : reader=(cat $target)
After : reader=(/path/to/nkf -w -Lu $target)
※ここで,/path/to/nkfは先ほど自分でインストールした「nkf」へのパスを指定してやりましょう.

ちょっと適当に解説を.詳しくはあまり理解していないので,その辺りはご了承を.
45行目の書き換えにより,nkfを用いて文字コードを改行コードの変換を行っています.nkfのオプション「-w」は文字コードUTF-8に変換してください,ということ,「-Lu」は改行コードをLFに変換してください,ということを意味します.

これで無事,終了です.
とは言っても,XCodeをアップデートするたびにSourceCode.qlgeneratorが(おそらく)復活するので,それを無効にする必要があったり,QLColorCodeをアップデートするたびにcolorize.shの書き換えを行う必要があったりと,意外と面倒だったりします.
本家のQLColorCodeが日本語対応してくれれば一番良いのですが….



おまけ

QLColorCodeで表示する時に行番号も表示して欲しいときは,Terminal.appで
defaults write org.n8gray.QLColorCode extraHLFlags '-l'
行番号+自動改行して欲しいときは
defaults write org.n8gray.QLColorCode extraHLFlags '-l -W'
フォントのサイズを変更したい(例:8pt)ときは
defaults write org.n8gray.QLColorCode fontSizePoints 8
表示されるQuickLookウィンドウの大きさを変えたいときは
QLColorCode.qlgenerator/Contents/Info.plist
内のQuick Look preview widthQuick Look preview heightの値を変更してみましょう.

なお,これらの変更をした後は,Terminal.appで
qlmanage -r
とするのを忘れずに.


※追記
上の,'-W'オプションを付け,かつQLColorCode.qlgenerator/Contents/Info.plist内のQuick Look preview widthの値を変更した場合,QuickLookウィンドウのちょうど端で行の折り返しがなされないことがあります.
このようなときは,折り返したい文字数をXXXとし,
defaults write org.n8gray.QLColorCode extraHLFlags '--line-length=XXX -l -W'
とすることでXXX文字で折り返してくれます.