Previous: Programmed Completion, Up: Completion [Contents][Index]
補完は通常はミニバッファー内で行われますが、補完機能は通常のEmacsバッファー内のテキストにも使用できます。多くのメジャーモードで、コマンドC-M-iまたはM-TABによりバッファー内補完が行われ、それらはcompletion-at-point
にバインドされています。Symbol
Completion in The GNU Emacs
Manualを参照してください。このコマンドはアブノーマルフック変数completion-at-point-functions
を使用します:
このアブノーマルフックの値は関数のリストである。これらの関数はポイント位置のテキストの補完にたいする補完テーブルの計算に使用される。これはメジャーモードにより、モード特有な補完テーブル(Major Mode Conventionsを参照)の提供に使用できる。
コマンドcompletion-at-point
が実行されると、引数なしでリスト内の関数が1つずつ呼び出される。それぞれの関数は、ポイント位置のテキストにたいして補完テーブルを生成できない場合はnil
をリターンする。生成できた場合は、以下の形式のリストをリターンする
(start end collection . props)
ここでstartとendは補完する(ポイントを取り囲む)テキストの区切りである。collectionはそのテキストを補完する補完テーブルであり、try-completion
(Basic Completionを参照)の2つ目の引数として渡すのに適した形式である。補完候補はcompletion-styles
(Completion Variablesを参照)で定義された補完スタイルを通じ、この補完テーブルを通常の方法で使用して生成されるだろう。propsは追加の情報のためのプロパティリストである。completion-extra-properties
内のすべてのプロパティ(Completion Variablesを参照)と、以下の追加のプロパティが認識される:
:predicate
値は補完候補が満足する必要がある述語。
:exclusive
値がno
の場合は、もし補完テーブルがポイント位置のテキストのマッチに失敗したなら、補完の失敗を報告するかわりにcompletion-at-point
はcompletion-at-point-functions
内の次の関数へ移動する。
completion-at-point-functions
内の関数も関数をリターンするかもしれない。その場合は引数なしでリターンされた関数が呼び出され、その関数が補完処理の全責任を負う。この方法は推奨されない。これはcompletion-at-point
を使用する古いコードの救済を意図したもののだからである。
非nil
値を最初にリターンしたcompletion-at-point-functions
内の関数が、completion-at-point
により使用される。残りの関数は呼び出されない。これの例外は上述の:exclusive
指定があるときである。
以下の関数は、Emacsバッファー内の任意に拡張されたテキストにたいして便利な補完方法を提供します:
この関数はcollectionを使用して、カレントバッファー内の位置startとendの間のテキストを補完する。引数collectionはtry-completion
(Basic Completionを参照)のときと同じ意味をもつ。
この関数は補完テキストを直接カレントバッファーに挿入する。completing-read
(Minibuffer Completionを参照)とは異なり、ミニバッファーをアクティブにしない。
この関数が機能するためには、ポイントがstartとendの間になければならない。