From: Tomohiro K. <tk...@ri...> - 2002-04-08 07:57:16
|
久保田です。 いま、mlterm を LANG=xterm で使っているのですが、ひとつ不具合 (というほどでもないですが) があります。それは、dialog --msgbox を使ったとき、ダイアログボックスがきちんと表示されない、という ものです。 調べてみると、xterm と kterm では、画面を消すとき (たとえば CSI Ps J) の動作が非互換なのが原因なようです。 xterm、rxvt、eterm、hanterm などでは、画面を消すとき、現在の 背景色 (つまり、CSI Ps m で指定した背景色) が用いられます。 一方、kterm は、画面を消すとき、起動時の背景色が用いられます。 xterm を TERM=xterm で使ったり、kterm を TERM=kterm で使ったり するときには、dialog --msgbox は正常に動きます。これは、terminfo が、xterm や kterm のそれぞれの動作を正しく把握しているからです。 ここで、mlterm は、kterm 互換の動作をするようです。つまり、 画面を消すとき、CSI Ps m で指定した背景色は用いられません。 したがって、TERM=kterm のときは dialog --msgbox は正しく動作 しますが、TERM=xterm のときは誤動作します。 つまり、この問題の原因は、mlterm の画面消去が kterm 互換となって いるにもかかわらず、TERM=xterm での使い方を許容していることです。 解決策は、いくつかあると思います。 1. mlterm は kterm 互換の動作をするものと仕様決定し、TERM=xterm での使用を禁止する。 2. mlterm の動作を xterm 互換に改め、TERM=kterm での使用を禁止 する。 3. TERM=mlterm を作ってしまう。 ここで問題になるのは、今回は mlterm が kterm 互換の動作を行う のを発見したのですが、それは意図されたものなのか、それとも 偶然なのか、ということです。mlterm は kterm 互換を目指している のでしょうか > 荒木さん もしそうだとすれば、1 がてっとりばやいことになります。ただし、 TERM=kterm を用いることで、 a. kterm という terminfo はもはやメンテナンスされていないだろう から、そっちのメンテナンスも場合によるとやらないといけなくなる b. kterm は日本語専用という誤解によって、mlterm の海外での普及に 水をさす結果となる というおそれがあります。一方、2 を選ぶと、どれくらいあるかは 分かりませんが、mlterm の書き換え作業が待っています。が、他の 多数のターミナルエミュレータ (xterm、hanterm、rxvt、eterm、...) と同じ動作をするようになりますので、のちのち何かと楽だと思います。 一方、mlterm 独自のなにかスゴイ制御コードを導入し、それを使いたい というのでなければ、3 は意味がないと思います。 気分的には、この際 2 としてしまいたいところです。が、荒木さんが いまあまり動けない状況ですので、いかがでしょうか? 「cvs commit 権限あげるから勝手にやってくれ」とのことでしたらそれでもいいです。 (が、mlterm のソースは階層構造が複雑なので、その設計思想に沿った 書き換えができるかというと、ちょっと自信がないです)。 --- 久保田智広 Tomohiro KUBOTA <ku...@de...> http://www.debian.or.jp/~kubota/ "Introduction to I18N" http://www.debian.org/doc/manuals/intro-i18n/ |