Skip to content

tmux-eaw-fix -- tmux 2.6 以降において各種問題を修正する野良差分ファイル

License

Notifications You must be signed in to change notification settings

z80oolong/tmux-eaw-fix

Repository files navigation

tmux-eaw-fix -- tmux 2.6 以降において各種問題を修正する野良差分ファイル

概要

tmux とは、 terminal session を効果的に操作できる端末多重化ソフトウェアです。 tmux の使用により、複数の仮想 window や pane を同時に表示し、それらの間を切り替えたり terminal session を分割することが可能となります。そして、これにより単一の terminal window 内で複数の task を同時に実行することが可能となります。

しかし tmux 2.6 以降において、現在のところ以下のような問題が発生しています。

  • Unicode の規格における東アジア圏の各種文字のうち、いわゆる "◎" や "★" 等の記号文字及び罫線文字等、 East_Asian_Width 特性の値が A (Ambiguous) となる文字 (以下、 East Asian Ambiguous Character) が、日本語環境で文字幅を適切に扱うことが出来ずに表示が乱れる問題が発生する。
  • Unicode 上の絵文字の文字幅も適切に扱われない問題が発生する。
  • tmux の pane 分割において、画面分割におけるボーダーラインの罫線文字の文字幅が適切に扱われず、画面表示が乱れる問題が発生する。
  • tmux の新たな HEAD 版より追加された SIXEL による画像表示において、パレット数が 0 となるような画像と表示させようとすると、 tmux の process が異常終了したり、 ORMODE に対応した SIXEL 画像が正常に表示されない問題が発生する。

本リポジトリに置かれているファイル tmux-x.y-fix.diff (ここに、 x.y は tmux の安定版のバージョン番号。以下同様) 及び tmux-HEAD-xxxxxxxxx-fix.diff (ここに、 xxxxxxxx は tmux の HEAD 版の最新の commit ID 番号。以下同様) は、 tmux 2.5 以降において、上記で示した問題を解決するために以下で述べる修正を加えた差分ファイルです。

なお、本差分ファイルは、 "tmux 2.5 以降において East Asian Ambiguous Character を全角文字の幅で表示する" より、本差分ファイルによって修正される箇所が広範に渡る事に伴い、 "各種問題を修正する野良差分ファイル" と本差分ファイルの呼称を改めるものです。

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

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

従って、安定版の tmux のソースコードにおける差分ファイルについては、 tmux のソースコードが置かれているディレクトリより、以下のようにして差分ファイル tmux-x.y-fix.diff を適用後、tmux をコマンド ./configure, make を用いてビルド及びインストールすると、上述の修正がなされた tmux が導入されます。

 $ patch -p1 < /path/to/diff/tmux-x.y-fix.diff
 (ここに、/path/to/diff は、 tmux-x.y-fix.diff が置かれたディレクトリのパス名)
 $ ./configure --prefix=/path/to/install ...
 (ここに、 /path/to/install は tmux のインストール先。なお、 ./configure の引数は適宜追加すること。)
 $ make
 $ make install

また、github 上の tmux の HEAD のソースコードにおける差分ファイルについても、 github 上の tmux の HEAD のソースコードが置かれているディレクトリより、以下のようにして、最近の差分ファイルを適用後、 tmux の HEAD 版をコマンド ./configure, make を用いてビルド及びインストールすると、上述の修正がなされた tmux が導入されます。

なお、 tmux の HEAD 版でのビルドの場合、コマンド ./configure の実行に先立ち、シェルスクリプト ./autogen.sh を実行して ./configure を生成する必要があることに留意する必要があります。

 $ patch -p1 < /path/to/diff/tmux-HEAD-xxxxxxxx-fix.diff
 (ここに、 /path/to/diff は、 tmux-HEAD-xxxxxxxx-fix.diff が置かれたディレクトリのパス名)
 $ sh ./autogen.sh
 $ ./configure --prefix=/path/to/install ...
 (ここに、 /path/to/install は tmux のインストール先。なお、 ./configure の引数は適宜追加すること。)
 $ make
 $ make install

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

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

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

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

AppImage パッケージを用いたインストール

tmux のソースコードへの本差分ファイルの適用及びソースコードのビルドによるインストールが困難な環境及び状況の方に向けて、本差分ファイルを適用したソースコードからのビルド済みの tmux の AppImage パッケージを用意しました。ソースコードからのビルド作業がお手数な方は、 tmux の AppImage パッケージの使用を強く御勧めします。

tmux の AppImage パッケージは、以下の URL にて配布されています。詳細な使用法についても、以下の URL を御覧下さい。

各種設定について

本節では、本差分ファイルを適用後に拡張される tmux のオプション及び tmux が参照する環境変数について述べます。

utf8-cjk

East Asian Ambiguous Character の文字幅を 2 とすることを有効化するかどうかを設定するオプションです。

このオプションの設定値を on とすると、 East Asian Ambiguous Character の文字幅が 2 となり、 off とすると、文字幅が 1 となります。例えば、East Asian Ambiguous Character を全角文字として表示する場合は、 tmux の設定ファイル .tmux.conf に以下の設定を追記します。

set-option -g utf8-cjk on

なお、オプション utf8-cjk の初期値は、 locale に関する環境変数 LC_CTYPE の値が "ja*", "ko*", "zh*" の場合は on となり、それ以外の場合は off となります。

utf8-emoji

UTF-8 で定義される絵文字の文字幅を 2 とすることを有効化するかどうかを設定するオプションです。

このオプションの設定値を on とすると、 UTF-8 で定義される絵文字の文字幅が 2 となり、 off とすると、文字幅が 1 となります。例えば、 UTF-8 で定義される絵文字のを全角文字として表示する場合は、 tmux の設定ファイル .tmux.conf に以下の設定を追記します。

set-option -g utf8-emoji on

なお、オプション utf8-emoji の初期値は、 locale に関する環境変数 LC_CTYPE の値が "ja*", "ko*", "zh*" の場合は on となり、それ以外の場合は off となります。

pane-border-ascii

tmux において画面分割を行う場合に罫線文字に ascii 文字を使用するためのオプションです。

通常は tmux での画面分割において使用する罫線文字は、環境に応じて UTF-8 の罫線文字か、端末が対応している ACS か、若しくは ascii 文字が使用されます。

このオプションを on に指定すると、 tmux での画面分割において使用する罫線文字に ascii 文字を使用します。

pane-border-acs

tmux において画面分割を行う場合に罫線の描画に ACS を使用するためのオプションです。

このオプションを on に指定すると、 tmux での画面分割において罫線の描画に ACS を使用します。

なお、このオプションと pane-border-ascii の両方を on に指定した場合は、 pane-border-acs が有効となることに留意する必要があります。

環境変数 TMUX_ACS

環境変数 TMUX_ACS に以下の値を設定すると、tmux での画面分割において以下のように罫線の描画を行います。

  • utf8, utf-8 … 罫線の文字に UTF-8 の罫線文字を使用します。
  • acs … 罫線の描画に ACS を使用します。
  • ascii … 罫線の文字に ascii 文字を使用します。

なお、環境変数 TMUX_ACS による設定は、オプション pane-border-ascii, pane-border-acs の設定に優先する事に留意する必要があります。

環境変数 TMUX_CONF

tmux 2.6-3.0a までにおいては、環境変数 TMUX_CONF の値には、 System-wide で使用する tmux の設定ファイル tmux.conf の絶対パスを指定します。

また、 tmux 3.1 以降においては、環境変数 TMUX_CONF の値には、 tmux において使用する設定ファイル tmux.conf の絶対パスを、設定ファイルを読み込む順にセミコロンで区切って指定します。なお、 tmux.conf のパスには、 ~/ 及び、先頭に $ を付した環境変数を使用できます。

環境変数 TMUX_CONF が指定されない場合は、 tmux のコンパイル時に指定されるマクロ TMUX_CONF の値が使用されます。

なお、この環境変数 TMUX_CONF は、 AppImage パッケージファイルにて主に使用されます。

謝辞

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

また、本差分ファイルについて、 tmux の画面分割の為のボーダーラインの罫線文字について判別と適切な描画を行う為の修正を作成して頂いた koie-hidetaka 氏に心より感謝致します。 koie-hidetaka 氏におきましては、他にも本差分ファイルに関して有益な指摘も幾つか頂きました。

最後に、 tmux の作者である Nicholas Marriott 氏を初めとする tmux の開発コミュニティ及び tmux に関わる全ての人々に心より感謝致します。

使用条件

本差分ファイルは、端末多重化ソフトウェアである tmux に適用する差分ファイルであり、以下に述べる各氏が著作権を有し、tmux のライセンスと同様である ISC License に基づいて配布されるものとします。

本差分ファイルの使用条件の詳細については、本リポジトリに同梱する LICENSE を参照して下さい。

Releases

No releases published

Packages

No packages published