URLを展開するとおかしな感じになる
TextExpanderでは、展開されるテキストにAppleScript等を記述することで、実行結果を編集中のテキストに挿入することができる。
例:Safariで開いているページのURLを取得して挿入するAppleScriptスニペット
tell application "Safari" to get URL of document 1 as Unicode text
例えばこのページ 保護者 - Wikipedia をSafariで開いている状態で、上記スクリプトを実行すると、以下のようなテキストが挿入される。
https://ja.wikipedia.org/wiki/%E47月F%9D%E8日曜日D7月7%E8%80%85
が、デッドリンクになってしまう。ただしいURLは以下の通り。
https://ja.wikipedia.org/wiki/%E4%BF%9D%E8%AD%B7%E8%80%85
TextExpanderマクロ文字列
これは、展開された(されるべき)文字列に、TextExpanderマクロが含まれるためである。
上記の例でいえば、%B
は月、%A
は曜日に、自動的に変換される。
現在のTextExpanderで、スニペットごとにマクロの展開を抑止する方法はない。はず。
よって、マクロ機能を有効にし、かつ「マクロと解釈されうる文字列」をそのまま展開するには、クリップボードに格納してペーストするなどの対策を取るしかない。
AppleScriptによるGUIスクリプティングでペーストまたはキー操作Ctrl+V
を実行するくらいしかないのだろうか。
対策:%clipboard+%snippet:hoge%
AppleScriptでURLをクリップボードへ格納した上で、%clipboard
マクロを展開してみるのはどか。
tell application "Safari" to set the clipboard to URL of document 1 as Unicode text
get "%clipboard"
やはり同様の結果になってしまう。マクロで展開されたテキストに含まれるマクロも展開されるのだ。
ところが、マクロとして解釈されうる文字列をクリップボードに格納した状態で、プレインテキストのスニペットとして%clipboard
を展開すると、さらなるマクロ展開は起こらなかった。
バグくさいが、とりあえずTextExpander5.1.4においては、マクロの多重展開は、スクリプト系スニペットでしか発生しない。
ここで、他のスニペットを読み込むマクロ、%snippet:hoge%
が使える。ふたつのスニペットを組み合わせて運用するのだ。
- URLを取得し、展開する文字列をクリップボードに格納するスクリプトスニペット
- 1のスニペット呼び出し+クリップボードから貼り付けを行うプレーンテキストスニペット
結論
以上を踏まえて、最終的なスニペットは以下のようになった。
1.スクリプトスニペット
これは直接展開しないので、abbreviations(短縮形)は誤展開しないよう長いものにしておく。
- ???copyURLfromSafari
- SafariからURLをクリップボードに格納
--Copy URL from Safari
tell application "Safari" to set the clipboard to URL of document 1 as unicode text
- ???copyLinkFromSafari
- SafariからMarkdown形式のリンクをクリップボードに格納
--Copy Markdown link from Safari
tell application "Safari"
set cTitle to name of document 1 as Unicode text
set cURL to URL of document 1 as Unicode text
set the clipboard to "[" & cTitle & "](" & cURL & ")"
end tell
2.プレーンテキストスニペット
実際に展開するのはこちらになるので、単純なabbreviationsにする。
- srl
- SafariからURLを貼り付け
%snippet:???copyURLfromSafari%%clipboard
- sln
- SafariからMarkdown形式のリンクを貼り付け
%snippet:???copyLinkfromSafari%%clipboard