pyperclipというツールを教えてもらった

pyperclipはコマンドラインクリップボードを扱うツールだ。

同じことをやるMacのpbcopy/pbpasteは知ってたけど、このPythonモジュールはプラットフォーム非依存で便利。ただしテキストのみという制限がある。

インストール

Pythonの入った環境で:

$ pip install pyperclip

とするだけ。

使い方

まあ、普通に操作する場合は、これはCtrl-CとかCommand-Cでやればよい。ただ、自動生成したデータをパイプで受け取ってクリップボードに入れる、なんてことがしたい人には便利。後述のように自前のフィルタにかけた内容をクリップボードに返すときにも使う。

パイプで受けるような場合は、モジュールをコマンドとして使うpython -mというのを使う。つまり python -m pyperclip -cとする:

$ echo "Hello, neko" | python -m pyperclip -c
$

これでHello, nekoという文字列がクリップボードにコピーされた。Ctrl-Vとかやると貼り付けられる。

クリップボードの内容を読み出すのはpasteコマンド

コマンドラインで使いたければ python -m pyperclip -p とする:

$ python -m pyperclip -p
Hello, neko
$

クリップボードの内容が出力された。

クリップボードシェルスクリプトで編集する

このツール、どう便利かというと、シェルスクリプトのパイプとクリップボードが繋がるのがよい。

シェルスクリプトのパイプが繋がるということは、クリップボードの内容をsortコマンドで並べ替えたり、重複をuniqで排除したりすることができるということだ。

また、sedawkで文字列置換フィルタを書いてる人はそれが全部活かせる。

$ python -m pyperclip -v | [フィルタ] | python -m pyperclip -c

の形式で、クリップボードの内容を定形のフィルタにかけて一瞬で編集し、またクリップボードに戻すことができる。べんり!

定形フィルタをダブルクリックで実行する

さらに、上記の "python -m pyperclip -v | フィルタ | python -m pyperclip -c" のコマンドをシェルスクリプトとしてセーブすると、ダブルクリックするだけでクリップボード内容を定形フィルタにかけて編集することができる。べんり!!

Macの場合

シェルスクリプトをそのままデスクトップ等に置けばよい。

Windowsの場合

シェルスクリプトをそのままダブルクリックしても動かないが、wslを呼び出すバッチファイルを用意すればよい。

クリップボードの数字をソートしたいものとする。

まずはsort.shというファイルに

python -m pyperclip -p | sort -n | python -m pyperclip -c

と書く。

$ cat sort.sh
python -m pyperclip -p | sort -n | python -m pyperclip -c
$

(sort -nは数の順にソートするオプションで、これを指定しないと辞書順ソート(34, 53, 23, 10, 8, 6を一番左の数字を見て10, 23, 34, 53, 6, 8とソートする)になってしまう。)

次に、sort.batというファイルに

wsl bash sort.sh

とだけ書く。

$ cat sort.bat
wsl bash sort.sh
$

このsort.shとsort.batを両方ともデスクトップ等に置いておく。(sort.batの中でパスを指定することでsort.shの置き場所を自由に変えることができる。)

さて、クリップボードに数字の並び:

34
3214
65
2
64
23
4

をコピーする。

これをソートするには、sort.batをダブルクリックする。

ウィンドウが一瞬出て消えて、これで既にソートが完了して結果がクリップボードに入っている。

Ctrl-Vで貼り付けてみよう。

2
4
23
34
64
65
3214

楽ちん!

これはちょっと簡単すぎる例だが、テキスト仕事の人は書式を整える単純作業(見出しの先頭には*をつける、など)が発生することがしばしばあって、しかも全体には適用したくないとか、複雑だから置換ウィンドウに入力するのがダルいとかがいっぱいある。

pyperclipを使うと、そういうものを定形のフィルタに追い出しておけるのである。