Drafts の選択範囲を TextTool 経由で Markdown のリスト形式に置換する

2013-12-20-001

今回の記事はごく一部の URL スキームマニアな方しか興味を持たないでしょうから、連載から切り離してお伝えします。Drafts の URL スキームの弱点、それは初動のアクションが新規メモの作成(create)に限定され、既存メモの選択範囲だけを置換するといった柔軟なアクションを起こせないことにあります。別アプリの TextTool を経由させ、ある程度対応することができたので、その方法を紹介します。Drafts の選択範囲を Markdown のリスト形式に置換します。

目次

  1. Drafts のスキームの制限
  2. TextTool の活用
  3. URL アクション
  4. アクションの中身
  5. リストスタイルを Launch Center Pro で選択する

Drafts のスキームの制限

Drafts の URL スキームは次が基本形。create で新規メモを作って、そこにアクションをかませていくスタイルです。

drafts://x-callback-url/create?text=テキスト

アプリによっては create 以外にも、テキストを追記する append や丸々置き換える replace が使えますが、Drafts には残念ながら用意されていません。

また、選択範囲のテキストを [[selection]] で取り出すことはできるものの、選択範囲以外のテキストを指定するタグがないため、他の部分に影響を与えずに選択範囲だけを置換しようとすると少々厄介です。

TextTool の活用

TextTool はソートやインデント、行の結合など、テキストの加工に特化したアプリ。x-callback-url に対応しています。今回は TextTool のリスト化と置換の機能を使います。

  1. Drafts で文章を書きながら、リスト化したい項目を箇条書きにする
  2. 箇条書きした部分を [[selection]] で TextTool に渡す
  3. TextTool で Markdown のリスト形式に変換
  4. x-success で TextTool をもう1度働かせ、Drafts の全文([[draft]])を渡し、最初の選択範囲([[selection]])をリスト(3のアウトプット)に置換
  5. x-success で4のアウトプットを Drafts に返す

この流れをワンアクションで実行します。

1つ注意点としては、4番の置換のところで、万が一リスト化しようとしたテキストと全く同一のテキストが前にあった場合、そちらが置換されてしまいます。まあ、あまりそんな場面はないと思いますが…。

それと、何もテキストを選択しないでアクションを実行すると、メモの全文がリスト化されます。

URL アクション

Drafts に登録するのはこちらのアクションです。通常のリスト用。

Selection to Bulleted Lists: インポート

texttool://x-callback-url/transform?text=[[selection]]&method=list&style=asterisk&clipboard=0&x-success={{texttool://x-callback-url/transform?text=[[draft]]&method=replace&find=[[selection]]&replace=[[output]]&scope=first&clipboard=0&x-success=drafts%3A%2F%2Fx-callback-url%2Fcreate%3Ftext%3D%255B%255Boutput%255D%255D}}

リストにしたい項目を箇条書きにし、選択状態にします。

アクションメニューを開くと画面上は範囲選択の状態ではなくなりますが、そのままアクションを実行。TextTool が起動し、Drafts にコールバックします。

番号付きリストにするにはこちらのアクションを使います。

Selection to Numbered Lists: インポート

texttool://x-callback-url/transform?text=[[selection]]&method=list&style=number&clipboard=0&x-success={{texttool://x-callback-url/transform?text=[[draft]]&method=replace&find=[[selection]]&replace=[[output]]&scope=first&clipboard=0&x-success=drafts%3A%2F%2Fx-callback-url%2Fcreate%3Ftext%3D%255B%255Boutput%255D%255D}}

アクションの中身

通常のリスト化の方で、アクションの中身を説明します。

まずは先ほど載せたソースを再掲します。

texttool://x-callback-url/transform?text=[[selection]]&method=list&style=asterisk&clipboard=0&x-success={{texttool://x-callback-url/transform?text=[[draft]]&method=replace&find=[[selection]]&replace=[[output]]&scope=first&clipboard=0&x-success=drafts%3A%2F%2Fx-callback-url%2Fcreate%3Ftext%3D%255B%255Boutput%255D%255D}}

最初の texttool://x-callback-url/transform?text=[[selection]] で、Drafts の選択範囲を TextTool に渡します。

TextTool は &method=list&style=asterisk&clipboard=0 で、受け取ったテキストをリスト化します。デフォルトではこの結果がクリップボードにコピーされますが、ここでは clipboard=0 で無効化しています。

&x-success= 以下は、コールバックのアクション。今度は texttool://x-callback-url/transform?text=[[draft]] で、Drafts のメモ全文を渡します。

次の処理は &method=replace&find=[[selection]]&replace=[[output]]&scope=first&clipboard=0 です。置換メソッドを用いて、受け取ったメモ全文の中から Drafts で選択されていた文字列を探し、[[output]] に置き換えます。[[output]] は TextTool が処理の結果を出力するためのタグで、具体的には1つ前の処理でリスト化されたテキストが、エンコードされた上で入ります。つまり、リスト化する前のテキストを、リスト化した後のテキストに置き換えるわけです。

最後の &x-success= 以下を、見やすくデコードするとこうなります。

drafts://x-callback-url/create?text=%5B%5Boutput%5D%5D

ここの %5B%5Boutput%5D%5D には、置換処理の結果が入ります。これが Drafts に渡されます。

リストスタイルを Launch Center Pro で選択する

Drafts と TextTool だけでやりとりするならリストの形式(通常のリストか番号付きか)で2種類のアクションに分かれますが、間に LCP を挟むと、1つのアクションで済みます。LCP を持っている人はこちらのアクションの方が使い勝手がよいと思います。

Selection to Lists: インポート

launch://?url=texttool%3A%2F%2Fx-callback-url%2Ftransform%3Ftext%3D{{[[selection]]}}%26method%3Dlist%26style%3D{{[list:Choose Style|Bulleted Lists (*)=asterisk|Numbered Lists (1.)=number]}}%26clipboard%3D0%26x-success%3Dtexttool%253A%252F%252Fx-callback-url%252Ftransform%253Ftext%253D%7B%7B{{[[draft]]}}%7D%7D%2526method%253Dreplace%2526find%253D%7B%7B{{[[selection]]}}%7D%7D%2526replace%253D%255B%255Boutput%255D%255D%2526scope%253Dfirst%2526clipboard%253D0%2526x-success%253Ddrafts%25253A%25252F%25252Fx-callback-url%25252Fcreate%25253Ftext%25253D%2525255B%2525255Boutput%2525255D%2525255D

中身は基本的にさっきと同じですが、エンコードして LCP 経由で実行するようにしています。LCP のバージョン 2.1 で追加された機能を使って、[list:Choose Style|Bulleted Lists (*)=asterisk|Numbered Lists (1.)=number] のところで、TextTool に style=asterisk を渡すのか、style=number を渡すのかをその都度選択できるようにしました。

使い方は前の2つと一緒。リスト化したいテキストを選択し、アクションを実行します。

LCP が起動するので、リストのスタイルを選択します。TextTool → Drafts と切り替わり、最初に選択していた範囲が入れ替わります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です