FreeBSD でも UTF-8 な生活を
近くのスーパーが改装のため暫く閉店すると言うので、コーヒーパックをまとめ買い してきた。そしたら、ちょっと量が多かったせいか、会社のおつかいと(勝手に) 思われたようで、レジのおばちゃんが、領収書を添付してくれた。
自宅で飲むんだから、領収書はいいですよと断るのも大人げないので、そのまま貰って きた。気くばりって難しいものですね。
Rubyの穴
BigDecimal("9E69999999").to_s("F")
等とやると落ちるそうです。あの方のPatch袋が開いたのかな?
[sakae@fb ~]$ ruby -v ruby 1.8.7 (2009-04-08 patchlevel 160) [i386-freebsd6] [sakae@fb ~]$ irb irb(main):001:0> require 'bigdecimal' => true irb(main):002:0> BigDecimal("9E69999999").to_s("F") Illegal instruction: 4 (core dumped) [sakae@fb ~]$ ls -l ruby* -rw------- 1 sakae kuma 2478080 6 13 08:24 ruby18.core
ruby 1.9.1 以降では、落ちない。(例を実行すると、ものすごく忙しくCPUが仕事を 始めちゃうのは、DoSっぽいけど)これは、早く1.9系へ移行を促すサインだろうか?
そう言えば、前記事でやっていた、JSONデータをRubyで読んじゃえですが、1.8系を 使った時、ruby -Ku としないと、誤変換があったなあ。わざわざ、文字コードを 指定するのもうざいなあ。(私の1.8.7は、デフォで、EUC-JP指定なんです。)
そろそろ、重い腰を上げて、FreeBSDでもUTF-8の生活を始めてみるかな。
FreeBSDでの生活のあらまし
移行に当って、影響度を調べておく。いわゆる傾向と対策ですかね。
- twm
- まあ、大丈夫でしょう。
- kterm
- UTF-8って、開発当時は存在してないから、考慮なしだよな。
- screen
- 多分大丈夫でしょう
- vi
- 正確には、nvi-eucjpだから、要変更だ
- man
- jmanが問題になりそう。
emacs,w3m,firefoxは、UTF-8 Ready だから良いとすると、一番のネックは、ktermかな。UTF-8を使いたいばかりに、gnome-terminalってのも好かん。 それにしてしても、CUI中心の生活ぶりが如実に現れているなあ。マウスを使う時って、javascriptを強要されるサイトを見る時に使う、firefoxだけぐらいかな。
さあ、どうする? 世のCUI好き、100人に聞きました。あなたが使うterminalは何ですか?
mlterm
一位が、これでした。って言うか、これぐらいしか有りません。(gnome/kdeセットを使えば別ですが。)
FreeBSDだと、ports/x11の下にあります。gtk2が要求されるのには辟易させられますが、Firefoxも同様なので、まあ、我慢しますわ。
mlterm上で、Ctrl+右クリックすると、あらかた設定ができちゃうけど、CUI派なので、きちんと文書化しておく。
[sakae@fb ~]$ cat .mlterm/main ENCODING = UTF-8 not_use_unicode_font = true logsize = 256 [sakae@fb ~]$ cat .xinitrc export LANG="${LANG:-ja_JP.UTF-8}" kinput2 -jserver localhost -wnn & xmodmap -e "keysym BackSpace = Delete" & xsetroot -solid \#400040 -cursor_name top_left_arrow exec mlterm -f gray -b black -0 gold -g 80x40 -lsp 3 & exec twm
この設定で、NotePCの縦方向一杯に、mltermの画面が広がりました。
vim
これはもう、選択の余地がありません。素直に従います。
[sakae@fb ~]$ cat .vimrc set encoding=utf-8 set termencoding=utf-8 set fileencoding=utf-8 set fileencodings=ucs-bom,euc-jp,cp932,iso-2022-jp set fileencodings+=,ucs-2le,ucs-2,utf-8 set shortmess+=I set showmatch set compatible set nobackup
後は、alias vi='vim' を設定しました。こうしておけば、\viで、いにしえの vi を 起動させられますから、安心。嗚呼、もしもの為に、ed の操作訓練もたまに、やって おいた方が良いかも知れません。(災害は忘れた頃にやってくる)
vimの挙動を調べていたら、.viminfo なんていうログが作られるんですね。こんなの 不要なので off にしようと思ったら、コンパイル時オプションなのですね。このログは どこまで成長していくのだろう? 際限なく成長するなら、logoffの時に削除するよう にでもしておくか。
screen
manすると、起動持に -U を付けると utf8端末と理解するよと書いてあったけど、 私の所では、芳しくなかったので、下記のようにしました。
[sakae@fb ~]$ cat .screenrc defencoding utf8 escape ^t^t # split window -- ^t x 2, change window -- ^t x o, new shell -- ^t c bind -c REGION 2 split bind -c REGION 1 only bind -c REGION 0 remove bind -c REGION o focus bind -c REGION ^ resize bind x command -c REGION bind 'u' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'" bind 'e' eval "encoding euc" "stuff 'export LANG=ja_JP.EUC-JP\012'" startup_message off
動的にエンコーディングを切替えられるのは、嬉しいです。こういう技を公開 下さった方に多謝!
man
旨い方法が思い付かなかったので、.bashrc をちょいと変更しただけ。
alias man='env LC_ALL=ja_JP.eucJP jman' export PAGER='lv'
表示が化けたら、screenのエンコードを変えるというトホホな方法です。
その他
twmの表示文字幅がおかしくなったので、ちょいと設定
TitleFont "*helv*bold*--12*" MenuFont "*helv*bold*--12*" IconFont "*helv*bold*--12*" IconManagerFont "*helv*bold*--12*"
後の未確認事項として、TeraTermがあるけど、これはおいおいやる事にしよう。