PopClip でリンクタグ作成

昨日の Typora の記事において、web ページを markdown でペーストするいい方法、ほかにもっとないものか考えていた。
 そしたらあった。
 PopClip を使うのだ。

🔗 PopClip for Mac

テキストや URL を選択すると小さなポップアップが出てきて、コピーできたり、カットできたり、Google で検索できたりするユーティリティである。
 PopClip はさまざまな機能拡張を配布している。

🔗 PopClip Extensions

そこに markdown でコピーする機能もあるのだった。
 画像の URL もコピーできて万々歳である。

たくさんの extension が配布されている

PopClip エクステンションは自作できる

PopClip は Mac ユーザならおなじみのアプリで、AppStore で 1,200 円で販売されている。少々お高く思えるものの、お値段以上の価値があるかもしれない。
 PopClip は機能拡張を自作できるのである。
 動かせるアクションは、

  • サービスメニュー項目
  • アップルスクリプト
  • シェルスクリプト
  • URL
  • キー操作

という具合。サービスメニューにアクセスできるなら、Automator で作ったクイックアクションが使えるかもしれない。いろいろ夢が広がる。

ためしに、URL を選択した時に、その URL へのリンクタグを生成する PopClip エクステンションを作ってみたい。

makeLink エクステンション

Safari ツールバーの URL が表示される窓を、「スマート検索フィールド」というらしい。ここで URL を選択してリンクタグを作る、という使用法を想定する。

PopClip エクステンションを自作するにあたって、まずすべきことは、下記のページに飛んでサンプルを眺めることである。

🔗 GitHub – pilotmoon/PopClip-Extensions: Documentation and source code PopClip extensions.

(Google Chrome で翻訳したほうが楽かもしれない)

「General Overview」の 「Types of Actions」というところに Example が例示されている。
 どうやら PopClip エクステンションは二つ三つのファイルを必要とするらしい。

  • Config.plist (一番肝になるファイル。必ず必要)
  • 実行ファイル(シェルスクリプトのファイルなど)
  • アイコン(一辺が 256 px 正方形の png 画像)

シェルスクリプトを使うので、「Say」という文章読み上げの機能拡張を参考にする。
 Say の plist をコピペして書き直すのが早そうだ。

Config.plist の編集

Say の plist は以下の通りだ。

📝 Say Config.plist(PopClip-Extensions/Config.plist at master · pilotmoon/PopClip-Extensions · GitHub
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Actions</key>
	<array>
		<dict>
			<key>Image File</key>
			<string>speechicon.png</string>
			<key>Shell Script File</key>
			<string>say.sh</string>
			<key>Stoppable</key>
			<true/>
			<key>Title</key>
			<string>Say</string>
		</dict>
	</array>
	<key>Extension Description</key>
	<string>Speak the selected text aloud, using the system default voice. To change the voice, go to "Speech" in System Preferences.</string>
	<key>Extension Identifier</key>
	<string>com.pilotmoon.popclip.extension.say</string>
	<key>Extension Name</key>
	<dict>
		<key>en</key>
		<string>Say</string>
		<key>fr</key>
		<string>Lire</string>
	</dict>
	<key>Required Software Version</key>
	<integer>693</integer>
</dict>
</plist>

plist──プロパティリストというのは xml で記述される。
 <key></key> で囲まれた部分は、手を加えない。
 その下に対になっている <string><integer> タグの部分を、自分用に書き換える。

「Image File」はアイコンのファイルである。下の「speechicon.png」を、「makeLink.png」と書き換えた。
 makeLink.png は後で作ればいい。

「Shell Script File」はシェルスクリプトファイルを指示するものである。
string を「makeLink.sh」と書き換えた。

その次の「Stoppable」というのはよくわからない。多分、いらないだろうと見て、次の行の <true/>とともに削除した。

「Title」は「makeLink」と書き換える。

「Extension Description」は、この機能拡張の概要である。「URLでリンクタグを作成」としておいた。

「Extension Identifier」はなんらかの署名であるらしい。ここでは「com.pilotmoon.popclip.extension.say」を「com.mac-ra.extension.makeLink」とした。com.mac-ra の部分は、なにか適当な名前、com.tekitou とかでもいいと思う。

「Extension Name」は「en」のほうを「Say」から「makeLink」にし、「fr」とその次の行の「Lire」を削除した。

「Required Software Version」は、PopClip のバージョンが、いくつ以上で使用可能という制限をかけるためのものだ。特に変更しなくていいと思われる。

シェルスクリプトとアイコンの作成

サンプルの「say.sh」は以下のようになっている。

echo $POPCLIP_TEXT | say

どうやら、POPCLIP_TEXT という名前で選択したテキストを受けとっているようだ。
 シェルスクリプトが引き取る変数は、以下のページ、「Script Fields」で解説されている。

🔗 GitHub – pilotmoon/PopClip-Extensions: Documentation and source code PopClip extensions.

makeLink エクステンションの場合は、「POPCLIP_URLS」というのを引き取るのが良さそうだ。さらに、「POPCLIP_BROWSER_TITLE」というのもある。ページのタイトルが入っているらしい。
 シェルスクリプトは以下のようにした。

📝 makeLink.sh
echo '<a href="'$POPCLIP_URLS'" target="_blank">'$POPCLIP_BROWSER_TITLE'</a>' | pbcopy

作ったリンクタグは、「pbcopy」でクリップボードにコピーするのだ。
 続いてアイコン。
 PopClip のアイコンは 256px X 256px で作る png ファイルである。背景は透明で、使える色は黒のみ。ただし、透明度を変更することで灰色が表現できる。
 こんなふうにしてみた。

これに「makeLink.png」と名前をつけて保存した。

実行してみる

以上の三つのファイル Config.plist、makeLink.sh、makeLink.png を、ひとつのフォルダに集める。フォルダの名前は「makeLink」とする。

このフォルダの名前に「.popclipext」という拡張子を追加する。
 システムから確認を求められて OK すると、ようやく PopClip エクステンションの完成だ。

これをダブルクリックすると、「符号なしの拡張子」というダイアログが出る。

めげずに「インストールする」を選ぶと、可愛い音が鳴り、メニューバーの PopClip に機能拡張が追加された。

PopClip エクステンションを修正する

さっそく使ってみると、うまいこと動いてくれる。

右端のアイコンが追加したエクステンション

しかし、どうも様子がおかしい。URL 以外のテキストを選択した時も makeLink が図々しく出てきてしまう。
 これは修正の必要があるだろう。

インストールされた PopClip エクステンションは、「~/Library/Application Support/PopClip/Extensions/」のなかに置かれる。PopClip を使用しているなら、このパスを選択すれば、フォルダのマークが出てきて Finder で開けるのではないかと思う。
 popclipext ファイルは右クリックメニューの「パッケージの内容を表示」で中身を見られる。

さっそく Config.plist を修正する。
 Actions 内で「Requirements keys」という、条件を決める項目を指定できるようだ。「選択したテキストに URL が含まれることを要求する」という、おあつらえむきの httpurl なるものがある。
 Requirements keys は Array のなかに収める。
 最終的に、makeLink の Config.plist は以下のようになった。

📝 makeLink Config.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Actions</key>
	<array>
		<dict>
			<key>Image File</key>
			<string>makeLink.png</string>
			<key>Shell Script File</key>
			<string>makeLink.sh</string>
			<key>Title</key>
			<string>makeLink</string>
			<key>Requirements</key>
			<array>
				<string>httpurl</string>
			</array>
		</dict>
	</array>
	<key>Extension Description</key>
	<string>URLでリンクタグを作成</string>
	<key>Extension Identifier</key>
	<string>com.mac-ra.extension.makeLink</string>
	<key>Extension Name</key>
	<dict>
		<key>en</key>
		<string>makeLink</string>
	</dict>
	<key>Required Software Version</key>
	<integer>693</integer>
</dict>
</plist>

これを保存して、PopClip を再起動すると、今度は URL のみに反応してくれるようになった。
 まだ微妙に間違えているかもしれないが、それにしても意外に手軽に作れた。
 アイディア次第で使い方は広がっていくのではないかと思う。