hg-fixutf8 を改造してみた
hg-fixutf8 は、出力しようとしているutf-8文字列の中に、現在のコードページで出力できない文字が存在した場合、SetOutputCP(65001) して utf-8 をそのまま出力する。
でも、これ、実際にやってみるとコードページを切り替えるときにコンソールの内容が化けたり、フォントが切り替わる影響でウィンドウが変な挙動をする。
WindowsのコンソールでUnicodeを扱っているほかのプログラムを見てみると、WriteConsoleW() という関数を使うことでutf-16の文字列をそのまま出力できることがわかった。
なので、WriteConsoleW()を使うバージョンの hg-fixutf8 を作ってみた。
http://bitbucket.org/methane/hg-fixutf8-jp/
今のところ、実行後しばらくコンソールが固まるというバグがある。そういえばmsysのlsコマンドをbashを使ってない状態で実行すると同じような現象になったな。なにかしらフラッシュの処理が抜けている予感。
hg-fixutf8 はコマンドライン引数もGetCommandLineW() を使って取得しているし、あとはhgのGUI周りがUnicodeでコマンドライン引数を渡すようになったら完璧かもしれない。