:::: MENU ::::

C.a.T!

CATch a TAIL!

Japanese sub culture and tech.

linux, mac

tmuxのcopy-pipeで少しすっきり

20140110

tmuxを使っていてちょっと困るのがクリップボード周りの処理で、クリップボードと連携させるにはtmuxのコピーバッファを一時ファイルに吐き出して、それをOS側のクリップボードツールに取り込むというような面倒なことしないといけませんでした。
tmux1.8で、copy-pipeというものが導入されてこの辺がすっきりしました。

1.8以前の仕組み

1.8以前は、冒頭に書いたような一時ファイルを挟んでクリップボードとやりとりしていました。
Macの設定だと、以下の様なことをしていました。

  • ~/.tmux.conf
    [code]
    set-option -g default-command "reattach-to-user-namespace -l $SHELL"
    bind C-c run-shell "tmux-pbcopy"
    bind C-y run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer – && tmux paste-buffer"
    [/code]

  • tmux-pbcopy
    [code lang=”shell”]
    /usr/local/bin/tmux save-buffer $HOME/.tmux_to_pbcopy
    cat $HOME/.tmux_to_pbcopy | reattach-to-user-namespace pbcopy
    [/code]

要は、run-shellでtmux-pbcopyシェルを呼んで、その中でsave-bufferでtmuxのバッファを取り出して.tmux_to_pbcopyに書き出し。
その内容をOSXのクリップボードツールpbcopyに渡してクリップボードにコピーさせる、というものです。
漂う強引な感じ。

1.8だと

1.8のcopy-pipeを使うと以下のようになります。

[code]
set-option -g default-command "reattach-to-user-namespace -l $SHELL"
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
bind C-y run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer – && tmux paste-buffer"
[/code]

copy-pipeを使うと、コピーした内容をそれに続くコマンドに渡してくれるので、直接pbcopyコマンドに渡せます。
これで、一時ファイルに書き出したりしなくてもすっきりクリップボードにコピーできます。


Leave a comment