以前も調べたはずだけど結局ずっと何もやってなくて不便な思いをしていて、いい加減アレだなーと思い
screenのcopy modeでコピーしたのをMacのクリップボードにいれる(pbpasteで使えるようにする)のってどうするのがベストなんでしょう?
2010-07-05 23:51:54 via web
. @sugyan eval "stuff 'pbcopy\012'" "paste ." "stuff '\012\004'" こんなんは?
もっと真面目に,ファイルに取って(bufferfile ファイル名),pbcopy ファイル名 の方が良い気がしてきた.さっきのは改行が追加されちゃうからなー.
ということで,bind '^I' eval "writebuf" "stuff 'cat /tmp/tscreen-exchange | pbcopy\012'" になった.
@clairvy ありがとうございます!! ためしてみますっ ><
2010-07-06 00:36:18 via web to @clairvy
…とはいえ、screenド素人の自分にはそのコマンドが何をするものなのかまったく見当もつかず orz
"man screen"を読みつつ、他の人のエントリなどを読み漁ってみた。
http://yoka.at.webry.info/200908/article_1.html
どうも、screenのcopy modeでとれたペーストバッファ?の内容を一発でpbcopyに送るようなことはできないらしい。ファイルに送り込んでそこを経由して取得するのが妥当な方法なようだ。
で、paste bufferの内容を書き出すのが"writebuf"コマンド。
writebuf [-e encoding] [filename]
引数にfilenameを指定しなかった場合、デフォルトで"/tmp/screen-exchange"に書き込まれる(このデフォルト値は"bufferfile"コマンドで変更可能)。
あとはそこに書き込まれた内容をpbcopyコマンドに流し込んでやれば良い。例えばscreenで立ち上がっているシェルのコマンドライン上では、
$ screen -X writebuf && pbcopy < /tmp/screen-exchange
とやることでpaste bufferの内容をMacのクリップボードにコピーでき、他のアプリケーションでもペースト可能になる。
これと同じようなことを、screenのコピーモードから範囲を選択して確定させた時点でpbcopyに流し込むように"bindkey"で設定することもできるそうで。
bindkey [-d] [-m] [-a] [[-k|-t] string [cmd args]]
"-m"オプションでcopy modeでのキーバインド設定を変更することが出来るらしい。基本的にcopy modeから選択範囲を確定させるのは" "(space), "W", "Y"くらい?("W", "Y"で単語単位、行単位でコピーできるのを今日初めて知った…)
bindkey -m ' ' eval 'stuff " "' writebuf 'exec sh -c "pbcopy < /tmp/screen-exchange"' bindkey -m 'Y' eval 'stuff "Y"' writebuf 'exec sh -c "pbcopy < /tmp/screen-exchange"' bindkey -m 'W' eval 'stuff "W"' writebuf 'exec sh -c "pbcopy < /tmp/screen-exchange"'
こんな設定を"~/.screenrc"に書いておいたら、copy modeでの範囲選択から自動でpbcopyに送られるようになったっぽい。微妙にタイムラグがあるけど。。
stuffとかexecとかの使い方がイマイチ理解できておらず…もうちょっとキレイに正しく書けるのかもしれない。ドキュメントしっかり読もう。