9.4.3 補完の終了
コマンドがミニバッファーの補完を使って引数を読みとる場合、引数を確定するためにRET
(minibuffer-complete-and-exit
)をタイプしたときに、何が起こるかも制御します。これには4種類の動作があります:
- 強い補完(Strict
completion)は、正確にマッチする補完のみを許します。RETでミニバッファーを抜けるのは、ミニバッファーのテキストが正確にマッチしているか、1つに補完された場合だけです。それ以外の場合、Emacsはミニバッファーからのexit(入力を完了してミニバッファーから抜け出す)を拒絶します。かわりに補完を試み、補完できなかったときは、ミニバッファーのテキストの後ろに数秒‘[No
match]’と表示します(C-gを使えばミニバッファーを離れることができます)。
この動作をおこなうコマンドの例はM-xで、それは存在しないコマンド名を受けとるのは無意味だからです。
- 慎重な補完(Cautious
completion)は強い補完と似ていますが、テキストがすでに正確にマッチしているときだけexitできる点が異なります。テキストが正確なマッチに補完できるとき、RETは補完を行いますが、まだexitしません。exitするには、もう一度RETを入力しなければなりません。
慎重な補完は、たとえば存在しなければならないファイル名を読みとるときに使用されます。
- 寛大な補完(Permissive
completion)は、任意の入力を許容します。補完候補はあくまでも提案です。RETでは補完は行われず、単に入力された引数を確定します。
-
確認付きの寛大な補完(Permissive completion with
confirmation)は、寛大な補完と似ていますが例外があります。TABを入力して、テキストがある中間的な状態まで補完されたとき(たとえばまだ正確なマッチに至らないとき)、次にRETを入力しても引数は確定されません。かわりにEmacsはテキストの後ろに‘[Confirm]’を数秒表示して、確認を求めます。その次のRETは確認とみなされテキストが確定されます。これによりTABにより希望するマッチまで補完されたと勘違いして、RETを押してしまうなどの一般的な間違いを捕らえることができます。
変数confirm-nonexistent-file-or-buffer
をカスタマイズして、確認動作を微調整できます。デフォルト値のafter-completion
は、まさに説明したとおりに動作します。これをnil
に変更すると、Emacsは確認を求めなくなり、寛大な補完にフォールバックします。他の非nil
値に変更した場合、その前のコマンドがTABかどうかにかかわらず、Emacsは確認を求めます。
この動作はファイル名を読みとるC-x C-fや、バッファー名を読み取るC-x bなど、多くのコマンドで使われています。