X11.app 上で使う terminal

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 anthy-9100e.tgz gettext-017.tgz 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 に置いてある X11.app には uxterm が含まれている。この他いろんな bug fix もされているし、ここの X11.app を入れるのが良いと思う。

k14 な unicode font

k14 が好きなので、河野さんのところから iso10646 な k14 font をもらってくる。 これを展開して、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 に置いてあった 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

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 で表示するようにしておくんだけど。)

Last modified:2010/09/16 13:52:42
Keyword(s):[Mac OS X] [Leopard] [X11] [terminal] [xterm] [uxterm] [rxvt-unicode] [kterm]
References:[MacOSXメモ] [ThinkPad X60s]