Skip to content

Instantly share code, notes, and snippets.

@z80oolong
Last active October 4, 2021 22:50
Show Gist options
  • Save z80oolong/e65baf0d590f62fab8f4f7c358cbcc34 to your computer and use it in GitHub Desktop.
Save z80oolong/e65baf0d590f62fab8f4f7c358cbcc34 to your computer and use it in GitHub Desktop.
tmux 2.5 以降において East Asian Ambiguous Character を全角文字の幅で表示する

tmux 2.5 以降において East Asian Ambiguous Character を全角文字の幅で表示する

告知 (2019/03/15)

これまで、本稿の Gist にて公開しておりました tmux 2.5 以降において East Asian Ambiguous Character を全角文字の幅で表示する為の差分ファイルについて、差分ファイルの分量が多くなったことに伴い、今後は以下の Github のリポジトリにて tmuxEast Asian Ambiguous Character 対応差分ファイルを公開することと致します。

なお今後、本 Gist には本稿のみを残しておきますので、差分ファイルにつきましては上記 URL より取得して下さいますよう御願い致します。以上誠に勝手ながらどうか御了承下さいますよう御願い致します。

概要

tmux 2.5 以降において、 Unicode の規格における東アジア圏の各種文字のうち、いわゆる "◎" や "★" 等の記号文字及び罫線文字等、 East_Asian_Width 特性の値が A (Ambiguous) となる文字 (以下、 East Asian Ambiguous Character) が、日本語環境で文字幅を適切に扱うことが出来ずに表示が乱れる問題が発生しています。

ファイル tmux-x.y-fix.diff (ここに、 x.y は tmux の安定版のバージョン番号。以下同様) 及び tmux-HEAD-xxxxxxxx-fix.diff (ここに、 xxxxxxxx は tmux の HEAD 版の commit ID の上位8桁。以下同様) は、 tmux 2.5 以降において East Asian Ambiguous Character の幅を漢字や全角カナ文字等と同じ幅 2 で表示するように修正するための差分ファイルです。

この差分には、 waltarix 氏によって作成された tmux の画面分割において、ボーダーラインを罫線文字に代えて ascii 文字を使用するための差分ファイルである pane-border-ascii.patch が含まれています。

https://gist.githubusercontent.com/waltarix/1399751/raw/6c8f54ec8e55823fb99b644a8a5603847cb60882/tmux-pane-border-ascii.patch

差分ファイルの適用とインストール

tmux のソースコードに差分ファイルを適用するには、安定版の tmux には、差分ファイル tmux-x.y-fix.diff を、 github 上の tmux の HEAD のソースコードには、 tmux-HEAD-xxxxxxxxx-fix.diff をそれぞれ適用して下さい。

従って、安定版の tmux のソースコードにおける差分ファイルについては、 tmux のソースコードが置かれているディレクトリより、以下のようにして差分ファイル tmux-x.y-fix.diff を適用後、tmux を通常通りにビルドしてインストールすると、 tmux において、 East Asian Ambiguous Character が全角文字の幅と同じ幅で表示されるようになります。

 $ patch -p1 < /path/to/diff/tmux-x.y-fix.diff
 (ここに、/path/to/diff は、 tmux-x.y-fix.diff が置かれたディレクトリのパス名)

また、github 上の tmux の HEAD のソースコードにおける差分ファイルについても、 github 上の tmux の HEAD のソースコードが置かれているディレクトリより、以下のようにして、最近の差分ファイルのみを適用後、 tmux の HEAD 版を通常通りにビルドしてインストールすると、 tmux において、 East Asian Ambiguous Character が全角文字の幅と同じ幅で表示されるようになります。

 $ patch -p1 < /path/to/diff/tmux-HEAD-xxxxxxxx-fix.diff
 (ここに、 /path/to/diff は、 tmux-HEAD-xxxxxxxx-fix.diff が置かれたディレクトリのパス名)

Linuxbrew を用いた差分ファイルの適用とインストール

Linuxbrew を導入した端末において、 East Asian Ambiguous Character 対応の差分ファイルを適用した tmux をインストールする際には、これらの差分ファイルを適用した tmux を導入するための Linuxbrew 向け Tap リポジトリ z80oolong/tmux を使用することを強く御勧め致します。

Tap リポジトリ z80oolong/tmux では、最新の安定版の tmux 及び github 上の最新の tmux の HEAD のインストールの他、旧安定版の tmux のインストールも可能です。

z80oolong/tmux の詳細な使用法につきましては、 z80oolong/tmux の README.md を御覧下さい。

オプションの設定について

ここで、 East Asian Ambiguous Character の文字幅を 2 ではなく 1 として扱う場合は、tmux の設定ファイル .tmux.conf に以下の設定を追記します。

set-option -g utf8-cjk off

なお、オプション utf8-cjk の初期値は、 locale に関する環境変数 LC_CTYPE の値が "ja*", "ko*", "zh*" の場合は on となり、それ以外の場合は off となります。そして、オプション utf8-cjk の値が on の場合は、オプション pane-border-ascii の値に関わらず、 tmux の画面分割のボーダーラインは ascii 文字となります。

謝辞

先ず最初に、tmux の画面分割において、ボーダーラインを罫線文字に代えて ascii 文字を使用するための差分ファイルである pane-border-ascii.patch を作成された waltarix 氏に心より感謝致します。

また、差分ファイル tmux-2.3-fix.diff を作成するに当たっては、下記の URL にある、 Markus Kuhn 氏が作成した East_Asian_Width 特性が A の文字の扱いを考慮した wcwidth(3) 関数の実装を使用しました。 Markus Kuhn 氏には心より感謝いたします。

http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c

最後に、 tmux の作者である Nicholas Marriott 氏を初め、 tmux に関わる全ての人々に心より感謝致します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment