こんにちは、くろがきです。
以前の記事で、「外部エディタからIgor Proのマクロを編集する方法」と「Compileボタンをコマンド操作で押す方法」についてまとめました。
https://kuro-ken.jp/programming/igor-macro-semi-auto-complie/
ここまでの内容で、Igor Proのマクロ作成がだいぶ楽になったのですが、最後に「外部からIgorマクロを実行する」ところまでやりましょう。
試行錯誤する中で、いくつかのやり方が見つかったので、以下にまとめておきます。
- AppleScriptから実行する
- Keyboard Maestroから実行する
- itxファイルから実行する
Plan A:AppleScritpから実行する
実はIgor ProはAppleScriptに対応しているので、Mac環境だとこれが1番ラクかなぁと思っていたのですが、意外な落とし穴がありました。
Wavemetricsのフォーラムを見ていると、AppleScriptで「Do Script」というコマンドがあるようなのですが、実際にスクリプトをコンパイルするとエラーが出ます。
Igor Proのマニュアルにも「Do Script」コマンドの記載はあるのですが、どうもうまくいきません。
Apple Scriptのライブラリを調べてみても「Do Script」は出てきませんでした。
ふと、別PCでIgor Pro 8の環境下でApple Scriptのライブラリを調べると「Do Script」コマンドがあるんですよね。
ちなみに現在私のPCに入っているIgor Proのバージョンは9です。
これらの情報から考えるに、おそらくIgor Pro 9では「Do Script」コマンドが廃止された?のではないかと思います。
ということで、AppleScriptでIgorマクロを実行するのは断念しました。
Plan B:Keyboard Maestroから実行する
①AppleScriptでのIgor操作が難しそうだったので、Keyboard MaestroからIgorマクロを実行することを考えます。
前半:特定の関数 test()を外部から実行する
とりあえず、実行したい関数は「ある特定の関数 test()」という前提で進めていきます。
実際にご自身の環境でテストする場合は、関数名を実際に実行したい関数にするか、test()という関数を作成してからお試しください。
さて本題ですが、Keyboard Maestroを使えば、アプリケーションのメニューバーにアクセスできます。
メニューアイテムへのアクセス方法は以前の記事をご参照ください。
https://kuro-ken.jp/programming/igor-macro-semi-auto-complie/
この機能を使って、以下の手順でマクロを作成します。
- メニューバーからコマンドウィンドウを呼び出す(アクティブにする)
- コマンドウィンドウに「test()」をペーストする
- エンターキーを押す
これをKeyboard Maestroでマクロにすると以下のようになります。
ですが、このマクロを実際に実行してみるとうまくいきません。
いろいろと試行錯誤していると、解決策がわかりました。
下記のように、マクロの一番最初でIgor Proをアクティブにしてやる必要があるようです。
これで、実行したい関数がtest()の場合については、Keyboard Maestroから関数の実行ができるようになりました。
後半:関数名をリストから選択できるようにする
とはいえ現状のままでは、違う関数を実行したい場合は、Keyboard Maestro内のマクロの「Insert Text by Pasting」をその都度編集する必要があり、面倒です。
そこで少しだけ、この手間を省けるようにしようと思います。
Keyboard Maestroではテキストファイルを読み込んで、変数に格納できます。
さらに読み込んだリストから、ユーザーに特定の要素を選択させる機能もあります。
これらの機能を使えば、テキストファイルに関数名リストを作成しておいて、これをKeyboard Maestroで読み込み、ユーザーがいくつかの関数リストから実行したい関数を選択する、という仕組みが実現できます。
ということで、下記のような流れでこの機能をマクロ化していきましょう。
- 関数リストを格納したテキストファイルを作成
- テキストファイルをKeyboard Maestroに読み込み、変数に格納
- 変数に格納した関数リストをプロンプトに表示
- ユーザーが選択した関数名を「Insert text my pasting」に渡す
①関数リストを格納したテキストファイルを作成
テキストファイルは適当なフォルダ内に作成すればOKです。
中身は関数名を列挙するだけです。
忘れずに「()」まで書いておきましょう。
②テキストファイルをKeyboard Maestroに読み込み、変数に格納
「Read a File」アクションを追加し、ファイルの場所を指定します。
「to」の先は「Variable」を選択し、データを格納する変数名を記載します。
オリジナルの変数名を任意で設定できます。
③変数に格納した関数リストをプロンプトに表示
次に「Prompt With List」アクションを追加し、下記のように入力します。
Titleは何でもいいです。
「List from」の先は、「Variable」として②で作成した変数名を入力します。
右端にある下矢印マークを押すと利用可能な変数名が出てくるので、それをクリックすると間違いが減ると思います。
そして、「to」のところでプロンプトでユーザーが選択した結果を格納する変数を設定します。
これまで同様、「to」の先を「Variable」にして、任意の変数名を入力します。
ここでは「Result」としています。
①〜③までのマクロを、前半で作成したマクロの先頭に追加しておきます。
④ユーザーが選択した関数名を「Insert text my pasting」に渡す
最後に、前半で作成したマクロの「Insert text my pasting」に変数Resultの中身を渡します。
変数を使用する場合は、「%Variable%変数名%」とすればOKです。
Keyboard Maestroの変数の扱いについて、こちらをご参照ください。
これで完成です。
マクロ全体のスクショを載せておきます。
「Read file」の参照先は、ご自身のパソコン環境に合わせて設定してください。
このマクロを実行すると、以下のようなプロンプトが出てきて、関数名を選択できます。
そして実行したい関数名を選択して、Enterを押すと関数が実行されます。
このように、テキストファイルを読み取って関数を実行できるようにしておけば、わざわざKeyboard Maestroのアプリ画面を開かなくても関数名を編集できるようになるので、少しラクになると思います。
もし、もっと凝ったことをしたくなって、Igor Proのプロシージャファイルから関数名を抽出して、それをこの関数リストに反映させたい、となったとしても、このテキストファイルを書き換えるだけでいいので、どうとでもできると思います。
ということで、個人的には不便だと思っていたところをだいぶ改善できたので、作業のマクロ化はこの程度いいかなと思います。
Plan C:itxファイルから実行する
Igor Proはitxファイルからコマンドやデータを受け取ることができます。
このitxファイルは実行ファイルみたいな感じで、ダブルクリックすればファイル内に記載されたコマンドやデータをIgor Pro内に流すことができるので何かと便利です。
もしIgor Proが立ち上がってなくても、itxファイルをダブルクリックするとアプリを立ち上げて、コマンドを実行してくれます。
itxファイルの記載方法には決まりがあります。
- テキストファイルとして編集し、行頭に「IGOR」と書く
- コマンドの前には「X」と記載し、その後ろに「スペース+関数名」と書く
- ファイルの拡張子を「.itx」にする
テキストファイルの編集は拡張子を「.itx」に編集したあとでも可能です。
他にも、itxファイルからデータをwaveとして読み込ませたりすることも可能ですが、今回はそこは割愛したいと思います。
こうしたitxファイルの特性を踏まえると、Keyboard Maestroでは下記のようなマクロファイルを作成すれば、やりたいことができそうです。
- 関数リスト(テキストファイル)をロード
- 関数リストから実行したい関数名を選択
- itxファイルの作成
- itxファイルの実行
①、②:関数リストをロードして、プロンプトに表示
上で説明した内容通りにマクロを作成して、下記のようになっていれば大丈夫です。
③itxファイルの作成
目指すべきitxファイルは下記のようなイメージです。
この内容のファイルが作成できるように、マクロを作成していきます。
「Write to a File」アクションを追加して、「Write Text」を選択し、下記のようにテキストを記載します。
「X」のあとは「スペース + 変数 + 改行」を記載しています。
「to file」のところは、itxファイルを保存したい場所を選択し、更に作成したいitxファイル名を記載します。
ここでは「Execute.itx」としています。
④itxファイルの実行
itxファイルを実行するには「Open a File, Folder or Application」アクションを使用すればOKです。
実行したいファイルをダイアログから選択します。
itxファイルがまだ作成されていない場合は、選択できないと思います。
その場合は、あらかじめitxファイルを自分で作っておくか、「Open」アクションのパスにファイル名を自分で入力しましょう。
これで完成です。
最後にマクロ全体のスクショを載せておきます。
まぁitxのくだりは完全に備忘録です。
まとめ
今回の記事では、「外部エディタで編集したマクロを、コマンド操作で実行する方法」についてまとめました。
これでようやく外部エディタでIgorマクロを書いて、半自動?で関数を実行できるようになりました。
データを扱う人間にとって、Igor Proはとても有益なツールの一つだと思います。
だからこそ自分の好きなエディタでマクロを書いて、ストレスなく実行できると、よりIgorライフが充実するんじゃないかと思います。
マニアックな記事ですが、皆さんのお役に立てば幸いです。