読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

と言う小ネタです。


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

  • Archlinux on Hyper-V Gen2 VM

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

$ cat hogehoge.txt | pbcopy

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

qiita.com

に書かれている 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 では、

を使っています。便利。


と言う事で本日の小ネタは以上です。

なんかコレ、書いていて思った以上に文書量が増えたぞ……