Fork me on GitHub

2011/10/31


このエントリーをはてなブックマークに追加
WindowsをUNIXライクに使っておられる方も多いかと思います。僕もその一人で、僕はコマンドプロンプトを常に開きっぱなしの状態で作業します。
msysを使っても良いのですが、bashはbashで色々と問題もあり/c/Program\ Filesみたいなパスでは問題が起きたり、メールに貼り付けられているパスをコピペして動かないのは苦痛であったりもします。
なので常にコマンドプロンプト(cmd.exe)を使い、vimやlessというUNIX向けツールを使っています。
gitやmercurialでのdiff表示やlog表示の際、ページャは不可欠です。lessを使っているmsysgitでもある程度綺麗に表示されますが、マルチバイトでの検索が出来なかったり、nkf等といったフィルタを噛まさないと表示出来なかったりしました。
lessの場合は以前パッチを書いたlessを使えばコマンドプロンプトでもフィルタ無しにutf-8が表示出来るのですが、自動判定や他のエンコーディングに弱かったりもしました。
そういった理由から日本のUNIXユーザの中にはlessの変わりにlvを使う方も多いです。おそらく日本語を読む事についてはlessよりも高機能なので、ずっとWindowsでもlvを使いたいなと思ってました。
さらにWindows向けのgitに含まれるlessはなぜか稀に最終行の色が綺麗に終端しておらず、git diffを表示し終えた後も画面が緑色のままになったりして、困っていました。

先日からlvをWindowsにポーティングし始めていて、ようやくlessと同等にカラー表示出来る様になったので公開しようと思います。
  • Windows版lessの代わりに使えます
  • フィルタ無しに日本語utf-8が示出来ます
  • iso-2022-cn, iso-2022-jp, iso-2022-kr, euc-china, euc-japan, euc-korea, euc-taiwan, shift_jis, big5 といったアジア圏のエンコーディングが扱えます
  • UTF-7, UTF-8, iso-8859-1 ... iso-8859-9 も問題なく扱えます
  • エスケープシーケンスを含んだテキストをカラー表示出来ます
gitであれば、~/.gitconfig
[core]
    pager = lv -Iu8
こう書いておけば使えます。またmercurialではtpager extensionと併用すればwindowsでも色つきdiff表示が出来ます。
alexandrul / TPager / overview — Bitbucket

Mercurial pager with color support on Windows

https://bitbucket.org/alexandrul/tpager
~/.hgrc
[extensions]
hgext.color=
# tpager.pyへのパス
tpager = ~/tpager/tpager.py

[color]
# win32ではなくansiにする事でエスケープシーケンスを吐く
mode = ansi

[pager]
# ページャを使うコマンド
attend = annotate, cat, diff, export, glog, help, log, qdiff, status, tip
# おまじない
hg16mode = yes
# どのページャを使うか
pager = lv -Iu8
この様に設定すれば色つきのdiffが表示出来る様になります。
リポジトリのmasterブランチは、オリジナルそのままにしてあります。windowsブランチに僕が手を加えた物がpushされています。
mattn/lv421-window - GitHub

windows port of lv421

https://github.com/mattn/lv421-windows
まぁこんなの使うのは変態くらいしかいないと思いますが、よろしければどうぞ。
Posted at 10:51 in ソフトウェア
Tagged as: less, lv, pager, windows
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2008/10/16


このエントリーをはてなブックマークに追加
私は日常コマンドプロンプト(cygwinは使わない)で暮らすという間違ったWindowsの使い方をしているのですが、最近のソフトウェア配布物に含まれるソースやREADME.jaは殆どがutf-8で書かれており、特にPerlやPython等と言ったソースからドキュメントを見せる様な代物だと、現状utf-8が見れないWindows版のlessでは苦しかったりします。
本当ならば色んな文字コードに対応するのが良いかと思うのですが、最近Shift_JISやEUC-JPで書かれているコードも無いだろうし、もしあったとしてもそれは特例で
C:¥> nkf -s example.c | less
すれば言いだけですし...問題はデフォルトでutf8なコードが見れるページャ、かつ見ようと思えばShift_JISなファイルも見れるページャが欲しかったんです。
lessは文字コードの扱いとしてutf-8のみ特別な扱い方をしているのですが、それに用いられている utf-8 <=> ucs な関数があります。Windowsのwchar_tは2バイトですがサロゲートペアさえなければ見れるはず。
Downloading less
http://www.greenwoodsoftware.com/less/download.html
からソースを落として以下のパッチを当ててビルド
diff -u less-418.org/Makefile.wnm less-418/Makefile.wnm
--- less-418.org/Makefile.wnm   2007-06-16 07:06:23.000000000 +0900
+++ less-418/Makefile.wnm   2008-10-16 14:13:28.562500000 +0900
@@ -6,7 +6,7 @@
 CC = cl
 
 # Normal flags
-CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
+CFLAGS = /nologo /MT /W3 /EHsc /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D"_CRT_SECURE_NO_WARNINGS" /c
 LDFLAGS = /subsystem:console /incremental:no /machine:I386
 
 # Debugging flags
@@ -14,7 +14,7 @@
 #LDFLAGS = /subsystem:console /incremental:yes /debug /machine:I386
 
 LD = link
-LIBS = user32.lib
+LIBS = user32.lib /nodefaultlib:libc.lib
 
 #### End of system configuration section. ####
 
diff -u less-418.org/screen.c less-418/screen.c
--- less-418.org/screen.c   2008-01-01 09:50:42.000000000 +0900
+++ less-418/screen.c   2008-10-16 18:55:27.562500000 +0900
@@ -2489,7 +2489,18 @@
    int len;
 {
 #if MSDOS_COMPILER==WIN32C
-   WriteConsole(con_out, text, len, NULL, NULL);
+   extern int utf_mode;
+   if (utf_mode) {
+       int n, m;
+       char* limit = text + len;
+       wchar_t *wtext = (wchar_t*) malloc((len * 2 + 1) * sizeof(wchar_t));
+       for (n = 0, m = 0; *text && n < len; n++)
+           wtext[m++] =  (wchar_t) step_char(&text, TRUE, limit);
+       WriteConsoleW(con_out, wtext, m, NULL, NULL);
+       free(wtext);
+   } else {
+       WriteConsole(con_out, text, len, NULL, NULL);
+   }
 #else
    char c = text[len];
    text[len] = '\0';
環境変数LESSCHARSETに"utf-8"を設定して置けばデフォルトでutf-8なファイルが見れる様になり、環境変数PAGERにlessを設定しておけばperldocで化ける事も無くなります。
less-win32-utf8
最近はマシンスペックが良くなって、毎回変換しても大して劣化しなくて良いですね。
Posted at 19:23 in ソフトウェア
Tagged as: less
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip