Next: , Previous: Yes-or-No Queries, Up: Minibuffers


19.7 複数のY/Nの問い合わせ

各バッファについて『バッファを保存するか』などの 一連の単純な問い合わせをする場合には、 個々に問い合わせるかわりに map-y-or-n-pを用いてまとめて問い合わせるべきです。

— Function: map-y-or-n-p prompter actor list &optional help action-alist

この関数は、各問について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")である。

各問い合わせでは、ユーザーは当該対象オブジェクトに対する操作に yYSPCで答える。 nN、<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-pfunctionを呼び出す。 これがnil以外を返せば、当該オブジェクトを『処理』したとみなして、 map-y-or-n-plistのつぎのオブジェクトに移る。 nilであると、同じオブジェクトについてプロンプトを繰り返す。

map-y-or-n-pがマウスを使って起動されたコマンドから呼ばれると、 より正確には、last-nonmenu-event(see Command Loop Info)が、 nilかリストであると、 関数は問い合わせのための対話ボックスやポップアップメニューを使う。 その場合、キーボード入力やエコー領域は使わない。 呼び出しにおいてlast-nonmenu-eventに適切な値を束縛することで マウスかキーボード入力の使用を強制できる。

map-y-or-n-pの戻り値は、処理したオブジェクトの個数である。