雑記 - X11.app 上で使う terminal Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

Leopard の X11.app 上での terminal について(長くなってきたので別ページにまとめてみたのがこのページ)

そもそも、どういうシチュエーションを考えているか、であるが、
*Leopard は unicode
*remote login する Linux server は euc-jp
*Linux にせよ Mac OS X にせよ、自分の作成するテキストファイルは euc-jp
といった状況で、できるだけ幸せな環境を用意したいというのが発端。

X11.app なんて使わないで iTerm.app とか使えば?という意見もありますが、X11 の環境が好きなんですよね。( X11.app の kterm とか xterm の方が描画のレスポンスが良いと感じるし。)
ちなみに Tiger までは、ことえりな kinput2 が使えていたので、kterm だけで過ごしてきた。

というわけで、以下、いろいろ試した記録と言うかメモを時系列ごとに。

!terminal
Terminal.app も iTerm.app も使ってみたが、表示が崩れたりレスポンスが悪かったりと、どうも気に入らない。(ほんの僅かな事なんですが、使用頻度が高いので気になるのです。)ということで、kterm に結局戻りそう。

ただ kterm だと(Leopard では)日本語入力に問題があるので、uim + anthy 辺りを入れて誤摩化そうとしているところ。

[[pkg-config-023.tgz|http://ult.riise.hiroshima-u.ac.jp/~nagato/for_osx/pkg-config-023.tgz]]
[[anthy-9100e.tgz|http://ult.riise.hiroshima-u.ac.jp/~nagato/for_osx/anthy-9100e.tgz]]
[[gettext-017.tgz|http://ult.riise.hiroshima-u.ac.jp/~nagato/for_osx/gettext-017.tgz]]
[[uim-154.tgz|http://ult.riise.hiroshima-u.ac.jp/~nagato/for_osx/uim-154.tgz]]

ん? uim-fep で文字入力できるが、wide char の扱いが変。何が悪いのかな?kterm なのか、terminfo とかの問題なのか。。。
kterm は個人的には好きなんだけど、obsolete な感じもするし、
ちょっと時間がないので、default で入っている xterm (uxterm) を使う方法を調べてみる。

!uim の設定
(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control>" "<Control>o"))
(define-key generic-off-key? '("<Control>" "<Control>o"))
(define-key anthy-on-key? 'generic-on-key?)
(define-key anthy-latin-key? 'generic-off-key?)
(define-key generic-cancel-key? "<Control>g")

!xterm と luit
Mac OS X 上であれば、utf-8 な uxterm (xterm) を使うだけで、ファイル名や utf8 な文字をちゃんと表示できる。

utf-8 でない他の server で作業するときにどうするかが問題だが、luit という locale's encoding filter (?) を使うと便利良いようだ。

例えば、eucjp な server に ssh login するときには
luit -encoding eucJP ssh remote_server_name
という風にするだけで、remote server の eucjp を utf8 に変換して表示してくれる。
luit でどのような locale encoding 、charset が使えるかを調べるには
luit -list
とかすれば良い。

後は使うフォントだな。。。なんで default font が汚いんだろう。

!uxterm
Leopard 標準の X11.app には、uxterm は含まれてなかったかもしれない。(いろいろ試していて初期状態がわからない ^-^:;)

[[XQuartz - Trac|http://xquartz.macosforge.org/trac/wiki]] に置いてある X11.app には uxterm が含まれている。この他いろんな bug fix もされているし、ここの X11.app を入れるのが良いと思う。

!k14 な unicode font
k14 が好きなので、河野さんのところから [[iso10646 な k14 font|http://www.ie.u-ryukyu.ac.jp/%7Ekono/pub/software/14x14ja.tgz]] をもらってくる。
これを展開して、14x14jp.{pcf,bdf}.gz を /usr/X11/lib/X11/fonts/misc/ の中に入れる。その後、fonts.dir に
14x14ja.pcf.gz -misc-fixed-medium-r-normal-ja-14-130-75-75-c-140-iso10646-1
を加える。font 指定を簡便にするため、ついでに fonts.alias に
k14u          -misc-fixed-medium-r-normal-ja-14-130-75-75-c-140-iso10646-1
を加える。そして
uxterm -fn a14 -fw k14u
のように起動すれば、k14 な kterm を使っているかのごとく利用できる。ls で utf8 なファイル名を表示できるし、uim-fep もばっちり使えるし、これで完了(かな?)


(追記 2010/09)East Asian Ambiguous Character Width の問題がある場合(記号文字が正しく表示されない等)には、次のように -cjk_width オプションを付ければよい
uxterm -cjk_width -fn a14 -fw k14u


!luit's bug?
luit を使うと
Warning: couldn't find charset data for locale ja_JP.UTF-8; using ISO 8859-1.
Warning: could not change ownership of tty -- pty is insecure!
という warning が出るなぁ... 一応使えてるけど、そのうちに調べよう。

[[XQuartz - Trac|http://xquartz.macosforge.org/trac/wiki]] に置いてあった X11.pkg (2.2.3) を入れて解決。ただし、上記の k14 用の修正を施した fonts.dir, fonts.alias は上書きされるので要修正。

!terminal その2
uxterm で ok だと思っていたが、時折表示が崩れる事がある。
正確に書くと、uxterm 上から luit -encode eucJP ssh で Linux server に login した状態で、emacs -nw で日本語(eucjp) の文章を入力編集しようとすると、カーソルの移動に伴い文字が表示されなくなったりする。M-x redraw-display すると表示は戻るけれど、再びカーソルを移動すると表示がおかしくなる。塩梅が悪い。

というわけで、試しに rxvt-unicode を試してみる。

rxvt-unicode 9.06 を以下のように configure して make
$ CXXFLAGS="-arch i386 -arch ppc" ./configure --prefix=/usr/local --enable-next-scroll \
    --enable-perl --enable-xim --with-term=xterm
固めたもの→ [[rxvt-unicode.tgz|http://ult.riise.hiroshima-u.ac.jp/~nagato/for_osx/rxvt-unicode.tgz]]
LC_CTYPE=en_US.UTF-8 urxvt -ls +sb -fn a14,k14u -geometry 80x50
てな感じで起動すればよい。

rxvt-unicode を使って、同じように Linux server に入って emacs 編集をしてみたが、表示には問題が発生しなかった。

ところが、今度は C-v や C-o の入力がへん。これは emacs に限らず、ng でも同じ。例えば、ページを送るために C-v をしても移動しない。C-v C-v とすると、C-v になる。また、日本語変換するために C-o しても効かず、C-v C-o としないと日本語変換モードに入れない。というわけで塩梅が悪い。

いろいろ調べて行くと、uxterm にせよ、rxvt-unicode にせよ、luit で remote login しない限りは、何の問題もないようである。(ま、当たり前なんだけど)どうも、luit での encode filtering にちょっとばかり問題があるような気がする。

!xterm & luit の build
新しい xterm と luit を build してみる。source は
ここ→ http://invisible-island.net/xterm/

xterm の方は
$ ./configure --prefix=/usr/local --enable-luit && make
こんなもんで、/usr/local/bin に入れる。

luit の方は
$ LDFLAGS=-L/usr/X11/lib ./configure --prefix=/usr/local && make
てな感じ。

状況は変わらず。luit で remote login での encode 変換をする限りは、塩梅が良くない。

!stty memo
||lflags|| line modes||
||iflags|| input modes||
||oflags|| output modes||
||cflags|| control modes||
||cchars|| Control Characters||

!luit を使わないのが幸せかも?
luit は確かに便利がいいのだけれど、luit を介在させて emacs の文字編集を行うと、表示が崩れてしまう問題は避けにくい気がしてきた。

というわけで、Linux server 上で文字を表示させる際のコードを utf-8 にするようにしちゃった方が素直で幸せな気がしてきた。(もちろん kterm からアクセスするときには euc-jp で表示するようにしておくんだけど。)