[2013/6/11]早速追記です。僕の環境が壊れていたようで、tmuxを再インストールしたら、下の方にある本当にやりたい方法で出来ました(一部修正有り)。
@todashutaさんに助けてもらって直りました。感謝です!
ここから本編
tmux便利ですよね。
でもmacで使うとクリップボードにコピーできない問題が発生するんですよね。
そんな問題を解決してくれるのが"reattach-to-user-namespace"なのです。
reattach-to-user-namespace -l zsh
という感じにコマンドを実行すれば、macでtmuxを使う際にもクリップボードが使えるようになります!!! 素晴らしい!
しかし毎回自分でコマンドを入力するのは面倒です。
ではこのコマンドを誰が実行するか?
今日はそんなグダグダなお話。
最初に言っておきますが、全然ベストプラクティスではありません!
ベストプラクティスだろjk
まず最初にインストール方法ですが、"reattach-to-user-namespace"はhomebrewでインストールできます。
話は戻って、こいつをどう使うか?
tmuxを起動したら勝手にreattach-to-user-namespaceが実行されているという感じにしたいと思います。
ググると色々な方法が出てくるのですが、僕は以下の方法を取りました。
まず、.tmux.confに以下の設定をします。
これだけだと上手くいかないので、.zshrcに以下のコードを追加します。
これで完成です。
それぞれ説明すると、まず.tmux.confでやっているのはOSの判定とreattach-to-user-namespaceの適用です。
.tmux.confのifは
if shell-command command [command]
という書式でshell-commandが成功したらcommandをそうでなければ[command]を実行出来ます(commandはtmuxのコマンド)。
こいつのshell-commandでOSの判定とreattach-to-user-namespaceの存在確認を行なっています。
よってこの文はOSがmac(Darwin)でreattach-to-user-namespaceが存在すればtmuxのdefault-commandでreattach-to-user-namespaceを実行するという設定になります。
default-commandはウインドウが生成された時に最初に実行されるコマンドになります。
しかし、この設定だけでは問題があります(なので.zshrcでゴニョゴニョしてる)。
どういった問題があるのかというと、一つ目のウインドウにだけreattach-to-user-namespaceが適用されないのです。
これはこの辺が原因のようで、ifのコマンドの結果が得られるときには既にtmuxのウインドウの生成が終わってるため、一つ目のウインドウにだけcommandが適用されないというものです。
ちょっと細かく実行順序を書くと
tmux起動 -> shell-command実行 -> 最初のウインドウ生成 -> shell-command実行完了 -> command実行
という感じです。
そういう訳で、見事に一つ目のウインドウだけcommandが適用されません。
そのため、.zshrcで一つ目のウインドウの時だけ愚直にreattach-to-user-namespaceを実行しています。
大量のifの条件により最初の一つ目のペーンであることを判定していますが、$SHLVLの判定周りで問題が発生しそうな気がプンプンします。
本当は
set-option -g default-command "which reattach-to-user-namespace && reattach-to-user-namespace -l zsh"
という感じに出来れば一発だったのですが、こういう風に書くとなぜかtmuxが起動せずに落ちるので、泣く泣くシェルスクリプトで実行することになりました。
何かミスってるのかな…
そんなこんなでグダグダな説明でした。
ブログの内容はぜ~んぶ消して、以下のようにdefault-commandを設定すればOK!(
@todashutaのgistです)
僕の環境のtmuxがiTerm2向けのパッチを当てたバージョンだったので、それがなんか悪さをしていたようです。
brewで普通にインストールされるtmuxだと何の問題もなく起動しました。
良かった良かった。
最後にtmuxでペーンの番号出してる画像貼っておきますね(特に意味は無いです)
0 件のコメント:
コメントを投稿