Next: , Previous: , Up: Completion   [Contents][Index]


19.6.7 プログラムされた補完

意図した利用可能な補完のすべてを含むalistかobarrayを事前に作成するのが不可能または不便なことがあります。このような場合は与えられた文字列にたいする補完を計算するために独自の関数を提供できます。これはプログラム補完(programmed completion)と呼ばれます。Emacsは数あるケースの中でも特にファイル名の補完(File Name Completionを参照)でプログラム補完を使用しています。

この機能を使用するためには、関数をcompleting-readcollection引数として渡します。関数completing-readはその補完関数がtry-completionall-completionsなどの基本的な補完関数に渡されて、その関数がすべてを行えるよう取り計らいます。

補完関数は3つの引数を受け取ります:

以下はmetadataフラグ引数への応答として補完関数がリターンするかもしれないmetadataエントリーのリストです:

category

値は補完関数が補完を試みているテキストの種類を説明するシンボル。シンボルがcompletion-category-overrides内のキーの1つにマッチする場合、通常の補完動作はオーバーライドされる。Completion Variablesを参照のこと。

annotation-function

値は補完に注釈(annotation)を付ける関数。この関数は1つの引数stringを受け取り、これは利用可能な補完である。リターン値は文字列で、*Completions*バッファー内の補完stringの後に表示される。

display-sort-function

値は補完をソートする関数。関数は1つの引数をとる。これは補完文字列のリストで、ソートされた補完文字列リストがリターンされる。その入力のリストは破壊的に変更することが許容される。

cycle-sort-function

値はcompletion-cycle-thresholdが非nil、かつユーザーが補完候補を巡回するときに補完をソートする関数。引数のリストとリターン値はdisplay-sort-functionと同様。

Function: completion-table-dynamic function &optional switch-buffer

この関数はプログラム補完関数として動作する関数を記述する便利な方法である。引数functionは1つの引数(文字列)を受け取る関数であり、その文字列の利用可能な補完のalistをリターンする。引数を無視して利用可能なすべての補完を含む完全なリストのリターンが許される。completion-table-dynamicをそのインターフェイスとプログラムされた補完関数のインターフェイスの変換器と考えることができる。

オプション引数switch-bufferが非nil、かつ補完がミニバッファーで行われた場合、functionはそのミニバッファーにエンターしたときのバッファーをカレントバッファーにセットして呼び出される。

Function: completion-table-with-cache function &optional ignore-case

これは前回の引数/結果ペアーを保存するcompletion-table-dynamicにたいするラッパーである。これは同じ引数にたいする複数回の検査に必要なのが、1回のfunction呼び出しだけであることを意味する。これは外部プロセス呼び出しなど、処理が低速のとき有用かもしれない。