Next: Multiple Queries, Previous: Completion, Up: Minibuffers [Contents][Index]
このセクションでは、ユーザーにyes-or-noの確認を求める関数を説明します。関数y-or-n-p
は1文字での応答に使用できます。この関数は不注意による誤った答えが深刻な結果を招かない場合に有用です。yes-or-no-p
は3文字から4文字の答えを要求するので、より重大な問に適しています。
3つの関数はどれも、マウスを使用して呼び出されたコマンド、より正確にはlast-nonmenu-event
(Command Loop Infoを参照)がnil
かリストの場合は、問いに答えるためにダイアログボックスまたはポップアップメニューを使用します。それ以外の場合はキーボード入力を使用します。呼び出しの周囲でlast-nonmenu-event
に適切な値をバインドすることにより、マウスまたはキーボードの使用を強制できます。
厳密に言うと、yes-or-no-p
はミニバッファーを使用し、y-or-n-p
は使用しませんが、これらのコマンドは一緒に説明したほうがよいでしょう。
この関数はユーザーに答えを尋ねて、ミニバッファーに入力を求める。ユーザーがyをタイプしたらt
、nをタイプしたらnil
をリターンする。この関数はyesの意味でSPC、noの意味でDELも受け入れる。“quit”の意味としてC-gと同様にC-]も受け入れる。これは問いがミニバッファーのような外見をもち、ミニバッファーを抜けるためにユーザーがC-]の使用を試みるかもしれないという理由による。応答は1文字であり、問いを終了させるためのRETは必要ない。大文字と小文字は等価である。
“答えを尋ねる”とはエコーエリアにpromptと、その後に文字列‘(y or n) ’をプリントすることを意味する。期待される答え(y、n、SPC、DEL、もしくは質問を終了するその他のキー)以外が入力された場合、この関数は‘Please answer y or n.’と応答し、繰り返し答えの入力を要求する。
この関数は答えの編集を許さないため、実際にミニバッファーは使用しない。実際に使用するのはミニバッファーと同じスクリーンスペースを使用するエコーエリア(The Echo Areaを参照)である。問いが答えられるまで、カーソルはエコーエリアに移動する。
答えとその意味は、たとえ‘y’と‘n’であっても固定されたものではなく、キーマップquery-replace-map
により指定される(Search and Replaceを参照)。特にユーザーがrecenter
、scroll-up
、scroll-down
、scroll-other-window
、scroll-other-window-down
(それぞれquery-replace-map
内でC-l、C-v、M-v、C-M-v、C-M-S-vにバインドされている)のような特殊な応答をエンターした場合、この関数はは指定されたウィンドウの再センタリングやスクロール操作を処理してから再度答えを求める。
例ではエコーエリアのメッセージを連続する行で示しているが、スクリーン上に実際に表示されるのは1回に1行だけである。
y-or-n-p
と同様だが、ユーザーがseconds秒以内に答えないと、この関数は待つのをやめてdefaultをリターンする。これはタイマーをセットアップすることにより機能する。引数secondsは数字である。
この関数は質問して、ミニバッファーに答えの入力を求める。これはユーザーが‘yes’をエンターするとt
を、‘no’をエンターするとnil
をリターンする。ユーザーは応答を終えるためにRETをタイプしなければならない。大文字と小文字は等価である。
yes-or-no-p
はエコーエリアにpromptとその後に‘(yes or no) ’を表示することにより開始される。ユーザーは期待される応答の1つをタイプしなければならない。それ以外の答えだと、この関数は‘Please
answer yes or no.’と応答して約2秒待った後に要求を繰り返す。
yes-or-no-p
はy-or-n-p
より多くの作業をユーザーに要求し、より重大な決定に適している。
以下は例である:
(yes-or-no-p "Do you really want to remove everything? ") ;; 前の式を評価した後、 ;; 空のミニバッファーに ;; 以下のプロンプトが表示される:
---------- Buffer: minibuffer ---------- Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------
ユーザーが最初にy RETとタイプした場合、これは無効である。なぜならこの関数は‘yes’という単語全体を要求しているので、以下のプロンプトを説明のために一時停止して表示する。
---------- Buffer: minibuffer ---------- Please answer yes or no. Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------