win32yankというのを知りました.Releasesをみると最新版はv0.1.1で,win32yank-x86.zipをダウンロードして,win32yank.exeを取り出しました.
これを自分のWSL2環境内の~/bin(コマンドサーチパスに含まれています)にコピーして,date | win32yank.exe
を実行すると,現在日時がクリップボードに格納されたのですが,しかし,プロンプトが表示されるまで,数秒を要しました.WSL2のファイルシステムにあるファイルを,Windowsのファイルシステムにコピーして,実行しているように見えます.
ということでwin32yank.exeをWindowsのファイルシステム内に置けばよいようにも思うのですが,少しスクリプトを書いて,(Windowsのファイルシステムの)RAMディスクに配置することにしました.
手元のPCでは,Y:がRAMディスクのドライブですが,他のPCではZ:にしていることもあります.~/.zshrcを見直すと,次のように書いていました.
export Y="/mnt/y"; export DRIVEY="$Y" export Z="/mnt/z"; export DRIVEZ="$Z" for d in $Y $Z do if [ -d $d ] then export TMPDIR=$d/wsl_tmp if [ ! -d $TMPDIR ] then mkdir $TMPDIR chmod 777 $TMPDIR fi unset TMPDIR break fi done
breakは,RAMディスクドライブが見つかったらそこでforの繰り返しを終えるというもので,手元で扱うどのPCも,Y:とZ:の両方のドライブを持つものはないのですが,このように書いていました.このbreakの前に,以下の通り,win32yank.exeの処理を書きました.(そして,mv ~/{bin,src}/win32yank.exeを実行しました.)
# クリップボード関連 if [ -f $HOME/src/win32yank.exe -a ! -f $d/win32yank.exe ] then cp $HOME/src/win32yank.exe $d chmod +x $d/win32yank.exe fi if [ -f $d/win32yank.exe ] then alias clip_in="$d/win32yank.exe -i" alias clip_out="$d/win32yank.exe -o" alias -g CL="| $d/win32yank.exe -i" function clip_readme () { echo 'クリップボードに入れる: command | clip_in' echo 'クリップボードに入れる: command CL' echo 'クリップボードから取り出す: clip_out | command' echo 'クリップボードを引数に与える: command $(clip_out)' } fi
実行方法は,clip_readmeに書いた通りですが,clip_inはwin32yank.exe -i,clip_outはwin32yank.exe -oに対応し,zshのグローバルエイリアスとしてCLを追加しました.
win32yank.exeをRAMディスクに置いた効果で,各エイリアスについて瞬時に実行するのを確認しました.