1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-03 10:31:37 -08:00

Merge from origin/emacs-27

7d5b973959 (origin/emacs-27) * doc/misc/cl.texi (For Clauses): Minor ...
4570781f8d ; * doc/lispref/files.texi (Directory Names): Add missing ...
1b52fd538d Minor update for make-tarball.txt
8efb8491b2 * doc/misc/cl.texi (Iteration Clauses): fix `never' clause...
0873134682 ; Fix Texinfo in last change to minibuf.texi.
cad8913c89 Improve filling-related documentation
2b7eed23eb ; * doc/lispref/keymaps.texi (Easy Menu): Fix typo.
47fc92cefc Fix reference to "yanking" in the main Emacs manual
1789dcdb35 Improve documentation of 'map-y-or-n-p'
This commit is contained in:
Glenn Morris 2021-04-25 09:16:09 -07:00
commit 6dabbddb5f
9 changed files with 153 additions and 93 deletions

View file

@ -259,8 +259,9 @@ General steps (for each step, check for possible errors):
UPDATING THE EMACS WEB PAGES AFTER A RELEASE UPDATING THE EMACS WEB PAGES AFTER A RELEASE
As soon as possible after a release, the Emacs web pages should be updated. As soon as possible after a release, the Emacs web pages at
(See admin/notes/www for general information.) https://www.gnu.org/software/emacs/ should be updated. (See
admin/notes/www for general information.)
The pages to update are: The pages to update are:
@ -270,7 +271,14 @@ add the new NEWS file as news/NEWS.xx.y
For every new release, a banner is displayed on top of the emacs.html For every new release, a banner is displayed on top of the emacs.html
page. Uncomment and the release banner in emacs.html. Keep it on the page. Uncomment and the release banner in emacs.html. Keep it on the
page for about a month, then comment it again. page for about a month, then comment it again. The new release banner
looks like this:
<div class="release-banner">
<div class="container">
<h2><em>Emacs 27.1 is out</em>, download it <a href="download.html">here</a>!</h2>
</div>
</div>
Regenerate the various manuals in manual/. Regenerate the various manuals in manual/.
The scripts admin/make-manuals and admin/upload-manuals summarize the process. The scripts admin/make-manuals and admin/upload-manuals summarize the process.

View file

@ -159,7 +159,7 @@ Fundamental Editing Commands
Important Text-Changing Commands Important Text-Changing Commands
* Mark:: The mark: how to delimit a region of text. * Mark:: The mark: how to delimit a region of text.
* Killing:: Killing (cutting) and yanking (copying) text. * Killing:: Killing (cutting) and yanking (pasting) text.
* Registers:: Saving a text string or a location in the buffer. * Registers:: Saving a text string or a location in the buffer.
* Display:: Controlling what text is displayed. * Display:: Controlling what text is displayed.
* Search:: Finding or replacing occurrences of a string. * Search:: Finding or replacing occurrences of a string.

View file

@ -502,8 +502,8 @@ text.
@cindex mode, Auto Fill @cindex mode, Auto Fill
@dfn{Auto Fill} mode is a buffer-local minor mode (@pxref{Minor @dfn{Auto Fill} mode is a buffer-local minor mode (@pxref{Minor
Modes}) in which lines are broken automatically at spaces when the Modes}) in which lines are broken automatically when the line becomes
line becomes too wide. too wide and you type @kbd{@key{SPC}} or @kbd{@key{RET}}.
@table @kbd @table @kbd
@item M-x auto-fill-mode @item M-x auto-fill-mode
@ -522,12 +522,21 @@ certain major modes, add @code{auto-fill-mode} to the mode hooks
(@pxref{Major Modes}). When Auto Fill mode is enabled, the mode (@pxref{Major Modes}). When Auto Fill mode is enabled, the mode
indicator @samp{Fill} appears in the mode line (@pxref{Mode Line}). indicator @samp{Fill} appears in the mode line (@pxref{Mode Line}).
Auto Fill mode breaks lines automatically at spaces whenever they Auto Fill mode breaks lines automatically at the appropriate places
get longer than the desired width. This line breaking occurs only whenever lines get longer than the desired width. This line breaking
when you type @key{SPC} or @key{RET}. If you wish to insert a space occurs only when you type @kbd{@key{SPC}} or @kbd{@key{RET}}. If you
or newline without permitting line-breaking, type @kbd{C-q @key{SPC}} wish to insert a space or newline without permitting line-breaking,
or @kbd{C-q C-j} respectively. Also, @kbd{C-o} inserts a newline type @kbd{C-q @key{SPC}} or @kbd{C-q C-j} respectively. Also,
without line breaking. @kbd{C-o} inserts a newline without line breaking.
@cindex kinsoku line-breaking rules
The place where Auto Fill breaks a line depends on the line's
characters. For characters from @acronym{ASCII}, Latin, and most
other scripts Emacs breaks a line on space characters, to keep the
words intact. But for CJK scripts, a line can be broken between any
two characters. (If you load the @file{kinsoku} library, Emacs will
avoid breaking a line between certain pairs of CJK characters, where
special rules prohibit that.)
When Auto Fill mode breaks a line, it tries to obey the When Auto Fill mode breaks a line, it tries to obey the
@dfn{adaptive fill prefix}: if a fill prefix can be deduced from the @dfn{adaptive fill prefix}: if a fill prefix can be deduced from the
@ -549,6 +558,9 @@ described in the next section.
(@pxref{Fill Commands}). (@pxref{Fill Commands}).
@end ifnottex @end ifnottex
A similar feature that wraps long lines automatically at display
time is Visual Line Mode (@pxref{Visual Line Mode}).
@node Fill Commands @node Fill Commands
@subsection Explicit Fill Commands @subsection Explicit Fill Commands
@ -571,7 +583,11 @@ Center a line.
current paragraph. It redistributes the line breaks within the current paragraph. It redistributes the line breaks within the
paragraph, and deletes any excess space and tab characters occurring paragraph, and deletes any excess space and tab characters occurring
within the paragraph, in such a way that the lines end up fitting within the paragraph, in such a way that the lines end up fitting
within a certain maximum width. within a certain maximum width. Like Auto Fill mode, this and other
filling commands usually break lines at space characters, but for CJK
characters these commands can break a line between almost any two
characters, and they can also obey the kinsoku rules. @xref{Auto
Fill}.
@findex fill-region @findex fill-region
Normally, @kbd{M-q} acts on the paragraph where point is, but if Normally, @kbd{M-q} acts on the paragraph where point is, but if
@ -645,8 +661,8 @@ or before @samp{)}, @samp{:} or @samp{?}); and
even if preceded by a non-whitespace character). even if preceded by a non-whitespace character).
Emacs can display an indicator in the @code{fill-column} position Emacs can display an indicator in the @code{fill-column} position
using the Display fill column indicator mode using the Display fill column indicator mode (@pxref{Displaying
(@pxref{Displaying Boundaries, display-fill-column-indicator}). Boundaries, display-fill-column-indicator}).
@node Fill Prefix @node Fill Prefix
@subsection The Fill Prefix @subsection The Fill Prefix

View file

@ -2244,7 +2244,7 @@ form.
A @dfn{directory name} is a string that must name a directory if it A @dfn{directory name} is a string that must name a directory if it
names any file at all. A directory is actually a kind of file, and it names any file at all. A directory is actually a kind of file, and it
has a file name (called the @dfn{directory file name}, which is has a file name (called the @dfn{directory file name}), which is
related to the directory name but is typically not identical. (This related to the directory name but is typically not identical. (This
is not quite the same as the usual POSIX terminology.) These two is not quite the same as the usual POSIX terminology.) These two
names for the same entity are related by a syntactic transformation. names for the same entity are related by a syntactic transformation.

View file

@ -2920,7 +2920,7 @@ menu item.
@item :active @var{enable} @item :active @var{enable}
@var{enable} is an expression; if it evaluates to @code{nil}, the item @var{enable} is an expression; if it evaluates to @code{nil}, the item
is make unselectable.. @code{:enable} is an alias for @code{:active}. is made unselectable. @code{:enable} is an alias for @code{:active}.
@item :visible @var{include} @item :visible @var{include}
@var{include} is an expression; if it evaluates to @code{nil}, the @var{include} is an expression; if it evaluates to @code{nil}, the

View file

@ -2239,9 +2239,10 @@ This function asks the user a series of questions, reading a
single-character answer in the echo area for each one. single-character answer in the echo area for each one.
The value of @var{list} specifies the objects to ask questions about. The value of @var{list} specifies the objects to ask questions about.
It should be either a list of objects or a generator function. If it is It should be either a list of objects or a generator function. If it
a function, it should expect no arguments, and should return either the is a function, it will be called with no arguments, and should return
next object to ask about, or @code{nil}, meaning to stop asking questions. either the next object to ask about, or @code{nil}, meaning to stop
asking questions.
The argument @var{prompter} specifies how to ask each question. If The argument @var{prompter} specifies how to ask each question. If
@var{prompter} is a string, the question text is computed like this: @var{prompter} is a string, the question text is computed like this:
@ -2252,19 +2253,20 @@ The argument @var{prompter} specifies how to ask each question. If
@noindent @noindent
where @var{object} is the next object to ask about (as obtained from where @var{object} is the next object to ask about (as obtained from
@var{list}). @var{list}). @xref{Formatting Strings}, for more information about
@code{format}.
If not a string, @var{prompter} should be a function of one argument If @var{prompter} is not a string, it should be a function of one
(the next object to ask about) and should return the question text. If argument (the object to ask about) and should return the question text
the value is a string, that is the question to ask the user. The for that object. If the value @var{prompter} returns is a string,
function can also return @code{t}, meaning do act on this object (and that is the question to ask the user. The function can also return
don't ask the user), or @code{nil}, meaning ignore this object (and don't @code{t}, meaning to act on this object without asking the user, or
ask the user). @code{nil}, which means to silently ignore this object.
The argument @var{actor} says how to act on the answers that the user The argument @var{actor} says how to act on the objects for which the
gives. It should be a function of one argument, and it is called with user answers yes. It should be a function of one argument, and will
each object that the user says yes for. Its argument is always an be called with each object from @var{list} for which the user answers
object obtained from @var{list}. yes.
If the argument @var{help} is given, it should be a list of this form: If the argument @var{help} is given, it should be a list of this form:
@ -2274,34 +2276,49 @@ If the argument @var{help} is given, it should be a list of this form:
@noindent @noindent
where @var{singular} is a string containing a singular noun that where @var{singular} is a string containing a singular noun that
describes the objects conceptually being acted on, @var{plural} is the describes a single object to be acted on, @var{plural} is the
corresponding plural noun, and @var{action} is a transitive verb corresponding plural noun, and @var{action} is a transitive verb
describing what @var{actor} does. describing what @var{actor} does with the objects.
If you don't specify @var{help}, the default is @code{("object" If you don't specify @var{help}, it defaults to the list
"objects" "act on")}. @w{@code{("object" "objects" "act on")}}.
Each time a question is asked, the user may enter @kbd{y}, @kbd{Y}, or Each time a question is asked, the user can answer as follows:
@key{SPC} to act on that object; @kbd{n}, @kbd{N}, or @key{DEL} to skip
that object; @kbd{!} to act on all following objects; @key{ESC} or @table @asis
@kbd{q} to exit (skip all following objects); @kbd{.} (period) to act on @item @kbd{y}, @kbd{Y}, or @kbd{@key{SPC}}
the current object and then exit; or @kbd{C-h} to get help. These are act on the object
the same answers that @code{query-replace} accepts. The keymap @item @kbd{n}, @kbd{N}, or @kbd{@key{DEL}}
@code{query-replace-map} defines their meaning for @code{map-y-or-n-p} skip the object
as well as for @code{query-replace}; see @ref{Search and Replace}. @item @kbd{!}
act on all the following objects
@item @kbd{@key{ESC}} or @kbd{q}
exit (skip all following objects)
@item @kbd{.} (period)
act on the object and then exit
@item @kbd{C-h}
get help
@end table
@noindent
These are the same answers that @code{query-replace} accepts. The
keymap @code{query-replace-map} defines their meaning for
@code{map-y-or-n-p} as well as for @code{query-replace}; see
@ref{Search and Replace}.
You can use @var{action-alist} to specify additional possible answers You can use @var{action-alist} to specify additional possible answers
and what they mean. It is an alist of elements of the form and what they mean. If provided, @var{action-alist} should be an
@code{(@var{char} @var{function} @var{help})}, each of which defines one alist whose elements are of the form @w{@code{(@var{char}
additional answer. In this element, @var{char} is a character (the @var{function} @var{help})}}. Each of the alist elements defines one
additional answer. In each element, @var{char} is a character (the
answer); @var{function} is a function of one argument (an object from answer); @var{function} is a function of one argument (an object from
@var{list}); @var{help} is a string. @var{list}); and @var{help} is a string. When the user responds with
@var{char}, @code{map-y-or-n-p} calls @var{function}. If it returns
When the user responds with @var{char}, @code{map-y-or-n-p} calls non-@code{nil}, the object is considered to have been acted upon, and
@var{function}. If it returns non-@code{nil}, the object is considered @code{map-y-or-n-p} advances to the next object in @var{list}. If it
acted upon, and @code{map-y-or-n-p} advances to the next object in returns @code{nil}, the prompt is repeated for the same object. If
@var{list}. If it returns @code{nil}, the prompt is repeated for the the user requests help, the text in @var{help} is used to describe
same object. these additional answers.
Normally, @code{map-y-or-n-p} binds @code{cursor-in-echo-area} while Normally, @code{map-y-or-n-p} binds @code{cursor-in-echo-area} while
prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it

View file

@ -2084,14 +2084,15 @@ This clause also accepts optional @samp{from @var{pos}} and
@samp{to @var{pos}} terms, limiting the clause to overlays which @samp{to @var{pos}} terms, limiting the clause to overlays which
overlap the specified region. overlap the specified region.
@item for @var{var} being the intervals [of @var{buffer}] @dots{} @item for @var{var} being the intervals [of @var{object}] @dots{}
This clause iterates over all intervals of a buffer with constant This clause iterates over all intervals of a buffer or string with
text properties. The variable @var{var} will be bound to conses constant text properties. The variable @var{var} will be bound to
of start and end positions, where one start position is always equal conses of start and end positions, where one start position is always
to the previous end position. The clause allows @code{of}, equal to the previous end position. The clause allows @code{of},
@code{from}, @code{to}, and @code{property} terms, where the latter @code{from}, @code{to}, and @code{property} terms, where the latter
term restricts the search to just the specified property. The term restricts the search to just the specified property. The
@code{of} term may specify either a buffer or a string. @code{of} term may specify either a buffer or a string. @xref{Text
Properties,,,elisp}.
@item for @var{var} being the frames @item for @var{var} being the frames
This clause iterates over all Emacs frames. The clause @code{screens} is This clause iterates over all Emacs frames. The clause @code{screens} is
@ -2238,7 +2239,7 @@ were non-@code{nil}, the loop returns @code{t}:
@item never @var{condition} @item never @var{condition}
This clause is like @code{always}, except that the loop returns This clause is like @code{always}, except that the loop returns
@code{t} if any conditions were false, or @code{nil} otherwise. @code{t} if all conditions were false, or @code{nil} otherwise.
@item thereis @var{condition} @item thereis @var{condition}
This clause stops the loop when the specified form is non-@code{nil}; This clause stops the loop when the specified form is non-@code{nil};

View file

@ -38,46 +38,62 @@
(defun map-y-or-n-p (prompter actor list &optional help action-alist (defun map-y-or-n-p (prompter actor list &optional help action-alist
no-cursor-in-echo-area) no-cursor-in-echo-area)
"Ask a series of boolean questions. "Ask a boolean question per PROMPTER for each object in LIST, then call ACTOR.
Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
LIST is a list of objects, or a function of no arguments to return the next LIST is a list of objects, or a function of no arguments to return the next
object or nil. object; when it returns nil, the list of objects is considered exhausted.
If PROMPTER is a string, the prompt is \(format PROMPTER OBJECT). If not If PROMPTER is a string, it should be a format string to be used to format
a string, PROMPTER is a function of one arg (an object from LIST), which the question as \(format PROMPTER OBJECT).
returns a string to be used as the prompt for that object. If the return If PROMPTER is not a string, it should be a function of one argument, an
value is not a string, it may be nil to ignore the object or non-nil to act object from LIST, which returns a string to be used as the question for
on the object without asking the user. that object. If the function's return value is not a string, it may be
nil to ignore the object, or non-nil to act on the object with ACTOR
without asking the user.
ACTOR is a function of one arg (an object from LIST), ACTOR is a function of one argument, an object from LIST,
which gets called with each object that the user answers `yes' for. which gets called with each object for which the user answers `yes'
to the question presented by PROMPTER.
If HELP is given, it is a list (OBJECT OBJECTS ACTION), The user's answers to the questions may be one of the following:
where OBJECT is a string giving the singular noun for an elt of LIST;
OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
verb describing ACTOR. The default is \(\"object\" \"objects\" \"act on\").
At the prompts, the user may enter y, Y, or SPC to act on that object; - y, Y, or SPC to act on that object;
n, N, or DEL to skip that object; ! to act on all following objects; - n, N, or DEL to skip that object;
ESC or q to exit (skip all following objects); . (period) to act on the - ! to act on all following objects;
current object and then exit; or \\[help-command] to get help. - ESC or q to exit (skip all following objects);
- . (period) to act on the current object and then exit; or
- \\[help-command] to get help.
If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys HELP provides information for displaying help when the user
that will be accepted. KEY is a character; FUNCTION is a function of one types \\[help-command]. If HELP is given, it should be a list of
arg (an object from LIST); HELP is a string. When the user hits KEY, the form (OBJECT OBJECTS ACTION), where OBJECT is a string giving
FUNCTION is called. If it returns non-nil, the object is considered the singular noun describing an element of LIST; OBJECTS is the
\"acted upon\", and the next object from LIST is processed. If it returns plural noun describing several elements of LIST, and ACTION is a
nil, the prompt is repeated for the same object. transitive verb describing action by ACTOR on one or more elements
of LIST. If HELP is omitted or nil, it defaults
to \(\"object\" \"objects\" \"act on\").
Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set If ACTION-ALIST is given, it is an alist specifying additional keys
`cursor-in-echo-area' while prompting. that will be accepted as an answer to the questions. Each element
of the alist has the form (KEY FUNCTION HELP), where KEY is a character;
FUNCTION is a function of one argument (an object from LIST); and HELP
is a string. When the user presses KEY, FUNCTION is called; if it
returns non-nil, the object is considered to have been \"acted upon\",
and `map-y-or-n-p' proceeeds to the next object from LIST. If
FUNCTION returns nil, the prompt is re-issued for the same object: this
comes in handy if FUNCTION produces some display that will allow the
user to make an intelligent decision whether the object in question
should be acted upon. If the user types \\[help-command], the string
given by HELP is used to describe the effect of KEY.
Optional argument NO-CURSOR-IN-ECHO-AREA, if non-nil, means not to set
`cursor-in-echo-area' while prompting with the questions.
This function uses `query-replace-map' to define the standard responses, This function uses `query-replace-map' to define the standard responses,
but not all of the responses which `query-replace' understands but only some of the responses which `query-replace' understands
are meaningful here. are meaningful here, as described above.
Returns the number of actions taken." The function's value is the number of actions taken."
(let* ((actions 0) (let* ((actions 0)
(msg (current-message)) (msg (current-message))
user-keys mouse-event map prompt char elt def user-keys mouse-event map prompt char elt def

View file

@ -49,10 +49,12 @@ A value of nil means that any change in indentation starts a new paragraph."
(defcustom fill-separate-heterogeneous-words-with-space nil (defcustom fill-separate-heterogeneous-words-with-space nil
"Non-nil means to use a space to separate words of a different kind. "Non-nil means to use a space to separate words of a different kind.
This will be done with a word in the end of a line and a word in For example, when an English word at the end of a line and a CJK word
the beginning of the next line when concatenating them for at the beginning of the next line are joined into a single line, they
filling those lines. Whether to use a space depends on how the will be separated by a space if this variable is non-nil.
words are categorized." Whether to use a space to separate such words also depends on the entry
in `fill-nospace-between-words-table' for the characters before and
after the newline."
:type 'boolean :type 'boolean
:version "26.1") :version "26.1")