=============================================================
OSC52(PASTE64)のwrite accessが有効になったiTerm2のビルドが出たので、iTerm2での具体的な使用方法をご紹介します。現状では主にtmuxユーザーに恩恵があります。
OSC52/PASTE64はxterm由来の機能で、端末エミュレータからクリップボードを操作するためのものです。
OSC52に関しては、すでに去年のターミナルマルチプレクサアドベントカレンダーで@ttdodaさんが言及していますので、興味ある方はこちらもご覽ください。
設定方法
先日のビルドで加わったグローバル設定、"Allow clipboard access to terminal apps"にチェックを入れます。
これだけです。
tmuxを立ち上げて、コピーモードでtmuxのコピーバッファに何かコピーしてみましょう。
どういうこと?
tmuxはこんな感じのシーケンスを端末に送っています。
$ printf "\033]52;;%s\033\\" `printf Hello|base64`
これでMacのペーストボードに"Hello"という文字列が入ると思います。
Emacsではsend-string-to-terminalを使ってわりと簡単に連携できそうですね。
実は以前のiTerm2でもOSC50/CopyToClipboardというシーケンスで同じことができたのですが、これは完全に独自拡張で追従する実装がありませんでした。(今でも"Allow clipboard access to terminal apps"の設定が有効なら以前と同様に使えます)
read accessに対応する端末では
$ printf '\033]52;;?\033\\'
とするとクリップボードの内容が読み出せるのですが、iTerm2ではセキュリティの問題などを勘案し、時期早尚と判断されたため実装は見送られました。
注意点
OSC 52にはセキュリティ上の懸念があることには留意しておくべきです。
@ttdodaさんの記事でも言及されていますが、セキュリティコンテキストの異なるサーバーへSSHする時などは、影響を考えて賢く使いましょう。
プロファイルごとに有効・無効を切り換えられないの?
できません。
iTerm2はOSC50/SetProfileという端末シーケンスを使って動的にプロファイルを切り換えられるので、プロファイルごとにセキュリティ設定を切り換えるという発想は現状では厳しいです。
Terminal.appでも使いたい
Terminal.appの端末エミュレーションを強化する、mouseterm-plusを使う、という方法があります。
他のOSでも使いたい場合、write accessだけの利用であればxterm、TeraTerm、RLogin、mltermなどの選択肢があります。
端末とクリップボードの連携ソリューションには様々なものがありますが、選択肢のひとつとして検討してみてください。