Merge from origin/emacs-29

600b90ed56 Mark failing icalendar test as unstable (bug#56241)
f8a918c977 ; * src/coding.c (Fcoding_system_put): Improve doc string.
40f84e906f ; * doc/lispref/keymaps.texi (Key Binding Commands): Fix ...
502a780031 ; Improve documentation of 'vertical-motion' in ELisp manual
0d90873fa4 ; * src/indent.c (Fvertical_motion): Doc fix.
9b38773a20 ; * lisp/dired.el (dired-no-confirm): Doc fix.  (Bug#64493)
a30ebe7a55 ; Improve documentation of key-binding commands
c3fefb2b3a Improve natnump shortdoc
244d4c837a correct info documentation of benchmark-call
67def1f550 * lisp/progmodes/grep.el (rgrep): Fix docstring.
8da2091362 ; Fix documentation of minibuffer-completion commands
aa030698ce ; Fix typos in documented names of keymap-* functions
a9b46bb25d Include a help-echo for flymake's modeline counters
37ed3d15f3 Avoid errors in completion due to 'completion-regexp-list'
15ff876177 ; * lisp/register.el (register-val-describe): Doc fix.
fe7b909c16 ; Fix two typos in recent changes in the manual
7a74b8c327 C Mode: Don't fontify foo globally as type due to "struct...
823bf6bdb1 * lisp/rect.el (rectangle--duplicate-right): Fix rectangl...
e339d0080d ; * test/lisp/misc-tests.el (ert): require misc to avoid ...

# Conflicts:
#	lisp/rect.el
This commit is contained in:
Eli Zaretskii 2023-07-08 05:46:10 -04:00
commit 375dac936f
19 changed files with 169 additions and 75 deletions

View file

@ -383,18 +383,27 @@ used with the completion list:
@table @kbd
@vindex minibuffer-completion-auto-choose
@kindex M-DOWN
@kindex M-UP
@kindex M-RET
@findex minibuffer-next-completion
@findex minibuffer-previous-completion
@findex minibuffer-choose-completion
@item M-@key{DOWN}
@itemx M-@key{UP}
While in the minibuffer, these keys navigate through the completions
displayed in the completions buffer. When
While in the minibuffer, @kbd{M-@key{DOWN}}
(@code{minibuffer-next-completion} and @kbd{M-@key{UP}}
(@code{minibuffer-previous-completion}) navigate through the
completions and displayed in the completions buffer. When
@code{minibuffer-completion-auto-choose} is non-@code{nil} (which is
the default), using these commands also inserts the current completion
candidate into the minibuffer. If
@code{minibuffer-completion-auto-choose} is @code{nil}, you can use
the @kbd{M-@key{RET}} command to insert the completion candidates into
the minibuffer. By default, that exits the minibuffer, but with a
prefix argument, @kbd{C-u M-@key{RET}} inserts the currently active
candidate without exiting the minibuffer.
the @kbd{M-@key{RET}} command (@code{minibuffer-choose-completion}) to
insert the completion candidates into the minibuffer. By default,
that exits the minibuffer, but with a prefix argument, @kbd{C-u
M-@key{RET}} inserts the currently active candidate without exiting
the minibuffer.
@findex switch-to-completions
@item M-v

View file

@ -1102,9 +1102,9 @@ functions written in Lisp, it cannot profile Emacs primitives.
You can measure the time it takes to evaluate individual Emacs Lisp
forms using the @file{benchmark} library. See the function
@code{benchmark-call} as well as the macros @code{benchmark-run},
@code{benchmark-run-compiled}, @code{benchmark-progn} and
@code{benchmark-call} in @file{benchmark.el}. You can also use the
@code{benchmark} command for timing forms interactively.
@code{benchmark-run-compiled}, and @code{benchmark-progn} in
@file{benchmark.el}. You can also use the @code{benchmark} command
for timing forms interactively.
@c Not worth putting in the printed manual.
@ifnottex

View file

@ -1338,7 +1338,7 @@ Used in keymaps to undefine keys. It calls @code{ding}, but does
not cause an error.
@end deffn
@defun keymap-local-binding key &optional accept-defaults
@defun keymap-local-lookup key &optional accept-defaults
This function returns the binding for @var{key} in the current
local keymap, or @code{nil} if it is undefined there.
@ -1346,7 +1346,7 @@ The argument @var{accept-defaults} controls checking for default bindings,
as in @code{keymap-lookup} (above).
@end defun
@defun keymap-global-binding key &optional accept-defaults
@defun keymap-global-lookup key &optional accept-defaults
This function returns the binding for command @var{key} in the
current global keymap, or @code{nil} if it is undefined there.
@ -2070,7 +2070,16 @@ problematic suffixes/prefixes are @kbd{@key{ESC}}, @kbd{M-O} (which is really
@section Commands for Binding Keys
This section describes some convenient interactive interfaces for
changing key bindings. They work by calling @code{keymap-set}.
changing key bindings. They work by calling @code{keymap-set}
(@pxref{Changing Key Bindings}). In interactive use, these commands
prompt for the argument @var{key} and expect the user to type a valid
key sequence; they also prompt for the @var{binding} of the key
sequence, and expect the name of a command (i.e., a symbol that
satisfies @code{commandp}, @pxref{Interactive Call}). When called
from Lisp, these commands expect @var{key} to be a string that
satisfies @code{key-valid-p} (@pxref{Key Sequences}), and
@var{binding} to be any Lisp object that is meaningful in a keymap
(@pxref{Key Lookup}).
People often use @code{keymap-global-set} in their init files
(@pxref{Init File}) for simple customization. For example,

View file

@ -1052,6 +1052,12 @@ This is a list of regular expressions. The completion functions only
consider a completion acceptable if it matches all regular expressions
in this list, with @code{case-fold-search} (@pxref{Searching and Case})
bound to the value of @code{completion-ignore-case}.
Do not set this variable to a non-@code{nil} value globally, as that
is not safe and will probably cause errors in completion commands.
This variable should be only let-bound to non-@code{nil} values around
calls to basic completion functions: @code{try-completion},
@code{test-completion}, and @code{all-completions}.
@end defvar
@defmac lazy-completion-table var fun

View file

@ -560,16 +560,23 @@ improve the performance of your code. @xref{Truncation, cache-long-scans}.
@defun vertical-motion count &optional window cur-col
This function moves point to the start of the screen line @var{count}
screen lines down from the screen line containing point. If @var{count}
is negative, it moves up instead.
is negative, it moves up instead. If @var{count} is zero, point moves
to the visual start of the current screen line.
The @var{count} argument can be a cons cell, @code{(@var{cols}
. @var{lines})}, instead of an integer. Then the function moves by
@var{lines} screen lines, and puts point @var{cols} columns from the
visual start of that screen line. Note that @var{cols} are counted
from the @emph{visual} start of the line; if the window is scrolled
horizontally (@pxref{Horizontal Scrolling}), the column on which point
will end is in addition to the number of columns by which the text is
scrolled.
The @var{count} argument can be a cons cell, @w{@code{(@var{cols}
. @var{lines})}}, instead of an integer. Then the function moves by
@var{lines} screen lines, as described for @var{count} above, and puts
point @var{cols} columns from the visual start of that screen line.
The value of @var{cols} can be a float, and is interpreted in units of
the frame's canonical character width (@pxref{Frame Font}); this
allows specifying accurate horizontal position of point when the
target screen line uses variable fonts. Note that @var{cols} are
counted from the @emph{visual} start of the line; if the window is
scrolled horizontally (@pxref{Horizontal Scrolling}), the column where
point will end is in addition to the number of columns by which the
text is scrolled, and if the target line is a continuation line, its
leftmost column is considered column zero (unlike column-oriented
functions, @pxref{Columns}).
The return value is the number of screen lines over which point was
moved. The value may be less in absolute value than @var{count} if

View file

@ -3424,7 +3424,7 @@ If @var{not-current} is non-@code{nil}, then if point is already in a
region where we have a property match, skip past that region and find
the next region instead.
The @code{prop-match} structure has the following accessor functionss:
The @code{prop-match} structure has the following accessor functions:
@code{prop-match-beginning} (the start of the match),
@code{prop-match-end} (the end of the match), and
@code{prop-match-value} (the value of @var{property} at the start of

View file

@ -3892,13 +3892,20 @@ or \"* [3 files]\"."
(format "%c [%d files]" dired-marker-char count)))))
(defcustom dired-no-confirm nil
"A list of symbols for commands Dired should not confirm, or t.
Command symbols are `byte-compile', `chgrp', `chmod', `chown', `compress',
`copy', `delete', `hardlink', `load', `move', `print', `shell', `symlink',
`touch' and `uncompress'.
If t, confirmation is never needed."
"Dired commands for which Dired should not popup list of affected files, or t.
If non-nil, Dired will not pop up the list of files to be affected by
some Dired commands, when asking for confirmation. (Dired will still
ask for confirmation, just without showing the affected files.)
If the value is t, the list of affected files is never popped up.
The value can also be a list of command symbols: then the list of the
affected files will not be popped up only for the corresponding Dired
commands. Recognized command symbols are `byte-compile', `chgrp',
`chmod', `chown', `compress', `copy', `delete', `hardlink', `load',
`move', `print', `shell', `symlink', `touch' and `uncompress'."
:group 'dired
:type '(choice (const :tag "Confirmation never needed" t)
:type '(choice (const :tag "Affected files never shown" t)
(set (const byte-compile) (const chgrp)
(const chmod) (const chown) (const compress)
(const copy) (const delete) (const hardlink)

View file

@ -1251,6 +1251,10 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:eval (>= 3 2 2 1))
(zerop
:eval (zerop 0))
(natnump
:eval (natnump -1)
:eval (natnump 0)
:eval (natnump 23))
(cl-plusp
:eval (cl-plusp 0)
:eval (cl-plusp 1))
@ -1261,9 +1265,6 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:eval (cl-oddp 3))
(cl-evenp
:eval (cl-evenp 6))
(natnump
:eval (natnump -1)
:eval (natnump 23))
(bignump
:eval (bignump 4)
:eval (bignump (expt 2 90)))

View file

@ -40,11 +40,12 @@
(defun keymap-set (keymap key definition)
"Set KEY to DEFINITION in KEYMAP.
KEY is a string that satisfies `key-valid-p'.
If DEFINITION is a string, it must also satisfy `key-valid-p'.
DEFINITION is anything that can be a key's definition:
nil (means key is undefined in this keymap),
a command (a Lisp function suitable for interactive calling),
a string (treated as a keyboard macro),
a string (treated as a keyboard macro or a sequence of input events),
a keymap (to define a prefix key),
a symbol (when the key is looked up, the symbol will stand for its
function definition, which should at that time be one of the above,
@ -67,10 +68,17 @@ DEFINITION is anything that can be a key's definition:
(defun keymap-global-set (key command &optional interactive)
"Give KEY a global binding as COMMAND.
COMMAND is the command definition to use; usually it is
a symbol naming an interactively-callable function.
When called interactively, KEY is a key sequence. When called from
Lisp, KEY is a string that must satisfy `key-valid-p'.
KEY is a string that satisfies `key-valid-p'.
COMMAND is the command definition to use. When called interactively,
this function prompts for COMMAND and accepts only names of known
commands, i.e., symbols that satisfy the `commandp' predicate. When
called from Lisp, COMMAND can be anything that `keymap-set' accepts
as its DEFINITION argument.
If COMMAND is a string (which can only happen when this function is
callled from Lisp), it must satisfy `key-valid-p'.
Note that if KEY has a local binding in the current buffer,
that local binding will continue to shadow any global binding
@ -84,12 +92,19 @@ that you make with this function."
(defun keymap-local-set (key command &optional interactive)
"Give KEY a local binding as COMMAND.
COMMAND is the command definition to use; usually it is
a symbol naming an interactively-callable function.
When called interactively, KEY is a key sequence. When called from
Lisp, KEY is a string that must satisfy `key-valid-p'.
KEY is a string that satisfies `key-valid-p'.
COMMAND is the command definition to use. When called interactively,
this function prompts for COMMAND and accepts only names of known
commands, i.e., symbols that satisfy the `commandp' predicate. When
called from Lisp, COMMAND can be anything that `keymap-set' accepts
as its DEFINITION argument.
The binding goes in the current buffer's local map, which in most
If COMMAND is a string (which can only happen when this function is
callled from Lisp), it must satisfy `key-valid-p'.
The binding goes in the current buffer's local keymap, which in most
cases is shared with all other buffers in the same major mode."
(declare (compiler-macro (lambda (form) (keymap--compile-check key) form))
(advertised-calling-convention (key command) "29.1"))
@ -103,10 +118,11 @@ cases is shared with all other buffers in the same major mode."
(defun keymap-global-unset (key &optional remove)
"Remove global binding of KEY (if any).
KEY is a string that satisfies `key-valid-p'.
When called interactively, KEY is a key sequence. When called from
Lisp, KEY is a string that satisfies `key-valid-p'.
If REMOVE (interactively, the prefix arg), remove the binding
instead of unsetting it. See `keymap-unset' for details."
If REMOVE is non-nil (interactively, the prefix arg), remove the
binding instead of unsetting it. See `keymap-unset' for details."
(declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
(interactive
(list (key-description (read-key-sequence "Unset key globally: "))
@ -115,10 +131,11 @@ instead of unsetting it. See `keymap-unset' for details."
(defun keymap-local-unset (key &optional remove)
"Remove local binding of KEY (if any).
KEY is a string that satisfies `key-valid-p'.
When called interactively, KEY is a key sequence. When called from
Lisp, KEY is a string that satisfies `key-valid-p'.
If REMOVE (interactively, the prefix arg), remove the binding
instead of unsetting it. See `keymap-unset' for details."
If REMOVE is non-nil (interactively, the prefix arg), remove the
binding instead of unsetting it. See `keymap-unset' for details."
(declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
(interactive
(list (key-description (read-key-sequence "Unset key locally: "))
@ -130,11 +147,11 @@ instead of unsetting it. See `keymap-unset' for details."
"Remove key sequence KEY from KEYMAP.
KEY is a string that satisfies `key-valid-p'.
If REMOVE, remove the binding instead of unsetting it. This only
makes a difference when there's a parent keymap. When unsetting
a key in a child map, it will still shadow the same key in the
parent keymap. Removing the binding will allow the key in the
parent keymap to be used."
If REMOVE is non-nil, remove the binding instead of unsetting it.
This only makes a difference when there's a parent keymap. When
unsetting a key in a child map, it will still shadow the same key
in the parent keymap. Removing the binding will allow the key in
the parent keymap to be used."
(declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
(keymap--check key)
(define-key keymap (key-parse key) nil remove))
@ -201,7 +218,8 @@ a menu, so this function is not useful for non-menu keymaps."
(defun key-parse (keys)
"Convert KEYS to the internal Emacs key representation.
See `kbd' for a descripion of KEYS."
KEYS should be a string describing a key sequence in the format
returned by \\[describe-key] (`describe-key')."
(declare (pure t) (side-effect-free t))
;; A pure function is expected to preserve the match data.
(save-match-data

View file

@ -4027,7 +4027,8 @@ the same set of elements."
(setq ccs (nreverse ccs))
(let* ((prefix (try-completion fixed comps))
(unique (or (and (eq prefix t) (setq prefix fixed))
(eq t (try-completion prefix comps)))))
(and (stringp prefix)
(eq t (try-completion prefix comps))))))
(unless (or (eq elem 'prefix)
(equal prefix ""))
(push prefix res))

View file

@ -2308,7 +2308,7 @@ on level 2 only and so aren't combined with `c-complex-decl-matchers'."
(c-forward-syntactic-ws))
(goto-char (match-end ,type-match))))))))
;; Fontify special declarations that lacks a type.
;; Fontify special declarations that lack a type.
,@(when (c-lang-const c-typeless-decl-kwds)
`((,(c-make-font-lock-search-function
(concat "\\<\\("

View file

@ -2616,6 +2616,7 @@ will be handled."
;; {...}").
t (append (c-lang-const c-class-decl-kwds)
(c-lang-const c-brace-list-decl-kwds))
c nil
;; Note: "manages" for CORBA CIDL clashes with its presence on
;; `c-type-list-kwds' for IDL.
idl (append (c-lang-const c-typeless-decl-kwds)

View file

@ -1592,6 +1592,12 @@ TYPE is usually keyword `:error', `:warning' or `:note'."
,(format "%d" count)
face ,face
mouse-face mode-line-highlight
help-echo ,(format "Number of %s; scroll mouse to view."
(cond
((eq type :error) "errors")
((eq type :warning) "warnings")
((eq type :note) "notes")
(t (format "%s diagnostics" type))))
keymap
,(let ((map (make-sparse-keymap)))
(define-key map (vector 'mode-line

View file

@ -1302,9 +1302,10 @@ to specify a command to run.
If CONFIRM is non-nil, the user will be given an opportunity to edit the
command before it's run.
Interactively, the user can use the \\`M-c' command while entering
the regexp to indicate whether the grep should be case sensitive
or not."
Interactively, the user can use \
\\<read-regexp-map>\\[read-regexp-toggle-case-fold] \
while entering the regexp
to indicate whether the grep should be case sensitive or not."
(interactive
(progn
(grep-compute-defaults)

View file

@ -126,7 +126,7 @@ See the documentation of the variable `register-alist' for possible VALUEs."
(defvar register-preview-function #'register-preview-default
"Function to format a register for previewing.
Called with one argument, a cons (NAME . CONTENTS) as found in `register-alist'.
The function should return a string, the description of teh argument.")
The function should return a string, the description of the argument.")
(defun register-preview (buffer &optional show-empty)
"Pop up a window showing the registers preview in BUFFER.
@ -380,9 +380,7 @@ Interactively, prompt for REGISTER using `register-read-with-preview'."
(cl-defgeneric register-val-describe (val verbose)
"Print description of register value VAL to `standard-output'.
Second argument VERBOSE is ignored, unless VAL is not one of the
supported kinds of register contents, in which case it is displayed
using `prin1'."
Second argument VERBOSE means produce a more detailed description."
(princ "Garbage:\n")
(if verbose (prin1 val)))

View file

@ -11452,7 +11452,18 @@ usage: (define-coding-system-internal ...) */)
DEFUN ("coding-system-put", Fcoding_system_put, Scoding_system_put,
3, 3, 0,
doc: /* Change value in CODING-SYSTEM's property list PROP to VAL. */)
doc: /* Change value of CODING-SYSTEM's property PROP to VAL.
The following properties, if set by this function, override the values
of the corresponding attributes set by `define-coding-system':
`:mnemonic', `:default-char', `:ascii-compatible-p'
`:decode-translation-table', `:encode-translation-table',
`:post-read-conversion', `:pre-write-conversion'
See `define-coding-system' for the description of these properties.
See `coding-system-get' and `coding-system-plist' for accessing the
property list of a coding-system. */)
(Lisp_Object coding_system, Lisp_Object prop, Lisp_Object val)
{
Lisp_Object spec, attrs;

View file

@ -2149,21 +2149,33 @@ If LINES is negative, this means moving up.
This function is an ordinary cursor motion function
which calculates the new position based on how text would be displayed.
The new position may be the start of a line,
or just the start of a continuation line.
or the start of a continuation line,
or the start of the visible portion of a horizontally-scrolled line.
The function returns number of screen lines moved over;
that usually equals LINES, but may be closer to zero
if beginning or end of buffer was reached.
that usually equals LINES, but may be closer to zero if
beginning or end of buffer was reached.
The optional second argument WINDOW specifies the window to use for
parameters such as width, horizontal scrolling, and so on.
The default is to use the selected window's parameters.
If LINES is zero, point will move to the first visible character on
the current screen line.
LINES can optionally take the form (COLS . LINES), in which case the
motion will not stop at the start of a screen line but COLS column
from the visual start of the line (if such exists on that line, that
is). If the line is scrolled horizontally, COLS is interpreted
visually, i.e., as addition to the columns of text beyond the left
edge of the window.
motion will stop at the COLSth column from the visual start of the
line (if such column exists on that line, that is). If the line is
scrolled horizontally, COLS is interpreted visually, i.e., as addition
to the columns of text beyond the left edge of the window.
If LINES is a cons cell, its car COLS can be a float, which allows
specifying an accurate position of point on a screen line that mixes
fonts or uses variable-pitch font: COLS is interpreted in units of the
canonical character width, and is internally converted to pixel units;
point will then stop at the position closest to that pixel coordinate.
The cdr of the cons, LINES, must be an integer; if it is zero, this
function moves point horizontally in the current screen line, to the
position specified by COLS.
The optional third argument CUR-COL specifies the horizontal
window-relative coordinate of point, in units of frame's canonical
@ -2171,11 +2183,10 @@ character width, where the function is invoked. If this argument is
omitted or nil, the function will determine the point coordinate by
going back to the beginning of the line.
`vertical-motion' always uses the current buffer,
regardless of which buffer is displayed in WINDOW.
This is consistent with other cursor motion functions
and makes it possible to use `vertical-motion' in any buffer,
whether or not it is currently displayed in some window. */)
`vertical-motion' always uses the current buffer, regardless of which
buffer is displayed in WINDOW. This is consistent with other cursor
motion functions and makes it possible to use `vertical-motion' in any
buffer, whether or not it is currently displayed in some window. */)
(Lisp_Object lines, Lisp_Object window, Lisp_Object cur_col)
{
struct it it;

View file

@ -2471,7 +2471,12 @@ The basic completion functions only consider a completion acceptable
if it matches all regular expressions in this list, with
`case-fold-search' bound to the value of `completion-ignore-case'.
See Info node `(elisp)Basic Completion', for a description of these
functions. */);
functions.
Do not set this variable to a non-nil value globally, as that is not
safe and will probably cause errors in completion commands. This
variable should be only let-bound to non-nil values around calls to
basic completion functions like `try-completion' and `all-completions'. */);
Vcompletion_regexp_list = Qnil;
DEFVAR_BOOL ("minibuffer-allow-text-properties",

View file

@ -999,6 +999,9 @@ END:VALARM
(ert-deftest icalendar-export-bug-56241-dotted-pair ()
"See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=56241#5"
;; This test started failing early July 2023 without any apparent change
;; to the underlying code, so is probably sensitive to the current date.
:tags '(:unstable)
(let ((icalendar-export-sexp-enumeration-days 366))
(mapc (lambda (diary-string)
(should (string= "" (icalendar-tests--get-error-string-for-export