«前の日記(2011-05-25) 最新 次の日記(2011-07-06)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2011-05-27 lv の唯一にして最大の less に劣る点を修正する俺得パッチ

lv が唯一 less に劣る点を修正する俺得パッチ

lv が唯一 less に劣る点は "lv /" とかやるとディレクトリを無理矢理表示してしまう点です。

$ lv /
^B^@^@^@^L^@^D^A.^@^@^@^B^@^@^@^L^@^D^B..^@^@^C^@^@^@^P^@^D^E.snap^@^@^@^@<^C^@
^L^@^D^Cdev^@^@^\^F^@^L^@^D^Cext^@^E^@^L^@^D^Ctmp^@^@<98>^C^@^L^@^D^Cusr^@^@\^@
^@^L^@^D^Cvar^@^@À^E^@^P^@^D^Dhome^@ÿÿÿ^@¸^@^@^L^@^D^Cetc^@^@x^F^@^P^@^D^Ddist^@
ÿÿÿ^@p^A^@^L^@^D^Cbin^@^@ô^C^@^P^@^D^Dboot^@ÿÿÿ^@Ô^F^@^L^@^D^Clib^@^@Ì^A^@^P^@^D
^Glibexec^@^@(^B^@^P^@^D^Emedia^@ÿÿ^@<84>^B^@^L^@^D^Cmnt^@^@d^E^@^P^@^D^Dproc^@ÿ
ÿÿ^@à^B^@^P^@^D^Frescue^@ÿ^@¬^D^@^P^@^D^Droot^@ÿÿÿ^@0^G^@^P^@^D^Dsbin^@ÿÿÿ^D^@^@^@^L^@
^Csys^@^E^@^@^@.profile^@À^_^E^F^@^@^@^P^F.cshrc^@ÿ^G^@^@^@^T   COPYRIGHT^@^_^@
^@^@^P^@
^Fcompat^@ÿ     ^@^@^@<88>^Gentropy^@^@<8C>^G^@x^@^D^Dclub^@ÿÿÿ^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

これが less だとちゃんとエラー表示をしてくれます。

$ less /
/ is a directory

致命的というわけでもないのですが気にくわないのでパッチを作成しました。

これでディレクトリを引数に与えても大丈夫!

$ mylv /
/ is a directory

grep モードにも対応しています。

$ mylv -g PATTERN /usr/local /usr /
/usr/local is a directory
/usr is a directory
/ is a directory

オリジナルの lv だとこんな事になってました。

$ lv -g profile /
s.profile.cshrcÿCOPYRIGHT

grep モードで複数のファイルを引数として与えたとき、最後のファイルが存在しないファイルだと Segmenation Fault で落ちるのはオリジナルのバグのようです。

$ lv -g PATTERN /tmp/nonexistence /nonexistence
(snip)
Segmentation fault: 11 (core dumped)

存在しないファイルが最後でなければ落ちません。

$ lv -g PATTERN /etc/profile /etc/ntp.conf /nonexistence
/tmp/nonexistence: No such file or directory
/nonexistence: No such file or directory