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 してスパム判定されたとかなのかもしれない。

2018/12/07

ReFe + ref.vim で Neovim から Ruby の document を読む

この記事は Okinawa.rb Advent Calendar 2018 の 7 日目の記事です。
昨日の記事は @hanachin_ さんの 『refineをしてるモジュール取り出せるrefinements_robbery gem』 でした。


なにができるの

カーソルが指している(クラス|メソッド)名のドキュメントが一発で引けます。
これが
こうじゃ

的な感じ。


環境

OS: macOS Sierra 10.12.6
Neovim: 0.3.1
ReFe: 2
Ruby: 2.5.3p105 (2018-10-18 revision 65156)
vim-ref: b45d10f6d0c82e3afd17774626e952fde03274a1



NeoVim + vim-ref

私の環境では NeoVim を使っていますが、Vim でもおそらく動くはずです。
vim-ref というリファレンスを読むのに便利なツールがあり、2014年あたりから私は活用させてもらっています


ReFe 2

クラス名かメソッド名を指定すると該当するドキュメントを表示してくれるツールです。


ReFe + vim-ref

さて。この二つを組み合せていきます。

  • $ bitclust setup
で refe を使えるようにします。
この時点で
  • $ refe Integer
とするだけで

のように表示できます。便利。

ちなみに vim-ref は plugin を入れると refe に関しては設定無しでも動きます。
normal mode で K を押すだけ。便利便利。


まとめ

ということで vim-ref を使って ReFe 2 を引くお話でした。
ちなみに vim-ref で開いた buffer 内のワードでも refe を引けるので、色々と探検できたりします。
後、地味な利点としてオフラインでもドキュメントが見られる点があります。
快適な Ruby ライフをー

2018/10/31

tmux 2.8 を全角記号対応させる

ということで恒例の分割線を EastAsianAmbiguous から ascii の線に変更するバージョンを作成。
2.7 の時とか 2.6 の時とかの作業履歴とかもまとめてあります。
そもそもどういう問題なのかはこの記事で。


環境

  • macOS Sierra 10.12.6
  • tmux: 2.8-border-ascii (4283f6b6e3f3c46b8665ce398a164063a7ef0aab)
  • utf8proc: 2.1(562edab805b82d66622914d06a5da3f53cd54a17)
  • Homebrew: 1.8.0-76-gcbb2e1b
  • Homebrew/homebrew-core: (git revision 95614; last commit 2018-10-30)
  • Ricty: 3.2.2(no option)


作業

今回は割とあっさりできました。cherry-pick して tag 更新して終わり。
  • $ git pull upstream
  • $ git checkout 2.8
  • $ git cherry-pick border-ascii
  • $ git checkout -b 2.8-border-ascii
くらい。

make できるかの確認は
  • $ sh autogen.sh
  • $ ./configure --enable-utf8proc
  • $ make
くらいで。

current directory に tmux command ができるので、動作確認とかもできます。
  • $ ./tmux -V
    • tmux 2.8
  • $ ./tmux
    • border-ascii 版の tmux が起動します。
あとは自分用の tap に反映しておしまい。


インストール方法

1からインストールする場合のコマンドは
  • $ brew tap atton/customs
  • $ brew install atton/customs/utf8proc
  • $ brew install --HEAD atton/customs/tmux
でいけます。


ぼやき

これで分割時の線が ascii になりました。良し良し。

自分用にメンテし続けてるけれど、tui を使う時とかはどうしても崩れてしまう。
特定の文字を表示する時かけられる hook があれば、置換表を config に書くと tui も問題無く表示できるとは思うのだけれど、そんなの無いかなー。