その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

OS Xのクリップボードとtmuxのクリップボードを共通化する

OS Xクリップボードとtmuxのクリップボード *1 を共通にする設定に関するメモです.
なお,tmuxのバージョンは1.9a,reattach-to-user-namespaceのバージョンは2.3です.

1. まずreattach-to-user-namespace入れる
$ brew install reattach-to-user-namespace

簡単.

2. 設定ファイルを書く

.tmux.confに設定を書く.

if-shell 'test "$(uname -s)" = Darwin && which reattach-to-user-namespace > /dev/null 2>&1' 'source-file ~/.tmux-reattach-to-user-namespace.conf'

if-shell使うと,第一引数がtrueの時だけ第二引数を実行してくれて便利.
上記の設定では,「OSがDarwin,つまりOS X」かつ「reattach-to-user-namespaceがパス通ってるところに置いてある」時だけ,~/.tmux-reattach-to-user-namespace.confを読みに行くという感じになっています.


で,.tmux-reattach-to-user-namespace.confを書く.

set-option -g default-command "exec reattach-to-user-namespace -l $SHELL"

unbind -t vi-copy Enter
bind -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

unbind ]
bind ] run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

reattach-to-user-namespace経由でシェルを起動することで,tmux上でもpbcopypbpasteを正常に使える状態にしておき,あとはキーバインドをオーバーライドして,コピー時は内容をOSのクリップボードに送り,ペースト時はOSのクリップボードから読み込んでくるようにすればOK.


別に.tmux.confに書いても良いとは思うんですけど,.tmux.confif-shell1発書いて「こういう条件の時にこの外部設定ファイル読み込むんですよ〜」と表明したほうがわかりやすい気がしてこうした次第.気分です.

結論

if-shellは便利

*1:クリップボードと言うのだろうか