tmux は線を ascii で表示するか、UTF-8 で表示するのオプションがあります。
今日日 UTF-8 非対応というのは稀なので、基本は UTF-8 で表示される筈です。
問題
tmux の線に使われている文字が曲者で、EastAsianAmbiguous という文字種です。これは文字幅を1にするか2にするか、言語圏によって決めます。
そんな文字を分割線に使うと、言語圏によって線の長さが変わってしまいます。
幅を決める部分は tmux の内部実装と glibc と utf8proc があります。
それらが EastAsianAmbiguous に対応していると問題ないのですが、 全部非対応。これはつらい。
UTF-8 で表示する際は、EastAsianAmbiguous を幅固定の線にする Pull Request を作りました。
Pull Request による変更点
単に文字の置換です。
という変更をしています。
両方とも固定で幅が1なので、言語圏に依存しません。
例えば、このように表示が崩れていた場合でも
この Pull Request によってこのように綺麗に表示してくれます。やったね。
修正と文字リテラル
さて、当然ですが、文字を置換するにはソースをいじる必要があります。tty-acs.c というファイルに文字テーブルがあるのでそれらを変更。具体的には x と q です。
さてこれで修正完了、と思ったら "\342\224\200" という謎の表記がある。
実はこいつが分からなくて今まで PR を作ってませんでした。
q に相当する ─ (0x2500) のページを見つめていると、
- UTF-8 (binary) 11100010:10010100:10000000
という表記が。
こいつをさらに良く見ると8進数で 3bit ずつ表記されていることに気がつく。
修正する予定の ᅳ(0xffda) は
- UTF-8 (binary) 11101111:10111111:10011010
なので
- 11 101 111:10 111 111:10 011 010
- 3 5 7: 2 7 7: 2 3 2
- \357\277\232
で書いてみると動いた。やったね。
単に私がこの文字リテラルを知らなかっただけなのですが、閃いた時は楽しかったですね。
単に私がこの文字リテラルを知らなかっただけなのですが、閃いた時は楽しかったですね。
メンテナのコメント
この PR で EastAsianAmbiguous を排除するので言語圏に依存せず正しい線が引けます。なのでマージされると思っていましたが、メンテナの環境では上手くいかないらしい。
んで、以下のオプションを試してくれと
こいつを .tmux.conf に書くも、やっぱり私の環境だと上手くいかない。set -as terminal-overrides ',*:U8=0'
UTF-8 表示に強制するオプションのようなのですが、そいつを修正するパッチなのに……
正確には ACS というものを使って線を描画するようです。
ちなみに Terminal.app + Ricty では上手くいかない。こうなります。
動かないよって文句を言ったら、「ACS サポートしてないターミナル使ってない?」と。
いやいや公式の Terminal.app ですよと内心思いましたが、iTerm2 と xterm を試すことにしました。
そうしたら何と綺麗に表示されるではありせんか。
どうやら Terminal.app は ACS をサポートしていないようです。つらい。
iTerm2 に乗り換えを検討しましたが、今度は EastAsianAmbiguous に対応しているか問題に変わる。
面倒になったので今まで通りの
- Terminal.app
- 独自パッチの tmux
で運用していこうと思います。
しかし tmux のバグだと思ったら Terminal.app だとは。
流石にそれは修正できない。
これはちょっとしたぼやきなのですが、Terminal.app は結構バグがあるらしい。
Terminal Multiplexer のメンテナが言うからには、色々あったんだろうな、と察する。
しかし nicm さん対応が早い。最初のコメントは10分とかでついた気がする。
反応が早いのはこちらとしても助かるし、いろいろと助言を貰えました。
まー助言の結果 Terminal.app は残念というオチなのですが。
ということで、tmux のバグを踏だので Pull Request を作ったら Terminal.app のバグでした。
環境
- OS: macOS 10.12.6
- Terminal.app: 2.7.3 (388.1.1)
- iTerm2: Build 3.1.5.beta.1
- xterm: XQuartz 2.7.11 (xorg-server 1.18.4)
- Ricty: 3.2.2
- tmux: cf782c4f546fb11f3157de7aecff85845b0dbed9
0 件のコメント:
コメントを投稿