Automatorのサービスはユニバーサルパレットの代わりになる

  • 投稿日:
  • by
  • カテゴリ:

サービスがいいMacBookにしておく - ザリガニが見ていた...。

こちらの記事を見ると、Automatorのサービスは、
選択しているテキストを編集して返すことができるみたい。
しかも全てのアプリケーションに対して!

これって、今まで何回か挑戦しては敗れてきた
ユニバーサルパレットの代わりになるのでは!?

ということで検証してみた。

結論:Automatorのサービスはユニバーサルパレットの代わりになる

以下、説明。

Automatorで「ファイル」→「新規」、テンプレートで「サービス」を選択。 詳細は上記のサービスがいいMacBookにしておくを参照されたい。

で、AppleScriptが出てくるので、そこに以下のソースを貼り付ける。
(記事の終わりにworkflowファイルのzipを置くので、やらなくてもいいです)


1.<strong> タグで囲みたい場合。

on run {input, parameters}

(* Your script goes here *)

set theElement to "strong"
set startTag to "<" & theElement & ">"
set endTag to "</" & theElement & ">"

set input to startTag & input & endTag

return input
end run

propertyは使えなかったので変数にした。
あと、「選択されたテキストを置き換える」をチェックすることが大事。
このworkflowファイルを別名で保存する。ここでは「strong」とした。

automator_service3.png ここをチェック


automator_service_strong1.png タグで囲みたいテキストを選択して、「サービス」の中に
先ほど保存したworkflowがあるのを確認し、選択。


automator_service_strong2.png

数秒待つと、選択されたテキストが、見事strongタグで囲まれた。
ぶらぼー!


2.<blockquote> タグで囲みたい場合

今度は複数行を選択することを想定。

on run {input, parameters}

(* Your script goes here *)

set theElement to "blockquote"
set startTag to "<" & theElement & ">" & return
set endTag to return & "</" & theElement & ">"

set input to startTag & input & endTag

return input
end run

automator_service_bq1.png 同じく、テキストを選択してサービスを選択。


automator_service_bq2.png 見事、blockquoteタグで囲まれた。 複数行のテキストを囲むことを想定して改行を入れてある。


3.<ul> 、<ol> タグで囲みたい場合

今度は行数を取得して、ループを組む必要がある。
これは、ユニバーサルパレットのapplescriptをほぼそのまま流用できた。

on run {input, parameters}

(* Your script goes here *)

set ListTag to "ul"
set ItemTag to "li"
set startTag to "<" & ListTag & ">"
set endTag to "</" & ListTag & ">"

set startItemTag to "<" & ItemTag & ">"
set endItemTag to "</" & ItemTag & ">"
set unixLF to ASCII character 10


--text形式にしないとparagraph数をcountできない
set theText to input as text
set numOfPara to count paragraphs of theText


--開始タグ
set theResult to startTag & unixLF


--パラグラフの数だけループ
repeat with paraIndex from 1 to numOfPara
--text形式にすると改行コード取れる
set theContent to paragraph paraIndex of theText
set theLine to tab & startItemTag & theContent & endItemTag & unixLF
set theResult to theResult & theLine
end repeat

set input to theResult & endTag & unixLF

return input
end run

automator_service_ul1.png リスト化したいテキスト(改行区切り)を選択し、サービスを選ぶ。


automator_service_ul2.png 見事 ul タグでリスト化された。
ol タグにしたいときは、StartTagとEndTagのところの ul を ol にすればいい。


ということで、strong、blockquote、ul、olタグで囲むworkflowのファイルを
まとめてzipにしたものを置いておく。
workflows.zip

ダウンロードしてダブルクリックして展開すると、
workflowファイルが4つ入ったフォルダができる。
これらのファイルを、ホームディレクトリの
Library/Services
フォルダに放り込む。
すると、右クリックで出てくる「サービス」メニューの中に
strong、bq(blockquote)、ul、ol などの項目が現れるはず。
思い切って選択してみよう。

ということで、Automatorのサービスを使うことで、
ユニバーサルパレットっぽい動作をさせることができた。
全てのアプリケーションに対して使えるところが強み。

ユニバーサルパレットのAppleScriptをちょっといじると
使えるようになるので、完全に移行することもできそうな気がする。

あとは、この新しく作ったサービスメニューに
ショートカットを割り当てたいのだが、
Service Scrubberではうまく割り当てられなかった。
これができればほぼ目標達成なのだが。
惜しい!

ちなみに今回のAppleScriptのソースの表示は
AppleScript HTMLを使わせてもらった。
ありがとうございます。


関連:
ユニバーサルパレットをスクリプトメニューで代用 (うむらうす)
ユニバーサルパレットをスクリプトメニューで代用2 (うむらうす)
Safari用MakeLink代替AppleScriptをいじってみた (うむらうす)
AppleScriptの使い方(スクリプトメニューとユニバーサルパレット) (うむらうす)

サービスがいいMacBookにしておく - ザリガニが見ていた...。
選択したテキストをExciteで翻訳してGrowlで表示させるAutomator製サービス | Macの手書き説明書