[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 375dac936fc: Merge from origin/emacs-29
|
From: |
Eli Zaretskii |
|
Subject: |
master 375dac936fc: Merge from origin/emacs-29 |
|
Date: |
Sat, 8 Jul 2023 05:46:41 -0400 (EDT) |
branch: master
commit 375dac936fcca902874ecfd1c57b713581641725
Merge: aad13e61dbf 600b90ed568
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Merge from origin/emacs-29
600b90ed568 Mark failing icalendar test as unstable (bug#56241)
f8a918c9778 ; * src/coding.c (Fcoding_system_put): Improve doc string.
40f84e906f6 ; * doc/lispref/keymaps.texi (Key Binding Commands): Fix ...
502a7800319 ; Improve documentation of 'vertical-motion' in ELisp manual
0d90873fa41 ; * src/indent.c (Fvertical_motion): Doc fix.
9b38773a20b ; * lisp/dired.el (dired-no-confirm): Doc fix. (Bug#64493)
a30ebe7a556 ; Improve documentation of key-binding commands
c3fefb2b3ae Improve natnump shortdoc
244d4c837ab correct info documentation of benchmark-call
67def1f5502 * lisp/progmodes/grep.el (rgrep): Fix docstring.
8da2091362d ; Fix documentation of minibuffer-completion commands
aa030698cef ; Fix typos in documented names of keymap-* functions
a9b46bb25df Include a help-echo for flymake's modeline counters
37ed3d15f38 Avoid errors in completion due to 'completion-regexp-list'
15ff8761777 ; * lisp/register.el (register-val-describe): Doc fix.
fe7b909c16c ; Fix two typos in recent changes in the manual
7a74b8c3277 C Mode: Don't fontify foo globally as type due to "struct...
823bf6bdb1a * lisp/rect.el (rectangle--duplicate-right): Fix rectangl...
e339d0080d3 ; * test/lisp/misc-tests.el (ert): require misc to avoid ...
# Conflicts:
# lisp/rect.el
---
doc/emacs/mini.texi | 21 +++++++++----
doc/lispref/debugging.texi | 6 ++--
doc/lispref/keymaps.texi | 15 +++++++--
doc/lispref/minibuf.texi | 6 ++++
doc/lispref/positions.texi | 27 ++++++++++------
doc/lispref/text.texi | 2 +-
lisp/dired.el | 19 ++++++++----
lisp/emacs-lisp/shortdoc.el | 7 +++--
lisp/keymap.el | 58 +++++++++++++++++++++++------------
lisp/minibuffer.el | 3 +-
lisp/progmodes/cc-fonts.el | 2 +-
lisp/progmodes/cc-langs.el | 1 +
lisp/progmodes/flymake.el | 6 ++++
lisp/progmodes/grep.el | 7 +++--
lisp/register.el | 6 ++--
src/coding.c | 13 +++++++-
src/indent.c | 37 ++++++++++++++--------
src/minibuf.c | 7 ++++-
test/lisp/calendar/icalendar-tests.el | 3 ++
19 files changed, 170 insertions(+), 76 deletions(-)
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index d380ba7ef4b..87546aadfde 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -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
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index ea11d2d8d9c..169e3ac37d3 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -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
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index 6d07ad5be2c..9e36d6716b9 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -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,
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 78bd559c807..a861b8e910b 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -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
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index a308f2dfc4e..c2c2de80a7f 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -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.
-
-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.
+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, @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
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index a61889fc508..bfd81662292 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -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
diff --git a/lisp/dired.el b/lisp/dired.el
index b4cfaa1842f..44df4621d6f 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -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)
diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el
index f5897385262..e23db8e999c 100644
--- a/lisp/emacs-lisp/shortdoc.el
+++ b/lisp/emacs-lisp/shortdoc.el
@@ -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)))
diff --git a/lisp/keymap.el b/lisp/keymap.el
index dccc0a3cd31..cd06b830e0a 100644
--- a/lisp/keymap.el
+++ b/lisp/keymap.el
@@ -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
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 5e86d265dd3..186a4753df1 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -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))
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 5d5ada4c99d..6e5ee28c4ec 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -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 "\\<\\("
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 4e2ae5d85a6..3d0ad9984fa 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -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)
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index f03b9ab56a0..3f881ce0cf7 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -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
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 82e9c5d8edf..5f9da352f77 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -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)
diff --git a/lisp/register.el b/lisp/register.el
index 56ab089efb7..ca6de450993 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -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)))
diff --git a/src/coding.c b/src/coding.c
index f014749c4ea..899f8fc7b4d 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -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;
diff --git a/src/indent.c b/src/indent.c
index c3cbc49c81b..eda85f2e94d 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -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;
diff --git a/src/minibuf.c b/src/minibuf.c
index 6e54d8c3ba5..58adde1bf66 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -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",
diff --git a/test/lisp/calendar/icalendar-tests.el
b/test/lisp/calendar/icalendar-tests.el
index 27076f5ce1f..9071607005d 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -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