aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2021-04-17 11:24:04 +0300
committerEli Zaretskii2021-04-17 11:24:04 +0300
commit1789dcdb359bbac371ebabbd07643eaaea67c4f7 (patch)
tree89d97ca0cd0e678eb2e8c63bf97ebdaa87232ff8
parenteedad01b4bd8db2e8af087d8810c99c8f00a86af (diff)
downloademacs-1789dcdb359bbac371ebabbd07643eaaea67c4f7.tar.gz
emacs-1789dcdb359bbac371ebabbd07643eaaea67c4f7.zip
Improve documentation of 'map-y-or-n-p'
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p): Doc fix. (Bug#47833) * doc/lispref/minibuf.texi (Multiple Queries): Fix the wording in the description of 'map-y-or-n-p'.
-rw-r--r--doc/lispref/minibuf.texi89
-rw-r--r--lisp/emacs-lisp/map-ynp.el86
2 files changed, 104 insertions, 71 deletions
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 726b786905f..f16212abdca 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -2128,9 +2128,10 @@ This function asks the user a series of questions, reading a
2128single-character answer in the echo area for each one. 2128single-character answer in the echo area for each one.
2129 2129
2130The value of @var{list} specifies the objects to ask questions about. 2130The value of @var{list} specifies the objects to ask questions about.
2131It should be either a list of objects or a generator function. If it is 2131It should be either a list of objects or a generator function. If it
2132a function, it should expect no arguments, and should return either the 2132is a function, it will be called with no arguments, and should return
2133next object to ask about, or @code{nil}, meaning to stop asking questions. 2133either the next object to ask about, or @code{nil}, meaning to stop
2134asking questions.
2134 2135
2135The argument @var{prompter} specifies how to ask each question. If 2136The argument @var{prompter} specifies how to ask each question. If
2136@var{prompter} is a string, the question text is computed like this: 2137@var{prompter} is a string, the question text is computed like this:
@@ -2141,19 +2142,20 @@ The argument @var{prompter} specifies how to ask each question. If
2141 2142
2142@noindent 2143@noindent
2143where @var{object} is the next object to ask about (as obtained from 2144where @var{object} is the next object to ask about (as obtained from
2144@var{list}). 2145@var{list}). @xref{Formatting Strings}, for more information about
2146@code{format}.
2145 2147
2146If not a string, @var{prompter} should be a function of one argument 2148If @var{prompter} is not a string, it should be a function of one
2147(the next object to ask about) and should return the question text. If 2149argument (the object to ask about) and should return the question text
2148the value is a string, that is the question to ask the user. The 2150for that object. If the value @var{prompter} returns is a string,
2149function can also return @code{t}, meaning do act on this object (and 2151that is the question to ask the user. The function can also return
2150don't ask the user), or @code{nil}, meaning ignore this object (and don't 2152@code{t}, meaning to act on this object without asking the user, or
2151ask the user). 2153@code{nil}, which means to silently ignore this object.
2152 2154
2153The argument @var{actor} says how to act on the answers that the user 2155The argument @var{actor} says how to act on the objects for which the
2154gives. It should be a function of one argument, and it is called with 2156user answers yes. It should be a function of one argument, and will
2155each object that the user says yes for. Its argument is always an 2157be called with each object from @var{LIST} for which the user answers
2156object obtained from @var{list}. 2158yes.
2157 2159
2158If the argument @var{help} is given, it should be a list of this form: 2160If the argument @var{help} is given, it should be a list of this form:
2159 2161
@@ -2163,34 +2165,49 @@ If the argument @var{help} is given, it should be a list of this form:
2163 2165
2164@noindent 2166@noindent
2165where @var{singular} is a string containing a singular noun that 2167where @var{singular} is a string containing a singular noun that
2166describes the objects conceptually being acted on, @var{plural} is the 2168describes a single object to be acted on, @var{plural} is the
2167corresponding plural noun, and @var{action} is a transitive verb 2169corresponding plural noun, and @var{action} is a transitive verb
2168describing what @var{actor} does. 2170describing what @var{actor} does with the objects.
2169 2171
2170If you don't specify @var{help}, the default is @code{("object" 2172If you don't specify @var{help}, it defaults to the list
2171"objects" "act on")}. 2173@w{@code{("object" "objects" "act on")}}.
2172 2174
2173Each time a question is asked, the user may enter @kbd{y}, @kbd{Y}, or 2175Each time a question is asked, the user can answer as follows:
2174@key{SPC} to act on that object; @kbd{n}, @kbd{N}, or @key{DEL} to skip 2176
2175that object; @kbd{!} to act on all following objects; @key{ESC} or 2177@table @asis
2176@kbd{q} to exit (skip all following objects); @kbd{.} (period) to act on 2178@item @kbd{y}, @kbd{Y}, or @kbd{@key{SPC}}
2177the current object and then exit; or @kbd{C-h} to get help. These are 2179act on the object
2178the same answers that @code{query-replace} accepts. The keymap 2180@item @kbd{n}, @kbd{N}, or @kbd{@key{DEL}}
2179@code{query-replace-map} defines their meaning for @code{map-y-or-n-p} 2181skip the object
2180as well as for @code{query-replace}; see @ref{Search and Replace}. 2182@item @kbd{!}
2183act on all the following objects
2184@item @kbd{@key{ESC}} or @kbd{q}
2185exit (skip all following objects)
2186@item @kbd{.} (period)
2187act on the object and then exit
2188@item @kbd{C-h}
2189get help
2190@end table
2191
2192@noindent
2193These are the same answers that @code{query-replace} accepts. The
2194keymap @code{query-replace-map} defines their meaning for
2195@code{map-y-or-n-p} as well as for @code{query-replace}; see
2196@ref{Search and Replace}.
2181 2197
2182You can use @var{action-alist} to specify additional possible answers 2198You can use @var{action-alist} to specify additional possible answers
2183and what they mean. It is an alist of elements of the form 2199and what they mean. If provided, @var{action-alist} should be an
2184@code{(@var{char} @var{function} @var{help})}, each of which defines one 2200alist whose elements are of the form @w{@code{(@var{char}
2185additional answer. In this element, @var{char} is a character (the 2201@var{function} @var{help})}}. Each of the alist elements defines one
2202additional answer. In each element, @var{char} is a character (the
2186answer); @var{function} is a function of one argument (an object from 2203answer); @var{function} is a function of one argument (an object from
2187@var{list}); @var{help} is a string. 2204@var{list}); and @var{help} is a string. When the user responds with
2188 2205@var{char}, @code{map-y-or-n-p} calls @var{function}. If it returns
2189When the user responds with @var{char}, @code{map-y-or-n-p} calls 2206non-@code{nil}, the object is considered to have been acted upon, and
2190@var{function}. If it returns non-@code{nil}, the object is considered 2207@code{map-y-or-n-p} advances to the next object in @var{list}. If it
2191acted upon, and @code{map-y-or-n-p} advances to the next object in 2208returns @code{nil}, the prompt is repeated for the same object. If
2192@var{list}. If it returns @code{nil}, the prompt is repeated for the 2209the user requests help, the text in @var{help} is used to describe
2193same object. 2210these additional answers.
2194 2211
2195Normally, @code{map-y-or-n-p} binds @code{cursor-in-echo-area} while 2212Normally, @code{map-y-or-n-p} binds @code{cursor-in-echo-area} while
2196prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it 2213prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index 14112a1c147..8d3a42b09f6 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -38,46 +38,62 @@
38 38
39(defun map-y-or-n-p (prompter actor list &optional help action-alist 39(defun map-y-or-n-p (prompter actor list &optional help action-alist
40 no-cursor-in-echo-area) 40 no-cursor-in-echo-area)
41 "Ask a series of boolean questions. 41 "Ask a boolean question per PROMPTER for each object in LIST, then call ACTOR.
42Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
43 42
44LIST is a list of objects, or a function of no arguments to return the next 43LIST is a list of objects, or a function of no arguments to return the next
45object or nil. 44object; when it returns nil, the list of objects is considered exhausted.
46 45
47If PROMPTER is a string, the prompt is \(format PROMPTER OBJECT). If not 46If PROMPTER is a string, it should be a format string to be used to format
48a string, PROMPTER is a function of one arg (an object from LIST), which 47the question as \(format PROMPTER OBJECT).
49returns a string to be used as the prompt for that object. If the return 48If PROMPTER is not a string, it should be a function of one argument, an
50value is not a string, it may be nil to ignore the object or non-nil to act 49object from LIST, which returns a string to be used as the question for
51on the object without asking the user. 50that object. If the function's return value is not a string, it may be
52 51nil to ignore the object, or non-nil to act on the object with ACTOR
53ACTOR is a function of one arg (an object from LIST), 52without asking the user.
54which gets called with each object that the user answers `yes' for. 53
55 54ACTOR is a function of one argument, an object from LIST,
56If HELP is given, it is a list (OBJECT OBJECTS ACTION), 55which gets called with each object for which the user answers `yes'
57where OBJECT is a string giving the singular noun for an elt of LIST; 56to the question presented by PROMPTER.
58OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive 57
59verb describing ACTOR. The default is \(\"object\" \"objects\" \"act on\"). 58The user's answers to the questions may be one of the following:
60 59
61At the prompts, the user may enter y, Y, or SPC to act on that object; 60 - y, Y, or SPC to act on that object;
62n, N, or DEL to skip that object; ! to act on all following objects; 61 - n, N, or DEL to skip that object;
63ESC or q to exit (skip all following objects); . (period) to act on the 62 - ! to act on all following objects;
64current object and then exit; or \\[help-command] to get help. 63 - ESC or q to exit (skip all following objects);
65 64 - . (period) to act on the current object and then exit; or
66If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys 65 - \\[help-command] to get help.
67that will be accepted. KEY is a character; FUNCTION is a function of one 66
68arg (an object from LIST); HELP is a string. When the user hits KEY, 67HELP provides information for displaying help when the user
69FUNCTION is called. If it returns non-nil, the object is considered 68types \\[help-command]. If HELP is given, it should be a list of
70\"acted upon\", and the next object from LIST is processed. If it returns 69the form (OBJECT OBJECTS ACTION), where OBJECT is a string giving
71nil, the prompt is repeated for the same object. 70the singular noun describing an element of LIST; OBJECTS is the
72 71plural noun describing several elements of LIST, and ACTION is a
73Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set 72transitive verb describing action by ACTOR on one or more elements
74`cursor-in-echo-area' while prompting. 73of LIST. If HELP is omitted or nil, it defaults
74to \(\"object\" \"objects\" \"act on\").
75
76If ACTION-ALIST is given, it is an alist specifying additional keys
77that will be accepted as an answer to the questions. Each element
78of the alist has the form (KEY FUNCTION HELP), where KEY is a character;
79FUNCTION is a function of one argument (an object from LIST); and HELP
80is a string. When the user presses KEY, FUNCTION is called; if it
81returns non-nil, the object is considered to have been \"acted upon\",
82and `map-y-or-n-p' proceeeds to the next object from LIST. If
83FUNCTION returns nil, the prompt is re-issued for the same object: this
84comes in handy if FUNCTION produces some display that will allow the
85user to make an intelligent decision whether the object in question
86should be acted upon. If the user types \\[help-command], the string
87given by HELP is used to describe the effect of KEY.
88
89Optional argument NO-CURSOR-IN-ECHO-AREA, if non-nil, means not to set
90`cursor-in-echo-area' while prompting with the questions.
75 91
76This function uses `query-replace-map' to define the standard responses, 92This function uses `query-replace-map' to define the standard responses,
77but not all of the responses which `query-replace' understands 93but only some of the responses which `query-replace' understands
78are meaningful here. 94are meaningful here, as described above.
79 95
80Returns the number of actions taken." 96The function's value is the number of actions taken."
81 (let* ((actions 0) 97 (let* ((actions 0)
82 (msg (current-message)) 98 (msg (current-message))
83 user-keys mouse-event map prompt char elt def 99 user-keys mouse-event map prompt char elt def