次: , 前: Basic Completion, 上: Completion


19.5.2 補完とミニバッファ

本節ではミニバッファからの補完による読み取り用の 基本インターフェイスについて述べます。

— 機能: completing-read prompt collection &optional predicate require-match initial hist default inherit-input-method

この関数は、与えられた補完でユーザーを補佐して ミニバッファで文字列を読み取る。 文字列であるプロンプトpromptでミニバッファを活性にする。

実際の補完は、collectionpredicateを 関数try-completionに渡して行う。 これは、補完を用いるローカルキーマップでバインドされたコマンドで行われる。

require-matchnilであると、 ミニバッファでの入力に関わらず ミニバッファから抜けるコマンドは動作する。 require-matchtであると、 ミニバッファでの入力がcollectionの1つの要素に補完できない限り、 ミニバッファから抜ける通常のコマンドは動作しない。 require-matchnilでもtでもないと、 ミニバッファでの入力がcollectionの1つの要素に一致しない限り、 ミニバッファから抜けるコマンドは動作しない。

しかし、require-matchの値に関わらず、 空の入力はつねに許される。 その場合、completing-readdefaultを返す。 defaultの値は(nilでなければ)履歴コマンドを介しても ユーザーが使える。

ミニバッファが空の状態で<RET>を打つと、 ユーザーは空入力で抜けることができる。 そうすると、completing-read""を返す。 これにより、読み取った値に対してコマンドが使うどんなデフォルトでも指定できる。 require-matchの値、および、collectionに空文字列が 含まれるかどうかに関わらず、ユーザーはこのようにして<RET>で戻れる。

関数completing-readread-minibufferを呼び出すことで動作する。 require-matchnilであると、 キーマップとしてminibuffer-local-completion-mapを使い、 nil以外であるとminibuffer-local-must-match-mapを使う。 see Completion Commands

引数histは、入力を保存しミニバッファ履歴コマンドで 使う履歴リスト変数を指定する。 デフォルトはminibuffer-historyである。 see Minibuffer History

initialnil以外であると、 completing-readはこれを入力の一部としてミニバッファに挿入する。 これにより、ユーザーは補完コマンドとともに入力を編集できる。 ほとんどの場合、initialではなくdefaultを使うことを勧める。

引数inherit-input-methodnil以外であると、 ミニバッファに入るまえのカレントバッファがなんであれ、 カレントバッファから現在の入力方式(see Input Methods)と enable-multibyte-characters(see Text Representations) の設定を継承する。

組み込み変数completion-ignore-casenil以外であると、 大文字小文字を区別せずに候補に対して入力を比較する。 see Basic Completion

completing-readを用いた例を以下に示す。

          (completing-read
           "Complete a foo: "
           '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
           nil t "fo")
          
          
          
          ;; 上の式を評価するとミニバッファはつぎのようになる
          
          ---------- Buffer: Minibuffer ----------
          Complete a foo: fo-!-
          ---------- Buffer: Minibuffer ----------
     

ユーザーが<DEL> <DEL> b <RET>を打つと、 completing-readbarfooを返す。

関数completing-readは、 補完を実際に行うコマンドに情報を渡すために3つの変数を束縛する。 3つの変数とは、minibuffer-completion-tableminibuffer-completion-predicateminibuffer-completion-confirmである。 これらについて詳しくは、Completion Commandsを参照。