状況に応じて,ミニバッファでは入力補完(completion)が機能します. つまり,引数を確定するのに必要なだけ入力すれば,Emacsが引数の意味に関す るデータを基に,その引数の残りの部分を埋めたり,入力した範囲で決定する機 能です.
入力補完機能が動作しているときは,TAB,RET,SPCのキー は,ミニバッファに入力された短い文字列を,それが表すもっと長い文字列に展 開するように再定義されます.補完は引数を読み取るコマンドによって与えられ る補完の候補と,入力された短い文字列を比べていくことで行なわれます. ?は,入力した内容から補完できる文字列の候補を表示するように定義さ れています.
たとえば,Meta-xでコマンド名を読みとるためにミニバッファを使った ときは,利用可能なEmacsのコマンド名のリストが入力補完用に与えられます. 入力補完キーはミニバッファのテキストをすべてのコマンド名とつき合わせ,こ のテキストに付け足せる文字を調べます.そしてそれをミニバッファに付け加え ます.
大文字と子文字の区別は補完に置いて重要です.補完しうる名前(バッファ名, ファイル名,コマンド名など)のほとんどで区別されるためです.したがって `fo'は`Foo'にはなりません.大文字と子文字とは無関係に名前の補 完がされているときは,大文字と子文字を補完の際に無視するようにプログラム されているからです.
具体的な例を示すとよくわかるでしょう.たとえばMeta-x au
TABと入力した場合,`au'で始まる候補の文字列(この場合コマンド
名)を調べます.そしてauto-fill-mode
とauto-save-mode
の2つだ
けが見つかります.2つの共通部分は,auto-
なので,ミニバッファの
`au'が`auto-'に変わります.
ここですぐにもう一度TABを入力しても,直後の文字に複数の可能性 `s'または`f'があるので文字は付け加えられません.しかし,可能性 のある候補のリストを他のウィンドウに表示します.
続けてf TABを押すと,このTABでは`auto-f'を調べ
ます.これで始まるコマンド名は,auto-fill-mode
だけなので,残りを
挿入します.結局au TAB f TABと入力すれば,
`auto-fill-mode'がミニバッファに得られることになります.入力補完の
ために,ミニバッファにおいてTABはminibuffer-complete
関数に
割り当てられます.
ミニバッファで定義されている補完のためのコマンドを示します.
minibuffer-complete
).minibuffer-complete-word
).minibuffer-complete-and-exit
).minibuffer-list-completions
).
SPCはTABと同じように機能しますが,次のハイフンを越えて付加
はしません.つまり,ミニバッファに`auto-f'があるとき,SPCを入
力すると,SPCは唯一の候補文字列として,`auto-fill-mode'を見つ
けますが,`fill-'のところまでで補完をやめます.これによって
`auto-fill-'が得られます.ここでさらに,SPCを押せば,
`auto-fill-mode'まで補完されます.入力補完においては,ミニバッファ
のSPCはminibuffer-complete-word
関数を実行します.
引数の使われ方によって,入力補完を伴ったミニバッファではRETの機 能の仕方は3通りになります.
補完コマンドは,すぐ次の文字に2つ以上の可能性があるときは,ウィンドウ にすべての候補のリストを表示します.また,?を入力してもこのリスト が表示されます.候補のリストはヘルプテキストとみなされるので,ミニバッファ でC-M-vを入力すればスクロールすることができます.
ファイル名の入力補完が実行される場合,通常無視されるファイル名がありま
す.変数completion-ignored-extensions
は文字列のリストを持っていま
す.この文字列で終る名前のファイルは,補完の候補にはなりません.この変数
にはデフォルトで,".o"
,".elc"
,".dvi"
,"~"
があります.これによってたとえば,`foo'はたとえ`foo.o'が存在し
ていても,`foo.c'だけが補完の候補になります.補完の候補が無視する文
字列で終るファイルだけなら,それらは無視されません.
通常は,補完コマンドは次の文字が自動的には決まらない場合には補完候補の
リストを表示します.変数completion-auto-help
をnil
に設定す
ると表示しません.候補を表示するときには?を入力します.