Home>Monologue> Part of Script factory. scriptfactory@mac.com .

CMScriptのススメ

Contents

Introduction

CMScript という物をご存じでしょうか・・・。あまり正確ではないかもしれませんが、一言で言えば、「AppleScriptでコンテキストメニュー・プラグインを作ることを可能にするコンテキストメニュー・プラグイン」です。

僕は死ぬほど大好きなUtilityなんですが、使い方にいくらか癖があるせいか、あまり使われていないような印象を受けます。というわけで、userを増やして作者にpressureをかけるために、CMScriptの解説を試みます。えっ?こんなaccessの少ないsiteにそんな影響力があるかって?まあ、聞かなかったことにします・・・

まあ、とにかく一度お試しくださいませ。ある程度AppleScriptを使える人間ならば、FinderpopとCMScriptがあれば、他のコンテキストメニュー・プラグインはいらないと思います。

CMScriptのInstall

まず、packageの中身に含まれている、

を「コンテキストメニュー項目」の中にいれます。そして、システムフォルダの「スクリプト」フォルダ(MacOS 8.5以前なら「Scripts」フォルダ)内に、「Contextual Menu Scripts」というフォルダを作ります。「Contextual Menu Scripts」フォルダの中に、「ApplicationName Scripts」というフォルダを作り、各applicationようにスクリプト(コンパイル済みスクリプトファイル)を分類します。例えば、Finder用のスクリプトなら、「Finder Scripts」フォルダとなるわけです。そして、すべてのアプリケーションで使用するスクリプトのために、「Universal Scrips」という特別なフォルダを使えます。

CMScript Folder

例えば、「FinderScripts」フォルダの中にさらにサブフォルダを作るとコンテキストメニュー上では、それはサブメニューになってくれます。

CMScript Menu

CMScriptに登録するためのスクリプト

CMScriptから呼び出されるスクリプトにはそれなりの準備をしてやる必要があるわけですが、以下の二つについて考慮しなければいけません。

まあ、スクリプトを書くこと自体は難しいことは無いと思いますが、スクリプトに適切なコンテキストを割り当てるのは結構コツがいるものと思います。

(CMScriptのReadMeに書いてある)代表的なコンテキストの例

file Typeもしくは、creator typeによるコンテキスト
fss TEXTttxt Simple Textのテストとファイルにだけ
fss TEXT すべてのテキストファイル
fss ****ttxt すべてのSimpleText書類
データタイプによるコンテキスト
TEXT テキストに変換できるすべてのデータ
TEXT! テキストデータそのものだけ
object specifierによるコンテキスト
obj cfol フォルダ
obj file ファイル
すべてのコンテキスト
null コンテキストがない場合も含めてすべて
**** 何らかのコンテキストが存在する場合

データタイプのコンテキストはコンテキストメニューに対応したテキストエディター(Tex-Edit Plusとか)で有効かと思います。object specifier、つまりコンテキストメニューが適用されたitemの種類によるコンテキストの割り当ては、ほとんどの場合Finderでしか有効でありません。

コンテキストメニューがどんなコンテキストで開かれているかは、CMScriptに付属のコンテキストメニュー・プラグイン「ContextGrabber」を使うことで取得できます。

caps lock keyをONにした状態で、コンテキストメニューを出してみましょう。以下のように、「Copy Context to Clipboard」という項目が登場します。ここで、「Eazy」と「Advanced」の二つのサブメニューが登場しますが、「Eazy」のほうを選びましょう。「Advanced」の方は、僕の経験上、コンテキストが特定されすぎて役に立つものが得られた試しがありません。

ContextGrabber Menu

すると、そのコンテキストを意味する呪文が、clipboardにcopyされます。

Context Text in Clipboard

あとは、それをスクリプトをスクリプト編集プログラムで開いたときに表示される、「このスクリプトについて」の欄にpasteするだけです。

Context Text In Script Comment

ちなみに、このコンテキストは、複数書くことができて、つまり複数のコンテキスで適用されるスクリプトも作れるわけです。ただし、複数のコンテキストを割り当てた場合、open handlerの引数にはいろんなclassの値が飛び込んでくるわけで、場合によっては値のclassを調べて、if blockで処理を分岐させる必要があるでしょう。

典型的なCM Script用のスクリプトとして、僕の作品で恐縮ではありますが、with Browserなどが参考になるかと思います。

Finderでのコンテキストの割り当て

Finderでは、object specifierによるコンテキストの割り当てがほとんどの場合使えるので、かなり気の利いたスクリプトが作れると思います。ほとんどがContextGrabberを使えば調べられますが、僕が知るかぎりのコンテキストの割り当てを列挙してみます。

file Typeもしくは、creator typeによるコンテキスト
コード コンテキスト
fss TEXTttxt Simple Textのテストとファイルにだけ
fss TEXT すべてのテキストファイル
fss ****ttxt すべてのSimpleText書類
object specifierによるコンテキスト
コード コンテキスト
obj file ファイル
obj cfol フォルダ
obj cdis ディスク
obj sdsk 起動ディスク
obj cwnd container window(フォルダウィンドウ)
obj dwnd デスクトップ
obj iwnd 情報ウィンドウ
その他
コード コンテキスト
alis ファイル、フォルダ、ディスクすべて

一般のアプリケーションにおけるコンテキストの割り当て

Finder以外のアプリケーションの場合、アプリケーションにも依存しますが、あまりobject specifierによくコンテキストの割り当てが使えません。たぶん、アプリケーションがコンテキストメニュー・プラグインのことを考えてくれていない(その必要が無いとお思われている?)からだと思うのですが・・・まあ、よくわかりませぬ。

しかし、file typrとcreator typeによるコンテキストと割りあて、および「alis」は、僕の経験上では大抵のアプリケーションで使えます。たとえば、DragThing、Sherlockの検索結果ウィンドウ、GoLiveのサイトウィンドウなどなど・・・・。これだけでも結構有用じゃないでしょうか。

CMScript in GoLive

Adobe GoLiveのサイトウィンドウにおけるCMScript

アプリケーション固有のデータ-であっても、そこへの参照を教えてくれるようになれば、もっといろんなことができるようになると思うのですが・・・。

注意点

システム起動後や、Contextual Menu Scripts フォルダをいじった後などで初めてコンテキストメニューを開いたときCMScriptが有効にならないことがあります。多分、メニューを再構築しているからだと思いますが、2回目以降はちゃんとCMScriptが有効になります。

Contextual Menu Scripts フォルダにアプレットやドロップレットを登録しても正しくコンテキストが適用されません。つねに、コンテキストメニューに登場します。これは、CMScrriptのもう一つの機能であるWord Services plugin側の都合らしいんですが、とにかくアプリケーションをContextual Menu Scriptsフォルダに登録すると、常にコンテキストメニューに登場します。コンパイル済みスクリプトファイルしか使えないということです。

処理に時間のかかるものや、メモリをたくさん使う可能性のあるスクリプトはCMScriptから実行するのはやめたほうがいいでしょう。どうしてもやりたい場合は、スクリプトを二つに分けて、実際の処理部分はアプレットとして独立したアプリケーションとし、CMScriptにはそれを起動するスクリプトを登録するのがよいと思います。


This page was last built on Wed, Feb 17, 2016 ; 11:05:07 AM . Thanks for checking it out!