tmuxのcopy-pipeとsplit-windowを組み合わせると捗る
- tmux 1.8
以前こういうエントリを書いた。
ローカルで使っているtmux.confに以下のような設定を書いて、 選択範囲をnopasteに投げられるようにしていた。
bind-key -temacs-copy C-q copy-pipe "cat | ~/bin/np"
上の例にあるnpというコマンドは、
- nopasteした後にそのURLを標準出力に出す
- そのURLをブラウザで開く
というもの。
copy-pipeした場合は標準出力が見られないものの、
ブラウザで開くというのは有効なのでローカルで使っている分には特に問題がなかった。
しかし、リモートでtmuxを使っている場合は ブラウザが開けないのでnopasteしたURLが得られず 無意味な設定になってしまう。
アカウントに紐付いたものリストが見られるような nopasteサービスを使っていればそこから辿れなくはないが、 めんどくさいし今使っている社内nopasteにはそんな機能はない。
とはいえこれが使えないとちょっとしたテキストを 共有するのにすごく不便(一度ファイルに落としてからnpコマンドに食わせないといけない)。
そこでtmuxのsplit-window(ウィンドウの分割)と組み合わせて
その場でnopaste先のURLを確認できるようにしてみた。
bind-key -temacs-copy C-q copy-pipe "cat | ~/bin/np > ~/.last_np; tmux split-window -p 1 'less ~/.last_np'"

下の方にピコッと表示される (社内nopasteのURLなのでモザイクだらけとなっております)
ちょっと長いがやっていることは簡単で、
nopasteした後にその結果をtmuxのsplit-windowに渡している。
- npコマンドの結果(=nopaste先のURL)を
~/.last_npというファイルに保存 split-windowコマンドで~/.last_npの内容をlessで表示- URLが表示できればいいだけなので
-pは最小の1に
split-windowは引数にコマンドを指定すると
そのコマンドが終了すると同時にペインを閉じる。
今回はlessで開いているので、qを入力すればペインごと閉じてくれる。
いちいちファイルを介さないといけないので無駄な感じもするが、 手を動かさないといけないわけではないし、 履歴を確認できると思えばまあいいかな、と。
cat | ~/bin/np >> ~/.last_np; tmux split-window -p 1 'tail -n1 ~/.last_np' | less
とすればすべての履歴を残すことも。
とりあえず捗る。