カラクリスタ

「輝かしい青春」なんて失かった人のブログ

OSC52 を使ってリモートからコピペ出来る様にした

と言う小ネタです。


今、僕のメインの開発環境は、

なんですが、はてなブログの Theme を弄ったりする時に、macOS Sierra とか使っていた時に良く行なっていた、

$ cat hogehoge.txt | pbcopy

みたいなコトが出来なくて微妙に不便だったので、それに相当するコトを、

iTerm2 のクリップボードインテグレーション(OSC 52/PASTE64)のつかいかた - Qiita

に書かれている OSC52 シーケンスを使って実現してみました。

んで、その実際に僕が使っている、

元ネタほぼそのまんまやんけ

って言うコードはこちら:

#!/usr/bin/env zsh

function has() {
which "${1}" 2>&1 >/dev/null
}

if has pbcopy ; then
cat - | pbcopy
elif has wcmd; then
cat - | wcmd clip
else
payload="$(cat - | base64)"
printf "\x1bPtmux;\x1b\x1b]52;;%s\x1b\x1b\\\\\x1b\\" $payload
fi

ちなみに、このスクリプトは僕の dotfiles に bin/uclip という、 ちょっと微妙な名前で入ってるんですが、行っているコトとしては極めて単純で、

  • 標準入力から文字列を受け取り、その内容を Clipboard にセットする

と言うシンプルな処理だけを行っています。

それで、上記コードの一番最後の printf で始まるヤツが、実際に OSC52 のシーケンスを吐くヤツなんですが、 これが何故にこうもややこしい記述になっているかっていうと、これは、 上記スクリプトから Termnal Emulator までシーケンスが届く間に tmux が挟まっているので、 それを貫通させるために、tmuxエスケープシーケンスで OSC52 を Wrap する必要がある為、です。 まあそれが無かったら tmux 云々のシーケンスは必要ないです。はい。

あと OSC52 のシーケンスは当然の事ながら、OSC52 をサポートしている Terminal Emulator が必要になるため、 OSC52 を使いたい場合には、その OSC52 をサポートしている Terminal Emulator が必要です。

なお、僕は現在のメインの Desktop Environments である Windows 10 Pro では、

http://nanno.dip.jp/softlib/man/rlogin/RLogin

を使っています。便利。


と言う事で本日の小ネタは以上です。 なんかコレ、書いていて思った以上に文書量が増えたぞ……