半角 border パッチがあたった tmux 2.3 を MacPorts で入れて wcwidth-cjk と一緒に使う

  • 6
    いいね
  • 0
    コメント

インストール

MacPortsでtmux 2.3をインストール.
borderをasciiにするpatchだけあてます.

sudo port uninstall tmux-pasteboard
sudo port uninstall tmux
sudo port clean tmux
sudo port -s patch tmux
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_tmux/tmux/work/tmux-2.3
curl -kL "https://raw.githubusercontent.com/silenvx/PKGBUILD/master/tmux/borders.patch" | sudo patch -p1
cd -
sudo port -s install tmux
sudo port install tmux-pasteboard

tmuxは2.2以降,wcwidthで文字幅を見るようになっているので,ambiguous widthの扱いが可能な,wcwidth-cjkを使うことに.
ただ,以下のような改変をしたバージョンを使います.

  • 最新のwcwidth-cjkは,autotoolsを使うようになっているのですが,osx環境でbuildすると,dylibファイルが作られないので,autotools導入前のMakefileをベースにしたMakefile.osxを作りました.
  • wcwidth.cにおいて,__APPLE__環境では濁点と半濁点を含めないようにしました.

では,インストールします.

git clone https://github.com/river24/wcwidth-cjk.git
cd wcwidth-cjk
git checkout osx
make -f Makefile.osx
sudo make -f Makefile.osx install

では,wcwidth-cjkを使ってtmuxを起動します.

/usr/local/bin/wcwidth-cjk /opt/local/bin/tmux

無事,tmux 2.3に移行できました.


追記:濁点・半濁点の件について

濁点と半濁点の対応をしないと,以下のようになります.

$ /opt/local/bin/tmux -V
tmux 2.3
$ /usr/local/bin/wcwidth-cjk /opt/local/bin/tmux
$ mkdir は
$ mkdir ば
$ mkdir ぱ
$ ls -al
total 0
drwxr-xr-x   5 river24  staff  170 Nov 16 19:33 .
drwxr-xr-x@ 22 river24  staff  748 Nov 14 12:49 ..
drwxr-xr-x   2 river24  staff   68 Nov 16 19:30 は
drwxr-xr-x   2 river24  staff   68 Nov 16 19:30 は
drwxr-xr-x   2 river24  staff   68 Nov 16 19:30 は

濁点と半濁点の対応をすると,以下のようになります.

$ /opt/local/bin/tmux -V
tmux 2.3
$ /usr/local/bin/wcwidth-cjk /opt/local/bin/tmux
$ mkdir は
$ mkdir ば
$ mkdir ぱ
$ ls -al
total 0
drwxr-xr-x   5 river24  staff  170 Nov 16 19:35 .
drwxr-xr-x@ 22 river24  staff  748 Nov 14 12:49 ..
drwxr-xr-x   2 river24  staff   68 Nov 16 19:35 は
drwxr-xr-x   2 river24  staff   68 Nov 16 19:35 ば
drwxr-xr-x   2 river24  staff   68 Nov 16 19:35 ぱ

以前はtmuxそのものに,濁点・半濁点の対応をするpatchをあてていましたが,tmux 2.2以降ではwcwidthで文字幅を見るようになったので,濁点・半濁点の対応もwcwidth側でするのが適切ではないかと思ったので,wcwidth-cjk側で対応するようにしました.