GNU Screen文字化け対策
GNU Screenを起動した後に、日本語名ファイルのあるディレクトリでls
したり、
日本語名ディレクトリをステータスラインで表示しようとすると文字化けが起こります。
それらを直すためのパッチを作ってくれた人が居て、
- https://gist.githubusercontent.com/raw/626040/be6a04f0e64c56185ba5850415ac59dad4cd62a0/screen-utf8-nfd.patch
- http://zuse.jp/misc/screen-utf8-osc.diff
の2つのパッチをあてると文字化けが無くなります。
nfdの方がls
等コマンドライン上での表示のためのパッチ、
oscの方がステータスラインでの表示のためのパッチになっています。
ただ、後者の方はサイトが無くなってしまって取ってこれないので 取り敢えず自分でGistを用意してあります。 (前者の方も一時期消えてた気がしたんですが今見たらまたありました。)
Screenのコードが4.4.0から4.5.0にアップデートするに際して、
色々コードのリファクタリングも行われたらしく、
単純に書き方(if分とかの{
を次の行に書いてたのを同じ行にしたり)の変更もあって
パッチが上手くあたらなくなってたりしました。
そこでちょっと手動で直してパッチを作り変えたりして MacのHomebrewのFormulaとかもあっぷでーとしました。
なんですが、別の問題があったみたいで、 hardstatus表示(一番下に出すWindow一覧とかの表示)のところで、 ハイライトをかけたりすると文字幅をきちんと認識できないのか表示が変になってました。
いろいろ試してみた所、screen.cにあてるパッチを無くすと この問題が消えたのでその様にアップデート。
- https://gist.githubusercontent.com/rcmdnk/7d504f2f9064162fac529ad0ddb87202/raw/ce910700dfec637f0e3b501c4a7d8b14260a4ef4/screen-utf8-osc.diff
上のnfdとこのoscのパッチをあてると文字化け対策出来ます。
$ wget http://ftpmirror.gnu.org/screen/screen-4.5.0.tar.gz
$ tar xzf screen-4.5.0.tar.gz
$ [[ "$OSTYPE" =~ darwin ]] && wget https://gist.githubusercontent.com/yujinakayama/4608863/raw/75669072f227b82777df25f99ffd9657bd113847/gistfile1.diff # Only for Mac
$ wget https://gist.githubusercontent.com/raw/626040/be6a04f0e64c56185ba5850415ac59dad4cd62a0/screen-utf8-nfd.patch
$ wget https://gist.githubusercontent.com/rcmdnk/7d504f2f9064162fac529ad0ddb87202/raw/ce910700dfec637f0e3b501c4a7d8b14260a4ef4/screen-utf8-osc.diff
$ [[ "$OSTYPE" =~ darwin ]] && patch -p2 < gistfile1.diff # Only for Mac
$ patch -p2 < screen-utf8-nfd.diff
$ patch -p2 < screen-utf8-osc.diff
$ ./autogen.sh
$ ./configure --enable-colors256 --prefix=$HOME/usr/local
$ make && make install
的な感じで。
Macの場合には、必須ではないですがもう一つ、gistfile1.diffと言うコンパイル時のエラーメッセージを抑える パッチも宛てます。
Mac Homebrewでインストールする場合は、
$ brew install rcmdnk/rcmdnkpac/screenutf8 --utf8
で入れられますが、既に4.5.0をこれで入れてしまった場合には Formulaがアップデートされても自動でアップグレードしてくれないので、
$ brew reinstall rcmdnk/rcmdnkpac/screenutf8
する必要があります。
まとめ
この辺の文字化け対策ですが、 GNU screen 最新版について に書いた通り、一部が一度取り込まれかけてまた戻されていたりするので、 何か面倒なことがあるんだと思います。
上でも勝手にscreen.cの部分を削除して上手く行ったので取り敢えずそのまま使い始めましたが、 正直screenのコードは全く理解してないので何か別の問題があるかもしれません。
まあ取り敢えずしばらく使ってみた所違和感はないので大丈夫かな、と。
また、
Macでの文字化け対策用のGNU screenのインストール
のところで書いてますが、この辺の2バイト文字の処理に関しては
ターミナルの部分で問題を持ってる場合もあるので
もし何かおかしい様ならそちらもチェックしてみる必要があります。
(screen
を立ち上げずに見れば分かるところですが。)