2019/06/03

utf8proc が 2.3 から East Asian Ambiguous の文字幅を 2 と判定するようになった

Homebrew でインストールできる tmux は文字幅判定の方法をいくつか持っています。
その中に utf8proc というソフトウェアに任せる、という方法があります。
しかし、その utf8proc は East Asian Ambiguous の幅を固定で 1 にするよう実装していました。
なので、自分用に patch を当てた formula を作ったりして対応していました。

ですが、utf8proc 2.3 から East Asian Ambiguous を 2 と判定する用になりました。
とりあえず自分が使っている patched 2.8 な tmux では問題無さそうなので公式の utf8proc を使うようにします。

蛇足
本当は LC_CTYPE を見て動的に判定する、という実装が理想っぽいですが流石にそこまではしてもらえないようです。

2019/02/20

zsh -l で .zshrc の内容が読み込まれない

.zshrc に function fを定義していて、zsh -c 'f' とかで function fを呼び出したい時を想定。
問題: zsh を起動して打つ分にはその function が使えるが、zsh -c にするとf が見つからないと言われる。


結論

.zshrc ではなく .zprofile に書いて zsh -l -c 'f' とする


zsh -l について

-l option は LOGIN option (see man zshoptions)。
login shell として zsh を起動する。
-l を省いた時と異なり設定ファイルをいくらか読みにいくようだ。


.zprofile と .zshrc

ここによると
  • .zprofile: login 時に読み込まれる
  • .zshrc: terminal session が発生した時に読み込まれる
ので、.zshrc に function を定義していると login 時には読み込まれない。
なので zsh -l で function を呼びたかったら .zprofile に書けば良い。


環境

  • OS: macOS Sierra 10.12.6
  • zsh: 5.7.1 (x86_64-apple-darwin16.7.0)

2019/01/23

EastAsianAmbiguous の幅を2に固定した utf8proc のバージョンを 2.2.0 に上げた

さて、今私が使っている tmux は

ようにしています。
が、 utf8proc 側の更新は何気に初ですね。


How to version up

brew で tap 済みなら
  • $ brew upgrade
で終わりです。丁寧に再インストールするのなら
  • $ brew uninstall utf8proc
  • $ brew install atton/customs/utf8proc
でしょうか。便利。


脱線: 楽をするための苦労の話

brew で install できるようにするまでで一番面倒だったのが環境構築。
なのですが、関連ファイルの生成は結構面倒。
www.unicode.org から Unicode の定義ファイルを落としてきてスクリプトで処理とかしているので。
スクリプトには ruby とか julia とか使われてるので微妙に mac の上に作るのはダルい。
今回は docker で fedora 28 の上に使い捨ての環境を作って解決。

fedora 29 だと julia が新しすぎてダメとか、CentOS7 にはデフォルトで julia が無かったりとか、寄り道はいろいろ。
最終的には fedora 28 の上に call-by-need で環境を作って patch を cherry-pick して make update をかけて終了。
brew の formula 回りは tmux で何度も触ってるので特筆すべきことは発生せず。
途中であった謎現象としては www.unicode.org 自体が落っこちていて make update が上手くくいかない事がありました。
何度も make してスパム判定されたとかなのかもしれない。