annotate lisp/map-ynp.el @ 25976:8565fbac98d7

Use "pop3" as the POP service name on all platforms, instead of using "pop" on Unix and "pop3" on Windows NT. "pop3" has been the standard service name since RFC 1340 was published in July 1992, so I think it's safe to start using it by default.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 10 Oct 1999 23:07:36 +0000
parents cc89cf824a72
children a1b5109f447a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 580
diff changeset
1 ;;; map-ynp.el --- General-purpose boolean question-asker.
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 580
diff changeset
2
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
3 ;; Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
840
113281b361ec *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 24778
diff changeset
5 ;; Author: Roland McGrath <roland@gnu.org>
21057
9b9c929675eb Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 19662
diff changeset
6 ;; Maintainer: FSF
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7 ;; Keywords: lisp, extensions
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
9 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
14 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
15
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
19 ;; GNU General Public License for more details.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
20
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
21 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
24 ;; Boston, MA 02111-1307, USA.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
25
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
26 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
27
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
28 ;; map-y-or-n-p is a general-purpose question-asking function.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
29 ;; It asks a series of y/n questions (a la y-or-n-p), and decides to
19662
791a40c16c0b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16543
diff changeset
30 ;; apply an action to each element of a list based on the answer.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
31 ;; The nice thing is that you also get some other possible answers
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
32 ;; to use, reminiscent of query-replace: ! to answer y to all remaining
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
33 ;; questions; ESC or q to answer n to all remaining questions; . to answer
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12130
diff changeset
34 ;; y once and then n for the remainder; and you can get help with C-h.
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
35
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
36 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
37
4845
6b7954afe2bf (map-y-or-n-p): Take new optional arg to not set cursor-in-echo-area.
Roland McGrath <roland@gnu.org>
parents: 4222
diff changeset
38 (defun map-y-or-n-p (prompter actor list &optional help action-alist
6b7954afe2bf (map-y-or-n-p): Take new optional arg to not set cursor-in-echo-area.
Roland McGrath <roland@gnu.org>
parents: 4222
diff changeset
39 no-cursor-in-echo-area)
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
40 "Ask a series of boolean questions.
891
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
41 Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
42
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
43 LIST is a list of objects, or a function of no arguments to return the next
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
44 object or nil.
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
45
580
c8860f81ccf7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 572
diff changeset
46 If PROMPTER is a string, the prompt is \(format PROMPTER OBJECT\). If not
572
0c2e4ee42304 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 474
diff changeset
47 a string, PROMPTER is a function of one arg (an object from LIST), which
0c2e4ee42304 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 474
diff changeset
48 returns a string to be used as the prompt for that object. If the return
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
49 value is not a string, it may be nil to ignore the object or non-nil to act
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
50 on the object without asking the user.
572
0c2e4ee42304 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 474
diff changeset
51
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
52 ACTOR is a function of one arg (an object from LIST),
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53 which gets called with each object that the user answers `yes' for.
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
54
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
55 If HELP is given, it is a list (OBJECT OBJECTS ACTION),
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 where OBJECT is a string giving the singular noun for an elt of LIST;
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
57 OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
58 verb describing ACTOR. The default is \(\"object\" \"objects\" \"act on\"\).
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
59
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
60 At the prompts, the user may enter y, Y, or SPC to act on that object;
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
61 n, N, or DEL to skip that object; ! to act on all following objects;
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
62 ESC or q to exit (skip all following objects); . (period) to act on the
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
63 current object and then exit; or \\[help-command] to get help.
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
64
891
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
65 If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
66 that will be accepted. KEY is a character; FUNCTION is a function of one
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
67 arg (an object from LIST); HELP is a string. When the user hits KEY,
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
68 FUNCTION is called. If it returns non-nil, the object is considered
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
69 \"acted upon\", and the next object from LIST is processed. If it returns
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
70 nil, the prompt is repeated for the same object.
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 840
diff changeset
71
4845
6b7954afe2bf (map-y-or-n-p): Take new optional arg to not set cursor-in-echo-area.
Roland McGrath <roland@gnu.org>
parents: 4222
diff changeset
72 Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
6b7954afe2bf (map-y-or-n-p): Take new optional arg to not set cursor-in-echo-area.
Roland McGrath <roland@gnu.org>
parents: 4222
diff changeset
73 `cursor-in-echo-area' while prompting.
6b7954afe2bf (map-y-or-n-p): Take new optional arg to not set cursor-in-echo-area.
Roland McGrath <roland@gnu.org>
parents: 4222
diff changeset
74
2081
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
75 This function uses `query-replace-map' to define the standard responses,
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
76 but not all of the responses which `query-replace' understands
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
77 are meaningful here.
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
78
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
79 Returns the number of actions taken."
6409
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
80 (let* ((actions 0)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
81 user-keys mouse-event map prompt char elt tail def
14818
3349089ced14 (map-y-or-n-p): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
82 ;; Non-nil means we should use mouse menus to ask.
3349089ced14 (map-y-or-n-p): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
83 use-menus
6409
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
84 delayed-switch-frame
4222
6a8d48a6ac10 (map-y-or-n-p): If LIST is nil, just return.
Richard M. Stallman <rms@gnu.org>
parents: 3992
diff changeset
85 (next (if (or (and list (symbolp list))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
86 (subrp list)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1616
diff changeset
87 (byte-code-function-p list)
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
88 (and (consp list)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
89 (eq (car list) 'lambda)))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
90 (function (lambda ()
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
91 (setq elt (funcall list))))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
92 (function (lambda ()
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
93 (if list
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
94 (progn
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
95 (setq elt (car list)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
96 list (cdr list))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
97 t)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 415
diff changeset
98 nil))))))
6409
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
99 (if (listp last-nonmenu-event)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
100 ;; Make a list describing a dialog box.
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
101 (let ((object (capitalize (nth 0 help)))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
102 (objects (capitalize (nth 1 help)))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
103 (action (capitalize (nth 2 help))))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
104 (setq map (` (("Yes" . act) ("No" . skip) ("Quit" . exit)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
105 ((, (if help (concat action " " object " And Quit")
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
106 "Do it and Quit")) . act-and-exit)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
107 ((, (if help (concat action " All " objects)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
108 "Do All")) . automatic)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
109 (,@ (mapcar (lambda (elt)
6460
2acd8bf3819a (map-y-or-n-p): Don't add any text to the ACTION-ALIST descriptions to make
Roland McGrath <roland@gnu.org>
parents: 6438
diff changeset
110 (cons (capitalize (nth 2 elt))
6409
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
111 (vector (nth 1 elt))))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
112 action-alist))))
14818
3349089ced14 (map-y-or-n-p): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
113 use-menus t
6409
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
114 mouse-event last-nonmenu-event))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
115 (setq user-keys (if action-alist
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
116 (concat (mapconcat (function
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
117 (lambda (elt)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
118 (key-description
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
119 (char-to-string (car elt)))))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
120 action-alist ", ")
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
121 " ")
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
122 "")
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
123 ;; Make a map that defines each user key as a vector containing
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
124 ;; its definition.
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
125 map (cons 'keymap
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
126 (append (mapcar (lambda (elt)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
127 (cons (car elt) (vector (nth 1 elt))))
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
128 action-alist)
2f1e5e14dc25 (map-y-or-n-p): Use a dialog box when triggered by a mouse event.
Roland McGrath <roland@gnu.org>
parents: 4978
diff changeset
129 query-replace-map))))
3992
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
130 (unwind-protect
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
131 (progn
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
132 (if (stringp prompter)
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
133 (setq prompter (` (lambda (object)
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
134 (format (, prompter) object)))))
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
135 (while (funcall next)
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
136 (setq prompt (funcall prompter elt))
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
137 (cond ((stringp prompt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
138 ;; Prompt the user about this object.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
139 (setq quit-flag nil)
14818
3349089ced14 (map-y-or-n-p): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
140 (if use-menus
3349089ced14 (map-y-or-n-p): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
141 (setq def (or (x-popup-dialog (or mouse-event use-menus)
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
142 (cons prompt map))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
143 'quit))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
144 ;; Prompt in the echo area.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
145 (let ((cursor-in-echo-area (not no-cursor-in-echo-area))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
146 (message-log-max nil))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
147 (message "%s(y, n, !, ., q, %sor %s) "
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
148 prompt user-keys
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
149 (key-description (vector help-char)))
16543
6f891b1ba617 (map-y-or-n-p): Handle minibuffer-auto-raise here.
Richard M. Stallman <rms@gnu.org>
parents: 14818
diff changeset
150 (if minibuffer-auto-raise
6f891b1ba617 (map-y-or-n-p): Handle minibuffer-auto-raise here.
Richard M. Stallman <rms@gnu.org>
parents: 14818
diff changeset
151 (raise-frame (window-frame (minibuffer-window))))
25963
cc89cf824a72 (map-y-or-n-p): If we read -1, for end of keyboard
Phillip Rulon <pjr@gnu.org>
parents: 25278
diff changeset
152 (while (progn
cc89cf824a72 (map-y-or-n-p): If we read -1, for end of keyboard
Phillip Rulon <pjr@gnu.org>
parents: 25278
diff changeset
153 (setq char (read-event))
cc89cf824a72 (map-y-or-n-p): If we read -1, for end of keyboard
Phillip Rulon <pjr@gnu.org>
parents: 25278
diff changeset
154 ;; If we get -1, from end of keyboard
cc89cf824a72 (map-y-or-n-p): If we read -1, for end of keyboard
Phillip Rulon <pjr@gnu.org>
parents: 25278
diff changeset
155 ;; macro, try again.
cc89cf824a72 (map-y-or-n-p): If we read -1, for end of keyboard
Phillip Rulon <pjr@gnu.org>
parents: 25278
diff changeset
156 (not (equal char -1))))
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
157 ;; Show the answer to the question.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
158 (message "%s(y, n, !, ., q, %sor %s) %s"
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
159 prompt user-keys
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
160 (key-description (vector help-char))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
161 (single-key-description char)))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
162 (setq def (lookup-key map (vector char))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
163 (cond ((eq def 'exit)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
164 (setq next (function (lambda () nil))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
165 ((eq def 'act)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
166 ;; Act on the object.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
167 (funcall actor elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
168 (setq actions (1+ actions)))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
169 ((eq def 'skip)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
170 ;; Skip the object.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
171 )
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
172 ((eq def 'act-and-exit)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
173 ;; Act on the object and then exit.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
174 (funcall actor elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
175 (setq actions (1+ actions)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
176 next (function (lambda () nil))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
177 ((or (eq def 'quit) (eq def 'exit-prefix))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
178 (setq quit-flag t)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
179 (setq next (` (lambda ()
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
180 (setq next '(, next))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
181 '(, elt)))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
182 ((eq def 'automatic)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
183 ;; Act on this and all following objects.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
184 (if (funcall prompter elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
185 (progn
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
186 (funcall actor elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
187 (setq actions (1+ actions))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
188 (while (funcall next)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
189 (if (funcall prompter elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
190 (progn
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
191 (funcall actor elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
192 (setq actions (1+ actions))))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
193 ((eq def 'help)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
194 (with-output-to-temp-buffer "*Help*"
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
195 (princ
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
196 (let ((object (if help (nth 0 help) "object"))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
197 (objects (if help (nth 1 help) "objects"))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
198 (action (if help (nth 2 help) "act on")))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
199 (concat
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
200 (format "Type SPC or `y' to %s the current %s;
2081
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
201 DEL or `n' to skip the current %s;
23254
54fc6491e28b (map-y-or-n-p): Mention RET, `q' in the help text.
Dave Love <fx@gnu.org>
parents: 21057
diff changeset
202 RET or `q' to exit (skip all remaining %s);
2081
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
203 ! to %s all remaining %s;
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
204 ESC or `q' to exit;\n"
23254
54fc6491e28b (map-y-or-n-p): Mention RET, `q' in the help text.
Dave Love <fx@gnu.org>
parents: 21057
diff changeset
205 action object object objects action
54fc6491e28b (map-y-or-n-p): Mention RET, `q' in the help text.
Dave Love <fx@gnu.org>
parents: 21057
diff changeset
206 objects)
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
207 (mapconcat (function
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
208 (lambda (elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
209 (format "%c to %s"
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
210 (nth 0 elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
211 (nth 2 elt))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
212 action-alist
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
213 ";\n")
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
214 (if action-alist ";\n")
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
215 (format "or . (period) to %s \
2081
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
216 the current %s and exit."
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
217 action object))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
218 (save-excursion
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
219 (set-buffer standard-output)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
220 (help-mode)))
2081
2b04be5e47e6 (map-y-or-n-p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
221
12130
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
222 (setq next (` (lambda ()
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
223 (setq next '(, next))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
224 '(, elt)))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
225 ((vectorp def)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
226 ;; A user-defined key.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
227 (if (funcall (aref def 0) elt) ;Call its function.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
228 ;; The function has eaten this object.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
229 (setq actions (1+ actions))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
230 ;; Regurgitated; try again.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
231 (setq next (` (lambda ()
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
232 (setq next '(, next))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
233 '(, elt))))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
234 ((and (consp char)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
235 (eq (car char) 'switch-frame))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
236 ;; switch-frame event. Put it off until we're done.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
237 (setq delayed-switch-frame char)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
238 (setq next (` (lambda ()
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
239 (setq next '(, next))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
240 '(, elt)))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
241 (t
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
242 ;; Random char.
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
243 (message "Type %s for help."
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
244 (key-description (vector help-char)))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
245 (beep)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
246 (sit-for 1)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
247 (setq next (` (lambda ()
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
248 (setq next '(, next))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
249 '(, elt)))))))
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
250 (prompt
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
251 (funcall actor elt)
bd03a01d7059 (map-y-or-n-p): Don't eval return value of prompter function.
Roland McGrath <roland@gnu.org>
parents: 11471
diff changeset
252 (setq actions (1+ actions))))))
3992
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
253 (if delayed-switch-frame
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
254 (setq unread-command-events
cb593618786e * map-ynp.el (map-y-or-n-p): If we get a switch-frame-event,
Jim Blandy <jimb@redhat.com>
parents: 2793
diff changeset
255 (cons delayed-switch-frame unread-command-events))))
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
256 ;; Clear the last prompt from the minibuffer.
11471
019a9e941699 (map-y-or-n-p): Don't log prompt messages.
Karl Heuer <kwzh@gnu.org>
parents: 10058
diff changeset
257 (let ((message-log-max nil))
019a9e941699 (map-y-or-n-p): Don't log prompt messages.
Karl Heuer <kwzh@gnu.org>
parents: 10058
diff changeset
258 (message ""))
304
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
259 ;; Return the number of actions that were taken.
f3dd86b71a52 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
260 actions))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 580
diff changeset
261
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 580
diff changeset
262 ;;; map-ynp.el ends here