tmuxステータスラインにXcodeバージョンを表示する
はじめに
複数のXcodeがインストールされている状態で、今どのバージョンがカレントなんだっけ?と迷うことがありませんか?
そこでtmuxステータスラインにXcodeバージョンを表示してみました。
Xcodeバージョンを取得するシェルスクリプトを用意する
tmuxステータスラインに表示する文字列はシェルスクリプトで組み立てます。以下がそのスクリプトです。
#!/bin/sh v=`tmux showenv -g __tmux_xcode_description` if [ $? -ne 0 ]; then v=`xcodebuild -version 2> /dev/null |tr '\n' ' ' |sed -e 's/ Build version / (/' -e 's/ $/)/'` [[ $? -eq 0 ]] && tmux setenv -g __tmux_xcode_description "$v" else v=`echo $v |sed -e 's/^.*=//'` fi echo $v
バージョン値はxcodebuild
コマンドから取得します。
しかし、このコマンドの実行速度は速くありませんので、コマンド実行の都度待たされてしまい、ストレスが溜まります。
そこで、環境変数を使用してキャッシュします。それが __tmux_xcode_description
です。
最初に tmux showenv
でその環境変数を参照し、成功すればその値を使用します。
失敗すれば xcodebuild -version
を実行してバージョン文字列を抽出しキャッシュする…という流れです。
このとき tmux showenv
の出力は
__tmux_xcode_description=Xcode 9.2 (9C40b)
となりますので sed
で右辺だけを取り出します(上記、スクリプト8行目)。
一方、 xcodebuild -version
の出力は
Xcode 9.2 Build version 9C40b
となりますので、 tr
と sed
を使ってバージョン文字列を組み立てます(スクリプト5行目)。
組み立てたバージョン文字列はキャッシュしておきます。
このスクリプトを保存し実行権限を付与しておきます。
これをコマンドラインから実行すると以下のような出力が得られます:
$ ~/.config/tmux/xcode Xcode 9.2 (9C40b)
tmuxステータスラインに出力する
tmuxのstatus-right
に上記スクリプトの出力を設定すればOKです。
先のスクリプトが ~/.config/tmux/xcode
としてファイル化されているとすると、以下のような記述になります。
set -g status-right "#(~/.config/tmux/xcode) "
もちろん、status-left
に設定しても構いません。
制限事項
残念ながら、xcode-select
実行後、即時にtmuxステータスラインは表示更新されません。
これはキャッシュしていることが原因です。
この場合は、手動で環境変数をクリアします:
$ tmux setenv -gu __tmux_xcode_description
速度が気にならない環境であればキャッシュをしないという選択もありでしょう。
最後に
tmuxステータスラインはスクリプトを用意すれば良いので応用範囲は広いと思います。 tmux-plugins にもステータスライン表示のプラグインがありますので、探してみてはいかがでしょうか?
環境
この記事中で使用したソフトウェアのバージョンは以下の通りです。
- macOS 10.13.3 (17D47)
- Xcode 9.2 (9C40b)
- tmux 2.6
- GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
- iTerm2 Build 3.1.5