CommandPanel_SetBuffer

ryotako edited this page Dec 10, 2016 · 2 revisions

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