わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

win32yank.exeを使用して,WSL2のコマンドラインにクリップボードを

 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ディスクに置いた効果で,各エイリアスについて瞬時に実行するのを確認しました.