TechSite.blog powered by shimarin @ayurina

いろんなことを試してみるブログです。

tmuxのpowerline設定を環境に合わせて読み込む

time 2017/05/20

若干、ニッチな要件なような気がしないでもないですが、powerlineとtmuxの設定のちょっとした技です。ちょっとしたことですが、かなり快適になりました。

sponsored link

tmux.confは動的に設定を変えられない

結論から。こちらのリポジトリにあります。

https://github.com/tkshimada0912/dotfiles

まず、前提。私はdotfilesにて設定を管理しています。これを行うことで、どこのマシン環境でも、gitとmakeさえ入っていれば、シェル環境が一発で整う状態になっています。

% git clone dotfiles
% cd dotfiles
% make

これだけで、環境が整うので、とても便利です。

当然ながら、このdotfiles環境は、どこのマシンでも、外部ツールのインストール状況やモジュールのインストールパスを適宜判断して、それなりの環境になるようにしてあります。特にpowerlineはpythonモジュールということもあり、いろんなとこに入れてしまいがちです。なので、.zshrc等では、条件判断をかけています。

########################################
# powerline
PLUDIRS=(${HOME}/Library/Python/2.{1..9}/lib/python/site-packages ${HOME}/.local/lib/python2.{1..9}/site-packages)
PLSDIRS=(/usr/local/lib/python2.{1..9}/{site,dist}-packages)
PLCONF="powerline/bindings/zsh/powerline.zsh"
for DIR in ${PLUDIRS} ${PLSDIRS}; do
	if [ -f ${DIR}/${PLCONF} ]; then
		powerline-daemon -q
		. ${DIR}/${PLCONF}
		break
	fi
done

そこまで要るのか?という疑問はありつつ、とりあえずこれくらい書いておけば、ユーザー環境に入れていようが、MacだろうがLinuxだろうが、大抵動きます。

ところが、一つだけ、これがうまく行かないものがあります。tmuxのconfです。

source "${HOME}/Library/Python/2.7/lib/python/site-packages/powerline/bindings/tmux/powerline.conf"

Macなら、こんな感じになるんですが、もちろんLinuxでは違いますし、ユーザー環境にインストールされていることもあって、条件分岐が必要です。ところがtmux.confでは当然ifとかforとか書けません。困りました。

設定ファイルを分けて別ファイルを読ませることで解決

考えた結果、以下の対応を取りました。

  • .tmux.confは外部ファイルの読み込むように修正する。ここでは${HOME}/.tmux.ext.confを作っています。
  • この.tmux.ext.confをdotfilesのMakefile、外部シェルで書き換える。

こうすることで、git clone後のmake時に、powerline.confのパスの判断を入れることができ、tmux.confファイル本体を操作するリスクも避けられます。

maketmuxext.shというシェルを作り、tmux.ext.confに、powerline.confを読むだけの設定を作成する処理を準備し、Makefileの中から呼び出します。シェルの中身は.zshrcと同じような内容です。

#!/bin/bash

TMUXEXT=${HOME}/.tmux.ext.conf
rm -f ${TMUXEXT} && touch ${TMUXEXT}

# powerline
PLUDIRS=$(echo ${HOME}/Library/Python/2.{1..9}/lib/python/site-packages ${HOME}/.local/lib/python2.{1..9}/site-packages)
PLSDIRS=$(echo /usr/local/lib/python2.{1..9}/{site,dist}-packages)
PLCONF="powerline/bindings/tmux/powerline.conf"
for DIR in ${PLUDIRS} ${PLSDIRS}; do
        if [ -f ${DIR}/${PLCONF} ]; then
                echo source \"${DIR}/${PLCONF}\" >> ${TMUXEXT}
		break
        fi
done

これで、どこにpowerline.confがインストールされていれも、tmuxが正しく見つけられるようになります。

小さなTipですが、この方法はdotfilesのポータビリティを上げる上で結構ポイントになるかな、と思っています。とにかく快適になりました。

sponsored link

down

コメントする




中の人

しまりん

しまりん

自称クラウドエンジニア。ブログサーバーの性能改善に勤しむ一方、新しい技術は「動かしてみないと」「触ってみないと」気が済まない性分です。 新しいiPhoneやっぱり楽しい。

Twitter でフォロー

最近のコメント

    カテゴリー

    

    sponsored link

    アーカイブ