このブログはURLが変更になりました

新しいブログはこちら→ https://matsuu.hatenablog.com/

X環境のクリップボードやOS Xのペーストボードとtmuxのバッファを連携する方法

これはターミナルマルチプレクサAdvent Calendarの21日目です。20日目はid:tmatsuu最近のbyobuの動向についてでした。つまり連チャンです。

screenやtmuxには、いわゆるクリックボードに相当するバッファという機能があります。通常はscreenやtmuxの中で完結する機能ですが、それぞれ読み込み/書き出しができるので、XのクリップボードOS Xのペーストボードと連携することが可能です。
ここでは、各環境とtmuxを連携する方法を紹介します。

LinuxなどのX環境のクリップボードとtmuxを連携する方法

xclipコマンドを使うことで簡単に連携することができます。

bind-key C-c run "tmux save-buffer - | xcopy -i"
bind-key C-v run "xcopy -o | tmux load-buffer - && tmux paste-buffer"

これで、

  • tmuxでコピーモードを経由してtmuxのバッファにためる
  • Ctrl-b Ctrl-cを押してtmuxのバッファからクリップボードへコピーする
  • Ctrl-b Ctrl-vを押すと、クリップボードからtmuxのバッファにコピーしつつ貼りつける

が可能になります。最初の2つを1回の動作でできればよかったのですが、現在のtmuxでは難しいようです。

OS Xのペーストボードとtmuxを連携する方法

OS Xの環境ではペーストボードとの連携にpbcopy/pbpasteを使いますが、pbcopy/pbpasteが特殊な実装であるため、デフォルトのままではtmuxと連携ができません*1
tmuxに対してパッチを当てることも可能ですが、追従するのも大変なのでここではGithubで公開されているラッパー、tmux-MacOSX-pasteboardの利用をオススメします。

tmux-MacOSX-pasteboardの使い方

ソースはGithubから取得します。git cloneしてmakeします。makeするためにはXcodeが必要です。
makeの結果、reattach-to-user-namespaceというコマンドが生成されますのでこれを任意の場所に設置しましょう。ここでは~/bin/に設置しています。

$ git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
$ cd tmux-MacOSX-pasteboard
$ make
$ ls -l reattach-to-user-namespace
-rwxr-xr-x  1 matsuu  staff  34548 12 20 22:34 reattach-to-user-namespace
$ cp reattach-to-user-namespace ~/bin/
tmuxの設定

tmuxの起動時およびpbcopy/pbpaste実行時にreattach-to-user-namespaceをかませます。

set-option -g default-command "~/bin/reattach-to-user-namespace -l $SHELL"
bind-key C-c run "tmux save-buffer - | ~/bin/reattach-to-user-namespace pbcopy"
bind-key C-v run "~/bin/reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

これでLinuxの場合と同様に、

  • tmuxでコピーモードを経由してtmuxのバッファにためる
  • Ctrl-b Ctrl-cを押してtmuxのバッファからペーストボードへコピーする
  • Ctrl-b Ctrl-vを押すと、ペーストボードからtmuxのバッファにコピーしつつ貼りつける

が可能になります。

参考文献

今回の記事を書くにあたり、以下の情報を参考にさせていただきました。