各バッファについて『バッファを保存するか』などの
一連の単純な問い合わせをする場合には、
個々に問い合わせるかわりに
map-y-or-n-p
を用いてまとめて問い合わせるべきです。
この関数は、各問について1文字の応答をエコー領域から読み取ることで、 ユーザーに一連の問い合わせを行う。
listの値は、問い合わせ対象のオブジェクトを指定する。 オブジェクトのリストであるか、生成関数であること。 関数である場合、それは引数なしで呼ばれ、 つぎの問い合わせ対象のオブジェクトを返すか、 問い合わせの終了を意味する
nil
を返す。引数prompterは、各問い合わせをどのように問うかを指定する。 prompterが文字列であると、問い合わせ文はつぎのように計算される。
(format prompter object)ここで、objectは(listから得た) 問い合わせ対象のオブジェクトである。
文字列でなければ、prompterは 1引数(問い合わせ対象のオブジェクト)の関数であり、 問い合わせ文を返す。 値が文字列であれば、それがユーザーへの問い合わせ文になる。 関数は、(ユーザーに問い合わせずに) 当該オブジェクトを処理することを意味する
t
か、 (ユーザーに問い合わせずに)当該オブジェクトを無視することを意味するnil
を返してもよい。引数actorは、ユーザーの応答に対してどのように動作するかを指定する。 これは1引数の関数であり、ユーザーが「はい」と答えたオブジェクトで 呼ばれる。 引数は、つねにlistから得たオブジェクトである。
引数helpを指定する場合、つぎの形のリストであること。
(singular plural action)ここで、 singularは操作対象のオブジェクトを 記述する単数形の名詞を含んだ文字列であり、 pluralは対応する複数形の名詞であり、 actionは動作を記述する他動詞であること。
helpを指定しないと、デフォルトは
("object" "objects" "act on")
である。各問い合わせでは、ユーザーは当該対象オブジェクトに対する操作に y、Y、SPCで答える。 n、N、<DEL>は、そのオブジェクトを無視する。 !はそのオブジェクトを含めて後続のものも処理する。 <ESC>やqは(後続のオブジェクトをすべて無視して)抜ける。 .(ピリオド)は現在の対象オブジェクトを処理してから抜ける。 C-hはヘルプメッセージを表示する。 これらは、
query-replace
が受け付ける応答と同じである。 キーマップquery-replace-map
が、query-replace
と同様にmap-y-or-n-p
に対する(応答の)意味を定義する。 Search and Replaceを参照。action-alistを使って、 可能な応答とそれらの意味を追加指定することもできる。 これは、
(
char function help)
の形の要素から成る 連想リストであり、それぞれが1つの追加応答を定義する。 この要素の中で、 charは(応答である)1つの文字、 functionは1引数(listからのオブジェクト)の関数、 helpは文字列である。ユーザーがcharで答えると、
map-y-or-n-p
はfunctionを呼び出す。 これがnil
以外を返せば、当該オブジェクトを『処理』したとみなして、map-y-or-n-p
はlistのつぎのオブジェクトに移る。nil
であると、同じオブジェクトについてプロンプトを繰り返す。
map-y-or-n-p
がマウスを使って起動されたコマンドから呼ばれると、 より正確には、last-nonmenu-event
(see Command Loop Info)が、nil
かリストであると、 関数は問い合わせのための対話ボックスやポップアップメニューを使う。 その場合、キーボード入力やエコー領域は使わない。 呼び出しにおいてlast-nonmenu-event
に適切な値を束縛することで マウスかキーボード入力の使用を強制できる。
map-y-or-n-p
の戻り値は、処理したオブジェクトの個数である。