Dash.appのスニペットをよく使うという話をこないだ書きました。
この中で紹介している、クリップボード文字列を含めて展開するスニペットの一部がGooglePhotoの画像のURLよっては動かない場合がありストレスに思っていたので調べてみました。
こんな現象がおきました
;asin
というスニペットの例で紹介します。
;asin
はamazonへのリンクをはるためのスニペットで、このようにHugoのショートコードに展開されます。XXXXXのところはコピー済の文字列です。
{ {< amazon asin="XXXXXXXX" >}}
(↑本来はスペース要らないですが、ショートコードに解釈されちゃうので空けてます。以下同じです。)
(本来ASINとして正しい値ではないですが、)abcde
という文字列をコピーした状態で;asin
とタイプします。
すると、次のように展開されます。
{ {< amazon asin="abcde" >}}
これが想定通りの動き。
次に、abcde__fgh__ijk
という文字列をコピーして;asin
とタイプすると、次のようになります。
こんな感じのウィンドウが出てきて、そのまま決定すると次のようになってしまいます。
{ {< amazon asin="abcdefghijk" >}}
アンダーススコアの部分がなくなってしまいました。
このとき出るウィンドウはDash.appのプレースホルダーを使ったスニペットをトリガーしたときに現れるウィンドウと同じです。
Dash.appのプレースホルダー
名前: __name__
メールアドレス: __email__
もう一回名前: __name__
みたいなスニペットがあったときに、アンダースコア2つで囲んだ部分を変数としておいて、スニペット展開じに入力できる仕組みです。このとき同じ変数には同じ値を入れることができます。
実際に↑のスニペットを展開して名前部分を変更すると二箇所同時にプレビューされていくのがわかります。
さきほどのabcde__fgh__ijk
という文字列の場合、アンダースコア2つ囲みの文字列がプレースホルダー変数として解釈されてまったのが原因だったようです。
回避策
今回はアンダースコア2つで囲まれた部分が問題となりました。
幸いDashには設定箇所があるので、自分の用途では発生しにくい文字列をプレースホルダーとして判別するための条件としておけば回避可能です。
Google PhotosのURLには__
はあっても、____
(アンダースコア4つ)に囲まれている文字列はほぼ含まれないので、そのように変えておきました。