UTF-8環境で GNU Screen の日本語表示が崩れる件

イントロ

Debian lenny の screen は UTF-8環境だと日本語を上手く表示してくれない。問題発覚当初 puttyemacs を疑ったが,こいつらには何の罪も無かったんだ。そう,黒幕は screen だった。ここでの環境は次の通り。

この問題は Unicode の曖昧な文字幅(East Asian ambiguous char width)に起因するものらしい。大抵のソフトウェアは独自の方法でこの問題を解決していて,具体的に emacsvim はユーザーがオプションを加えることで UTF-8環境で日本語を正常に表示できる。

screen には GNU Screen - bug #16666 の cjkwidth パッチがあるのだけど,Debian lenny の screen にはこれが当てれられてい無いので UTF-8環境で日本語を正常に表示できない。そのため必要に応じてユーザーがこのパッチを当ててやる必要がある。

screen にパッチ当てる

screen install memo (UNIX)を参考にして:

本家のソースコードを入手:

$wget ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-4.0.3.tar.gz

それを解凍して,解凍先のフォルダへ移動:

$tar xzf screen-4.0.3.tar.gz
$cd screen-4.0.3

参考サイトに従いいくつかのパッチを入手:

$wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-deadlock-patch
$wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-hankanacopy-patch
$wget ftp://www.dekaino.net/pub/screen/screen-4.0.2-patch-cjkwidth-cvs-2006052001

パッチを当てる(パッチは4.0.2用だけど問題なかった):

$patch < screen-4.0.2-deadlock-patch
$patch < screen-4.0.2-hankanacopy-patch
$patch < screen-4.0.2-patch-cjkwidth-cvs-2006052001

コンパイルに必要なファイルは apt-get build-dep を使えば簡単に手に入る:

$apt-get build-dep screen

コンパイルして,インストール:

$./configure --enable-colors256
$make
$sudo make install

各々のソフトウェアの設定

screen

.screenrc に次の数行を加えて,起動時に `screen -U` の様にオプションをつける。

defencoding utf8
cjkwidth on
putty

設定 ▸ ウィンドウ ▸ 変換の「文字コードの変換」を「UTF-8(CJK)」として,「CJK用の文字幅を使用する」にチェックを入れる。
設定 ▸ 接続 ▸ SSHの「リモートコマンド」に `screen -xRU` と書いて,ロクイン時に screen を立ち上げることもできる。

emacs

.emacs に次の数行を加える。

(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(prefer-coding-system 'utf-8-unix)
(set-keyboard-coding-system 'utf-8)