CommandPanel_SetBuffer - ryotako/igor-CommandPanel GitHub Wiki
CommandPanel_SetBufferのオプション
CommandPanel_SetBuffer(wave0, word = wave1, buffer = wave2, line = wave3)
CommandPanel_SetBufferのオプションを指定することで,バッファの見た目と中身を別々に指定することができます. 具体的には
- バッファに表示される文字列(buffer)
- 絞り込みの対象となる文字列(word)
- 選択時にコマンドラインに送られる文字列(line)
を個別に指定できます.
以下のように,各オプションにウェーブを渡します.
CommandPanel_SetBuffer(wave0) // 表示内容,絞り込み対象,実行文字列すべてがwave0の内容
CommandPanel_SetBuffer(wave0, line = wave1) // 実行文字列のみwave1に変更
// CommandPanel_SetBuffer($"", line = wave1, word = wave0, buffer = wave0) と等価.
CommandPanel_SetBuffer(wave0, line = wave1, buffer = wave2) // 実行文字列をwave1に,表示文字列をwave2に変更.
例1
CommandPanel_SetBuffer
関数を用い,組み込み関数・操作関数のヘルプを引く次のような関数が定義できます.
#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
上記Helps
コマンドは,組み込み関数と操作関数を列挙し,ユーザーが選択した関数のヘルプを表示する関数です.
コマンドラインからヘルプを引くためのコマンドはDisplayHelpTopic "XXX"
となります.しかし,すべての項目がDisplayという文字列を文字列を含むことになるため,DisplayHelpTopic "Display"
を絞り込みによって見つけることができません.
そこで,絞り込みに使う文字列と実行される文字列を別に設定し,すべての項目に共通するDisplayHelpTopicを絞り込み対象文字列から外します. また,DisplayHelpTopicが検索対象外であることを明示するために,バッファに表示される文字列も変えておきます.つまり,以下のように設定しています.
検索対象(word) | 表示内容(buffer) | 実行するコマンド(line) |
---|---|---|
XXX | [DisplayHelpTopic] "XXX" | DiplayHelpTopic "XXX" |
例2
指定したプロシージャウィンドウの全文をバッファに表示し,選択行にジャンプする関数です.
Function CodeJump(procWin)
String procWin
if(ItemsInList(WinList(procWin,";","WIN:128")) == 0)
String list = WinList("*",";","WIN:128")
Variable n = ItemsInList(list)
Make/FREE/T/N=(n) word = StringFromList(p, list)
Make/FREE/T/N=(n) buffer = "[jump] " + word
Make/FREE/T/N=(n) line = "CodeJump(¥"" + word + "¥")"
else
String text = ProcedureText("", 0, procWin)
Variable m = ItemsInList(text, "¥r")
Make/FREE/T/N=(m) word = StringFromList(p, text, "¥r")
Make/FREE/T/N=(m) buffer = "[" + Num2Str(p) + "] " + word
Make/FREE/T/N=(m) line = "DisplayProcedure/W=$¥"" + procWin + "¥"/L=" + Num2Str(p)
endif
CommandPanel_SetBuffer(word, buffer = buffer, line = line)
End