Emacsの表示がおかしい!

投稿: 2011年1月10日

いつからなのかよく覚えていないのだけど、最近Emacsを使っていると表示が崩れたような感じになることが多く、とても仕事にならないような状況に陥ってしまった。そこで少し調べてみた。

表示がおかしい、と感じるのはいつもカーソル (Emacs的にはポイントですね) の操作をした時だった。実は画面全体を見ていないので、本当に表示が崩れていたのか、単にカーソル周辺がおかしなことになっていたのか、そこのところはよく分からない。ただ、とにかくカーソルが思った所に行ってくれないので、いちいちC-lを押して画面を再描画させながら作業をしていた。

最初は、表示が崩れているのだと思っていたので、GNU Screenの設定やシェル・アクセスに使っているTeraTermの設定を見直してみた。が何をやっても特に変化は見られなかった。

次に、screenを使わずにEmacsを起動してみた。すると、どうも表示が崩れないようだった。ので、原因はScreenにあると判断して、試しにtmuxを使ってみた。が、Screenの時と同じ状態になった。

そこで、もう少しまじめに (笑) どういう時に問題が発生しているのか観察してみた。あれこれやって分かったことは、普通にテキストを入力している時にはだいたい大丈夫らしいこと、カーソルを動かすとカーソル位置の更新がおかしなことになっているらしいことだった。では、と思ってカーソル移動をC-n, C-pなどでやってみたところ、どうも問題は発生しないらしいことが分かった。

そこで、矢印キーがちゃんとしたコードを送信しているのかを調べてみたが、これは問題なさそうだった。 (ちなみにこの課程で知ったのだけれど、 C-h l でキー入力の履歴を見られる。) また、どうやら問題なのは矢印キーを押した時に、そのシーケンスが送信されるタイミングにあるらしく、矢印キーを押した次のキーが押された時に、2ストローク分まとめて送信される、というか受信されるというかしているらしかった。

いろいろと調べてみたのだが、どうも原因がはっきりとしない。仕方がないので、一度.emacsを読み込ませないでEmacsを起動してみたところ、この問題は発生しなかった。

ということで、.emacsのあの行をコメントアウトしたり、この行をアンコメントしたり、とあれこれやった結果分かったことは:
キーボードからの入力文字コードとしてeuc-jpを使う設定だと発生する
だった!!

utf-8やiso-2022-jpについてはこの問題は発生しないようだ。また、euc-jp-dosとかeuc-jp-unixとかも試してみたがこれだとやはりこの問題が発生した。

ちなみに、これまでも何度となくこの問題をやっつけようとしてきたのだけれど、ずっとterminal-coding-systemを疑っていたので、keyboard-coding-systemの問題だったというのは完全に予想外だった。

EmacsもScreenもTeraTermも、何度となくバージョンアップを重ねてきているアプリケーションなので、どのアプリケーションのどのバージョンアップ以降でこの問題が発生するようになったのかは分からない。さらに言えば、可能性として使っているシェルの問題、ということだって考えられなくはないだろう。 (その部分については追求していないが。) ので、根本的な原因はさっぱり分からないのだが、とりあえずutf-8を使うことにして逃げることにした。