Igor Pro上のシェル,CommandPanelをちょっとアップデート

以前紹介したIgor Pro上のシェルことCommandPanel,ちょこちょこアップデートしていたので改善点の報告など.

github.com

Igor Pro 7でも起動できるようになった

以前のバージョンは,Igor Pro 7で起動するとそれだけで無限ループに陥ってしまっていました. 新しいバージョンはIgor Pro 7でも起動できます.

しかし,ShiftEnterの同時押しが認識されないらしく,コマンドの補完やバッファの絞り込みができません.

ウィンドウの描画が改善された

ウィンドウサイズを変更した際,ウィンドウフック関数を用いてコマンドラインやバッファの再描画をするようにしました.

古い版ではコントロールアクションを利用していたので,ウィンドウサイズ変更に対してコントロールの描画が一拍遅れていました.

テストを作成した

以前のエントリで紹介したテスト関数を用い,テストを作成しました.

ブレース展開が速くなった

テストの作成と合わせてリファクタリングを行い,とくにブレース展開の速度を改善しました.

以前は

print {1..500}

などとするとかなり待たされたのですが,我慢できるレベルになった気がします.ただbashが一瞬で処理してくれるのを考えると今でも相当遅いので,そのうちなんとかしたいです.

標準のフォントがIgor Proの標準フォントになった

標準のフォントをArialからIgor Proの標準のフォントに変更しました.日本語版Igor Proを使っている方は,とくに設定せずに日本語文字が表示されます.

パス名の補完・展開で上位のフォルダを参照できるようになった

Igor Pro内部での相対パス指定では,::がひとつ上のフォルダ,:::がふたつ上のフォルダを表します.これらの上位のパスを参照する書き方をパス名補完とパス名展開が認識するようになりました.

バッファの見た目と中身を別々に指定できるようななった

詳細はwikiの該当箇所を見ていただくとして,具体的には次のような関数が定義できるようになりました.

https://github.com/ryotako/igor-CommandPanel/wiki/CommandPanel_Helps.gif

バッファの全ての要素に共通するHelpDisplayTopicを無視して,disで絞り込みができていることに注目してください.この関数,結構便利度高い気がします.

関数定義も,以下のようにそれほど複雑ではありません.

#include "CommandPanel"

Function Helps()
    String list = FunctionList ("*", ";", "KIND:1") + OperationList("*", ";" ,"")
    Variable n = ItemsInList(list)

    Make/FREE/T/N=(n) word = StringFromList(p, list)
    Make/FREE/T/N=(n) buffer = "[DisplayHelpTopic] ¥"" + word +"¥""
    Make/FREE/T/N=(n) line = "DisplayHelpTopic ¥"" + word + "¥""

    Sort word, word, buffer, line

    CommandPanel_SetBuffer(word, line = line, buffer = buffer)
End