と言う小ネタです。
今、僕のメインの開発環境は、
なんですが、はてなブログの 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
を使っています。便利。
と言う事で本日の小ネタは以上です。 なんかコレ、書いていて思った以上に文書量が増えたぞ……