Next: Completion in Buffers, Previous: Completion Variables, Up: Completion [Contents][Index]
意図した利用可能な補完のすべてを含むalistまたはobarrayを前もって作成するのが不可能または不便なことがあります。このような場合は、与えられた文字列にたいする補完を計算する独自の関数を提供できます。これはプログラム補完(programmed completion)と呼ばれます。Emacsは数あるケースの中でも特に、ファイル名の補完(File Name Completionを参照)でプログラム補完を使用しています。
この機能を使用するためには、関数をcompleting-read
のcollection引数に渡します。関数completing-read
はその補完関数がtry-completion
、all-completions
などの基本的な補完関数に渡されて、その関数がすべてを行えるよう取り計らいます。
補完関数は3つの引数を受け取ります:
nil
。関数は利用可能なマッチにたいしてこの述語(predicate)を呼び出し、述語がnil
をリターンした場合はそのマッチを無視する。
nil
try-completion
を指定する。関数は指定された文字が一意かつ完全一致の場合は、t
をリターンする。マッチが複数の場合、すべてのマッチに共通する部分文字列をリターンする(文字列が補完候補の1つに完全一致するが、より長い他の候補にもマッチする場合、リターン値はその文字列)。マッチがなければnil
をリターンする。
t
all-completions
を指定する。関数は指定された文字列の利用可能なすべての補完のリストをリターンする。
lambda
test-completion
を指定する。関数は指定された文字列がいくつかの補完候補に完全一致する場合はt
、それ以外はnil
をリターンする。
(boundaries . suffix)
completion-boundaries
を指定する。関数は(boundaries start
.
end)
をリターンする。ここでstartは指定された文字列内の境界の開始位置、endはsuffix内の境界の終了位置。
metadata
カレント補完の状態に関する情報の要求を指定する。リターン値は(metadata
. alist)
の形式をもち、alistは以下で説明する要素をもつ連想配列。
フラグに他の値が指定された場合、補完関数はnil
をリターンする。
以下は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は1つの引数(文字列)をとる関数であり、その文字列の利用可能な補完のalistをリターンする。completion-table-dynamic
は、functionとプログラム補完関数のインターフェイス変換器と考えることができる。
これは前回の引数/結果ペアーを保存するcompletion-table-dynamic
にたいするラッパーである。これは同じ引数にたいする複数回の検査に必要なのは、1回のfunction呼び出しだけであることを意味する。これは外部プロセス呼び出しなど、処理が低速のとき有用かもしれない。