デフォルトの補完動作を変更するために使用できる変数をいくつか紹介します。
この変数の値は、補完を行う際に使用する補完スタイル(シンボル)のリストです。補完スタイルとは、補完を生成するためのルールセットのことです。このリストに含まれる各シンボルは、completion-styles-alistに対応するエントリを持っている必要があります。
この変数には、利用可能な補完スタイルの一覧が格納されています。一覧の各要素は以下の形式となっています。
(style try-completion all-completions doc)
ここで、style は補完スタイルの名前(シンボル)であり、completion-styles 変数でこのスタイルを参照する際に使用できます。try-completion は補完を行う関数、all-completions は補完内容を一覧表示する関数、そして doc は補完スタイルを説明する文字列です。
try-completion および all-completions 関数は、それぞれ string、collection、predicate、point
の4つの引数を受け取る必要があります。string、collection、predicate 引数の意味は try-completion と同様であり(基本補完関数 を参照)、point
引数は string 内におけるポイントの位置です。各関数は、処理を完了した場合は non-nil 値を、完了しなかった場合(例:補完スタイルに従って string を補完する方法がない場合など)は nil
を返す必要があります。
ユーザーが minibuffer-complete のような補完コマンド(補完を行うミニバッファコマンドを参照)を呼び出すと、Emacs は completion-styles に列挙されている最初のスタイルを探し、その try-completion 関数を呼び出します。この関数が nil を返すと、Emacs は次に列挙されている補完スタイルに移動してその try-completion 関数を呼び出し、いずれかの try-completion 関数が正常に補完を実行して nil
以外の値を返すまでこれを繰り返します。補完の一覧表示についても、all-completions
関数を介して同様の手順が用いられます。
利用可能な補完スタイルの説明については、The GNU Emacs ManualのCompletion Stylesを参照してください。
この変数は、特定の種類のテキストを補完する際に使用する特殊な補完スタイルやその他の補完動作を指定します。その値は、(category . alist) 形式の要素を持つアリスタである必要があります。category は補完対象を表すシンボルです。現在は buffer、file、unicode-name
のカテゴリが定義されていますが、専用の補完関数を通じて他のカテゴリを定義することも可能です(プログラムによる補完 を参照)。alist
は、対応するカテゴリにおいて補完がどのように動作すべきかを記述する連想リストです。以下のアリスタキーがサポートされています:
styles値は補完スタイル(記号)のリストである必要があります。
cycleこの値は、このカテゴリにおける completion-cycle-threshold
の値(The GNU Emacs Manual の Completion
Options を参照)とする必要があります。
cycle-sort-functionサイクル時のエントリをソートする関数。
display-sort-function*Completions*
バッファ内のエントリをソートする関数。指定可能な値は、メタデータのソート関数を使用するか、それが nil の場合は completions-sort
にフォールバックすることを意味する nil、一切ソートを行わず元の順序を維持することを意味する
identity、または completions-sort で使用される値以外の任意の値です(The
GNU Emacs Manual の Completion
Options を参照)。
group-function補完項目をグループ化する関数。
annotation-function補完にアノテーションを追加する関数。
affixation-function補完に接頭辞と接尾辞を追加する関数。
メタデータエントリの完全な一覧については、プログラムによる補完を参照してください。
この変数は、現在の補完コマンドの追加プロパティを指定するために使用されます。特化した補完コマンドによって let で束縛されることを想定しています。その値は、プロパティと値のペアからなるリストである必要があります。以下のプロパティがサポートされています:
:category値には、補完機能がどのようなテキストを補完しようとしているかを示すシンボルを指定します。このシンボルが前述の completion-category-overrides
のキーのいずれかと一致する場合、通常の補完動作が上書きされます。
:annotation-functionvalueには、補完バッファにアノテーションを追加するための関数を指定します。この関数は補完という1つの引数を受け取り、nil
または補完の横に表示する文字列のいずれかを返す必要があります。この関数がアノテーションの接尾辞文字列に独自のフェイスを設定しない限り、デフォルトで
completions-annotations フェイスがその文字列に追加されます。
:affixation-functionvalue
は、補完項目にプレフィックスとサフィックスを付与する関数である必要があります。この関数は、補完項目のリストを1つの引数として受け取り、アノテーション付きの補完項目のリストを返す必要があります。返されるリストの各要素は、補完項目、プレフィックス文字列、サフィックス文字列の3つの要素からなるリストである必要があります。この関数は
:annotation-function よりも優先されます。
:group-function補完項目をグループ化する関数。
:display-sort-function*Completions*バッファ内のエントリをソートする関数。
:cycle-sort-functionサイクル時のエントリをソートする関数。
:exit-functionvalueには、完了処理の後に実行される関数を指定します。この関数はstringとstatusの2つの引数を受け取ります。ここで、stringはフィールドに入力されたテキスト、statusはどのような操作が行われたかを示します。具体的には、テキストが完了した場合はfinished、テキストをさらに補完することはできないが完了処理自体は終了していない場合はsole、テキストは有効な補完内容であるがさらに補完できる可能性がある場合はexactとなります。