From 558b03a958839a53bac761b20c800b6b6cf43468 Mon Sep 17 00:00:00 2001
From: Dmitry Gutov
Date: Sun, 27 Feb 2022 15:28:04 +0200
Subject: [PATCH 001/466] Add explicit '--no-heading' for ripgrep
* lisp/progmodes/xref.el (xref-search-program-alist):
Add explicit '--no-heading' for ripgrep (bug#54177).
---
lisp/progmodes/xref.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 0ee7dd5cadfb..2fd5e192376a 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1626,7 +1626,7 @@ IGNORES is a list of glob patterns for files to ignore."
(ripgrep
.
;; '!*/' is there to filter out dirs (e.g. submodules).
- "xargs -0 rg --null -nH --no-messages -g '!*/' -e "
+ "xargs -0 rg --null -nH --no-heading --no-messages -g '!*/' -e "
))
"Associative list mapping program identifiers to command templates.
From 9bce4b67f1770e288a16b44478f1a6dfdc1fc177 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 27 Feb 2022 15:54:27 +0200
Subject: [PATCH 002/466] ; * lisp/help.el (with-help-window): Doc fix.
(Bug#54170)
---
lisp/help.el | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lisp/help.el b/lisp/help.el
index 55fc61172df7..fd331ac0d489 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1803,8 +1803,8 @@ Return VALUE."
;; window to an arbitrary buffer position.
(defmacro with-help-window (buffer-or-name &rest body)
"Evaluate BODY, send output to BUFFER-OR-NAME and show in a help window.
-This construct is like `with-temp-buffer-window' but unlike that
-puts the buffer specified by BUFFER-OR-NAME in `help-mode' and
+This construct is like `with-temp-buffer-window', which see, but unlike
+that, it puts the buffer specified by BUFFER-OR-NAME in `help-mode' and
displays a message about how to delete the help window when it's no
longer needed. The help window will be selected if
`help-window-select' is non-nil.
From e77fc8262ad73f30b1983f403262dce6f0e4cb09 Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Mon, 28 Feb 2022 00:11:01 -0500
Subject: [PATCH 003/466] Update to Org 9.5.2-22-g33543d
---
lisp/org/oc-basic.el | 20 ++++++++++++++------
lisp/org/ol.el | 2 +-
lisp/org/org-version.el | 2 +-
lisp/org/org.el | 10 +++++-----
4 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index d82406affb2a..81b7e4471fd3 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/oc-basic.el
@@ -178,21 +178,29 @@ Return a hash table with citation references as keys and fields alist as values.
" and ")))
('issued
;; Date are expressed as an array
- ;; (`date-parts') or a "string (`raw').
- ;; In both cases, extract the year and
- ;; associate it to `year' field, for
- ;; compatibility with BibTeX format.
+ ;; (`date-parts') or a "string (`raw'
+ ;; or `literal'). In both cases,
+ ;; extract the year and associate it
+ ;; to `year' field, for compatibility
+ ;; with BibTeX format.
(let ((date (or (alist-get 'date-parts value)
+ (alist-get 'literal value)
(alist-get 'raw value))))
(cons 'year
(cond
((consp date)
(caar date))
((stringp date)
- (car (split-string date "-")))
+ (replace-regexp-in-string
+ (rx
+ (minimal-match (zero-or-more anything))
+ (group-n 1 (repeat 4 digit))
+ (zero-or-more anything))
+ (rx (backref 1))
+ date))
(t
(error "Unknown CSL-JSON date format: %S"
- date))))))
+ value))))))
(_
(cons field value))))
item)
diff --git a/lisp/org/ol.el b/lisp/org/ol.el
index 2cba33ed952c..a03d85f618a1 100644
--- a/lisp/org/ol.el
+++ b/lisp/org/ol.el
@@ -183,7 +183,7 @@ link.
(defcustom org-link-descriptive t
"Non-nil means Org displays descriptive links.
-E.g. [[https://orgmode.org][Org website]] is be displayed as
+E.g. [[https://orgmode.org][Org website]] is displayed as
\"Org Website\", hiding the link itself and just displaying its
description. When set to nil, Org displays the full links
literally.
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 6a2aa8ca5baa..badf0e476952 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.2-17-gea6b74"))
+ (let ((org-git-version "release_9.5.2-22-g33543d"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 7ea8d65f3b90..d656a51591e6 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -17522,11 +17522,11 @@ this numeric value."
(interactive "r")
(let ((result ""))
(while (/= beg end)
- (when (get-char-property beg 'invisible)
- (setq beg (next-single-char-property-change beg 'invisible nil end)))
- (let ((next (next-single-char-property-change beg 'invisible nil end)))
- (setq result (concat result (buffer-substring beg next)))
- (setq beg next)))
+ (if (invisible-p beg)
+ (setq beg (next-single-char-property-change beg 'invisible nil end))
+ (let ((next (next-single-char-property-change beg 'invisible nil end)))
+ (setq result (concat result (buffer-substring beg next)))
+ (setq beg next))))
(setq deactivate-mark t)
(kill-new result)
(message "Visible strings have been copied to the kill ring.")))
From 6dbc3da2055610109c8e481e53f0b0287b201e58 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 28 Feb 2022 10:14:03 +0100
Subject: [PATCH 004/466] Fix :tag for eol in tab-first-completion
* lisp/indent.el (tab-first-completion): Fix the :tag description
(bug#54179).
---
lisp/indent.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/indent.el b/lisp/indent.el
index 48e5b309e487..071f46fd42a1 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -77,7 +77,7 @@ This variable has no effect unless `tab-always-indent' is `complete'."
:group 'indent
:type '(choice
(const :tag "Always complete" nil)
- (const :tag "Unless at the end of a line" eol)
+ (const :tag "Only complete at the end of a line" eol)
(const :tag "Unless looking at a word" word)
(const :tag "Unless at a word or parenthesis" word-or-paren)
(const :tag "Unless at a word, parenthesis, or punctuation."
From b8bc359bbfd36b3e281bdcba154ed74ca897d850 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Wed, 23 Feb 2022 11:29:56 -0800
Subject: [PATCH 005/466] Backport: Port pre-commit hook to Git 2.35.0
* build-aux/git-hooks/pre-commit: Use LC_ALL=C grep -E instead of
sane_egrep (removed in Git 2.35.0).
(cherry picked from commit b8a96f055624f86fe965a0d1b7b2495b2db80e63)
---
build-aux/git-hooks/pre-commit | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/build-aux/git-hooks/pre-commit b/build-aux/git-hooks/pre-commit
index a55004680fa1..49bf05f2d9fd 100755
--- a/build-aux/git-hooks/pre-commit
+++ b/build-aux/git-hooks/pre-commit
@@ -45,7 +45,9 @@ git_diff='git diff --cached --name-only --diff-filter=A'
# 'git diff' will backslash escape tabs and newlines, so we don't have
# to worry about word splitting here.
-$git_diff $head | sane_egrep 'ChangeLog|^-|/-|[^-+./_0-9A-Z_a-z]' | while IFS= read -r new_name; do
+$git_diff $head |
+LC_ALL=C grep -E 'ChangeLog|^-|/-|[^-+./_0-9A-Z_a-z]' |
+while IFS= read -r new_name; do
case $new_name in
-* | */-*)
echo "$new_name: File name component begins with '-'."
From 9e257aecc9a3456fb3d66596862d44030f7d76c8 Mon Sep 17 00:00:00 2001
From: Jim Porter
Date: Mon, 28 Feb 2022 09:31:22 -0800
Subject: [PATCH 006/466] Partially revert
b03f74e0f2a578b1580e8b1c368665850ee7f808
That commit regressed '$' forms in Eshell, due to a
limitation/bug in how 'eshell-do-eval' works. This fixes
bug#54190.
* lisp/eshell/esh-var.el (eshell-parse-variable-ref): Quote a lambda.
* test/lisp/eshell/eshell-tests.el (eshell-test/interp-temp-cmd):
New test.
---
lisp/eshell/esh-var.el | 8 ++++++--
test/lisp/eshell/eshell-tests.el | 4 ++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index 145a522516d6..081938b4e4a6 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -460,8 +460,12 @@ Possible options are:
(eshell-as-subcommand ,(eshell-parse-command cmd))
(ignore
(nconc eshell-this-command-hook
- (list (lambda ()
- (delete-file ,temp)))))
+ ;; Quote this lambda; it will be evaluated
+ ;; by `eshell-do-eval', which requires very
+ ;; particular forms in order to work
+ ;; properly. See bug#54190.
+ (list (function (lambda ()
+ (delete-file ,temp))))))
(quote ,temp)))
(goto-char (1+ end)))))))
((eq (char-after) ?\()
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index a9b1e2ab4e8f..fe4fba294fd7 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -130,6 +130,10 @@ e.g. \"{(+ 1 2)} 3\" => 3"
"Interpolate Lisp form evaluation"
(should (equal (eshell-test-command-result "+ $(+ 1 2) 3") 6)))
+(ert-deftest eshell-test/interp-temp-cmd ()
+ "Interpolate command result redirected to temp file"
+ (should (equal (eshell-test-command-result "cat $") "hi")))
+
(ert-deftest eshell-test/interp-concat ()
"Interpolate and concat command"
(should (equal (eshell-test-command-result "+ ${+ 1 2}3 3") 36)))
From 2c3d1b6bf41509bf0ba8995925fec9f20d8ed89d Mon Sep 17 00:00:00 2001
From: Jim Porter
Date: Sun, 27 Feb 2022 13:20:51 -0800
Subject: [PATCH 007/466] Improve/correct documentation about Eshell variable
expansion
* lisp/eshell/esh-var.el: Correct documentation comment.
(eshell-parse-variable-ref): Correct docstring.
* doc/misc/eshell.texi (Dollars Expansion): Add documentation for
$"var"/$'var' and $ syntaxes.
---
doc/misc/eshell.texi | 11 +++++++++++
lisp/eshell/esh-var.el | 15 ++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index 4f1d8c15da3b..662c96dc920a 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -583,6 +583,12 @@ of familiarity.
Expands to the value bound to @code{var}. This is the main way to use
variables in command invocations.
+@item $"var"
+@item $'var'
+Expands to the value bound to @code{var}. This is useful to
+disambiguate the variable name when concatenating it with another
+value, such as @samp{$"var"-suffix}.
+
@item $#var
Expands to the length of the value bound to @code{var}. Raises an error
if the value is not a sequence
@@ -597,6 +603,11 @@ it can be used in a string, such as @samp{/some/path/$(lisp).txt}.
Returns the output of @command{command}, which can be any valid Eshell
command invocation, and may even contain expansions.
+@item $
+As with @samp{$@{command@}}, evaluates the Eshell command invocation
+@command{command}, but writes the output to a temporary file and
+returns the file name.
+
@item $var[i]
Expands to the @code{i}th element of the value bound to @code{var}. If
the value is a string, it will be split at whitespace to make it a list.
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index 081938b4e4a6..1d5d85debad5 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -34,7 +34,8 @@
;;
;; "-" is a valid part of a variable name.
;;
-;; $-TOO
+;; $\"MYVAR\"-TOO
+;; $'MYVAR'-TOO
;;
;; Only "MYVAR" is part of the variable name in this case.
;;
@@ -55,6 +56,11 @@
;; Returns the value of an eshell subcommand. See the note above
;; regarding Lisp evaluations.
;;
+;; $
+;;
+;; Evaluates an eshell subcommand, redirecting the output to a
+;; temporary file, and returning the file name.
+;;
;; $ANYVAR[10]
;;
;; Return the 10th element of ANYVAR. If ANYVAR's value is a string,
@@ -426,9 +432,12 @@ variable.
Possible options are:
NAME an environment or Lisp variable value
- disambiguates the length of the name
+ \"LONG-NAME\" disambiguates the length of the name
+ 'LONG-NAME' as above
{COMMAND} result of command is variable's value
- (LISP-FORM) result of Lisp form is variable's value"
+ (LISP-FORM) result of Lisp form is variable's value
+ write the output of command to a temporary file;
+ result is the file name"
(cond
((eq (char-after) ?{)
(let ((end (eshell-find-delimiter ?\{ ?\})))
From 9dadcbe4297fdd52e2664e99fe693ba35a51eb57 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 1 Mar 2022 15:08:38 +0200
Subject: [PATCH 008/466] ; * doc/misc/eshell.texi (Dollars Expansion): Fix
markup.
---
doc/misc/eshell.texi | 57 ++++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index 662c96dc920a..f01023a1dca2 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -579,62 +579,63 @@ of familiarity.
@table @code
-@item $var
-Expands to the value bound to @code{var}. This is the main way to use
+@item $@var{var}
+Expands to the value bound to @var{var}. This is the main way to use
variables in command invocations.
-@item $"var"
-@item $'var'
-Expands to the value bound to @code{var}. This is useful to
+@item $"@var{var}"
+@item $'@var{var}'
+Expands to the value bound to @var{var}. This is useful to
disambiguate the variable name when concatenating it with another
-value, such as @samp{$"var"-suffix}.
+value, such as @samp{$"@var{var}"-suffix}.
-@item $#var
-Expands to the length of the value bound to @code{var}. Raises an error
+@item $#@var{var}
+Expands to the length of the value bound to @var{var}. Raises an error
if the value is not a sequence
(@pxref{Sequences Arrays Vectors, Sequences, , elisp, The Emacs Lisp Reference Manual}).
-@item $(lisp)
-Expands to the result of evaluating the S-expression @code{(lisp)}. On
-its own, this is identical to just @code{(lisp)}, but with the @code{$},
-it can be used in a string, such as @samp{/some/path/$(lisp).txt}.
+@item $(@var{lisp})
+Expands to the result of evaluating the S-expression @code{(@var{lisp})}. On
+its own, this is identical to just @code{(@var{lisp})}, but with the @code{$},
+it can be used in a string, such as @samp{/some/path/$(@var{lisp}).txt}.
-@item $@{command@}
-Returns the output of @command{command}, which can be any valid Eshell
+@item $@{@var{command}@}
+Returns the output of @command{@var{command}}, which can be any valid Eshell
command invocation, and may even contain expansions.
-@item $
-As with @samp{$@{command@}}, evaluates the Eshell command invocation
-@command{command}, but writes the output to a temporary file and
+@item $<@var{command}>
+As with @samp{$@{@var{command}@}}, evaluates the Eshell command invocation
+@command{@var{command}}, but writes the output to a temporary file and
returns the file name.
-@item $var[i]
-Expands to the @code{i}th element of the value bound to @code{var}. If
+@item $@var{var}[i]
+Expands to the @code{i}th element of the value bound to @var{var}. If
the value is a string, it will be split at whitespace to make it a list.
Again, raises an error if the value is not a sequence.
-@item $var[: i]
+@item $@var{var}[: i]
As above, but now splitting occurs at the colon character.
-@item $var[: i j]
+@item $@var{var}[: i j]
As above, but instead of returning just a string, it now returns a list
of two strings. If the result is being interpolated into a larger
string, this list will be flattened into one big string, with each
element separated by a space.
-@item $var["\\\\" i]
+@item $@var{var}["\\\\" i]
Separate on backslash characters. Actually, the first argument -- if it
doesn't have the form of a number, or a plain variable name -- can be
-any regular expression. So to split on numbers, use @samp{$var["[0-9]+" 10 20]}.
+any regular expression. So to split on numbers, use
+@samp{$@var{var}["[0-9]+" 10 20]}.
-@item $var[hello]
-Calls @code{assoc} on @code{var} with @code{"hello"}, expecting it to be
+@item $@var{var}[hello]
+Calls @code{assoc} on @var{var} with @code{"hello"}, expecting it to be
an alist (@pxref{Association List Type, Association Lists, , elisp,
The Emacs Lisp Reference Manual}).
-@item $#var[hello]
-Returns the length of the cdr of the element of @code{var} who car is equal
-to @code{"hello"}.
+@item $#@var{var}[hello]
+Returns the length of the @code{cdr} of the element of @var{var} whose
+car is equal to @code{"hello"}.
@end table
From 225e0d6047de9576ee48ce612fcd561f818195aa Mon Sep 17 00:00:00 2001
From: Po Lu
Date: Wed, 2 Mar 2022 09:22:18 +0100
Subject: [PATCH 009/466] Correct etc/NEWS entry about bitmapped fonts
* etc/NEWS: Don't say that bitmap font issues are due to Pango, that's
not accurate.
---
etc/NEWS | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 58c7c44a2bf7..84041d79c208 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -43,11 +43,10 @@ recommend examining any such warnings before you decide they are
false.
** The Cairo graphics library is now used by default if present.
-'--with-cairo' is now the default, if the appropriate development files
-are found by 'configure'. Note that building with Cairo means using
-Pango instead of libXFT for font support. Since Pango 1.44 has
-removed support for bitmapped fonts, this may require you to adjust
-your font settings.
+'--with-cairo' is now the default, if the appropriate development
+files are found by 'configure'. Building with Cairo is known to cause
+some problems with bitmap fonts. This may require you to adjust your
+font settings, or to build with Xft support instead.
Note also that 'FontBackend' settings in ".Xdefaults" or
".Xresources", or 'font-backend' frame parameter settings in your init
From cd51d9c7ab5914fb58cbba6ae7bf5d53f7fef03f Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 3 Mar 2022 14:46:20 +0200
Subject: [PATCH 010/466] Fix handling of brackets in BPA
* src/bidi.c (bidi_resolve_brackets): Fix implementation of UBA's
N0 rule when there are no strong directional characters inside the
bracketed pair. (Bug#54219)
---
src/bidi.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/bidi.c b/src/bidi.c
index 30a3be6c94ea..5f47d9e9a7cc 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -2924,7 +2924,8 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
eassert (bidi_it->bracket_pairing_pos > bidi_it->charpos);
if (bidi_it->bracket_enclosed_type == embedding_type) /* N0b */
type = embedding_type;
- else
+ else if (bidi_it->bracket_enclosed_type == STRONG_L /* N0c, N0d */
+ || bidi_it->bracket_enclosed_type == STRONG_R)
{
switch (bidi_it->prev_for_neutral.type)
{
@@ -2944,6 +2945,7 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
break;
default:
/* N0d: Do not set the type for that bracket pair. */
+ /* (Actuallly, this shouldn't happen.) */
break;
}
}
From 92e2d19fe787ce73db15d1549880b54743c0d929 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 3 Mar 2022 15:53:04 +0200
Subject: [PATCH 011/466] One more fix of the BPA implementation
* src/bidi.c (bidi_find_bracket_pairs): Disable BPA optimization
when there are no strong directional characters inside the
bracketed pair. (Bug#54219)
---
src/bidi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/bidi.c b/src/bidi.c
index 5f47d9e9a7cc..a548960048a0 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -2758,6 +2758,7 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
(which requires the display engine to copy the cache back and
forth many times). */
if (maxlevel == base_level
+ && (l2r_seen || r2l_seen) /* N0d */
&& ((base_level == 0 && !r2l_seen)
|| (base_level == 1 && !l2r_seen)))
{
From 29ff903bb0379f6fef0f7dc60977e05a8c60f147 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 3 Mar 2022 20:31:33 +0200
Subject: [PATCH 012/466] Avoid crashes when fringe bitmaps are defined in
daemon mode
* src/dispextern.h (gui_define_fringe_bitmap): Add prototype.
(max_used_fringe_bitmap): Add declaration.
* src/fringe.c (gui_define_fringe_bitmap): New function.
* src/w32term.c (w32_draw_fringe_bitmap):
* src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]: Call
'gui_define_fringe_bitmap' if the terminal-specific bitmap data is
not available when a fringe bitmap is about to be drawn. Don't
try to draw a bitmap that is not known to fringe.c. (Bug#54183)
---
src/dispextern.h | 3 +++
src/fringe.c | 17 +++++++++++++++++
src/w32term.c | 15 ++++++++++++++-
src/xterm.c | 14 +++++++++++++-
4 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/src/dispextern.h b/src/dispextern.h
index bc5f7a52e089..65801596d5d9 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3449,6 +3449,9 @@ bool update_window_fringes (struct window *, bool);
void gui_init_fringe (struct redisplay_interface *);
+extern int max_used_fringe_bitmap;
+void gui_define_fringe_bitmap (struct frame *, int);
+
#ifdef HAVE_NTGUI
void w32_reset_fringes (void);
#endif
diff --git a/src/fringe.c b/src/fringe.c
index f857aedaf021..14148a67ab13 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1802,6 +1802,23 @@ gui_init_fringe (struct redisplay_interface *rif)
}
}
+/* Call frame F's specific define_fringe_bitmap method for a fringe
+ bitmap number N. Called by various *term.c functions when they
+ need to display a fringe bitmap whose terminal-specific data is not
+ available. */
+void
+gui_define_fringe_bitmap (struct frame *f, int n)
+{
+ struct redisplay_interface *rif = FRAME_RIF (f);
+
+ if (!rif || !rif->define_fringe_bitmap || n >= max_used_fringe_bitmap)
+ return;
+
+ struct fringe_bitmap *fb = fringe_bitmaps[n];
+ if (fb)
+ rif->define_fringe_bitmap (n, fb->bits, fb->height, fb->width);
+}
+
#ifdef HAVE_NTGUI
void
w32_reset_fringes (void)
diff --git a/src/w32term.c b/src/w32term.c
index 6b41b1d324ff..ae99d9948e67 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -777,12 +777,25 @@ w32_draw_fringe_bitmap (struct window *w, struct glyph_row *row,
w32_fill_area (f, hdc, face->background,
p->bx, p->by, p->nx, p->ny);
- if (p->which && p->which < max_fringe_bmp)
+ if (p->which
+ && p->which < max_fringe_bmp
+ && p->which < max_used_fringe_bitmap)
{
HBITMAP pixmap = fringe_bmp[p->which];
HDC compat_hdc;
HANDLE horig_obj;
+ if (!fringe_bmp[p->which])
+ {
+ /* This fringe bitmap is known to fringe.c, but lacks the
+ HBITMAP data which shadows that bitmap. This is typical
+ to define-fringe-bitmap being called when the selected
+ frame was not a GUI frame, for example, when packages
+ that define fringe bitmaps are loaded by a daemon Emacs.
+ Create the missing HBITMAP now. */
+ gui_define_fringe_bitmap (f, p->which);
+ }
+
compat_hdc = CreateCompatibleDC (hdc);
SaveDC (hdc);
diff --git a/src/xterm.c b/src/xterm.c
index 59413eafd48e..9a8c3e9ad76d 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1426,7 +1426,9 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring
}
#ifdef USE_CAIRO
- if (p->which && p->which < max_fringe_bmp)
+ if (p->which
+ && p->which < max_fringe_bmp
+ && p->which < max_used_fringe_bitmap)
{
XGCValues gcv;
@@ -1436,6 +1438,16 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring
: f->output_data.x->cursor_pixel)
: face->foreground));
XSetBackground (display, gc, face->background);
+ if (!fringe_bmp[p->which])
+ {
+ /* This fringe bitmap is known to fringe.c, but lacks the
+ cairo_pattern_t pattern which shadows that bitmap. This
+ is typical to define-fringe-bitmap being called when the
+ selected frame was not a GUI frame, for example, when
+ packages that define fringe bitmaps are loaded by a
+ daemon Emacs. Create the missing pattern now. */
+ gui_define_fringe_bitmap (f, p->which);
+ }
x_cr_draw_image (f, gc, fringe_bmp[p->which], 0, p->dh,
p->wd, p->h, p->x, p->y, p->overlay_p);
XSetForeground (display, gc, gcv.foreground);
From 3bb01a499bb828a8705d5f1772732ef5de18254c Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 4 Mar 2022 16:19:42 +0100
Subject: [PATCH 013/466] Fix regression in derived-mode-init-mode-variables
* lisp/emacs-lisp/derived.el (derived-mode-init-mode-variables):
Fix regression caused by lexical-binding derived.el (bug#54240).
---
lisp/emacs-lisp/derived.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index dd386f14b7a3..72f49bf3baf6 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -409,7 +409,7 @@ the first time the mode is used."
t
(eval `(defvar ,(derived-mode-abbrev-table-name mode)
(progn
- (define-abbrev-table (derived-mode-abbrev-table-name mode) nil)
+ (define-abbrev-table (derived-mode-abbrev-table-name ',mode) nil)
(make-abbrev-table))
,(format "Abbrev table for %s." mode)))))
From 0090318c6113828688e84fc50a13a8d9c5f71c55 Mon Sep 17 00:00:00 2001
From: Andreas Schwab
Date: Sat, 5 Mar 2022 13:44:08 +0100
Subject: [PATCH 014/466] * lib-src/seccomp-filter.c (main): Use faccessat2
only if defined.
---
lib-src/seccomp-filter.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib-src/seccomp-filter.c b/lib-src/seccomp-filter.c
index d368cbb46c85..b51585101044 100644
--- a/lib-src/seccomp-filter.c
+++ b/lib-src/seccomp-filter.c
@@ -240,7 +240,9 @@ main (int argc, char **argv)
should be further restricted using mount namespaces. */
RULE (SCMP_ACT_ALLOW, SCMP_SYS (access));
RULE (SCMP_ACT_ALLOW, SCMP_SYS (faccessat));
+#ifdef __NR_faccessat2
RULE (SCMP_ACT_ALLOW, SCMP_SYS (faccessat2));
+#endif
RULE (SCMP_ACT_ALLOW, SCMP_SYS (stat));
RULE (SCMP_ACT_ALLOW, SCMP_SYS (stat64));
RULE (SCMP_ACT_ALLOW, SCMP_SYS (lstat));
From cd77fd3b85f50b75d3fe24713a1ca4f622c110dd Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 6 Mar 2022 20:18:26 -0500
Subject: [PATCH 015/466] Update to Org 9.5.2-24-g668205
---
lisp/org/org-capture.el | 3 ++-
lisp/org/org-element.el | 24 +++++++++---------------
lisp/org/org-refile.el | 8 ++++----
lisp/org/org-version.el | 2 +-
4 files changed, 16 insertions(+), 21 deletions(-)
diff --git a/lisp/org/org-capture.el b/lisp/org/org-capture.el
index 945ea52980c4..bfead3aa5af7 100644
--- a/lisp/org/org-capture.el
+++ b/lisp/org/org-capture.el
@@ -1453,7 +1453,8 @@ Of course, if exact position has been required, just put it there."
(org-with-point-at pos
(when org-capture-bookmark
(let ((bookmark (plist-get org-bookmark-names-plist :last-capture)))
- (when bookmark (with-demoted-errors (bookmark-set bookmark)))))
+ (when bookmark (with-demoted-errors "Bookmark set error: %S"
+ (bookmark-set bookmark)))))
(move-marker org-capture-last-stored-marker (point))))))
(defun org-capture-narrow (beg end)
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index 79527866076d..9db1406b3fbb 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -396,31 +396,25 @@ still has an entry since one of its properties (`:title') does.")
"Alist between element types and locations of secondary values.")
(defconst org-element--pair-round-table
- (let ((table (make-syntax-table)))
+ (let ((table (make-char-table 'syntax-table '(2))))
(modify-syntax-entry ?\( "()" table)
(modify-syntax-entry ?\) ")(" table)
- (dolist (char '(?\{ ?\} ?\[ ?\] ?\< ?\>) table)
- (modify-syntax-entry char " " table)))
- "Table used internally to pair only round brackets.
-Other brackets are treated as spaces.")
+ table)
+ "Table used internally to pair only round brackets.")
(defconst org-element--pair-square-table
- (let ((table (make-syntax-table)))
+ (let ((table (make-char-table 'syntax-table '(2))))
(modify-syntax-entry ?\[ "(]" table)
(modify-syntax-entry ?\] ")[" table)
- (dolist (char '(?\{ ?\} ?\( ?\) ?\< ?\>) table)
- (modify-syntax-entry char " " table)))
- "Table used internally to pair only square brackets.
-Other brackets are treated as spaces.")
+ table)
+ "Table used internally to pair only square brackets.")
(defconst org-element--pair-curly-table
- (let ((table (make-syntax-table)))
+ (let ((table (make-char-table 'syntax-table '(2))))
(modify-syntax-entry ?\{ "(}" table)
(modify-syntax-entry ?\} "){" table)
- (dolist (char '(?\[ ?\] ?\( ?\) ?\< ?\>) table)
- (modify-syntax-entry char " " table)))
- "Table used internally to pair only curly brackets.
-Other brackets are treated as spaces.")
+ table)
+ "Table used internally to pair only curly brackets.")
(defun org-element--parse-paired-brackets (char)
"Parse paired brackets at point.
diff --git a/lisp/org/org-refile.el b/lisp/org/org-refile.el
index 5dfffe785199..5ad73422efa6 100644
--- a/lisp/org/org-refile.el
+++ b/lisp/org/org-refile.el
@@ -566,16 +566,16 @@ prefix argument (`C-u C-u C-u C-c C-w')."
(let ((bookmark-name (plist-get org-bookmark-names-plist
:last-refile)))
(when bookmark-name
- (with-demoted-errors
- (bookmark-set bookmark-name))))
+ (with-demoted-errors "Bookmark set error: %S"
+ (bookmark-set bookmark-name))))
;; If we are refiling for capture, make sure that the
;; last-capture pointers point here
(when (bound-and-true-p org-capture-is-refiling)
(let ((bookmark-name (plist-get org-bookmark-names-plist
:last-capture-marker)))
(when bookmark-name
- (with-demoted-errors
- (bookmark-set bookmark-name))))
+ (with-demoted-errors "Bookmark set error: %S"
+ (bookmark-set bookmark-name))))
(move-marker org-capture-last-stored-marker (point)))
(when (fboundp 'deactivate-mark) (deactivate-mark))
(run-hooks 'org-after-refile-insert-hook)))
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index badf0e476952..a38b79304ef3 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.2-22-g33543d"))
+ (let ((org-git-version "release_9.5.2-24-g668205"))
org-git-version))
(provide 'org-version)
From 9b74e8485738913ddf220661097103f9a843ab45 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 7 Mar 2022 05:13:19 +0100
Subject: [PATCH 016/466] Restore documented Emacs 27.2 behaviour of
browse-url-of-dired-file
* lisp/net/browse-url.el (browse-url-of-dired-file): Restore the
documented behaviour -- open a web browser instead of passing to
the various handlers.
---
lisp/net/browse-url.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 3aafbea7c375..55f41323ddbd 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -835,7 +835,8 @@ If optional arg TEMP-FILE-NAME is non-nil, delete it instead."
(defun browse-url-of-dired-file ()
"In Dired, ask a WWW browser to display the file named on this line."
(interactive)
- (let ((tem (dired-get-filename t t)))
+ (let ((tem (dired-get-filename t t))
+ (browse-url-default-handlers))
(if tem
(browse-url-of-file (expand-file-name tem))
(error "No file on this line"))))
From 73f28fbde8a2e29e340da2c51e6ccc24bd79b785 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 7 Mar 2022 05:15:58 +0100
Subject: [PATCH 017/466] Add a comment for previous browse-url-of-dired-file
change
* lisp/net/browse-url.el (browse-url-of-dired-file): Add a comment
for previous change.
---
lisp/net/browse-url.el | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 55f41323ddbd..ccfbf51e48c8 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -836,7 +836,9 @@ If optional arg TEMP-FILE-NAME is non-nil, delete it instead."
"In Dired, ask a WWW browser to display the file named on this line."
(interactive)
(let ((tem (dired-get-filename t t))
- (browse-url-default-handlers))
+ ;; Some URL handlers open files in Emacs. We want to always
+ ;; open in a browser, so disable those.
+ (browse-url-default-handlers nil))
(if tem
(browse-url-of-file (expand-file-name tem))
(error "No file on this line"))))
From d9e5ae5e20960c0818038ba64beaa330db3c64c7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 7 Mar 2022 14:38:01 +0200
Subject: [PATCH 018/466] Improve wording of 'dired-jump's description
* doc/emacs/dired.texi (Dired Enter): Clarify wording. Reported
by Natalie .
---
doc/emacs/dired.texi | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index f6c3e93d1081..6acee25cee1d 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -113,11 +113,17 @@ a directory's name.
@findex dired-jump-other-window
@kindex C-x C-j
@kindex C-x 4 C-j
- Typing @kbd{C-x C-j} (@code{dired-jump}) in any buffer will open a
-Dired buffer and move point to the line corresponding to the current
-file. In Dired, move up a level and go to the previous directory's
-line. Typing @kbd{C-x 4 C-j} (@code{dired-jump-other-window} has the
-same effect but opens a new window for the Dired buffer.
+ You can ask Emacs to invoke Dired on the default-directory
+(@pxref{File Names, default-directory}) of any buffer, by typing
+@kbd{C-x C-j} (@code{dired-jump}). If the buffer visits a file, this
+command will move point to that file's line in the Dired buffer it
+shows; otherwise, point will end up on the first file in the directory
+listing. As an exception, if you type @kbd{C-x C-j} in a Dired
+buffer, Emacs displays the directory listing of the parent directory
+and places point on the line that corresponds to the directory where
+you invoked @code{dired-jump}. Typing @kbd{C-x 4 C-j}
+(@code{dired-jump-other-window} has the same effect, but displays the
+Dired buffer in a new window.
The variable @code{dired-listing-switches} specifies the options to
give to @command{ls} for listing the directory; this string
From 80736aef9085ad04e59902b0d0a31fb1f663858b Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 7 Mar 2022 16:19:19 +0100
Subject: [PATCH 019/466] Fix which-func-update doc string
* lisp/progmodes/which-func.el (which-func-update): Make the doc
string match the code (bug#54288).
---
lisp/progmodes/which-func.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index 4388b0e7de03..abe25f2c6333 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -216,7 +216,7 @@ It creates the Imenu index for the buffer, if necessary."
(setq which-func-mode nil))))
(defun which-func-update ()
- "Update the Which-Function mode display for all windows."
+ "Update the Which-Function mode display in the current window."
;; (walk-windows 'which-func-update-1 nil 'visible))
(let ((non-essential t))
(which-func-update-1 (selected-window))))
From d184773c2e2a69bea9b96190c83727b4e7a16542 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 8 Mar 2022 15:35:39 +0200
Subject: [PATCH 020/466] Avoid assertion violations in 'bidi_resolve_brackets'
* src/bidi.c (bidi_resolve_brackets): Move assertion to where it
really matters. (Bug#54295)
---
src/bidi.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/bidi.c b/src/bidi.c
index a548960048a0..9449e0994461 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -2921,13 +2921,13 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
int embedding_level = bidi_it->level_stack[bidi_it->stack_idx].level;
bidi_type_t embedding_type = (embedding_level & 1) ? STRONG_R : STRONG_L;
- eassert (bidi_it->prev_for_neutral.type != UNKNOWN_BT);
eassert (bidi_it->bracket_pairing_pos > bidi_it->charpos);
if (bidi_it->bracket_enclosed_type == embedding_type) /* N0b */
type = embedding_type;
else if (bidi_it->bracket_enclosed_type == STRONG_L /* N0c, N0d */
|| bidi_it->bracket_enclosed_type == STRONG_R)
{
+ eassert (bidi_it->prev_for_neutral.type != UNKNOWN_BT);
switch (bidi_it->prev_for_neutral.type)
{
case STRONG_R:
@@ -2946,7 +2946,6 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
break;
default:
/* N0d: Do not set the type for that bracket pair. */
- /* (Actuallly, this shouldn't happen.) */
break;
}
}
From a9920473f68ce20fe95f67a4941ff3c1fb274f2a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 10 Mar 2022 09:29:29 +0200
Subject: [PATCH 021/466] Improve documentation of 'map-charset-chars'
* doc/lispref/nonascii.texi (Character Sets):
* src/charset.c (Fmap_charset_chars): Clarify the codepoint issue
in using 'map-charset-chars'.
---
doc/lispref/nonascii.texi | 15 ++++++++++++---
src/charset.c | 25 +++++++++++++++----------
2 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index f495910fcd63..d7d25dc36afe 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -855,15 +855,24 @@ function to all or part of the characters in a charset:
Call @var{function} for characters in @var{charset}. @var{function}
is called with two arguments. The first one is a cons cell
@code{(@var{from} . @var{to})}, where @var{from} and @var{to}
-indicate a range of characters contained in charset. The second
-argument passed to @var{function} is @var{arg}.
+indicate a range of characters contained in @var{charset}. The second
+argument passed to @var{function} is @var{arg}, or @code{nil} if
+@var{arg} is omitted.
By default, the range of codepoints passed to @var{function} includes
all the characters in @var{charset}, but optional arguments
@var{from-code} and @var{to-code} limit that to the range of
characters between these two codepoints of @var{charset}. If either
of them is @code{nil}, it defaults to the first or last codepoint of
-@var{charset}, respectively.
+@var{charset}, respectively. Note that @var{from-code} and
+@var{to-code} are @var{charset}'s codepoints, not the Emacs codes of
+characters; by contrast, the values @var{from} and @var{to} in the
+cons cell passed to @var{function} @emph{are} Emacs character codes.
+Those Emacs character codes are either Unicode code points, or Emacs
+internal code points that extend Unicode and are beyond the Unicode
+range of characters @code{0..#x10FFFF} (@pxref{Text Representations}).
+The latter happens rarely, with legacy CJK charsets for codepoints of
+@var{charset} which specify characters not yet unified with Unicode.
@end defun
@node Scanning Charsets
diff --git a/src/charset.c b/src/charset.c
index dec9d56df2c4..b9e1584083f8 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -793,16 +793,21 @@ map_charset_chars (void (*c_function)(Lisp_Object, Lisp_Object), Lisp_Object fun
DEFUN ("map-charset-chars", Fmap_charset_chars, Smap_charset_chars, 2, 5, 0,
doc: /* Call FUNCTION for all characters in CHARSET.
-FUNCTION is called with an argument RANGE and the optional 3rd
-argument ARG.
-
-RANGE is a cons (FROM . TO), where FROM and TO indicate a range of
-characters contained in CHARSET.
-
-The optional 4th and 5th arguments FROM-CODE and TO-CODE specify the
-range of code points (in CHARSET) of target characters. Note that
-these are not character codes, but code points in CHARSET; for the
-difference see `decode-char' and `list-charset-chars'. */)
+Optional 3rd argument ARG is an additional argument to be passed
+to FUNCTION, see below.
+Optional 4th and 5th arguments FROM-CODE and TO-CODE specify the
+range of code points (in CHARSET) of target characters on which to
+map the FUNCTION. Note that these are not character codes, but code
+points of CHARSET; for the difference see `decode-char' and
+`list-charset-chars'. If FROM-CODE is nil or imitted, it stands for
+the first code point of CHARSET; if TO-CODE is nil or omitted, it
+stands for the last code point of CHARSET.
+
+FUNCTION will be called with two arguments: RANGE and ARG.
+RANGE is a cons (FROM . TO), where FROM and TO specify a range of
+characters that belong to CHARSET on which FUNCTION should do its
+job. FROM and TO are Emacs character codes, unlike FROM-CODE and
+TO-CODE, which are CHARSET code points. */)
(Lisp_Object function, Lisp_Object charset, Lisp_Object arg, Lisp_Object from_code, Lisp_Object to_code)
{
struct charset *cs;
From dbe6a3ecf74536cbfb7ca59630b48020ae4e732a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 10 Mar 2022 20:26:13 +0200
Subject: [PATCH 022/466] Fix regression in
'custom-prompt-customize-unsaved-options'
* lisp/cus-edit.el (custom-prompt-customize-unsaved-options):
Don't depend on the value returned by 'customize-unsaved'. Fix
the doc string. Patch by Sebastian Miele .
(Bug#54329)
---
lisp/cus-edit.el | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index c2ddaeb7b19a..fd42c542b461 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1531,12 +1531,12 @@ If TYPE is `groups', include only groups."
;;;###autoload
(defun custom-prompt-customize-unsaved-options ()
"Prompt user to customize any unsaved customization options.
-Return non-nil if user chooses to customize, for use in
+Return nil if user chooses to customize, for use in
`kill-emacs-query-functions'."
(not (and (custom-unsaved-options)
- (yes-or-no-p "Some customized options have not been saved; Examine? ")
- (customize-unsaved)
- t)))
+ (yes-or-no-p
+ "Some customized options have not been saved; Examine? ")
+ (progn (customize-unsaved) t))))
;;; Buffer.
From 6b0fdf73cf0cf70d5756afab798896040c70d9c7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 12 Mar 2022 03:28:45 -0500
Subject: [PATCH 023/466] ; Fix data structures in authors.el
* admin/authors.el (authors-aliases, authors-renamed-files-alist):
Update and correct the databases.
(authors-renamed-files-alist): Add commentary explaining how to
add entries for renamed/moved files.
(authors-canonical-file-name): Clarify the semantics of the
arguments.
---
admin/authors.el | 216 +++++++++++++++++++++++++++++++++++++----------
1 file changed, 172 insertions(+), 44 deletions(-)
diff --git a/admin/authors.el b/admin/authors.el
index 8f768a83be78..0f15d0d1b885 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -68,6 +68,7 @@ files.")
(nil "castor@my-dejanews")
(nil "chengang31@gmail.com")
(nil "chuntaro")
+ ("Clément Pit-Claudel" "Clément Pit--Claudel")
("David Abrahams" "Dave Abrahams")
("David J. Biesack" "David Biesack")
("David De La Harpe Golden" "David Golden")
@@ -242,10 +243,14 @@ files.")
("Vinicius Jose Latorre" "viniciusjl")
("Gaby Launay" "galaunay")
("Dick R. Chiang" "dickmao")
+ ("Lin Zhou" "georgealbert@qq.com")
+ (nil "yan@metatem.net")
+ (nil "gnu_lists@halloleo.hailmail.net")
)
"Alist of author aliases.
-Each entry is of the form (REALNAME REGEXP...). If an author's name
+Each entry is of the form (REALNAME REGEXP...).
+If an author's full name, as in \"J.R.Hacker \",
matches one of the REGEXPs, use REALNAME instead.
If REALNAME is nil, ignore that author.")
@@ -496,6 +501,7 @@ Changes to files matching one of the regexps in this list are not listed.")
"nextstep/WISHLIST"
;; Removed, replaced by gitmerge.el
"admin/bzrmerge.el"
+ "bzrmerge.el"
;; Removed in commit f5090b91299
"lib/fdatasync.c"
;; Removed as obsolete
@@ -510,8 +516,11 @@ Changes to files matching one of the regexps in this list are not listed.")
"MORE.STUFF"
"notes/font-backend"
"src/ftxfont.c"
+ "ftxfont.c"
"src/ptr-bounds.h"
"obsolete/options.el"
+ "obsolete/old-whitespace.el"
+ "obsolete/lucid.el"
;; ada-mode has been deleted, now in GNU ELPA
"ada-mode.texi"
"doc/misc/ada-mode.texi"
@@ -872,11 +881,9 @@ Changes to files in this list are not listed.")
"gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el"
"dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
"gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
- "eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el"
- "format-spec.el" "gnus-move.el" "gnus-sync.el"
- "auth-source.el" "ecomplete.el" "gravatar.el" "mailcap.el" "plstore.el"
- "pop3.el" "qp.el" "registry.el" "rfc2231.el" "rtree.el"
- "sieve.el" "sieve-mode.el" "gnus-ems.el"
+ "earcon.el" "gnus-audio.el" "encrypt.el"
+ "gnus-move.el" "gnus-sync.el"
+ "gnus-ems.el"
;; doc
"getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
"back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
@@ -957,6 +964,43 @@ in the repository.")
;; NB So only add a directory if needed to disambiguate.
;; FIXME?
;; Although perhaps we could let authors-disambiguate-file-name do that?
+;;
+;; WARNING: The semantics of these entries is tricky to grasp without
+;; reading the code!
+;; The rule is: for every file that was renamed or moved to another
+;; directory, add an entry (OLD-NAME . NEW-BASENAME), where OLD-NAME
+;; is the old name of the file as it appears in the ChangeLog files,
+;; and NEW-BASENAME is the _basename_ of its new name. Yes, this
+;; means that a file which was moved to another directory but kept its
+;; basename will have a seemingly-silly entry ("foo" . "foo"). (Told
+;; you: this is tricky!) If the moved/renamed file was mentioned in
+;; several ChangeLog files with different leading directories, you
+;; need to provide an entry for each such instance. For example, if
+;; some ChangeLog mentioned a moved file as lisp/gnus/something.el and
+;; another ChangeLog mentioned it as gnus/something.el, you need to
+;; have two entries:
+;;
+;; ("gnus/something.el" . "something.el")
+;; ("lisp/gnus/something.el" . "something.el")
+;;
+;; The important part is that the car of the entry should be identical
+;; to how a file was mentioned in the respective ChangeLog. It is
+;; advisable to run a Grep command such as
+;;
+;; fgrep -R BASENAME . --include='ChangeLog*'
+;;
+;; where BASENAME is the old basename of the renamed file. This will
+;; show all the different reference forms of the file in the various
+;; ChangeLog* files, and you can then prepare a separate entry for
+;; each reference form.
+;;
+;; The cdr of the entry should generally be only the basename of the
+;; file's current name, because that's how AUTHORS references files.
+;; It _can_ have leading directories, but that is only
+;; needed/advisable if there are several files in the tree that have
+;; the same basename, and you want to disambiguate them, so that
+;; people who actually contributed to different files aren't mentioned
+;; as if they contributed to the same single file.
(defconst authors-renamed-files-alist
'(("nt.c" . "w32.c") ("nt.h" . "w32.h")
("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h")
@@ -964,8 +1008,9 @@ in the repository.")
("ntproc.c" . "w32proc.c")
("w32console.c" . "w32term.c")
("unexnt.c" . "unexw32.c")
- ("s/windowsnt.h" . "s/ms-w32.h")
- ("s/ms-w32.h" . "inc/ms-w32.h")
+ ("m/windowsnt.h" . "ms-w32.h")
+ ("s/windowsnt.h" . "ms-w32.h")
+ ("s/ms-w32.h" . "ms-w32.h")
("src/config.h" . "config.h")
("winnt.el" . "w32-fns.el")
("linux.h" . "gnu-linux.h")
@@ -988,6 +1033,10 @@ in the repository.")
("INSTALL.MSYS" . "INSTALL")
("server.c" . "emacsserver.c")
("lib-src/etags.c" . "etags.c")
+ ;; gnulib
+ ("lib/strftime.c" . "nstrftime.c")
+ ("src/mini-gmp.c" . "mini-gmp.c")
+ ("src/mini-gmp.h" . "mini-gmp.h")
;; msdos/
("is-exec.c" . "is_exec.c")
("enriched.doc" . "enriched.txt")
@@ -1071,8 +1120,10 @@ in the repository.")
("nxml/test.invalid.xml" . "test-invalid.xml")
("nxml/test.valid.xml" . "test-valid.xml")
("automated/Makefile.in" . "test/Makefile.in")
- ("test/rmailmm.el" . "test/manual/rmailmm.el")
- ("rmailmm.el" . "test/manual/rmailmm.el")
+ ;; rmailmm tests wandered from test/ to test/manual to test/lisp/mail/
+ ("rmailmm.el" . "rmailmm-tests.el")
+ ("test/rmailmm.el" . "rmailmm-tests.el")
+ ("test/manual/rmailmm.el" . "rmailmm-tests.el")
;; The one in lisp is eshell/eshell.el.
("eshell.el" . "eshell-tests.el")
("automated/eshell.el" . "eshell-tests.el")
@@ -1104,22 +1155,79 @@ in the repository.")
("major.texi" . "modes.texi")
("msdog-xtra.texi" . "msdos-xtra.texi")
("msdog.texi" . "msdos.texi")
+ ;; Moved from lisp/gnus/ to lisp/
+ ("auth-source.el" . "auth-source.el")
+ ("lisp/gnus/auth-source.el" . "auth-source.el")
+ ("ecomplete.el" . "ecomplete.el")
+ ("format-spec.el" . "format-spec.el")
+ ("gnus/format-spec.el" . "format-spec.el")
+ ("lisp/gnus/ecomplete.el" . "ecomplete.el")
+ ("plstore.el" . "plstore.el")
+ ("lisp/gnus/plstore.el" . "plstore.el")
+ ("registry.el" . "registry.el")
+ ("lisp/gnus/registry.el" . "registry.el")
+ ("rtree.el" . "rtree.el")
;; Moved from lisp/gnus/ to lisp/calendar/
- ("time-date.el" . "calendar/time-date.el")
+ ("time-date.el" . "time-date.el")
;; Moved from lisp/gnus/ to lisp/mail/
- ("binhex.el" . "mail/binhex.el")
- ("uudecode.el" . "mail/uudecode.el")
- ("mail-parse.el" . "mail/mail-parse.el")
- ("yenc.el" . "mail/yenc.el")
- ("flow-fill.el" . "mail/flow-fill.el")
- ("ietf-drums.el" . "mail/ietf-drums.el")
- ("sieve-manage.el" . "mail/sieve-manage.el")
+ ("binhex.el" . "binhex.el")
+ ("gnus/binhex.el" . "binhex.el")
+ ("uudecode.el" . "uudecode.el")
+ ("gnus/uudecode.el" . "uudecode.el")
+ ("mail-parse.el" . "mail-parse.el")
+ ("gnus/mail-parse.el" . "mail-parse.el")
+ ("mail-prsvr.el" . "mail-prsvr.el")
+ ("gnus/mail-prsvr.el" . "mail-prsvr.el")
+ ("yenc.el" . "yenc.el")
+ ("flow-fill.el" . "flow-fill.el")
+ ("gnus/flow-fill.el" . "flow-fill.el")
+ ("ietf-drums.el" . "ietf-drums.el")
+ ("gnus/ietf-drums.el" . "ietf-drums.el")
+ ("pop3.el" . "pop3.el")
+ ("mail/pop3.el" . "pop3.el")
+ ("gnus/pop3.el" . "pop3.el")
+ ("lisp/gnus/pop3.el" . "pop3.el")
+ ("qp.el" . "qp.el")
+ ("gnus/qp.el" . "qp.el")
+ ("lisp/gnus/qp.el" . "qp.el")
+ ("rfc2045.el" . "rfc2045.el")
+ ("gnus/rfc2045.el" . "rfc2045.el")
+ ("rfc2047.el" . "rfc2047.el")
+ ("gnus/rfc2047.el" . "rfc2047.el")
+ ("rfc2231.el" . "rfc2231.el")
+ ("gnus/rfc2231.el" . "rfc2231.el")
+ ("lisp/gnus/rfc2231.el" . "rfc2231.el")
;; Moved from lisp/gnus/ to lisp/image/
- ("compface.el" . "image/compface.el")
+ ("compface.el" . "compface.el")
+ ("gravatar.el" . "gravatar.el")
+ ("lisp/gnus/gravatar.el" . "gravatar.el")
;; Moved from lisp/gnus/ to lisp/net/
+ ("eww.el" . "eww.el")
+ ("net/eww.el" . "eww.el")
+ ("lisp/new/eww.el" . "eww.el") ; an actual typo in ChangeLog.3
+ ("gssapi.el" . "gssapi.el")
+ ("lisp/gnus/gssapi.el" . "gssapi.el")
("imap.el" . "net/imap.el")
+ ("mailcap.el" . "mailcap.el")
+ ("gnus/mailcap.el" . "mailcap.el")
+ ("lisp/gnus/mailcap.el" . "mailcap.el")
("rfc2104.el" . "net/rfc2104.el")
- ("starttls.el" . "net/starttls.el")
+ ("starttls.el" . "starttls.el")
+ ("lisp/net/starttls.el" . "starttls.el") ; moved to obsolete/
+ ("shr.el" . "shr.el")
+ ("net/shr.el" . "shr.el")
+ ("shr-color.el" . "shr-color.el")
+ ("sieve-manage.el" . "sieve-manage.el")
+ ("sieve-mode.el" . "sieve-mode.el")
+ ("sieve.el" . "sieve.el")
+ ("lisp/gnus/sieve-manage.el" . "sieve-manage.el")
+ ("lisp/gnus/sieve-mode.el" . "sieve-mode.el")
+ ("lisp/gnus/sieve.el" . "sieve.el")
+ ;; Moved from lisp/gnus/ to lisp/international
+ ("rfc1843.el" . "rfc1843.el")
+ ("gnus/rfc1843.el" . "rfc1843.el")
+ ("utf7.el" . "utf7.el")
+ ("gnus/utf7.el" . "utf7.el")
;; And from emacs/ to misc/ and back again.
("ns-emacs.texi" . "macos.texi")
("overrides.texi" . "gnus-overrides.texi")
@@ -1134,7 +1242,7 @@ in the repository.")
("ED.WORSHIP" . "JOKES")
("GNU.JOKES" . "JOKES")
("CHARACTERS" . "TODO")
- ("lisp/character-fold.el" . "lisp/char-fold.el")
+ ("lisp/character-fold.el" . "char-fold.el")
("test/automated/character-fold-tests.el" . "char-fold-tests.el")
("test/automated/char-fold-tests.el" . "char-fold-tests.el")
("test/lisp/character-fold-tests.el" . "char-fold-tests.el")
@@ -1176,7 +1284,8 @@ in the repository.")
("grammars" . "grammars")
;; Moved from lisp/emacs-lisp/ to admin/.
("emacs-lisp/authors.el" . "authors.el")
- ("emacs-lisp/find-gc.el" . "admin/find-gc.el")
+ ("find-gc.el" . "find-gc.el")
+ ("emacs-lisp/find-gc.el" . "find-gc.el")
;; From etc to lisp/cedet/semantic/.
("grammars/bovine-grammar.el" . "bovine/grammar.el")
("grammars/wisent-grammar.el" . "wisent/grammar.el")
@@ -1184,28 +1293,41 @@ in the repository.")
("nt/README.W32" . "README.W32")
("notes/BRANCH" . "notes/repo")
("notes/bzr" . "notes/repo")
- ;; moved from lisp/ to lisp/net/
- ("lisp/pinentry.el" . "lisp/net/pinentry.el")
+ ;; moved from lisp/ to lisp/net/, then removed
+ ("pinentry.el" . "pinentry.el")
+ ("lisp/pinentry.el" . "pinentry.el")
+ ("lisp/net/pinentry.el" . "pinentry.el")
;; module.* moved to emacs-module.*
- ("src/module.h" . "src/emacs-module.h")
- ("src/module.c" . "src/emacs-module.c")
- ;; gnulib
- ("lib/strftime.c" . "lib/nstrftime.c")
- ("test/src/regex-tests.el" . "test/src/regex-emacs-tests.el")
- ("test/lisp/emacs-lisp/cl-tests.el" . "test/lisp/obsolete/cl-tests.el")
- ("lisp/net/starttls.el" . "lisp/obsolete/starttls.el")
- ("url-ns.el" . "lisp/obsolete/url-ns.el")
- ("gnus-news.texi" . "doc/misc/gnus.texi")
- ("lisp/multifile.el" . "lisp/fileloop.el")
- ("lisp/emacs-lisp/thread.el" . "lisp/thread.el")
- ("lisp/emacs-lisp/cl.el" . "lisp/emacs-lisp/cl-lib.el")
- ("lisp/progmodes/mantemp.el" . "lisp/obsolete/mantemp.el")
- ("src/mini-gmp.c" . "lib/mini-gmp.c")
- ("src/mini-gmp.h" . "lib/mini-gmp.h")
+ ("src/module.h" . "emacs-module.h")
+ ("src/module.c" . "emacs-module.c")
+ ("test/src/regex-tests.el" . "regex-emacs-tests.el")
+ ("test/lisp/emacs-lisp/cl-tests.el" . "cl-tests.el")
+ ("url-ns.el" . "url-ns.el")
+ ("gnus-news.texi" . "gnus.texi")
+ ("doc/misc/gnus-news.texi" . "gnus.texi")
+ ("lisp/multifile.el" . "fileloop.el")
+ ("lisp/emacs-lisp/thread.el" . "thread.el")
+ ;; cl.el was retired, replaced by cl-lib.el, and we want to
+ ;; pretend they are the same file...
+ ("emacs-lisp/cl.el" . "cl-lib.el")
+ ("lisp/emacs-lisp/cl.el" . "cl-lib.el")
+ ("lisp/obsolete/cl.el" . "cl-lib.el")
+ ("mantemp.el" . "mantemp.el")
+ ("lisp/progmodes/mantemp.el" . "mantemp.el")
+ ("progmodes/mantemp.el" . "mantemp.el")
("sysdep.c" . "src/sysdep.c")
+ ;; nnir.el started in lisp/gnus/ChangeLog.*, then was
+ ;; lisp/gnus/nnir.el in ChangeLog.[123], and is now
+ ;; lisp/obsolete/nnir.el.
+ ("nnir.el" . "nnir.el")
("lisp/gnus/nnir.el" . "nnir.el")
- ("src/regex.c" . "emacs-regex.c")
- ("src/regex.h" . "emacs-regex.h")
+ ;; regex.[ch] are mentioned as src/regex.[ch] in ChangeLog.[123],
+ ;; but as just regex.[ch] in src/ChangeLog.*, so we need 2 entries
+ ;; for each one of them.
+ ("regex.c" . "regex-emacs.c")
+ ("regex.h" . "regex-emacs.h")
+ ("src/regex.c" . "regex-emacs.c")
+ ("src/regex.h" . "regex-emacs.h")
("test/manual/rmailmm.el" . "rmailmm-tests.el")
("test/lisp/cedet/semantic-utest-fmt.el" . "format-tests.el")
("test/lisp/emacs-lisp/tabulated-list-test.el" . "tabulated-list-tests.el")
@@ -1366,19 +1488,25 @@ Additionally, for these logs we apply the `lax' elements of
(defun authors-canonical-file-name (file log-file pos author)
"Return canonical file name for FILE found in LOG-FILE.
+FILE is the file name as it appears in LOG-FILE, including any
+leading directories mentioned there.
+LOG-FILE is an absolute file name of the log file we are scanning.
Checks whether FILE is a valid (existing) file name, has been renamed,
or is on the list of removed files. Returns the non-directory part of
-the file name. Only uses the LOG-FILE position POS and associated AUTHOR
-to print a message if FILE is not found."
+the file name to use for FILE in the \"AUTHORS\" file.
+Only uses the LOG-FILE position POS and associated AUTHOR to print a
+message if FILE is not found."
;; FILE should be re-checked in every different directory associated
;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the
;; same as that from top-level/ChangeLog.
(let* ((fullname (expand-file-name file (file-name-directory log-file)))
(entry (assoc fullname authors-checked-files-alist))
- laxlog relname valid)
+ laxlog relname valid foo)
(if entry
(cdr entry)
(setq relname (file-name-nondirectory file))
+ ;; File names in `authors-valid-file-names' are OK by
+ ;; definition, so no need to check those.
(if (or (member file authors-valid-file-names)
(member relname authors-valid-file-names)
(file-exists-p file)
From e5b191465d200e54719361a1bf97e539b3fc4d2b Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 12 Mar 2022 03:32:47 -0500
Subject: [PATCH 024/466] ; * admin/authors.el (authors-canonical-file-name):
Remove debug leftover.
---
admin/authors.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/authors.el b/admin/authors.el
index 0f15d0d1b885..aec52515d9dc 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -1501,7 +1501,7 @@ message if FILE is not found."
;; same as that from top-level/ChangeLog.
(let* ((fullname (expand-file-name file (file-name-directory log-file)))
(entry (assoc fullname authors-checked-files-alist))
- laxlog relname valid foo)
+ laxlog relname valid)
(if entry
(cdr entry)
(setq relname (file-name-nondirectory file))
From 5ba9c8c364f652221a0ac9ed918a831e122581db Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 12 Mar 2022 04:44:46 -0500
Subject: [PATCH 025/466] Emacs pretest 28.0.92
* README:
* configure.ac:
* nt/README.W32:
* msdos/sed2v2.inp: Bump Emacs version to 28.0.92.
* etc/AUTHORS:
* lisp/ldefs-boot.el: Update for pretest 28.0.92.
* ChangeLog.3: Regenerate.
---
ChangeLog.3 | 802 ++++++++++++++++++++++++++++++++++++++++++++-
README | 2 +-
configure.ac | 2 +-
etc/AUTHORS | 270 +++++++--------
lisp/ldefs-boot.el | 29 +-
msdos/sed2v2.inp | 2 +-
nt/README.W32 | 2 +-
7 files changed, 964 insertions(+), 145 deletions(-)
diff --git a/ChangeLog.3 b/ChangeLog.3
index 18b7b7c11aa1..778c01b5e5f8 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,803 @@
+2022-03-10 Eli Zaretskii
+
+ Fix regression in 'custom-prompt-customize-unsaved-options'
+
+ * lisp/cus-edit.el (custom-prompt-customize-unsaved-options):
+ Don't depend on the value returned by 'customize-unsaved'. Fix
+ the doc string. Patch by Sebastian Miele .
+ (Bug#54329)
+
+2022-03-10 Eli Zaretskii
+
+ Improve documentation of 'map-charset-chars'
+
+ * doc/lispref/nonascii.texi (Character Sets):
+ * src/charset.c (Fmap_charset_chars): Clarify the codepoint issue
+ in using 'map-charset-chars'.
+
+2022-03-08 Eli Zaretskii
+
+ Avoid assertion violations in 'bidi_resolve_brackets'
+
+ * src/bidi.c (bidi_resolve_brackets): Move assertion to where it
+ really matters. (Bug#54295)
+
+2022-03-07 Lars Ingebrigtsen
+
+ Fix which-func-update doc string
+
+ * lisp/progmodes/which-func.el (which-func-update): Make the doc
+ string match the code (bug#54288).
+
+2022-03-07 Eli Zaretskii
+
+ Improve wording of 'dired-jump's description
+
+ * doc/emacs/dired.texi (Dired Enter): Clarify wording. Reported
+ by Natalie .
+
+2022-03-06 Lars Ingebrigtsen
+
+ Add a comment for previous browse-url-of-dired-file change
+
+ * lisp/net/browse-url.el (browse-url-of-dired-file): Add a comment
+ for previous change.
+
+2022-03-06 Lars Ingebrigtsen
+
+ Restore documented Emacs 27.2 behaviour of browse-url-of-dired-file
+
+ * lisp/net/browse-url.el (browse-url-of-dired-file): Restore the
+ documented behaviour -- open a web browser instead of passing to
+ the various handlers.
+
+2022-03-06 Kyle Meyer
+
+ Update to Org 9.5.2-24-g668205
+
+2022-03-05 Andreas Schwab
+
+ * lib-src/seccomp-filter.c (main): Use faccessat2 only if defined.
+
+2022-03-04 Lars Ingebrigtsen
+
+ Fix regression in derived-mode-init-mode-variables
+
+ * lisp/emacs-lisp/derived.el (derived-mode-init-mode-variables):
+ Fix regression caused by lexical-binding derived.el (bug#54240).
+
+2022-03-03 Eli Zaretskii
+
+ Avoid crashes when fringe bitmaps are defined in daemon mode
+
+ * src/dispextern.h (gui_define_fringe_bitmap): Add prototype.
+ (max_used_fringe_bitmap): Add declaration.
+ * src/fringe.c (gui_define_fringe_bitmap): New function.
+ * src/w32term.c (w32_draw_fringe_bitmap):
+ * src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]: Call
+ 'gui_define_fringe_bitmap' if the terminal-specific bitmap data is
+ not available when a fringe bitmap is about to be drawn. Don't
+ try to draw a bitmap that is not known to fringe.c. (Bug#54183)
+
+2022-03-03 Eli Zaretskii
+
+ One more fix of the BPA implementation
+
+ * src/bidi.c (bidi_find_bracket_pairs): Disable BPA optimization
+ when there are no strong directional characters inside the
+ bracketed pair. (Bug#54219)
+
+2022-03-03 Eli Zaretskii
+
+ Fix handling of brackets in BPA
+
+ * src/bidi.c (bidi_resolve_brackets): Fix implementation of UBA's
+ N0 rule when there are no strong directional characters inside the
+ bracketed pair. (Bug#54219)
+
+2022-03-02 Po Lu
+
+ Correct etc/NEWS entry about bitmapped fonts
+
+ * etc/NEWS: Don't say that bitmap font issues are due to Pango, that's
+ not accurate.
+
+2022-03-01 Jim Porter
+
+ Improve/correct documentation about Eshell variable expansion
+
+ * lisp/eshell/esh-var.el: Correct documentation comment.
+ (eshell-parse-variable-ref): Correct docstring.
+
+ * doc/misc/eshell.texi (Dollars Expansion): Add documentation for
+ $"var"/$'var' and $ syntaxes.
+
+2022-03-01 Jim Porter
+
+ Partially revert b03f74e0f2a578b1580e8b1c368665850ee7f808
+
+ That commit regressed '$' forms in Eshell, due to a
+ limitation/bug in how 'eshell-do-eval' works. This fixes
+ bug#54190.
+
+ * lisp/eshell/esh-var.el (eshell-parse-variable-ref): Quote a lambda.
+
+ * test/lisp/eshell/eshell-tests.el (eshell-test/interp-temp-cmd):
+ New test.
+
+2022-03-01 Paul Eggert
+
+ Backport: Port pre-commit hook to Git 2.35.0
+
+ * build-aux/git-hooks/pre-commit: Use LC_ALL=C grep -E instead of
+ sane_egrep (removed in Git 2.35.0).
+
+ (cherry picked from commit b8a96f055624f86fe965a0d1b7b2495b2db80e63)
+
+2022-02-28 Lars Ingebrigtsen
+
+ Fix :tag for eol in tab-first-completion
+
+ * lisp/indent.el (tab-first-completion): Fix the :tag description
+ (bug#54179).
+
+2022-02-28 Kyle Meyer
+
+ Update to Org 9.5.2-22-g33543d
+
+2022-02-27 Dmitry Gutov
+
+ Add explicit '--no-heading' for ripgrep
+
+ * lisp/progmodes/xref.el (xref-search-program-alist):
+ Add explicit '--no-heading' for ripgrep (bug#54177).
+
+2022-02-26 Michael Albinus
+
+ Follow OpenSSH changes in Tramp
+
+ * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
+ Reimplement. OpenSSH has changed its diagnostics messages.
+
+2022-02-26 Eli Zaretskii
+
+ Document better how to reset attributes of faces for new frames
+
+ * doc/lispref/display.texi (Attribute Functions):
+ * lisp/faces.el (set-face-attribute): Explain how to reset an
+ attribute's value for future frames. (Bug#54156)
+
+2022-02-25 Michael Albinus
+
+ * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Adapt test.
+
+2022-02-24 Lars Ingebrigtsen
+
+ Mention flyspell-prog-mode in flyspell-mode doc string
+
+ * lisp/textmodes/flyspell.el (flyspell-mode): Mention
+ flyspell-prog-mode (bug#54131).
+
+2022-02-23 Lars Ingebrigtsen
+
+ Reword face-remap-add-relative manual entry
+
+ * doc/lispref/display.texi (Face Remapping): Clarify the
+ face-remap-add-relative (bug#54114).
+
+2022-02-22 Philipp Stephani
+
+ Fix indexing of module functions that return enumeration types.
+
+ Return types that consist of more than one word need to be enclosed in
+ braces, see Info node `(texinfo) Typed Functions'. Otherwise they are
+ indexed incorrectly.
+
+ * doc/lispref/internals.texi (Module Misc, Module Nonlocal): Enclose
+ multi-word return types in braces.
+
+2022-02-22 Eli Zaretskii
+
+ * doc/misc/transient.texi (Other Options): Fix a @ref. (Bug#54108)
+
+2022-02-22 Glenn Morris
+
+ tramp.texi texinfo 4.13 compatibility
+
+ * doc/misc/tramp.texi (Frequently Asked Questions):
+ Restore compatibility with Texinfo < 5.
+
+2022-02-22 Michael Albinus
+
+ Explain "Tramp" spelling in its manual
+
+ * doc/misc/tramp.texi (Frequently Asked Questions):
+ Explain "Tramp" spelling.
+
+2022-02-21 Eli Zaretskii
+
+ Fix 'display-line-numbers-mode' in hide-show buffers
+
+ * src/xdisp.c (redisplay_internal): Disable redisplay
+ optimizations that consider just the current line, when
+ 'display-line-numbers-mode' is turned on in the buffer.
+ (Bug#54091)
+
+2022-02-21 Martin Rudalics
+
+ Don't check whether a deleted window is deletable (Bug#54028)
+
+ * lisp/window.el (window-state-put): Make sure window is live
+ before calling 'window-deletable-p' on it (Bug#54028).
+
+2022-02-21 Eli Zaretskii
+
+ A friendlier error message from image-mode in an empty buffer
+
+ * lisp/image-mode.el (image-mode): Handle the case where the empty
+ buffer doesn't visit a file (Bug#54084)
+
+2022-02-20 Kyle Meyer
+
+ Update to Org 9.5.2-17-gea6b74
+
+2022-02-18 Eli Zaretskii
+
+ Improve documentation of filling and justification commands
+
+ * doc/lispref/text.texi (Filling):
+ * lisp/textmodes/fill.el (fill-region-as-paragraph)
+ (default-justification, set-justification, justify-current-line):
+ Clarify "canonicalization" of spaces and the meaning of
+ justification styles. (Bug#54047)
+ (set-justification-left, set-justification-right)
+ (set-justification-full): Improve wording of doc strings.
+
+2022-02-18 Eli Zaretskii
+
+ * lisp/progmodes/subword.el (superword-mode): Doc fix. (Bug#54045)
+
+2022-02-17 Philipp Stephani
+
+ Fix indexing of module functions that return complex types.
+
+ Return types that consist of more than one word need to be enclosed in
+ braces, see Info node `(texinfo) Typed Functions'. Otherwise they are
+ indexed incorrectly.
+
+ * doc/lispref/internals.texi (Module Values): Enclose multi-word
+ return types in braces.
+
+2022-02-17 Po Lu
+
+ Prevent crashes caused by invalid locale coding systems
+
+ * src/xterm.c (handle_one_xevent): Prevent a signal inside
+ `setup_coding_system' which crashes recent versions of GLib if
+ the locale coding system is invalid.
+
+ Do not merge to master.
+
+2022-02-15 Michael Albinus
+
+ Fix problem with popd for in remote shell buffers
+
+ * lisp/shell.el (shell-prefixed-directory-name):
+ Use `file-local-name' for DIR. (Bug#53927)
+
+2022-02-15 Jonas Bernoulli
+
+ Import texi source file for transient manual
+
+ * doc/misc/Makefile.in: Add transient to INFO_COMMON.
+ * doc/misc/transient.texi: New file.
+
+2022-02-13 Kyle Meyer
+
+ Update to Org 9.5.2-15-gc5ceb6
+
+2022-02-13 Eli Zaretskii
+
+ Fix 'exchange-point-and-mark' in 'transient-mark-mode'
+
+ * lisp/simple.el (exchange-point-and-mark): Don't deactivate mark
+ when 'transient-mark-mode' is ON. (Bug#53150)
+
+ (cherry picked from commit 415ed4b42515ff2e6dd9b94e964b479e50c6392e)
+
+2022-02-13 Eli Zaretskii
+
+ Fix "C-SPC C-SPC" after "C-x C-x"
+
+ * lisp/simple.el (exchange-point-and-mark): Fix what the command
+ does when 'transient-mark-mode' is OFF. (Bug#52896)
+
+ (cherry picked from commit 19c6cad1821eb896b2ddd0f6eab030f0880ea254)
+
+2022-02-13 Eli Zaretskii
+
+ Fix a typo in fontset.el
+
+ * lisp/international/fontset.el (xlfd-regexp-spacing-subnum): Fix
+ a typo. Reported by Greg A. Woods .
+
+2022-02-12 Eli Zaretskii
+
+ Note in ELisp manual that too-wide images are truncated
+
+ * doc/lispref/display.texi (Showing Images): Note that images are
+ truncated at the window's edge. (Bug#53952)
+
+2022-02-11 Andrea Corallo
+
+ * lisp/mail/emacsbug.el (report-emacs-bug): Report libgccjit status.
+
+ * lisp/startup.el (normal-top-level): Small code move, improve 202d3be873.
+
+2022-02-10 Andrea Corallo
+
+ * lisp/startup.el (normal-top-level): Disable native-comp if not available
+
+2022-02-09 Andrea Corallo
+
+ Fix integer arithmetic miss-compilation (bug#53451)
+
+ * lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-range-for-arithm):
+ When one of the two sources is negated revert to set dst as
+ number.
+ * test/src/comp-tests.el (comp-tests-type-spec-tests): Add test to
+ verify this is effective.
+
+2022-02-08 Robert Pluim
+
+ Mark flymake as compatible with emacs-26.1
+
+ * lisp/progmodes/flymake.el: Bump package version and set
+ emacs version in Package-Requires to 26.1 (Bug#53853).
+
+2022-02-08 Brian Leung
+
+ flymake: Ensure compatibility with older Emacsen
+
+ * lisp/progmodes/flymake.el (flymake--log-1): Use
+ replace-regexp-in-string instead of Emacs 28's
+ string-replace (bug#53853).
+
+2022-02-07 Eric Abrahamsen
+
+ Don't remove dummy.group from gnus-newsrc-alist on Gnus save
+
+ bug#53352
+
+ * lisp/gnus/gnus-start.el (gnus-gnus-to-quick-newsrc-format): This
+ function was removing dummy.group from the global value of
+ `gnus-newsrc-alist' on save; we only wanted to remove it temporarily.
+
+2022-02-05 Bob Rogers
+
+ Fix ietf-drums-get-comment doc string
+
+ * lisp/mail/ietf-drums.el (ietf-drums-get-comment): We really return
+ the last comment (bug#53810).
+
+2022-02-05 Daniel Martín
+
+ Fix typo in display.texi
+
+ * doc/lispref/display.texi (Making Buttons): Fix typo. (Bug#53807)
+
+2022-02-03 Michael Albinus
+
+ Revert an erroneous change in tramp-cache.el
+
+ * lisp/net/tramp-cache.el (tramp-get-hash-table):
+ Use `string-match-p' instead of `string-search'. The latter one
+ was introduced by accident. Reported by Kai Tetzlaff .
+
+2022-02-02 Eli Zaretskii
+
+ Improve documentation of 'emacs-version'
+
+ * doc/emacs/trouble.texi (Checklist): Mention the possibility of
+ invoking 'emacs-version' with a prefix argument.
+
+ * lisp/version.el (emacs-version): Improve doc string. (Bug#53720)
+
+2022-02-01 Michael Albinus
+
+ * etc/NEWS: Apply final fixes after proofreading.
+
+2022-01-31 Eli Zaretskii
+
+ Clarify documentation of a "face's font"
+
+ * doc/lispref/display.texi (Attribute Functions)
+ (Face Attributes): Clarify that the :font attribute of a face and
+ the font returned by 'face-font' are by default for ASCII
+ characters. (Bug#53664)
+
+2022-01-31 Alan Mackenzie
+
+ Bind Qdebugger to Qdebug in signal_or_quit.
+
+ * src/eval.c (signal_or_quit): Bind the correct variable, Qdebugger (not
+ Vdebugger) to Qdebug in the section for errors in batch jobs.
+ (syms_of_eval): New DEFSYM for Qdebugger.
+
+2022-01-30 Kyle Meyer
+
+ Update to Org 9.5.2-13-gdd6486
+
+2022-01-30 Eli Zaretskii
+
+ Fix regression in Occur Edit mode
+
+ * lisp/replace.el (occur-after-change-function): Fix the algorithm
+ to find the smallest change in some corner cases. (Bug#53598)
+
+2022-01-29 Eli Zaretskii
+
+ Fix last change of Malayalam composition rules
+
+ * lisp/language/indian.el (malayalam-composable-pattern):
+ Reinstate. Instead of removing it, add any sequence of
+ Malayalam characters to the existing patterns, so as not
+ to lose the patterns that use ZWJ and ZWNJ. (Bug#53625)
+
+2022-01-29 Eli Zaretskii
+
+ Fix rendering of Malayalam script
+
+ * lisp/language/indian.el (malayalam-composable-pattern): Remove.
+ (script-regexp-alist): Remove 'malayalam-composable-pattern'.
+ Instead, pass any sequence of Malayalam codepoints to the shaping
+ engine. (Bug#53625)
+
+2022-01-29 Eli Zaretskii
+
+ Improve documentation of Occur mode
+
+ * doc/emacs/search.texi (Other Repeating Search): Improve wording
+ and document Occur Edit mode better.
+
+2022-01-29 Alan Third
+
+ Remove debug logging
+
+ * src/nsterm.m ([EmacsView copyRect:to:]): Remove logging as it's no
+ longer required.
+
+2022-01-29 Michael Albinus
+
+ Fix error in filelock.c
+
+ * src/filelock.c (lock_file): Move call of file name handler to
+ `Flock_file'. Determine lock_filename only in case
+ create_lockfiles is non-nil. Adapt the rest of the function accordingly.
+ (Flock_file): Do not check for create_lockfiles. Call file name
+ handler if appropriate. (Bug#53207)
+
+2022-01-27 Juri Linkov
+
+ * lisp/frame.el (clone-frame): Filter out 'parent-id' (bug#51883).
+
+2022-01-26 Lars Ingebrigtsen
+
+ Partially revert a fill-region-as-paragraph regression
+
+ * lisp/textmodes/fill.el (fill-region-as-paragraph): Revert
+ e186af261 (bug#53537), because it leads to regressions. (But
+ leave tests in place.)
+
+2022-01-26 Eli Zaretskii
+
+ Fix 'make_lispy_position' when there's an image at EOB
+
+ * src/xdisp.c (move_it_to): Don't compare IT_CHARPOS with an
+ invalid TO_CHARPOS. (Bug#53546)
+
+2022-01-26 Lars Ingebrigtsen
+
+ Fix copyright-find-copyright when searching from the end
+
+ * lisp/emacs-lisp/copyright.el (copyright-find-copyright): Make
+ the double check also work when searching from the end (bug#7179).
+
+ Do not merge to master.
+
+2022-01-26 Lars Ingebrigtsen
+
+ Fix copyright.el comment and add a test
+
+ * lisp/emacs-lisp/copyright.el (copyright-find-copyright): Fix
+ comment (bug#7179).
+
+ Do not merge to master.
+
+2022-01-24 Philipp Stephani
+
+ * configure.ac (LIBSECCOMP): Bump minimum version for faccessat2.
+
+2022-01-24 Lars Ingebrigtsen
+
+ Make the `f' command work in image-mode again
+
+ * lisp/image.el (image-show-frame): Protect against not having
+ computed the animation data yed (bug#53489).
+
+2022-01-22 Philipp Stephani
+
+ Seccomp: improve support for newer versions of glibc (Bug#51073)
+
+ * lib-src/seccomp-filter.c (main): Allow 'pread64' and 'faccessat2'
+ system calls. Newer versions of glibc use these system call (starting
+ with commits 95c1056962a3f2297c94ce47f0eaf0c5b6563231 and
+ 3d3ab573a5f3071992cbc4f57d50d1d29d55bde2, respectively).
+
+2022-01-21 Thomas Fitzsimmons
+
+ EUDC: Fix a quoting bug in the BBDB backend
+
+ * lisp/net/eudcb-bbdb.el (eudc-bbdb-query-internal): Fix a quoting
+ bug introduced during lexical-binding conversion.
+
+2022-01-21 Sergey Vinokurov
+
+ Fix memory-report-object-size to initialize memory-report--type-size
+
+ * lisp/emacs-lisp/memory-report.el (memory-report-object-size):
+ Allow using function directly (bug#53310).
+
+ Do not merge to master.
+
+2022-01-20 Stefan Monnier
+
+ Fix menu-bar mouse clicks in "C-h c" and "C-h k" (bug#53322)
+
+ * lisp/subr.el (event-start, event-end): Handle '(menu-bar)'
+ events.
+ * lisp/net/browse-url.el (browse-url-interactive-arg): Simplify
+ accordingly.
+
+ (cherry picked from commit 9ceb3070e34ad8a54184fd0deda477bf5ff77000)
+
+2022-01-20 Eli Zaretskii (tiny change)
+
+ Fix UB in ebrowse
+
+ * lib-src/ebrowse.c (matching_regexp): Avoid writing beyond the
+ limits of 'matching_regexp_buffer'. Patch by Jan Stranik
+ . (Bug#53333)
+
+2022-01-20 Lars Ingebrigtsen
+
+ Fix execute-extended-command-for-buffer in fundamental-mode
+
+ * lisp/simple.el (execute-extended-command-for-buffer): Protect
+ against the current local map being nil (bug#52907).
+
+2022-01-20 Martin Rudalics
+
+ Add workaround to handle a problem with Enlightenment WM (Bug#53298)
+
+ * src/xterm.c (handle_one_xevent): Handle setting of variable
+ 'x_set_frame_visibility_more_laxly' when receiving an Expose or
+ FocusIn event (Bug#53298).
+ (Qexpose): Define symbol.
+ (x_set_frame_visibility_more_laxly): New Lisp variable.
+ * etc/PROBLEMS: Mention frame redraw problem with the
+ Enlightenment WM and 'x-set-frame-visibility-more-laxly'
+ workaround.
+
+2022-01-17 Po Lu
+
+ Fix regression leading to flickering tooltips when the mouse is moved
+
+ * lisp/tooltip.el (tooltip-show-help): Compare string with
+ previous tooltip string ignoring properties.
+
+2022-01-17 Andrea Corallo
+
+ * Fix native comp for non trivial function names (bug#52833)
+
+ * lisp/emacs-lisp/comp.el (comp-c-func-name): Fix native compilation
+ for functions with function names containing non trivial
+ characters (bug#52833).
+
+ This commit is the backport of e7699bf290.
+
+ Do not merge to master
+
+2022-01-15 Kyle Meyer
+
+ Update to Org 9.5.2-9-g7ba24c
+
+2022-01-15 Juri Linkov
+
+ * lisp/net/dictionary.el (dictionary-context-menu): Use package prefix.
+
+2022-01-15 Philipp Stephani
+
+ Mark a few more map tests as unstable on Emacs 28 (Bug#46722).
+
+ At least for me, these tests still occasionally fail.
+
+ Do not merge to master.
+
+ * test/lisp/emacs-lisp/map-tests.el (test-map-into-hash-test)
+ (test-map-merge, test-map-merge-with, test-map-merge-empty): Mark as
+ unstable.
+
+2022-01-15 Philipp Stephani
+
+ * lisp/indent.el (tab-first-completion): Fix incorrect choices.
+
+2022-01-14 Philipp Stephani
+
+ * lisp/simple.el (undo-no-redo): Fix customization group
+
+ * lisp/progmodes/xref.el (xref-file-name-display): Fix docstring.
+
+2022-01-14 Eli Zaretskii
+
+ Avoid another segfault in 'face_at_buffer_position'
+
+ * src/xfaces.c (face_at_buffer_position): Make really sure the
+ default face is usable. (Bug#53254)
+
+2022-01-14 Lars Ingebrigtsen
+
+ Mark test-map-into as unstable
+
+ * test/lisp/emacs-lisp/map-tests.el (test-map-into): Mark as
+ unstable (bug#46722).
+
+ Do not merge to master.
+
+2022-01-13 Philipp Stephani
+
+ Fix Edebug specification for inline functions (Bug#53068).
+
+ * lisp/emacs-lisp/inline.el (inline-quote): Fix Edebug specification.
+
+ * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-inline): New unit
+ test.
+
+2022-01-13 N. Jackson
+
+ Remove mention of removed `gnus-treat-play-sounds' variable from manual
+
+ * info/gnus.info: Remove `gnus-treat-play-sounds' from
+ manual. According to lisp/gnus/ChangeLog.3 this variable was
+ removed in 2010 (bug#53192).
+
+2022-01-12 Mattias Engdegård
+
+ Revert "Fix closure-conversion of shadowed captured lambda-lifted vars"
+
+ This reverts commit 3ec8c8b3ae2359ceb8135b672e86526969c16b7e.
+
+ It was committed to a stable branch without prior discussion;
+ see bug#53071.
+
+2022-01-12 Juri Linkov
+
+ * doc/lispref/windows.texi (Textual Scrolling): Remove obsolete text.
+
+ Remove text about scrolling the minibuffer from the buffer,
+ obsolete since Emacs 27 (bug#51210).
+
+2022-01-12 Glenn Morris
+
+ * lisp/files.el (lock-file-name-transforms): Doc tweaks.
+
+2022-01-12 Mattias Engdegård
+
+ Fix closure-conversion of shadowed captured lambda-lifted vars
+
+ Lambda-lifted variables (ones passed explicitly to lambda-lifted
+ functions) that are also captured in an outer closure and shadowed
+ were renamed incorrectly (bug#51982).
+
+ Reported by Paul Pogonyshev.
+
+ * lisp/emacs-lisp/cconv.el (cconv--lifted-arg): New.
+ (cconv-convert): Provide correct definiens for the closed-over
+ variable.
+ * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+ * test/lisp/emacs-lisp/cconv-tests.el (cconv-tests--intern-all)
+ (cconv-closure-convert-remap-var): Add tests.
+
+ (cherry picked from commit 45252ad8f932c98a373ef0ab7f3363a3e27ccbe4)
+
+2022-01-12 Philipp Stephani
+
+ Fix test lisp/cedet/semantic/bovine/gcc-tests on macOS (Bug#52431)
+
+ * test/lisp/cedet/semantic/bovine/gcc-tests.el
+ (semantic-gcc-test-output-parser-this-machine): Also detect Apple
+ clang on macOS Monterey.
+
+ (cherry picked from commit 6e52becfbe2a33c025b8c4838b3c8f06ba5a6fb8)
+
+2022-01-12 Mattias Engdegård
+
+ Don't fail flymake-tests if `gcc` actually is Clang
+
+ * test/lisp/progmodes/flymake-tests.el (flymake-tests--gcc-is-clang)
+ (different-diagnostic-types, included-c-header-files): Skip tests that
+ depend on the `gcc` command really being GCC and not Clang.
+
+ (cherry picked from commit b2167d98432a78442522b7564e22f47d75a98b6f)
+
+2022-01-10 Eli Zaretskii
+
+ Revert "Remove the filename argument from the command line after an ELC+ELN build"
+
+ This reverts commit ffc047c896413b6e00032518fc934f08768671fa.
+
+ Please don't install anything non-trivial on the release branch
+ without asking first.
+
+2022-01-10 Alan Mackenzie
+
+ Remove the filename argument from the command line after an ELC+ELN build
+
+ This fixes bug #53164. Without this fix, bootstrap-emacs loads the source
+ file uselessly into a buffer after completing the compilation.
+
+2022-01-09 Stefan Monnier
+
+ (save-some-buffers): Simplify the fix for bug#46374
+
+ * lisp/files.el (save-some-buffers): Only check the
+ `save-some-buffers-function` property on functions from
+ `save-some-buffers-default-predicate` since callers which provide
+ a `pred` argument can arrange to compute `pred` themselves if needed.
+
+ * test/lisp/files-tests.el (files-tests-buffer-offer-save): Don't test
+ with `pred` set to `save-some-buffers-root` since it's not an
+ appropriate function for that any more.
+
+2022-01-09 Stefan Kangas
+
+ Improve docstring of edit-abbrevs
+
+ * lisp/abbrev.el (edit-abbrevs): Doc fix; don't use obsolete name.
+ Improve docstring formatting.
+
+2022-01-09 Eli Zaretskii
+
+ Revert "Fix alignment on font size change in tabulated-list-mode"
+
+ This reverts commit 2767c89db729a6106146d0aeff76678c64d4fc53.
+
+ That change caused a regression in a much more important use
+ case, see bug#53133.
+
+2022-01-08 Stefan Kangas
+
+ Clarify docstring of package-native-compile
+
+ * lisp/emacs-lisp/package.el (package-native-compile): Clarify
+ docstring.
+
+2022-01-08 Eli Zaretskii
+
+ Fix Subject "simplification" in Rmail
+
+ * lisp/mail/rmail.el (rmail-simplified-subject): Match against
+ "[external]" _after_ decoding the Subject by RFC-2047.
+
+2022-01-08 Stefan Kangas
+
+ Bump Emacs version to 28.0.91
+
+ * README:
+ * configure.ac:
+ * msdos/sed2v2.inp:
+ * nt/README.W32: Bump Emacs version to 28.0.91.
+
2022-01-05 Dmitry Gutov
Fix vc-git with old Git over Tramp and cygwin-mount.el
@@ -234065,7 +234865,7 @@
This file records repository revisions from
commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit e7aa3ece52d26cc7e4d3f3990aff56127389779f (inclusive).
+commit dbe6a3ecf74536cbfb7ca59630b48020ae4e732a (inclusive).
See ChangeLog.2 for earlier changes.
;; Local Variables:
diff --git a/README b/README
index 2abcadd76c17..7840e7a10841 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
-This directory tree holds version 28.0.91 of GNU Emacs, the extensible,
+This directory tree holds version 28.0.92 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
diff --git a/configure.ac b/configure.ac
index 9e8519dc3c2f..7c2b7aa62e50 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see .
AC_PREREQ(2.65)
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 28.0.91, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
+AC_INIT(GNU Emacs, 28.0.92, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
dnl and then quoted again for a C string. Separate options with spaces.
diff --git a/etc/AUTHORS b/etc/AUTHORS
index 0029a4b97f25..8281aa96927a 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -68,7 +68,7 @@ Adrian Robert: co-wrote ns-win.el
and changed nsterm.m nsfns.m nsfont.m nsterm.h nsmenu.m configure.ac
src/Makefile.in macos.texi README config.in emacs.c font.c keyboard.c
nsgui.h nsimage.m xdisp.c image.c lib-src/Makefile.in lisp.h menu.c
- Makefile.in and 78 other files
+ Makefile.in and 79 other files
Ævar Arnfjörð Bjarmason: changed rcirc.el
@@ -105,8 +105,8 @@ and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-fonts.el
cc-langs.el cc-mode.el cc-styles.el cc-vars.el
and changed cc-mode.texi minibuf.c bytecomp.el edebug.el follow.el
window.c display.texi subr.el syntax.texi progmodes/compile.el
- programs.texi keyboard.c lisp.h modes.texi window.el windows.texi
- cus-start.el eval.c font-lock.el isearch.el newcomment.el
+ programs.texi eval.c keyboard.c lisp.h modes.texi window.el
+ windows.texi cus-start.el font-lock.el isearch.el newcomment.el
and 166 other files
Alan Modra: changed unexelf.c
@@ -127,8 +127,7 @@ and changed nsterm.m nsterm.h nsfns.m image.c nsmenu.m configure.ac
Alastair Burt: changed gnus-art.el smiley.el
Albert Krewinkel: co-wrote sieve-manage.el
-and changed sieve.el gnus-msg.el gnus.texi mail/sieve-manage.el
- message.el sieve.texi
+and changed sieve.el gnus-msg.el gnus.texi message.el sieve.texi
Albert L. Ting: changed gnus-group.el mail-hist.el
@@ -181,7 +180,7 @@ Alexandre Julliard: wrote vc-git.el
and changed vc.el ewoc.el
Alexandre Oliva: wrote gnus-mlspl.el
-and changed unexelf.c emacs-regex.c format.el iris4d.h iris5d.h unexsgi.c
+and changed unexelf.c format.el iris4d.h iris5d.h regex-emacs.c unexsgi.c
Alexandre Veyrenc: changed fr-refcard.tex
@@ -332,9 +331,9 @@ Andreas Schwab: changed configure.ac lisp.h xdisp.c process.c alloc.c
Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el
gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el
- url-http.el xterm.c battery.el comint.el doc/misc/gnus.texi
- easy-mmode.el gmm-utils.el gnus-art.el gnus-cite.el gnus-draft.el
- gnus-group.el and 7 other files
+ url-http.el xterm.c battery.el comint.el easy-mmode.el gmm-utils.el
+ gnus-art.el gnus-cite.el gnus-draft.el gnus-group.el gnus-ml.el
+ and 6 other files
Andreas Vögele: changed pgg-def.el
@@ -376,9 +375,9 @@ Andrew Hyatt: changed bug-triage CONTRIBUTE org-archive.el org.el
org.texi
Andrew Innes: changed makefile.nt w32fns.c w32term.c w32.c w32proc.c
- fileio.c w32-fns.el dos-w32.el inc/ms-w32.h w32term.h makefile.def
+ fileio.c ms-w32.h w32-fns.el dos-w32.el w32term.h makefile.def
unexw32.c w32menu.c w32xfns.c addpm.c cmdproxy.c emacs.c w32-win.el
- w32inevt.c configure.bat lread.c and 129 other files
+ w32inevt.c configure.bat lread.c and 128 other files
Andrew L. Moore: changed executable.el
@@ -434,11 +433,11 @@ Ansgar Burchardt: changed latin-ltx.el
Antoine Beaupré: changed vc-git.el
-Antoine Levitt: changed gnus-group.el gnus-sum.el message.texi
+Antoine Levitt: changed gnus-group.el gnus-sum.el message.texi ada-prj.el
ange-ftp.el cus-edit.el dired-x.el ebnf2ps.el emerge.el erc-button.el
erc-goodies.el erc-stamp.el erc-track.el files.el find-file.el
gnus-art.el gnus-uu.el gnus.el gnus.texi message.el mh-funcs.el
- mh-mime.el and 7 other files
+ and 8 other files
Antonin Houska: changed newcomment.el
@@ -479,11 +478,11 @@ Arthur Miller: changed help-fns.el ange-ftp.el bytecomp.el comp.c comp.el
Artur Malabarba: wrote char-fold-tests.el faces-tests.el isearch-tests.el
let-alist.el simple-tests.el sort-tests.el tabulated-list-tests.el
-and changed package.el isearch.el lisp/char-fold.el files.el
- tabulated-list.el package-test.el menu-bar.el replace.el bytecomp.el
- faces.el files-x.el custom.el custom.texi help-fns.el
- let-alist-tests.el simple.el subr-tests.el align.el bindings.el
- cl-lib-tests.el cl-macs.el and 43 other files
+and changed package.el isearch.el char-fold.el files.el tabulated-list.el
+ package-test.el menu-bar.el replace.el bytecomp.el faces.el files-x.el
+ custom.el custom.texi help-fns.el let-alist-tests.el simple.el
+ subr-tests.el align.el bindings.el cl-lib-tests.el cl-macs.el
+ and 43 other files
Artyom Loenko: changed Info.plist.in
@@ -576,7 +575,7 @@ and changed org-clock.el org.el
Benjamin Ragheb: changed fortune.el
Benjamin Riefenstahl: changed files.el image-mode.el nnrss-tests.el
- w32select.c emacs.c image.el inc/ms-w32.h lisp.h mac-win.el macterm.c
+ w32select.c emacs.c image.el lisp.h mac-win.el macterm.c ms-w32.h
mule-cmds.el nnrss.el runemacs.c tcl.el w32.c w32.h
Benjamin Rutt: co-wrote gnus-dired.el
@@ -584,7 +583,7 @@ and changed vc.el gnus-msg.el message.el diff-mode.el ffap.el nnimap.el
nnmbox.el simple.el vc-cvs.el
Ben Key: changed w32.c w32fns.c w32menu.c configure.bat INSTALL w32.h
- w32term.c configure.ac emacs.c inc/ms-w32.h keyboard.c make-docfile.c
+ w32term.c configure.ac emacs.c keyboard.c make-docfile.c ms-w32.h
nsfont.m nsterm.m sound.c xfaces.c
Ben Menasha: changed nnmh.el
@@ -656,8 +655,8 @@ Bob Nnamtrop: changed viper-cmd.el
Bob Olson: co-wrote cperl-mode.el
Bob Rogers: changed vc-dir.el vc-svn.el cperl-mode.el diff.el ewoc.el
- ffap.el files.el maintaining.texi sql.el thingatpt.el vc.el
- vc1-xtra.texi
+ ffap.el files.el ietf-drums.el maintaining.texi sql.el thingatpt.el
+ vc.el vc1-xtra.texi
Bob Weiner: changed info.el quail.el dframe.el etags.c rmail.el
rmailsum.el speedbar.el
@@ -709,7 +708,8 @@ Brian Fox: changed Makefile.in Makefile configure.ac minibuf.c dired.el
Brian Jenkins: changed frame.c frames.texi hooks.texi
Brian Leung: changed comint.el gud.el advice.el comp.c comp.el em-hist.el
- files.el find-func.el gdb-mi.el help.el nadvice.el shell.el shortdoc.el
+ files.el find-func.el flymake.el gdb-mi.el help.el nadvice.el shell.el
+ shortdoc.el
Brian Marick: co-wrote hideif.el
@@ -833,7 +833,7 @@ and co-wrote longlines.el tango-dark-theme.el tango-theme.el
and changed simple.el display.texi xdisp.c files.el frames.texi
cus-edit.el files.texi custom.el subr.el text.texi faces.el keyboard.c
startup.el package.el misc.texi emacs.texi modes.texi mouse.el
- custom.texi image.c window.el and 932 other files
+ custom.texi image.c window.el and 934 other files
Chris Chase: co-wrote idlw-shell.el idlwave.el
@@ -850,8 +850,8 @@ Chris Hall: changed callproc.c frame.c
Chris Hanson: changed xscheme.el scheme.el xterm.c hpux.h x11term.c
hp9000s300.h keyboard.c process.c texinfmt.el sort.el syntax.c
- texnfo-upd.el x11fns.c xfns.c dired.el emacs-regex.c emacsclient.c
- fileio.c hp9000s800.h indent.c info.el and 17 other files
+ texnfo-upd.el x11fns.c xfns.c dired.el emacsclient.c fileio.c
+ hp9000s800.h indent.c info.el man.el and 17 other files
Chris Hecker: changed calc-aent.el
@@ -973,12 +973,10 @@ Claudio Fontana: changed Makefile.in leim/Makefile.in lib-src/Makefile.in
Clemens Radermacher: changed cus-start.el frame.c minibuf.texi window.el
-Clément Pit--Claudel: changed debugging.texi emacs-lisp/debug.el eval.c
- progmodes/python.el subr-tests.el subr.el url-http.el url-vars.el
-
Clément Pit-Claudel: changed Dockerfile.emba button.el configure.ac
- display.texi ert.el gitlab-ci.yml keyboard.c tex-mode.el text.texi
- xdisp.c
+ debugging.texi display.texi emacs-lisp/debug.el ert.el eval.c
+ gitlab-ci.yml keyboard.c progmodes/python.el subr-tests.el subr.el
+ tex-mode.el text.texi url-http.el url-vars.el xdisp.c
Codruț Constantin Gușoi: changed files.el
@@ -1114,9 +1112,9 @@ Daniel Lublin: changed dns-mode.el
Daniel Martín: changed shortdoc.el nsterm.m erc.texi files.el files.texi
msdos-xtra.texi ns-win.el basic.texi cmacexp.el compilation.txt
- compile-tests.el cscope.el diff.el dired.el editfns.c emacs.texi
- files-tests.el find-func-tests.el find-func.el frame.c frame.el
- and 16 other files
+ compile-tests.el cscope.el diff.el dired.el display.texi editfns.c
+ emacs.texi files-tests.el find-func-tests.el find-func.el frame.c
+ and 17 other files
Daniel McClanahan: changed lisp-mode.el
@@ -1201,7 +1199,7 @@ and co-wrote latin-ltx.el socks.el
and changed configure.ac help.el mule-cmds.el fortran.el mule-conf.el
xterm.c browse-url.el mule.el coding.c src/Makefile.in european.el
fns.c mule-diag.el simple.el wid-edit.el cus-edit.el cus-start.el
- files.el keyboard.c byte-opt.el info.el and 771 other files
+ files.el keyboard.c byte-opt.el info.el and 772 other files
Dave Pearson: wrote 5x5.el quickurl.el
@@ -1273,7 +1271,7 @@ David Hedbor: changed nnmail.el
David Hull: changed etags.c vc-hg.el
-David Hunter: changed flymake.el inc/ms-w32.h process.c
+David Hunter: changed flymake.el ms-w32.h process.c
David J. Biesack: changed antlr-mode.el quickurl.el
@@ -1371,10 +1369,10 @@ Debarshi Ray: changed erc-backend.el erc.el
Decklin Foster: changed nngateway.el
-Deepak Goel: changed idlw-shell.el feedmail.el files.el find-func.el
- flymake.el mh-search.el mh-seq.el mh-thread.el mh-xface.el org.el
- simple.el vc.el vhdl-mode.el wdired.el README allout.el appt.el
- apropos.el artist.el bibtex.el bindings.el and 83 other files
+Deepak Goel: changed idlw-shell.el ada-xref.el feedmail.el files.el
+ find-func.el flymake.el mh-search.el mh-seq.el mh-thread.el mh-xface.el
+ org.el simple.el vc.el vhdl-mode.el wdired.el README ada-mode.el
+ allout.el appt.el apropos.el artist.el and 85 other files
D. E. Evans: changed basic.texi
@@ -1477,7 +1475,7 @@ and changed xref.el ruby-mode.el project.el vc-git.el elisp-mode.el
etags.el ruby-mode-tests.el js.el vc.el vc-hg.el package.el
symref/grep.el dired-aux.el simple.el log-edit.el minibuffer.el
progmodes/grep.el ido.el maintaining.texi menu-bar.el package-test.el
- and 123 other files
+ and 122 other files
Dmitry Kurochkin: changed isearch.el
@@ -1574,8 +1572,8 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c]
and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c w32fns.c simple.el
files.el fileio.c keyboard.c emacs.c w32term.c text.texi dispnew.c
- w32proc.c files.texi frames.texi configure.ac lisp.h dispextern.h
- process.c editfns.c and 1232 other files
+ w32proc.c files.texi frames.texi configure.ac dispextern.h lisp.h
+ process.c ms-w32.h and 1235 other files
Eliza Velasquez: changed server.el
@@ -1596,7 +1594,7 @@ Emilio C. Lopes: changed woman.el cmuscheme.el help.el vc.el advice.el
and 58 other files
Emmanuel Briot: wrote xml.el
-and changed ada-stmt.el
+and changed ada-mode.el ada-stmt.el ada-prj.el ada-xref.el
Era Eriksson: changed bibtex.el dired.el json.el ses.el ses.texi shell.el
tramp.el tramp.texi
@@ -1763,10 +1761,10 @@ Fabrice Nicol: changed etags.c etags.1
Fabrice Niessen: wrote leuven-theme.el
and changed org-agenda.el
-Fabrice Popineau: changed w32.c ms-w32.h w32fns.c w32heap.c w32term.c
+Fabrice Popineau: changed ms-w32.h w32.c w32fns.c w32heap.c w32term.c
configure.ac lisp.h unexw32.c buffer.c emacs.c image.c w32heap.h
w32proc.c w32term.h INSTALL addsection.c alloc.c dispextern.h
- emacs-regex.c emacs-x64.manifest emacs-x86.manifest and 25 other files
+ emacs-x64.manifest emacs-x86.manifest etags.c and 24 other files
Fan Kai: changed esh-arg.el
@@ -1821,7 +1819,7 @@ Florian Adamsky: changed recentf.el
Florian Beck: changed org.el
-Florian Ragwitz: changed gnus-html.el mail/sieve-manage.el
+Florian Ragwitz: changed gnus-html.el sieve-manage.el
Florian V. Savigny: changed sql.el
@@ -1949,7 +1947,7 @@ and changed edebug.el cl-print.el edebug.texi emacs-lisp/debug.el
cl-print-tests.el debugging.texi cl-macs.el edebug-test-code.el subr.el
testcases.el testcover.el cl-generic.el ert-x.el eval.c eieio-compat.el
elisp.texi ert.el ert.texi eval-tests.el generator.el print.c
- and 24 other files
+ and 23 other files
Geoff Gole: changed align.el ibuffer.el whitespace.el
@@ -1960,9 +1958,9 @@ Geoff Kuenning: changed gnus-art.el gnus.texi
Geoff Voelker: wrote ms-w32.h w32-fns.el w32.c w32.h w32heap.c w32heap.h
w32inevt.c w32proc.c w32term.c
and changed makefile.nt w32fns.c fileio.c makefile.def callproc.c
- s/ms-w32.h emacs.bat.in unexw32.c w32term.h dos-w32.el loadup.el
- w32-win.el emacs.c keyboard.c ntterm.c process.c w32console.c addpm.c
- cmdproxy.c comint.el files.el and 100 other files
+ emacs.bat.in unexw32.c w32term.h dos-w32.el loadup.el w32-win.el
+ emacs.c keyboard.c ntterm.c process.c w32console.c addpm.c cmdproxy.c
+ comint.el files.el sysdep.c and 97 other files
Georg C. F. Greve: changed pgg-gpg.el
@@ -1980,7 +1978,7 @@ Gerd Möllmann: wrote authors.el ebrowse.el jit-lock.el tooltip.el
and changed xdisp.c xterm.c dispnew.c dispextern.h xfns.c xfaces.c
window.c keyboard.c lisp.h faces.el alloc.c buffer.c startup.el xterm.h
fns.c simple.el term.c configure.ac frame.c xmenu.c emacs.c
- and 607 other files
+ and 610 other files
Gergely Nagy: changed erc.el
@@ -2008,7 +2006,7 @@ and changed configure.ac Makefile.in src/Makefile.in calendar.el
lisp/Makefile.in diary-lib.el files.el make-dist rmail.el
progmodes/f90.el bytecomp.el admin.el misc/Makefile.in simple.el
authors.el startup.el emacs.texi lib-src/Makefile.in display.texi
- ack.texi subr.el and 1790 other files
+ ack.texi subr.el and 1789 other files
Glynn Clements: wrote gamegrid.el snake.el tetris.el
@@ -2232,7 +2230,7 @@ Ilya Shlyakhter: changed org.el ob-lilypond.el org-clock.el
Ilya Zakharevich: wrote tmm.el
and co-wrote cperl-mode.el
and changed w32fns.c syntax.c intervals.c syntax.h textprop.c dired.c
- emacs-regex.c emacs-regex.h font-lock.el intervals.h search.c
+ font-lock.el intervals.h regex-emacs.c regex-emacs.h search.c
Ilya Zonov: changed org-mouse.el
@@ -2276,7 +2274,8 @@ Itai Y. Efrat: changed browse-url.el
Itai Zukerman: changed mm-decode.el
Ivan Andrus: changed editfns.c epg.el ffap.el find-file.el ibuf-ext.el
- ibuffer.el newcomment.el nxml-mode.el progmodes/python.el
+ ibuffer.el newcomment.el nextstep/templates/Info.plist.in nxml-mode.el
+ progmodes/python.el
Ivan Boldyrev: changed mml1991.el
@@ -2456,7 +2455,7 @@ Jason Rumney: wrote w32-vars.el
and changed w32fns.c w32term.c w32font.c w32menu.c w32-win.el w32term.h
w32.c w32uniscribe.c w32-fns.el makefile.nt w32console.c w32bdf.c
configure.bat keyboard.c w32proc.c w32select.c font.c image.c w32font.h
- w32gui.h xdisp.c and 153 other files
+ w32gui.h xdisp.c and 152 other files
Jason S. Cornez: changed keyboard.c
@@ -2573,8 +2572,8 @@ Jesper Harder: wrote yenc.el
and changed gnus-sum.el gnus-art.el message.el gnus-group.el gnus-msg.el
gnus.el gnus-util.el rfc2047.el mm-bodies.el mm-util.el mml.el
mm-decode.el nnrss.el gnus-srvr.el gnus-topic.el nnmail.el
- gnus-start.el gnus-uu.el spam-stat.el gnus-score.el gnus.texi
- and 202 other files
+ gnus-start.el gnus-uu.el gnus.texi spam-stat.el gnus-score.el
+ and 200 other files
Jhair Tocancipa Triana: changed gnus-audio.el
@@ -2610,10 +2609,10 @@ Jimmy Yuen Ho Wong: changed nsm.el gnutls.c gnutls.el disass.el
Jim Paris: changed process.c
Jim Porter: changed delsel.el ansi-color-tests.el ansi-color.el
- bindings.el term-tests.el term.el tramp.el callproc.c
- dichromacy-theme.el diff-mode.el files-tests.el gdb-mi.el grep-tests.el
- ispell.el leuven-theme.el man.el menu-bar.el misterioso-theme.el
- process.c process.h progmodes/grep.el and 6 other files
+ bindings.el esh-var.el term-tests.el term.el tramp.el callproc.c
+ dichromacy-theme.el diff-mode.el eshell-tests.el eshell.texi
+ files-tests.el gdb-mi.el grep-tests.el ispell.el leuven-theme.el man.el
+ menu-bar.el misterioso-theme.el and 9 other files
Jim Radford: changed gnus-start.el
@@ -2796,7 +2795,7 @@ and changed epa.el epa-file.el lisp-mnt.el tips.texi dired-aux.el
dired-x.el dired.el eieio.el epa-dired.el font-lock.el
progmodes/compile.el simple.el allout.el button.el comint.el
cus-edit.el eldoc.el emacs-module-tests.el epa-hook.el epg-config.el
- epg.el and 9 other files
+ epg.el and 11 other files
Jonas Hoersch: changed org-inlinetask.el org.el
@@ -2858,7 +2857,7 @@ Jorge P. De Morais Neto: changed TUTORIAL cl.texi
Jose A. Ortega Ruiz: changed mixal-mode.el gnus-sum.el url-http.el
-Jose E. Marchesi: changed gomoku.el simple.el smtpmail.el
+Jose E. Marchesi: changed ada-mode.el gomoku.el simple.el smtpmail.el
José L. Doménech: changed dired-aux.el
@@ -2903,7 +2902,7 @@ and co-wrote help-tests.el keymap-tests.el
and changed subr.el desktop.el w32fns.c faces.el simple.el emacsclient.c
files.el server.el bs.el help-fns.el xdisp.c org.el w32term.c w32.c
buffer.c keyboard.c ido.el image.c window.c eval.c allout.el
- and 1226 other files
+ and 1225 other files
Juan Pechiar: changed ob-octave.el
@@ -2926,7 +2925,7 @@ Julien Danjou: wrote erc-desktop-notifications.el gnus-gravatar.el
and co-wrote color.el
and changed shr.el org-agenda.el gnus-art.el nnimap.el gnus-html.el
gnus.el message.el gnus-group.el gnus-sum.el gnus-util.el mm-decode.el
- mm-view.el org.el gnus.texi mail/sieve-manage.el nnir.el mm-uu.el
+ mm-view.el org.el gnus.texi nnir.el sieve-manage.el mm-uu.el
color-lab.el gnus-demon.el gnus-int.el gnus-msg.el and 96 other files
Julien Gilles: wrote gnus-ml.el
@@ -2950,7 +2949,7 @@ Juri Linkov: wrote compose.el files-x.el misearch.el repeat-tests.el
and changed isearch.el simple.el info.el replace.el dired.el dired-aux.el
progmodes/grep.el subr.el window.el image-mode.el mouse.el diff-mode.el
files.el menu-bar.el minibuffer.el progmodes/compile.el startup.el
- faces.el vc.el display.texi search.texi and 444 other files
+ faces.el vc.el display.texi search.texi and 445 other files
Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
w32console.c w32heap.c w32inevt.c w32term.h
@@ -3018,7 +3017,7 @@ and changed simple.el files.el CONTRIBUTE doc-view.el image-mode.el
Karl Heuer: changed keyboard.c lisp.h xdisp.c buffer.c xfns.c xterm.c
alloc.c files.el frame.c configure.ac window.c data.c minibuf.c
editfns.c fns.c process.c Makefile.in fileio.c simple.el keymap.c
- indent.c and 446 other files
+ indent.c and 447 other files
Karl Kleinpaste: changed gnus-sum.el gnus-art.el gnus-picon.el
gnus-score.el gnus-uu.el gnus-xmas.el gnus.el mm-uu.el mml.el nnmail.el
@@ -3048,7 +3047,7 @@ Katsumi Yamaoka: wrote canlock.el
and changed gnus-art.el gnus-sum.el message.el mm-decode.el gnus.texi
mm-util.el mm-view.el gnus-group.el gnus-util.el gnus-msg.el mml.el
shr.el rfc2047.el gnus-start.el gnus.el nntp.el gnus-agent.el nnrss.el
- mm-uu.el nnmail.el emacs-mime.texi and 161 other files
+ mm-uu.el nnmail.el emacs-mime.texi and 159 other files
Kaushal Modi: changed dired-aux.el files.el isearch.el apropos.el
calc-yank.el custom.texi desktop.el dired.el dired.texi ediff-diff.el
@@ -3062,7 +3061,7 @@ Kaveh R. Ghazi: changed delta88k.h xterm.c
Kayvan Sylvan: changed supercite.el
Kazuhiro Ito: changed coding.c uudecode.el flow-fill.el font.c
- japan-util.el keyboard.c make-mode.el net/starttls.el xdisp.c
+ japan-util.el keyboard.c make-mode.el starttls.el xdisp.c
Kazushi Marukawa: changed filelock.c hexl.c profile.c unexalpha.c
@@ -3147,7 +3146,7 @@ and changed edt.texi
Kevin Gallo: wrote w32-win.el
and changed makefile.nt dispnew.c addpm.c config.w95 dispextern.h emacs.c
facemenu.el faces.el fns.c frame.c frame.h keyboard.c makefile.def
- mouse.el ntterm.c process.c s/ms-w32.h scroll.c startup.el sysdep.c
+ mouse.el ms-w32.h ntterm.c process.c scroll.c startup.el sysdep.c
term.c and 18 other files
Kevin Greiner: wrote legacy-gnus-agent.el
@@ -3182,7 +3181,7 @@ Kim F. Storm: wrote bindat.el cua-base.el cua-gmrk.el cua-rect.el ido.el
and changed xdisp.c dispextern.h process.c simple.el window.c keyboard.c
xterm.c dispnew.c subr.el w32term.c lisp.h fringe.c display.texi
macterm.c alloc.c fns.c xfaces.c keymap.c xfns.c xterm.h .gdbinit
- and 248 other files
+ and 249 other files
Kimit Yada: changed copyright.el
@@ -3221,10 +3220,10 @@ Konrad Hinsen: wrote ol-eshell.el
and changed ob-python.el
Konstantin Kharlamov: changed smerge-mode.el diff-mode.el files.el
- autorevert.el calc-aent.el calc-ext.el calc-lang.el cc-mode.el
- cperl-mode.el css-mode.el cua-rect.el dnd.el ebnf-abn.el ebnf-dtd.el
- ebnf-ebx.el emacs-module-tests.el epg.el faces.el gnus-art.el gtkutil.c
- hideif.el and 26 other files
+ ada-mode.el autorevert.el calc-aent.el calc-ext.el calc-lang.el
+ cc-mode.el cperl-mode.el css-mode.el cua-rect.el dnd.el ebnf-abn.el
+ ebnf-dtd.el ebnf-ebx.el emacs-module-tests.el epg.el faces.el
+ gnus-art.el gtkutil.c and 27 other files
Konstantin Kliakhandler: changed org-agenda.el
@@ -3306,8 +3305,8 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el
rfc2047.el svg.el time-date.el
and changed gnus.texi simple.el subr.el files.el process.c text.texi
display.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
- auth-source.el url-http.el edebug.el gnus-cite.el image.el pop3.el
- dired-aux.el fns.c image.c and 860 other files
+ auth-source.el url-http.el edebug.el image.el gnus-cite.el pop3.el
+ dired-aux.el fns.c image.c and 859 other files
Lars Rasmusson: changed ebrowse.c
@@ -3337,11 +3336,11 @@ Lele Gaifax: changed TUTORIAL.it progmodes/python.el flymake.el
python-tests.el flymake-proc.el flymake.texi isearch.el
Lennart Borgman: co-wrote ert-x.el
-and changed nxml-mode.el tutorial.el re-builder.el window.el buff-menu.el
- emacs-lisp/debug.el emacsclient.c filesets.el flymake.el help-fns.el
- isearch.el linum.el lisp-mode.el lisp.el mouse.el progmodes/grep.el
- recentf.el remember.el replace.el reveal.el ruby-mode.el
- and 5 other files
+and changed nxml-mode.el tutorial.el re-builder.el window.el ada-xref.el
+ buff-menu.el emacs-lisp/debug.el emacsclient.c filesets.el flymake.el
+ help-fns.el isearch.el linum.el lisp-mode.el lisp.el mouse.el
+ progmodes/grep.el recentf.el remember.el replace.el reveal.el
+ and 6 other files
Lennart Staflin: changed dired.el diary-ins.el diary-lib.el tq.el xdisp.c
@@ -3379,6 +3378,8 @@ Liang Wang: changed etags.el
Liāu, Kiong-Gē 廖宮毅: changed comp.c mingw-cfg.site
+Lin Zhou: changed w32fns.c w32term.h
+
Lixin Chin: changed bibtex.el
Lloyd Zusman: changed mml.el pgg-gpg.el
@@ -3428,7 +3429,7 @@ Lute Kamstra: changed modes.texi emacs-lisp/debug.el generic-x.el
generic.el font-lock.el simple.el subr.el battery.el debugging.texi
easy-mmode.el elisp.texi emacs-lisp/generic.el hl-line.el info.el
octave.el basic.texi bindings.el calc.el cmdargs.texi diff-mode.el
- doclicense.texi and 288 other files
+ doclicense.texi and 289 other files
Lynn Slater: wrote help-macro.el
@@ -3550,7 +3551,7 @@ Mark Oteiza: wrote mailcap-tests.el md4-tests.el xdg-tests.el xdg.el
and changed image-dired.el dunnet.el mpc.el eww.el json.el calc-units.el
lcms.c subr-x.el subr.el message.el tex-mode.el cl-macs.el cl.texi
ibuffer.el lcms-tests.el mailcap.el progmodes/python.el cl-print.el
- eldoc.el emacs-lisp/chart.el files.el and 173 other files
+ eldoc.el emacs-lisp/chart.el files.el and 172 other files
Mark Plaksin: changed nnrss.el term.el
@@ -3573,7 +3574,7 @@ and changed cus-edit.el files.el progmodes/compile.el rmail.el
tex-mode.el find-func.el rmailsum.el simple.el cus-dep.el dired.el
mule-cmds.el rmailout.el checkdoc.el configure.ac custom.el emacsbug.el
gnus.el help-fns.el ls-lisp.el mwheel.el sendmail.el
- and 125 other files
+ and 126 other files
Markus Sauermann: changed lisp-mode.el
@@ -3618,7 +3619,7 @@ Martin Pohlack: changed iimage.el pc-select.el
Martin Rudalics: changed window.el window.c windows.texi frame.c xdisp.c
xterm.c frames.texi w32fns.c w32term.c xfns.c frame.el display.texi
frame.h cus-start.el help.el buffer.c window.h mouse.el dispnew.c
- nsfns.m gtkutil.c and 212 other files
+ nsfns.m gtkutil.c and 213 other files
Martin Stjernholm: wrote cc-bytecomp.el
and co-wrote cc-align.el cc-cmds.el cc-compat.el cc-defs.el cc-engine.el
@@ -3775,7 +3776,7 @@ and co-wrote tramp-cache.el tramp-sh.el tramp.el
and changed tramp.texi tramp-adb.el trampver.el trampver.texi dbusbind.c
files.el ange-ftp.el file-notify-tests.el files.texi dbus.texi
autorevert.el tramp-fish.el kqueue.c tramp-gw.el os.texi shell.el
- tramp-imap.el gitlab-ci.yml lisp.h README xesam.el and 280 other files
+ tramp-imap.el gitlab-ci.yml lisp.h README xesam.el and 278 other files
Michael Ben-Gershon: changed acorn.h configure.ac riscix1-1.h riscix1-2.h
unexec.c
@@ -3878,8 +3879,8 @@ Michael Staats: wrote pc-select.el
Michael Vehrs: changed quail.el woman.el
Michael Welsh Duggan: changed nnimap.el lisp.h sh-script.el w32term.c
- buffer.c gnus-spec.el gud.el keyboard.c mail/sieve-manage.el nnir.el
- nnmail.el print.c termhooks.h url-http.el w32-win.el w32fns.c w32menu.c
+ buffer.c gnus-spec.el gud.el keyboard.c nnir.el nnmail.el print.c
+ sieve-manage.el termhooks.h url-http.el w32-win.el w32fns.c w32menu.c
w32term.h woman.el xdisp.c xterm.c
Michael Weylandt: changed ox-latex.el
@@ -3897,11 +3898,11 @@ Michał Krzywkowski: changed elide-head.el
Michal Nazarewicz: wrote cc-mode-tests.el descr-text-tests.el
tildify-tests.el
and co-wrote tildify.el
-and changed emacs-regex.c casefiddle.c simple.el
- test/src/regex-emacs-tests.el casefiddle-tests.el emacs-regex.h
- message.el search.c buffer.h cc-mode.el cc-mode.texi ert-x.el files.el
- frame.c remember.el sgml-mode.el unidata-gen.el README
- SpecialCasing.txt bindings.el buffer.c and 41 other files
+and changed regex-emacs.c casefiddle.c regex-emacs-tests.el simple.el
+ casefiddle-tests.el message.el regex-emacs.h search.c buffer.h
+ cc-mode.el cc-mode.texi ert-x.el files.el frame.c remember.el
+ sgml-mode.el unidata-gen.el README SpecialCasing.txt bindings.el
+ buffer.c and 41 other files
Michal Nowak: changed gnutls.el
@@ -3977,7 +3978,7 @@ Miles Bader: wrote button.el face-remap.el image-file.el macroexp.el
and changed comint.el faces.el simple.el editfns.c xfaces.c xdisp.c
info.el minibuf.c display.texi quick-install-emacs wid-edit.el xterm.c
dispextern.h subr.el window.el cus-edit.el diff-mode.el xfns.c
- bytecomp.el help.el lisp.h and 271 other files
+ bytecomp.el help.el lisp.h and 272 other files
Milton Wulei: changed gdb-ui.el
@@ -4168,7 +4169,7 @@ Nils Ackermann: changed message.el nnmh.el reftex-vars.el
Nitish Chinta: changed progmodes/python.el sendmail.el simple.el
-N. Jackson: changed emacs.texi forms.texi os.texi
+N. Jackson: changed emacs.texi forms.texi gnus.info os.texi
Noah Evans: changed follow.el
@@ -4187,7 +4188,7 @@ Noam Postavsky: changed progmodes/python.el lisp-mode.el bytecomp.el
lisp-mode-tests.el term.el xdisp.c cl-macs.el eval.c simple.el data.c
emacs-lisp/debug.el modes.texi help-fns.el subr.el elisp-mode.el ert.el
isearch.el processes.texi search.c cl-print.el diff-mode.el
- and 363 other files
+ and 362 other files
Nobuyoshi Nakada: co-wrote ruby-mode.el
and changed ruby-mode-tests.el
@@ -4307,7 +4308,7 @@ and co-wrote cal-dst.el
and changed lisp.h configure.ac alloc.c fileio.c process.c editfns.c
sysdep.c xdisp.c fns.c image.c keyboard.c data.c emacs.c lread.c
xterm.c eval.c gnulib-comp.m4 callproc.c Makefile.in frame.c buffer.c
- and 1854 other files
+ and 1849 other files
Paul Fisher: changed fns.c
@@ -4333,7 +4334,7 @@ Paul Reilly: changed dgux.h lwlib-Xm.c lwlib.c xlwmenu.c configure.ac
lwlib/Makefile.in mail/rmailmm.el rmailedit.el rmailkwd.el
and 10 other files
-Paul Rivier: changed mixal-mode.el reftex-vars.el reftex.el
+Paul Rivier: changed ada-mode.el mixal-mode.el reftex-vars.el reftex.el
Paul Rubin: changed config.h sun2.h texinfmt.el window.c
@@ -4354,7 +4355,7 @@ Pavel Janík: co-wrote eudc-bob.el eudc-export.el eudc-hotlist.el
and changed keyboard.c xterm.c COPYING xdisp.c process.c emacs.c lisp.h
menu-bar.el ldap.el make-dist xfns.c buffer.c coding.c eval.c fileio.c
flyspell.el fns.c indent.c Makefile.in callint.c cus-start.el
- and 699 other files
+ and 702 other files
Pavel Kobiakov: wrote flymake-proc.el flymake.el
and changed flymake.texi
@@ -4508,9 +4509,9 @@ Philipp Stephani: wrote callint-tests.el checkdoc-tests.el
cl-preloaded-tests.el ediff-diff-tests.el eval-tests.el ido-tests.el
lread-tests.el mouse-tests.el startup-tests.el xt-mouse-tests.el
and changed emacs-module.c emacs-module-tests.el configure.ac json.c
- process.c eval.c json-tests.el process-tests.el internals.texi alloc.c
+ process.c eval.c internals.texi json-tests.el process-tests.el alloc.c
emacs-module.h.in emacs.c lread.c nsterm.m lisp.h pdumper.c bytecomp.el
- callproc.c seccomp-filter.c gtkutil.c files.el and 179 other files
+ callproc.c seccomp-filter.c gtkutil.c files.el and 184 other files
Phillip Lord: wrote ps-print-tests.el w32-feature.el
and changed build-zips.sh build-dep-zips.py lisp/Makefile.in undo.c
@@ -4567,6 +4568,7 @@ and changed xdisp.c comp.c fns.c pdumper.c alloc.c byte-opt.el
Po Lu: changed xdisp.c browse-url.el callproc.c cc-compat.el config.bat
esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h nsfns.m
nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp sedlibmk.inp
+ tooltip.el xterm.c
Pontus Michael: changed simple.el
@@ -4662,7 +4664,7 @@ Reiner Steib: wrote gmm-utils.el
and changed message.el gnus.texi gnus-art.el gnus-sum.el gnus-group.el
gnus.el mml.el gnus-faq.texi mm-util.el gnus-score.el message.texi
gnus-msg.el gnus-start.el gnus-util.el spam-report.el mm-uu.el spam.el
- mm-decode.el files.el gnus-agent.el nnmail.el and 172 other files
+ mm-decode.el files.el gnus-agent.el nnmail.el and 171 other files
Remek Trzaska: changed gnus-ems.el
@@ -4682,8 +4684,9 @@ and changed vhdl-mode.texi
Reuben Thomas: changed ispell.el whitespace.el dired-x.el files.el
sh-script.el emacsclient-tests.el remember.el README emacsclient.c
- misc.texi msdos.c simple.el INSTALL alloc.c arc-mode.el authors.el
- config.bat copyright dired-x.texi dired.el dosfns.c and 35 other files
+ misc.texi msdos.c simple.el INSTALL ada-mode.el ada-xref.el alloc.c
+ arc-mode.el authors.el config.bat copyright dired-x.texi
+ and 37 other files
Ricardo Wurmus: changed xwidget.el xwidget.c configure.ac xwidget.h
@@ -4776,7 +4779,7 @@ Robert Pluim: wrote nsm-tests.el
and changed configure.ac process.c blocks.awk network-stream-tests.el
font.c processes.texi ftfont.c gtkutil.c vc-git.el process-tests.el
emoji-zwj.awk gnutls.el network-stream.el nsm.el tramp.texi mml-sec.el
- nsterm.m unicode xfns.c auth.texi composite.c and 134 other files
+ nsterm.m unicode xfns.c auth.texi composite.c and 135 other files
Robert Thorpe: changed cus-start.el indent.el rmail.texi
@@ -4844,9 +4847,10 @@ Roy Liu: changed ns-win.el
Rüdiger Sonderfeld: wrote inotify-tests.el reftex-tests.el
and changed eww.el octave.el shr.el bibtex.el configure.ac
- misc/Makefile.in reftex-vars.el vc-git.el TUTORIAL.de autoinsert.el
- building.texi bytecomp.el calc-lang.el cc-langs.el dired.texi editfns.c
- emacs.c emacs.texi epa.el erc.el eww.texi and 39 other files
+ misc/Makefile.in reftex-vars.el vc-git.el TUTORIAL.de ada-mode.el
+ autoinsert.el building.texi bytecomp.el calc-lang.el cc-langs.el
+ dired.texi editfns.c emacs.c emacs.texi epa.el erc.el
+ and 40 other files
Rui-Tao Dong: changed nnweb.el
@@ -4905,7 +4909,7 @@ Sam Steingold: wrote gulp.el midnight.el
and changed progmodes/compile.el cl-indent.el simple.el vc-cvs.el vc.el
mouse.el vc-hg.el etags.el files.el font-lock.el tex-mode.el
ange-ftp.el gnus-sum.el message.el sgml-mode.el vc-git.el window.el
- add-log.el bindings.el bookmark.el bug-reference.el and 186 other files
+ add-log.el bindings.el bookmark.el bug-reference.el and 188 other files
Samuel Bronson: changed custom.el emacsclient.c keyboard.c
progmodes/grep.el semantic/format.el unexmacosx.c
@@ -5009,8 +5013,9 @@ Sébastien Vauban: changed org.el org-agenda.el ox-latex.el ob-core.el
org-clock.el ox-ascii.el ox-html.el
Seiji Zenitani: changed nsfns.m frame.c xterm.c PkgInfo document.icns
- find-func.el frame.h help-fns.el macfns.c nsfont.m nsterm.m w32fns.c
- xdisp.c xfns.c
+ find-func.el frame.h help-fns.el macfns.c
+ nextstep/templates/Info.plist.in nsfont.m nsterm.m w32fns.c xdisp.c
+ xfns.c
Sen Nagata: wrote crm.el rfc2368.el
@@ -5032,6 +5037,7 @@ Sergey Poznyakoff: changed rmail.el mh-mime.el rmail.texi smtpmail.el
Sergey Trofimov: changed window.el
Sergey Vinokurov: changed emacs-module-tests.el emacs-module.c
+ memory-report.el
Sergio Durigan Junior: changed eudcb-bbdb.el gdb-mi.el
@@ -5113,9 +5119,8 @@ and co-wrote gnus-sieve.el gssapi.el mml1991.el nnfolder.el nnimap.el
nnml.el rot13.el sieve-manage.el
and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg-gpg.el
pgg.el gnus-agent.el mml2015.el mml.el gnus-group.el mm-decode.el
- gnus-msg.el gnus.texi mail/sieve-manage.el pgg-pgp5.el browse-url.el
- gnus-int.el gnus.el hashcash.el mm-view.el password.el
- and 101 other files
+ gnus-msg.el gnus.texi pgg-pgp5.el browse-url.el gnus-int.el gnus.el
+ hashcash.el mm-view.el password.el gnus-cache.el and 99 other files
Simon Lang: changed building.texi icomplete.el misterioso-theme.el
progmodes/grep.el
@@ -5170,7 +5175,7 @@ and co-wrote help-tests.el keymap-tests.el
and changed efaq.texi checkdoc.el package.el cperl-mode.el bookmark.el
help.el keymap.c subr.el simple.el erc.el ediff-util.el idlwave.el
time.el bytecomp-tests.el comp.el speedbar.el bytecomp.el edebug.el
- emacs-lisp-intro.texi flyspell.el ibuffer.el and 1337 other files
+ emacs-lisp-intro.texi flyspell.el ibuffer.el and 1334 other files
Stefan Merten: co-wrote rst.el
@@ -5187,7 +5192,7 @@ and co-wrote font-lock.el gitmerge.el pcvs.el
and changed subr.el simple.el keyboard.c bytecomp.el cl-macs.el files.el
lisp.h vc.el xdisp.c alloc.c eval.c sh-script.el progmodes/compile.el
keymap.c buffer.c window.c tex-mode.el lisp-mode.el newcomment.el
- help-fns.el lread.c and 1616 other files
+ help-fns.el lread.c and 1615 other files
Stefano Facchini: changed gtkutil.c
@@ -5247,11 +5252,11 @@ and changed time-stamp.el time-stamp-tests.el mh-e.el mh-junk.el
Stephen J. Turnbull: changed ediff-init.el strings.texi subr.el
Stephen Leake: wrote elisp-mode-tests.el
-and changed elisp-mode.el xref.el window.el mode-local.el CONTRIBUTE
- project.el vc-mtn.el ada-stmt.el cedet-global.el ede/generic.el
- simple.el autoload.el bytecomp.el cl-generic.el ede/locate.el
- files.texi functions.texi package.el progmodes/grep.el windows.texi
- INSTALL.REPO and 32 other files
+and changed ada-mode.el ada-xref.el elisp-mode.el xref.el window.el
+ mode-local.el CONTRIBUTE ada-prj.el project.el vc-mtn.el ada-stmt.el
+ cedet-global.el ede/generic.el simple.el autoload.el bytecomp.el
+ cl-generic.el ede/locate.el files.texi functions.texi package.el
+ and 35 other files
Stephen Pegoraro: changed xterm.c
@@ -5335,10 +5340,9 @@ Svante Carl V. Erichsen: changed cl-indent.el
Svend Tollak Munkejord: changed deuglify.el
Sven Joachim: changed files.el de-refcard.tex dired-aux.el emacs.1
- arc-mode.el dired-x.el doc/misc/gnus.texi em-cmpl.el em-hist.el
- em-ls.el esh-cmd.el esh-ext.el esh-io.el files.texi gnus-sum.el
- gnus.texi help.el make-dist message.el movemail.c mule.texi
- and 9 other files
+ gnus.texi arc-mode.el dired-x.el em-cmpl.el em-hist.el em-ls.el
+ esh-cmd.el esh-ext.el esh-io.el files.texi gnus-sum.el help.el
+ make-dist message.el movemail.c mule.texi sed3v2.inp and 8 other files
Sylvain Chouleur: changed gnus-icalendar.el icalendar.el
@@ -5365,7 +5369,7 @@ Takahashi Naoto: wrote ethio-util.el language/ethiopic.el latin-post.el
and co-wrote latin-ltx.el quail.el
and changed ethiopic.el fontset.el mule-conf.el
-Takai Kousuke: changed ccl.el image/compface.el
+Takai Kousuke: changed ccl.el compface.el
Takeshi Yamada: changed fns.c
@@ -5442,7 +5446,7 @@ and co-wrote hideshow.el
and changed ewoc.el vc.el info.el processes.texi zone.el lisp-mode.el
scheme.el text.texi vc-rcs.el display.texi fileio.c files.el vc-git.el
TUTORIAL.it bindat.el cc-vars.el configure.ac dcl-mode.el diff-mode.el
- dired.el elisp.texi and 168 other files
+ dired.el elisp.texi and 169 other files
Thierry Banel: co-wrote ob-C.el
and changed calc-arith.el
@@ -5470,7 +5474,7 @@ Thomas Dye: changed org.texi org-bibtex.el ob-R.el org.el
Thomas Fitzsimmons: wrote soap-client.el
and changed soap-inspect.el ldap.el eudc.texi eudc-vars.el eudc.el
- ntlm.el url-http.el eudcb-ldap.el eudcb-bbdb.el ntlm-tests.el
+ ntlm.el url-http.el eudcb-bbdb.el eudcb-ldap.el ntlm-tests.el
eudc-bob.el eudc-export.el eudcb-ph.el package.el README authinfo
diary-lib.el display.texi eudc-hotlist.el eudcb-macos-contacts.el
icalendar.el and 3 other files
@@ -5652,6 +5656,8 @@ Toru Tsuneyoshi: changed ange-ftp.el buff-menu.el cus-start.el fileio.c
Toshiaki Nomura: changed uxpds.h
+Travis Jeffery: changed nextstep/templates/Info.plist.in
+
Trent W. Buck: changed rcirc.el remember.el rx.el
Trevor Murphy: changed find-dired.el gnus.texi nnimap.el org.el window.el
@@ -5675,8 +5681,8 @@ Tsuchiya Masatoshi: changed gnus-art.el mm-view.el gnus-sum.el
Tsugutomo Enami: changed frame.c keyboard.c configure.ac dispnew.c
fileio.c process.c simple.el sysdep.c xdisp.c add-log.el bytecomp.el
- editfns.c emacs-regex.c emacs-regex.h emacs.c frame.h gnus-group.el
- netbsd.h nnheader.el nnimap.el perl-mode.el and 6 other files
+ editfns.c emacs.c frame.h gnus-group.el netbsd.h nnheader.el nnimap.el
+ perl-mode.el regex-emacs.c regex-emacs.h and 6 other files
Tsuyoshi Akiho: changed gnus-sum.el nnrss.el
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 6a4a15c037cc..78d6bb520171 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -6697,7 +6697,7 @@ Customize all loaded groups matching REGEXP.
(autoload 'custom-prompt-customize-unsaved-options "cus-edit" "\
Prompt user to customize any unsaved customization options.
-Return non-nil if user chooses to customize, for use in
+Return nil if user chooses to customize, for use in
`kill-emacs-query-functions'." nil nil)
(autoload 'custom-buffer-create "cus-edit" "\
@@ -13203,7 +13203,7 @@ lines.
;;;### (autoloads nil "flymake" "progmodes/flymake.el" (0 0 0 0))
;;; Generated autoloads from progmodes/flymake.el
-(push (purecopy '(flymake 1 2 1)) package--builtin-versions)
+(push (purecopy '(flymake 1 2 2)) package--builtin-versions)
(autoload 'flymake-log "flymake" "\
Log, at level LEVEL, the message MSG formatted with ARGS.
@@ -13365,6 +13365,9 @@ Flyspell mode is a buffer-local minor mode. When enabled, it
spawns a single Ispell process and checks each word. The default
flyspell behavior is to highlight incorrect words.
+This mode is geared toward text modes. In buffers that contain
+code, `flyspell-prog-mode' is usually a better choice.
+
Bindings:
\\[ispell-word]: correct words (using Ispell).
\\[flyspell-auto-correct-word]: automatically correct word.
@@ -32437,8 +32440,8 @@ The mode's hook is called both when the mode is enabled and when it is
disabled.
Superword mode is a buffer-local minor mode. Enabling it changes
-the definition of words such that symbols characters are treated
-as parts of words: e.g., in `superword-mode',
+the definition of words such that characters which have symbol
+syntax are treated as parts of words: e.g., in `superword-mode',
\"this_is_a_symbol\" counts as one word.
\\{superword-mode-map}
@@ -39508,11 +39511,21 @@ Zone out, completely." t nil)
;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el"
;;;;;; "eshell/em-xtra.el" "faces.el" "files.el" "font-core.el"
;;;;;; "font-lock.el" "format.el" "frame.el" "help.el" "hfy-cmap.el"
-;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charscript.el"
-;;;;;; "international/cp51932.el" "international/emoji-zwj.el" "international/eucjp-ms.el"
+;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charprop.el"
+;;;;;; "international/charscript.el" "international/cp51932.el"
+;;;;;; "international/emoji-zwj.el" "international/eucjp-ms.el"
;;;;;; "international/iso-transl.el" "international/mule-cmds.el"
-;;;;;; "international/mule-conf.el" "international/mule.el" "isearch.el"
-;;;;;; "jit-lock.el" "jka-cmpr-hook.el" "language/burmese.el" "language/cham.el"
+;;;;;; "international/mule-conf.el" "international/mule.el" "international/uni-bidi.el"
+;;;;;; "international/uni-brackets.el" "international/uni-category.el"
+;;;;;; "international/uni-combining.el" "international/uni-comment.el"
+;;;;;; "international/uni-decimal.el" "international/uni-decomposition.el"
+;;;;;; "international/uni-digit.el" "international/uni-lowercase.el"
+;;;;;; "international/uni-mirrored.el" "international/uni-name.el"
+;;;;;; "international/uni-numeric.el" "international/uni-old-name.el"
+;;;;;; "international/uni-special-lowercase.el" "international/uni-special-titlecase.el"
+;;;;;; "international/uni-special-uppercase.el" "international/uni-titlecase.el"
+;;;;;; "international/uni-uppercase.el" "isearch.el" "jit-lock.el"
+;;;;;; "jka-cmpr-hook.el" "language/burmese.el" "language/cham.el"
;;;;;; "language/chinese.el" "language/cyrillic.el" "language/czech.el"
;;;;;; "language/english.el" "language/ethiopic.el" "language/european.el"
;;;;;; "language/georgian.el" "language/greek.el" "language/hebrew.el"
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index 9345a7efd638..c2bb17c54605 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -67,7 +67,7 @@
/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/
/^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
-/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.0.91"/
+/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.0.92"/
/^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
/^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
/^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
diff --git a/nt/README.W32 b/nt/README.W32
index 4fd9b6097c02..57c87e9c4b5e 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,7 +1,7 @@
Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
- Emacs version 28.0.91 for MS-Windows
+ Emacs version 28.0.92 for MS-Windows
This README file describes how to set up and run a precompiled
distribution of the latest version of GNU Emacs for MS-Windows. You
From 1ec40630171c90203d7deafe2086d5bd728d790b Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 13 Mar 2022 09:53:59 +0200
Subject: [PATCH 026/466] ; * admin/make-tarball.txt: Minor updates.
---
admin/make-tarball.txt | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 872cb00ca28b..ec69302dae8e 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -43,11 +43,16 @@ General steps (for each step, check for possible errors):
because some of the commands below run Make, so they need
Makefiles to be present.
- For Emacs 28, and as long as --with-native-compilation is not the
- default, the tree needs to be configured with native-compilation
- enabled, to ensure all the pertinent *.elc files will end up in
- the tarball. Otherwise, the *.eln files might not build correctly
- on the user's system.
+ For Emacs 28 and later, as long as --with-native-compilation is
+ not the default, the tree needs to be configured with
+ native-compilation enabled, to ensure all the pertinent *.elc
+ files will end up in the tarball. Otherwise, the *.eln files
+ might not build correctly on the user's system.
+
+ For a release (as opposed to pretest), delete any left-over "---"
+ and "+++" markers from etc/NEWS, as well as the "Temporary note"
+ section at the beginning of that file, and commit etc/NEWS if it
+ was modified.
2. Regenerate the etc/AUTHORS file:
M-: (require 'authors) RET
@@ -232,7 +237,9 @@ General steps (for each step, check for possible errors):
FILE.gz FILE.xz ...
You only need the --user part if you have multiple GPG keys and do
- not want to use the default.
+ not want to use the default. Instead of "your@gpg.key.email" you
+ could also use the fingerprint of the key, a 40-digit hex number.
+ (Alternatively, define default-key in your ~/.gnupg/gpg.conf file.)
Obviously, if you do not have a fast uplink, be prepared for the
upload to take a while.
From 8e7a3f21e00649bacc01be627edd45ff01b51a33 Mon Sep 17 00:00:00 2001
From: Jim Porter
Date: Sun, 13 Mar 2022 15:36:37 +0100
Subject: [PATCH 027/466] Fix evaluation of negated argument predicates in
Eshell
* lisp/eshell/em-pred.el (eshell-add-pred-func): Let-bind 'pred' so
the lambdas see the original value (bug#54369).
Committed on the wrong branch.
Do not merge to master.
---
lisp/eshell/em-pred.el | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el
index b1dc7abc696e..4f4e85c1a69b 100644
--- a/lisp/eshell/em-pred.el
+++ b/lisp/eshell/em-pred.el
@@ -364,12 +364,12 @@ resultant list of strings."
(defun eshell-add-pred-func (pred funcs negate follow)
"Add the predicate function PRED to FUNCS."
- (if negate
- (setq pred (lambda (file)
- (not (funcall pred file)))))
- (if follow
- (setq pred (lambda (file)
- (funcall pred (file-truename file)))))
+ (when negate
+ (setq pred (let ((pred pred))
+ (lambda (file) (not (funcall pred file))))))
+ (when follow
+ (setq pred (let ((pred pred))
+ (lambda (file) (funcall pred (file-truename file))))))
(cons pred funcs))
(defun eshell-pred-user-or-group (mod-char mod-type attr-index get-id-func)
From 62e830c3d9f3a74c65309d1f8f18f45a7f065a9f Mon Sep 17 00:00:00 2001
From: Juri Linkov
Date: Tue, 15 Mar 2022 19:28:50 +0200
Subject: [PATCH 028/466] * doc/misc/transient.texi: Fix @dircategory to "Emacs
misc features" for dir.
---
doc/misc/transient.texi | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index f91d0e5c10a9..191fe8cd853e 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -23,9 +23,9 @@ General Public License for more details.
@end quotation
@end copying
-@dircategory Emacs
+@dircategory Emacs misc features
@direntry
-* Transient: (transient). Transient Commands.
+* Transient: (transient). Transient Commands.
@end direntry
@finalout
From 11492259b1a7bfd9a8615ffe7148323e9e568d47 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 17 Mar 2022 14:55:59 +0200
Subject: [PATCH 029/466] ; * doc/lispref/display.texi (Overlay Arrow): More
accurate text.
---
doc/lispref/display.texi | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 8a138588d319..c82523132e92 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -4504,14 +4504,15 @@ about to be executed. This feature has nothing to do with
@defvar overlay-arrow-string
This variable holds the string to display to call attention to a
particular line, or @code{nil} if the arrow feature is not in use.
-On a graphical display the contents of the string are ignored; instead a
-glyph is displayed in the fringe area to the left of the display area.
+On a graphical display the contents of the string are ignored if the
+left fringe is shown; instead a glyph is displayed in the fringe area
+to the left of the display area.
@end defvar
@defvar overlay-arrow-position
This variable holds a marker that indicates where to display the overlay
arrow. It should point at the beginning of a line. On a non-graphical
-display the arrow text
+display, or when the left fringe is not shown, the arrow text
appears at the beginning of that line, overlaying any text that would
otherwise appear. Since the arrow is usually short, and the line
usually begins with indentation, normally nothing significant is
@@ -4543,11 +4544,12 @@ this list.
Each variable on this list can have properties
@code{overlay-arrow-string} and @code{overlay-arrow-bitmap} that
-specify an overlay arrow string (for text terminals) or fringe bitmap
-(for graphical terminals) to display at the corresponding overlay
-arrow position. If either property is not set, the default
-@code{overlay-arrow-string} or @code{overlay-arrow} fringe indicator
-is used.
+specify an overlay arrow string (for text terminals or graphical
+terminals without the left fringe shown) or fringe bitmap
+(for graphical terminals with a left fringe) to display at the
+corresponding overlay arrow position. If either property is not set,
+the default @code{overlay-arrow-string} or @code{overlay-arrow} fringe
+indicator is used.
@node Scroll Bars
From 530c3491e89bd316e628f67d5cebb7db6e7d470a Mon Sep 17 00:00:00 2001
From: Karl Fogel
Date: Thu, 17 Mar 2022 21:18:26 -0500
Subject: [PATCH 030/466] Improve documentation of bookmark default sorting
* lisp/bookmark.el (bookmark-alist, bookmark-store,
bookmark-maybe-sort-alist): Update doc strings and comments.
---
lisp/bookmark.el | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index d568f643d9bb..cc9956c80a99 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -249,11 +249,13 @@ functions have a binding in this keymap.")
Bookmark functions update the value automatically.
You probably do NOT want to change the value yourself.
-The value is an alist with bookmarks of the form
+The value is an alist whose elements are of the form
(BOOKMARK-NAME . PARAM-ALIST)
-or the deprecated form (BOOKMARK-NAME PARAM-ALIST).
+or the deprecated form (BOOKMARK-NAME PARAM-ALIST). The alist is
+ordered from most recently created bookmark at the front to least
+recently created bookmark at the end.
BOOKMARK-NAME is the name you gave to the bookmark when creating it.
@@ -577,10 +579,10 @@ old one."
;; Modify using the new (NAME . ALIST) format.
(setcdr bm alist))
- ;; otherwise just cons it onto the front (either the bookmark
- ;; doesn't exist already, or there is no prefix arg. In either
- ;; case, we want the new bookmark consed onto the alist...)
-
+ ;; Otherwise just put it onto the front of the list. Either the
+ ;; bookmark doesn't exist already, or there is no prefix arg.
+ ;; In either case, we want the new bookmark on the front of the
+ ;; list, since the list is kept in reverse order of creation.
(push (cons stripped-name alist) bookmark-alist))
;; Added by db
@@ -1138,7 +1140,9 @@ it to the name of the bookmark currently being set, advancing
(defun bookmark-maybe-sort-alist ()
"Return `bookmark-alist' for display.
-If `bookmark-sort-flag' is non-nil, then return a sorted copy of the alist."
+If `bookmark-sort-flag' is non-nil, then return a sorted copy of the alist.
+Otherwise, just return `bookmark-alist', which by default is ordered
+from most recently created to least recently created bookmark."
(if bookmark-sort-flag
(sort (copy-alist bookmark-alist)
(lambda (x y) (string-lessp (car x) (car y))))
From c4596c8522e221ecff847a4d997c133436b07e1a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 18 Mar 2022 13:54:46 +0200
Subject: [PATCH 031/466] Fix a regression in 'decipher-digram-list'
* lisp/play/decipher.el (decipher-stats-buffer): Don't assume the
statistics buffer always exists. (Bug#54443)
---
lisp/play/decipher.el | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el
index ae44ecd68174..aeb4726bb9be 100644
--- a/lisp/play/decipher.el
+++ b/lisp/play/decipher.el
@@ -983,13 +983,14 @@ if it can't, it signals an error."
decipher-stats-buffer)
;; Create a new buffer if requested:
(create
- (let ((stats-name (concat "*" (buffer-name) "*")))
+ (let* ((stats-name (concat "*" (buffer-name) "*"))
+ (buf (get-buffer stats-name)))
(setq decipher-stats-buffer
- (if (eq 'decipher-stats-mode
- (buffer-local-value 'major-mode
- (get-buffer stats-name)))
- ;; We just lost track of the statistics buffer:
- (get-buffer stats-name)
+ (if (and (bufferp buf)
+ (eq 'decipher-stats-mode
+ (buffer-local-value 'major-mode buf)))
+ buf
+ ;; We just lost track of the statistics buffer:
(generate-new-buffer stats-name))))
(with-current-buffer decipher-stats-buffer
(decipher-stats-mode))
From e059d7c156edb37a7c836906b9a3510adee3d543 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 19 Mar 2022 09:19:53 +0200
Subject: [PATCH 032/466] Fix region highlight in non-selected windows
* src/xdisp.c (prepare_menu_bars): Include in the windows passed
to pre-redisplay-functions windows whose point was moved from the
last recorded position. (Bug#54450)
---
src/xdisp.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 3f283d6732a6..44f2536880b8 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12825,9 +12825,12 @@ prepare_menu_bars (void)
{
Lisp_Object this = XCAR (ws);
struct window *w = XWINDOW (this);
+ /* Cf. conditions for redisplaying a window at the
+ beginning of redisplay_window. */
if (w->redisplay
|| XFRAME (w->frame)->redisplay
- || XBUFFER (w->contents)->text->redisplay)
+ || XBUFFER (w->contents)->text->redisplay
+ || BUF_PT (XBUFFER (w->contents)) != w->last_point)
{
windows = Fcons (this, windows);
}
From 9fcdd5b63fcb5f9c6fba9884911f305806980fd5 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 20 Mar 2022 18:21:44 +0200
Subject: [PATCH 033/466] Improve doc strings of
read-char-from-minibuffer-insert-* commands
* lisp/subr.el (read-char-from-minibuffer-insert-char)
(read-char-from-minibuffer-insert-other): Clarify the doc strings.
(Bug#54479)
---
lisp/subr.el | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/lisp/subr.el b/lisp/subr.el
index 8e5a65efcd2d..921853de6074 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3050,7 +3050,7 @@ If there is a natural number at point, use it as default."
(make-hash-table :test 'equal))
(defun read-char-from-minibuffer-insert-char ()
- "Insert the character you type in the minibuffer and exit.
+ "Insert the character you type into the minibuffer and exit minibuffer.
Discard all previous input before inserting and exiting the minibuffer."
(interactive)
(when (minibufferp)
@@ -3059,9 +3059,11 @@ Discard all previous input before inserting and exiting the minibuffer."
(exit-minibuffer)))
(defun read-char-from-minibuffer-insert-other ()
- "Handle inserting of a character other than allowed.
-Display an error on trying to insert a disallowed character.
-Also discard all previous input in the minibuffer."
+ "Reject a disallowed character typed into the minibuffer.
+This command is intended to be bound to keys that users are not
+allowed to type into the minibuffer. When the user types any
+such key, this command discard all minibuffer input and displays
+an error message."
(interactive)
(when (minibufferp)
(delete-minibuffer-contents)
From f15922a57cd6177c9c945d3390a6b9918883415d Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 20 Mar 2022 21:31:32 -0400
Subject: [PATCH 034/466] Update to Org 9.5.2-25-gaf6f12
---
lisp/org/org-mouse.el | 2 +-
lisp/org/org-version.el | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lisp/org/org-mouse.el b/lisp/org/org-mouse.el
index 8d5be4254530..20c20acc3206 100644
--- a/lisp/org/org-mouse.el
+++ b/lisp/org/org-mouse.el
@@ -295,7 +295,7 @@ nor a function, elements of KEYWORDS are used directly."
((functionp itemformat) (funcall itemformat keyword))
((stringp itemformat) (format itemformat keyword))
(t keyword))
- (list 'funcall function keyword)
+ `(funcall #',function ,keyword)
:style (cond
((null selected) t)
((functionp selected) 'toggle)
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index a38b79304ef3..e82dbbf398c9 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.2-24-g668205"))
+ (let ((org-git-version "release_9.5.2-25-gaf6f12"))
org-git-version))
(provide 'org-version)
From c69a6177422d52cb75f295ddf3ca29cd50337995 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 21 Mar 2022 15:53:25 +0100
Subject: [PATCH 035/466] Add notes about command modes and nativecomp
interaction
* doc/lispref/commands.texi (Command Modes): Note interaction with
native-compile (bug#54437).
* src/data.c: Add comment about not being supported.
Do not merge to master.
---
doc/lispref/commands.texi | 5 +++++
src/data.c | 3 +++
2 files changed, 8 insertions(+)
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 0d13408e3f87..d948af6b4f18 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -682,6 +682,11 @@ different ways (e.g., @code{eww-open-in-new-buffer} and
mode-specific, as they can be issued by the user from pretty much any
context.
+Note that specifying command modes is not supported in native-compiled
+functions in Emacs 28.1 (but this is fixed in later Emacs versions).
+This means that @code{read-extended-command-predicate} isn't supported
+in native-compile builds, either.
+
@node Generic Commands
@subsection Select among Command Alternatives
@cindex generic commands
diff --git a/src/data.c b/src/data.c
index 9bf9d605cf10..57205d88081a 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1022,6 +1022,9 @@ Value, if non-nil, is a list (interactive SPEC). */)
return Qnil;
}
+/* Note that this doesn't work for native-compiled functions in Emacs
+ 28.1, but it's fixed in later Emacs versions. */
+
DEFUN ("command-modes", Fcommand_modes, Scommand_modes, 1, 1, 0,
doc: /* Return the modes COMMAND is defined for.
If COMMAND is not a command, the return value is nil.
From d3d6f1c9bd6e56b30534b8bede2c88b6bfb588b9 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 24 Mar 2022 17:22:43 +0200
Subject: [PATCH 036/466] Clarify the description of "selected tags table"
* doc/emacs/maintaining.texi (Select Tags Table): Clarify the
distinction between the "selected tags table" and the "current
list of tags tables". (Bug#54543)
---
doc/emacs/maintaining.texi | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 7581fd83c949..0a813a85d4fa 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2974,11 +2974,12 @@ etags --language=none \
@findex visit-tags-table
Emacs has at any time at most one @dfn{selected} tags table. All
-the commands for working with tags tables use the selected one. To
-select a tags table, type @kbd{M-x visit-tags-table}, which reads the
-tags table file name as an argument, with @file{TAGS} defaulting to
-the first directory that contains a file named @file{TAGS} encountered
-when recursively searching upward from the default directory.
+the commands for working with tags tables use the selected one first.
+To select a tags table, type @kbd{M-x visit-tags-table}, which reads
+the tags table file name as an argument, with @file{TAGS} defaulting
+to the first directory that contains a file named @file{TAGS}
+encountered when recursively searching upward from the default
+directory.
@vindex tags-file-name
Emacs does not actually read in the tags table contents until you
@@ -2988,16 +2989,25 @@ variable's initial value is @code{nil}; that value tells all the
commands for working with tags tables that they must ask for a tags
table file name to use.
- Using @code{visit-tags-table} when a tags table is already loaded
-gives you a choice: you can add the new tags table to the current list
-of tags tables, or start a new list. The tags commands use all the tags
-tables in the current list. If you start a new list, the new tags table
-is used @emph{instead} of others. If you add the new table to the
-current list, it is used @emph{as well as} the others.
+ In addition to the selected tags table, Emacs maintains the list of
+several tags tables that you use together. For example, if you are
+working on a program that uses a library, you may wish to have the
+tags tables of both the program and the library available, so that
+Emacs could easily find identifiers from both. If the selected tags
+table doesn't have the identifier or doesn't mention the source file a
+tags command needs, the command will try using all the other tags
+tables in the current list of tags tables.
+
+ Using @code{visit-tags-table} to load a new tags table when another
+tags table is already loaded gives you a choice: you can add the new
+tags table to the current list of tags tables, or discard the current
+list and start a new list. If you start a new list, the new tags
+table is used @emph{instead} of others. If you add the new table to
+the current list, it is used @emph{as well as} the others.
@vindex tags-table-list
You can specify a precise list of tags tables by setting the variable
-@code{tags-table-list} to a list of strings, like this:
+@code{tags-table-list} to a list of directory names, like this:
@c keep this on two lines for formatting in smallbook
@example
From 4ec9f9edd130ced5b08e7bdb69b2841d082ca9f1 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 25 Mar 2022 19:01:51 +0100
Subject: [PATCH 037/466] Fix eshell-explicit-command-char doc string typo
* lisp/eshell/esh-ext.el (eshell-explicit-command-char): Fix typo
in doc string (bug#54567).
---
lisp/eshell/esh-ext.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index fc023f23ce25..98902fc6f23a 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -163,7 +163,7 @@ by the user on the command line."
(defcustom eshell-explicit-command-char ?*
"If this char occurs before a command name, call it externally.
-That is, although `vi' may be an alias, `\vi' will always call the
+That is, although `vi' may be an alias, `*vi' will always call the
external version."
:type 'character
:group 'eshell-ext)
From 1bef52ce73d61c827677edde60639fd2b8d74d92 Mon Sep 17 00:00:00 2001
From: Po Lu
Date: Sat, 26 Mar 2022 14:46:00 +0800
Subject: [PATCH 038/466] * doc/emacs/anti.texi (Antinews): Unannounce removal
of Motif.
---
doc/emacs/anti.texi | 4 ----
1 file changed, 4 deletions(-)
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index bb88fddc04f0..b86037f2a633 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -30,10 +30,6 @@ Fancy text shaping and display is becoming less important as you move
back in time. The @code{ftx} font backend is again part of Emacs, for
the same reasons.
-@item
-As Motif becomes more and more important with moving farther into the
-past, we've reinstated the code which supports Motif in Emacs.
-
@item
Emacs once again supports versions 5.3 and older OpenBSD systems,
which will be needed as you move back in time.
From 968af794ba84d90d547de463448de57b7dff3787 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 27 Mar 2022 08:10:27 +0300
Subject: [PATCH 039/466] * lisp/desktop.el (desktop-read): Clarify warning
text.
---
lisp/desktop.el | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lisp/desktop.el b/lisp/desktop.el
index e7a368e21f52..51c56faebb55 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1266,8 +1266,10 @@ It returns t if a desktop file was loaded, nil otherwise.
(memq desktop-load-locked-desktop '(nil ask))
(or (null desktop-load-locked-desktop)
(daemonp)
- (not (y-or-n-p (format "Warning: desktop file appears to be in use by PID %s.\n\
-Using it may cause conflicts. Use it anyway? " owner)))))
+ (not (y-or-n-p (format "
+Warning: desktop file appears to be in use by process with PID %s.\n\
+Using it may cause conflicts if that process still runs.\n\
+Use desktop file anyway? " owner)))))
(let ((default-directory desktop-dirname))
(setq desktop-dirname nil)
(run-hooks 'desktop-not-loaded-hook)
From 7208106e8143ecc22c5313ddd1ea785fc9086d6b Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Wed, 30 Mar 2022 16:21:02 +0300
Subject: [PATCH 040/466] Fix regression in 'dired-buffers-for-dir'
* lisp/dired.el (dired-buffers-for-dir): Fix inadvertently swapped
arguments. (Bug#54636)
---
lisp/dired.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/dired.el b/lisp/dired.el
index ede891891547..75dcd33e67c7 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2887,7 +2887,7 @@ As a side effect, killed dired buffers for DIR are removed from
((null (buffer-name buf))
;; Buffer is killed - clean up:
(setq dired-buffers (delq elt dired-buffers)))
- ((dired-in-this-tree-p (car elt) dir)
+ ((dired-in-this-tree-p dir (car elt))
(with-current-buffer buf
(when (and (or subdirs
(assoc dir dired-subdir-alist))
From 03e6a295d5c46151361845afbf5c8bcae915c89f Mon Sep 17 00:00:00 2001
From: Tassilo Horn
Date: Wed, 30 Mar 2022 19:49:01 +0200
Subject: [PATCH 041/466] dired: implement feature from 7b50ed553f differently
* lisp/dired.el (dired-buffers-for-dir): Restore to emacs-27 version.
(dired-buffers-for-dir-or-subdir): New function.
(dired-clean-up-after-deletion): Use dired-buffers-for-dir-or-subdir
instead dired-buffers-for-dir.
---
lisp/dired.el | 54 ++++++++++++++++++++++++++++++++-------------------
1 file changed, 34 insertions(+), 20 deletions(-)
diff --git a/lisp/dired.el b/lisp/dired.el
index 75dcd33e67c7..a3768d224b4c 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2870,12 +2870,10 @@ You can then feed the file name(s) to other commands with \\[yank]."
;;; Keeping Dired buffers in sync with the filesystem and with each other
-(defun dired-buffers-for-dir (dir &optional file subdirs)
+(defun dired-buffers-for-dir (dir &optional file)
"Return a list of buffers for DIR (top level or in-situ subdir).
If FILE is non-nil, include only those whose wildcard pattern (if any)
matches FILE.
-If SUBDIRS is non-nil, also include the dired buffers of
-directories below DIR.
The list is in reverse order of buffer creation, most recent last.
As a side effect, killed dired buffers for DIR are removed from
`dired-buffers'."
@@ -2889,18 +2887,33 @@ As a side effect, killed dired buffers for DIR are removed from
(setq dired-buffers (delq elt dired-buffers)))
((dired-in-this-tree-p dir (car elt))
(with-current-buffer buf
- (when (and (or subdirs
- (assoc dir dired-subdir-alist))
- (or (null file)
- (if (stringp dired-directory)
- (let ((wildcards (file-name-nondirectory
- dired-directory)))
- (or (zerop (length wildcards))
- (string-match-p (dired-glob-regexp wildcards)
- file)))
- (member (expand-file-name file dir)
- (cdr dired-directory)))))
- (setq result (cons buf result)))))))
+ (and (assoc dir dired-subdir-alist)
+ (or (null file)
+ (if (stringp dired-directory)
+ (let ((wildcards (file-name-nondirectory
+ dired-directory)))
+ (or (zerop (length wildcards))
+ (string-match-p (dired-glob-regexp wildcards)
+ file)))
+ (member (expand-file-name file dir)
+ (cdr dired-directory))))
+ (setq result (cons buf result)))))))
+ result))
+
+(defun dired-buffers-for-dir-or-subdir (dir)
+ "Return a list of buffers for DIR or a subdirectory thereof.
+As a side effect, killed dired buffers for DIR are removed from
+`dired-buffers'."
+ (setq dir (file-name-as-directory dir))
+ (let (result buf)
+ (dolist (elt dired-buffers)
+ (setq buf (cdr elt))
+ (cond
+ ((null (buffer-name buf))
+ ;; Buffer is killed - clean up:
+ (setq dired-buffers (delq elt dired-buffers)))
+ ((dired-in-this-tree-p (car elt) dir)
+ (setq result (cons buf result)))))
result))
(defun dired-glob-regexp (pattern)
@@ -3479,15 +3492,16 @@ confirmation. To disable the confirmation, see
(file-name-nondirectory fn))))
(not dired-clean-confirm-killing-deleted-buffers))
(kill-buffer buf)))
- (let ((buf-list (dired-buffers-for-dir (expand-file-name fn)
- nil 'subdirs)))
+ (let ((buf-list (dired-buffers-for-dir-or-subdir
+ (expand-file-name fn))))
(and buf-list
(or (and dired-clean-confirm-killing-deleted-buffers
(y-or-n-p
(format
- (ngettext "Kill Dired buffer of %s, too? "
- "Kill Dired buffers of %s, too? "
- (length buf-list))
+ (ngettext
+ "Kill Dired buffer of %s, too? "
+ "Kill Dired buffers of %s and its sub-directories, too? "
+ (length buf-list))
(file-name-nondirectory
;; FN may end in a / if `dired-listing-switches'
;; contains -p, so we need to strip that
From 9b5e9715ea64f971e215e91898e3ef49b159cdbe Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 2 Apr 2022 13:20:56 +0300
Subject: [PATCH 042/466] ; * lisp/font-lock.el (font-lock-keywords): Doc fix.
---
lisp/font-lock.el | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 7d264cf98242..c9c390840ff2 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -349,7 +349,7 @@ This can be an \"!\" or the \"n\" in \"ifndef\".")
;; Fontification variables:
(defvar font-lock-keywords nil
- "A list of the keywords to highlight.
+ "A list of keywords and corresponding font-lock highlighting rules.
There are two kinds of values: user-level, and compiled.
A user-level keywords list is what a major mode or the user would
@@ -374,10 +374,10 @@ point, and set `match-data' appropriately if it succeeds; like
`re-search-forward' would). MATCHER regexps can be generated via
the function `regexp-opt'.
-FORM is an expression, whose value should be a keyword element,
-evaluated when the keyword is (first) used in a buffer. This
-feature can be used to provide a keyword that can only be
-generated when Font Lock mode is actually turned on.
+FORM is an expression, whose value should be a keyword element
+of one of the above forms, evaluated when the keyword is (first)
+used in a buffer. This feature can be used to provide a keyword
+that can only be generated when Font Lock mode is actually turned on.
HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
From f2ae39829812098d8269eafbc0fcb98959ee5bb7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 3 Apr 2022 07:16:10 -0400
Subject: [PATCH 043/466] ; * etc/NEWS: Remove temporary notes and marks.
---
etc/NEWS | 691 -------------------------------------------------------
1 file changed, 691 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 84041d79c208..995de8d3177f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -15,12 +15,6 @@ in older Emacs versions.
You can narrow news to a specific version by calling 'view-emacs-news'
with a prefix argument or by typing 'C-u C-h C-n'.
-Temporary note:
-+++ indicates that all relevant manuals in doc/ have been updated.
---- means no change in the manuals is needed.
-When you add a new item, use the appropriate mark if you are sure it
-applies, and please also update docstrings as needed.
-
* Installation Changes in Emacs 28.1
@@ -58,30 +52,25 @@ still be available when HarfBuzz is supported, but will not be used by
default. We strongly recommend building with HarfBuzz support. 'x' is
still a valid backend.
----
** 'configure' now warns about building with libXft support.
libXft is unmaintained, and causes a number of problems with modern
fonts including but not limited to crashes; support for it may be
removed in a future version of Emacs. Please consider using
Cairo + HarfBuzz instead.
----
** 'configure' now warns about not using HarfBuzz if using Cairo.
We want to encourage people to use the most modern font features
available, and this is the Cairo graphics library + HarfBuzz for font
shaping, so 'configure' now recommends that combination.
----
** Building without double buffering support.
'configure --with-xdbe=no' can now be used to disable double buffering
at build time.
----
** The configure option '--without-makeinfo' has been removed.
This was only ever relevant when building from a repository checkout.
This now requires makeinfo, which is part of the texinfo package.
----
** New configure option '--disable-year2038'.
This causes Emacs to use only 32-bit time_t on platforms that have
both 32- and 64-bit time_t. This may help when linking Emacs with a
@@ -90,16 +79,13 @@ currently affects only 32-bit ARM and x86 running GNU/Linux with glibc
2.34 and later. Emacs now defaults to 64-bit time_t on these
platforms.
----
** Support for building with '-fcheck-pointer-bounds' has been removed.
GCC has withdrawn the '-fcheck-pointer-bounds' option and support for
its implementation has been removed from the Linux kernel.
----
** The ftx font backend driver has been removed.
It was declared obsolete in Emacs 27.1.
----
** Emacs no longer supports old OpenBSD systems.
OpenBSD 5.3 and older releases are no longer supported, as they lack
proper pty support that Emacs needs.
@@ -107,13 +93,11 @@ proper pty support that Emacs needs.
* Startup Changes in Emacs 28.1
----
** In GTK builds, Emacs now supports startup notification.
This means that Emacs won't steal keyboard focus upon startup
(when started via the Desktop) if the user is typing into another
application.
----
** Errors in 'kill-emacs-hook' no longer prevent Emacs from shutting down.
If a function in that hook signals an error in an interactive Emacs,
the user will be prompted on whether to continue. If the user doesn't
@@ -136,7 +120,6 @@ lacks the terminfo database, you can instruct Emacs to support 24-bit
true color by setting 'COLORTERM=truecolor' in the environment. This is
useful on systems such as FreeBSD which ships only with "etc/termcap".
----
** File names given on the command line are now be pushed onto history.
The file names will be pushed onto 'file-name-history', like the names
of files visited via 'C-x C-f' and other commands.
@@ -144,10 +127,8 @@ of files visited via 'C-x C-f' and other commands.
* Changes in Emacs 28.1
----
** Emacs now supports Unicode Standard version 14.0.
-+++
** Improved support for Emoji.
On capable systems, Emacs now correctly displays Emoji and Emoji
sequences by default, provided that a suitable font is available to
@@ -171,20 +152,17 @@ the above example. (Previously, the Emoji characters were assigned to
the 'symbol' script, together with other symbol and punctuation
characters.)
-+++
** 'glyphless-char-display-control' now applies to Variation Selectors.
VS-1 through VS-16 are now displayed as 'thin-space' by default when
not composed with previous characters (typically, as part of Emoji
sequences).
-+++
** New command 'execute-extended-command-for-buffer'.
This new command, bound to 'M-S-x', works like
'execute-extended-command', but limits the set of commands to the
commands that have been determined to be particularly useful with the
current mode.
-+++
** New user option 'read-extended-command-predicate'.
This user option controls how 'M-x' performs completion of commands when
you type 'TAB'. By default, any command that matches what you have
@@ -193,36 +171,30 @@ option to exclude commands that are not applicable to the current
buffer's major and minor modes, and respect the command's completion
predicate (if any).
-+++
** Completion on 'M-x' shows key bindings for commands.
When 'suggest-key-bindings' is non-nil (as it is by default), the
completion list popped up by 'M-x' shows the key bindings for all the
commands shown in the list of candidate completions that have a key
binding.
-+++
** New user option 'completions-detailed'.
When non-nil, some commands like 'describe-symbol' show more detailed
completions with more information in completion prefix and suffix.
The default is nil.
----
** 'C-s' in 'M-x' now once again searches over completions.
In Emacs 23, typing 'M-x' ('read-extended-command') and then 'C-s' (to
do an interactive search) would search over possible completions.
This was lost in Emacs 24, but is now back again.
-+++
** User option 'completions-format' supports a new value 'one-column'.
-+++
** New system for displaying documentation for groups of functions.
This can either be used by saying 'M-x shortdoc-display-group' and
choosing a group, or clicking a button in the "*Help*" buffers when
looking at the doc string of a function that belongs to one of these
groups.
-+++
** New minor mode 'context-menu-mode' for context menus popped by 'mouse-3'.
When this mode is enabled, clicking 'down-mouse-3' (usually, the
right mouse button) anywhere in the buffer pops up a menu whose
@@ -232,7 +204,6 @@ by customizing the user option 'context-menu-functions'. You can also
invoke the context menu by pressing 'S-' or, on macOS, by
clicking 'C-down-mouse-1'.
-+++
** A new keymap for buffer actions has been added.
The 'C-x x' keymap now holds keystrokes for various buffer-oriented
commands. The new keystrokes are 'C-x x g' ('revert-buffer-quick'),
@@ -240,34 +211,29 @@ commands. The new keystrokes are 'C-x x g' ('revert-buffer-quick'),
('clone-buffer'), 'C-x x i' ('insert-buffer'), 'C-x x t'
('toggle-truncate-lines') and 'C-x x f' ('font-lock-update').
-+++
** Modifiers now go outside angle brackets in pretty-printed key bindings.
For example, 'RET' with Control and Meta modifiers is now shown as
'C-M-' instead of ''. Either variant can be used
as input; functions such as 'kbd' and 'read-kbd-macro' accept both
styles as equivalent (they have done so for a long time).
----
** 'eval-expression' no longer signals an error on incomplete expressions.
Previously, typing 'M-: ( RET' would result in Emacs saying "End of
file during parsing" and dropping out of the minibuffer. The user
would have to type 'M-: M-p' to edit and redo the expression. Now
Emacs will echo the message and allow the user to continue editing.
-+++
** 'eval-last-sexp' now handles 'defvar'/'defcustom'/'defface' specially.
This command would previously not redefine values defined by these
forms, but this command has now been changed to work more like
'eval-defun', and reset the values as specified.
----
** New user option 'use-short-answers'.
When non-nil, the function 'y-or-n-p' is used instead of
'yes-or-no-p'. This eliminates the need to define an alias that maps
one to another in the init file. The same user option also controls
whether the function 'read-answer' accepts short answers.
-+++
** New user option 'kill-buffer-delete-auto-save-files'.
If non-nil, killing a buffer that has an auto-save file will prompt
the user for whether that auto-save file should be deleted. (Note
@@ -277,37 +243,31 @@ unsaved changes, but this has apparently not worked for several
decades, so the documented semantics of this variable has been changed
to match the behavior.)
-+++
** New user option 'next-error-message-highlight'.
In addition to a fringe arrow, 'next-error' error may now optionally
highlight the current error message in the 'next-error' buffer.
This user option can be also customized to keep highlighting on all
visited errors, so you can have an overview what errors were already visited.
----
** New choice 'next-error-quit-window' for 'next-error-found-function'.
When 'next-error-found-function' is customized to 'next-error-quit-window',
then typing the numeric prefix argument 0 before the command 'next-error'
will quit the source window after visiting the next occurrence.
-+++
** New user option 'file-preserve-symlinks-on-save'.
This controls what Emacs does when saving buffers that visit files via
symbolic links, and 'file-precious-flag' is non-nil.
-+++
** New user option 'copy-directory-create-symlink'.
If non-nil, will make 'copy-directory' (when used on a symbolic
link) copy the link instead of following the link. The default is
nil, so the default behavior is unchanged.
-+++
** New user option 'ignored-local-variable-values'.
This is the opposite of 'safe-local-variable-values' -- it's an alist
of variable-value pairs that are to be ignored when reading a
local-variables section of a file.
----
** Specific warnings can now be disabled from the warning buffer.
When a warning is displayed to the user, the resulting buffer now has
buttons which allow making permanent changes to the treatment of that
@@ -315,21 +275,17 @@ warning. Automatic showing of the warning can be disabled (although
it is still logged to the "*Messages*" buffer), or the warning can be
disabled entirely.
-+++
** ".dir-locals.el" now supports setting 'auto-mode-alist'.
The new 'auto-mode-alist' specification in ".dir-locals.el" files can
now be used to override the global 'auto-mode-alist' in the current
directory tree.
----
** User option 'uniquify-buffer-name-style' can now be a function.
This user option can be one of the predefined styles or a function to
personalize the uniquified buffer name.
----
** 'remove-hook' is now an interactive command.
----
** 'expand-file-name' now checks for null bytes in filenames.
The function will now check for null bytes in both NAME and
DEFAULT-DIRECTORY arguments, as well as in the 'default-directory'
@@ -339,22 +295,18 @@ This means that practically all file-related operations will now check
file names for null bytes, thus avoiding subtle bugs with silently
using only the part of file name up to the first null byte.
----
** Frames
-+++
*** The key prefix 'C-x 5 5' displays next command buffer in a new frame.
It's bound to the command 'other-frame-prefix' that requests the buffer
of the next command to be displayed in a new frame.
-+++
*** New command 'clone-frame' (bound to 'C-x 5 c').
This is like 'C-x 5 2', but uses the window configuration and frame
parameters of the current frame instead of 'default-frame-alist'.
When called interactively with a prefix arg, the window configuration
is not cloned.
----
*** Default values of 'frame-title-format' and 'icon-title-format' have changed.
These variables are used to display the title bar of visible frames
and the title bar of an iconified frame. They now show the name of
@@ -365,68 +317,56 @@ your init file:
(setq frame-title-format '(multiple-frames "%b"
("" invocation-name "@" system-name)))
-+++
*** New frame parameter 'drag-with-tab-line'.
This parameter, similar to 'drag-with-header-line', allows moving frames
by dragging the tab lines of their topmost windows with the mouse.
-+++
*** New optional behavior of 'delete-other-frames'.
When invoked with a prefix argument, 'delete-other-frames' now
iconifies frames, rather than deleting them.
----
*** Commands 'set-frame-width' and 'set-frame-height' now prompt for values.
These commands now prompt for the value via the minibuffer, instead of
requiring the user to specify the value via the prefix argument.
** Windows
-+++
*** The key prefix 'C-x 4 1' displays next command buffer in the same window.
It's bound to the command 'same-window-prefix' that requests the buffer
of the next command to be displayed in the same window.
-+++
*** The key prefix 'C-x 4 4' displays next command buffer in a new window.
It's bound to the command 'other-window-prefix' that requests the buffer
of the next command to be displayed in a new window.
-+++
*** New command 'recenter-other-window', bound to 'S-M-C-l'.
Like 'recenter-top-bottom', but acting on the other window.
-+++
*** New user option 'delete-window-choose-selected'.
This allows specifying how Emacs chooses which window will be the
frame's selected window after the currently selected window is
deleted.
-+++
*** New argument NO-OTHER for some window functions.
'get-lru-window', 'get-mru-window' and 'get-largest-window' now accept a
new optional argument NO-OTHER which, if non-nil, avoids returning a
window whose 'no-other-window' parameter is non-nil.
-+++
*** New 'display-buffer' function 'display-buffer-use-least-recent-window'.
This is like 'display-buffer-use-some-window', but won't reuse the
current window, and when called repeatedly will try not to reuse a
previously selected window.
-+++
*** New function 'window-bump-use-time'.
This updates the use time of a window.
** Minibuffer
-+++
*** Minibuffer scrolling is now conservative by default.
This is controlled by the new variable 'scroll-minibuffer-conservatively'.
It is t by default; setting it to nil will cause scrolling in the
minibuffer obey the value of 'scroll-conservatively'.
-+++
*** Improved handling of minibuffers on switching frames.
By default, when you switch to another frame, an active minibuffer now
moves to the newly selected frame. Nevertheless, the effect of what
@@ -439,14 +379,12 @@ behavior, which mixed these two, can be approximated by customizing
'minibuffer-follows-selected-frame' to a value which is neither nil
nor t.
-+++
*** New user option 'read-minibuffer-restore-windows'.
When customized to nil, it uses 'minibuffer-restore-windows' in
'minibuffer-exit-hook' to remove only the window showing the
"*Completions*" buffer, but keeps all other windows created
while the minibuffer was active.
----
*** New variable 'redisplay-adhoc-scroll-in-resize-mini-windows'.
Customizing it to nil will disable the ad-hoc auto-scrolling of
minibuffer text shown in mini-windows when resizing those windows.
@@ -457,13 +395,11 @@ cases anyway.
** Mode Line
-+++
*** New user option 'mode-line-compact'.
If non-nil, repeating spaces are compressed into a single space. If
'long', this is only done when the mode line is longer than the
current window width (in columns).
-+++
*** New user options to control format of line/column numbers in the mode line.
'mode-line-position-line-format' is the line number format (when
'line-number-mode' is on), 'mode-line-position-column-format' is
@@ -473,16 +409,13 @@ both modes are on).
** Tab Bars and Tab Lines
-+++
*** The prefix key 'C-x t t' can be used to display a buffer in a new tab.
Typing 'C-x t t' before a command will cause the buffer shown by that
command to be displayed in a new tab. 'C-x t t' is bound to the
command 'other-tab-prefix'.
-+++
*** New command 'C-x t C-r' to open file read-only in the other tab.
-+++
*** The tab bar now supports more mouse commands.
Clicking 'mouse-2' closes the tab, 'mouse-3' displays the context menu
with items that operate on the clicked tab. Dragging the tab with
@@ -490,20 +423,17 @@ with items that operate on the clicked tab. Dragging the tab with
scrolling switches to the previous/next tab, and holding the Shift key
during scrolling moves the tab to the left/right.
-+++
*** Frame-specific appearance of the tab bar when 'tab-bar-show' is a number.
When 'tab-bar-show' is a number, the tab bar on different frames can
be shown or hidden independently, as determined by the number of tabs
on each frame compared to the numerical value of 'tab-bar-show'.
-+++
*** New command 'toggle-frame-tab-bar'.
It can be used to enable/disable the tab bar on the currently selected
frame regardless of the values of 'tab-bar-mode' and 'tab-bar-show'.
This allows enabling/disabling the tab bar independently on different
frames.
-+++
*** New user option 'tab-bar-format' defines a list of tab bar items.
When it contains 'tab-bar-format-global' (possibly appended after
'tab-bar-format-align-right'), then after enabling 'display-time-mode'
@@ -512,7 +442,6 @@ aligned to the right on the tab bar instead of on the mode line.
When 'tab-bar-format-tabs' is replaced with 'tab-bar-format-tabs-groups',
the tab bar displays tab groups.
-+++
*** New optional key binding for 'tab-last'.
If you customize the user option 'tab-bar-select-tab-modifiers' to
allow selecting tabs using their index numbers, the '-9' key
@@ -522,20 +451,16 @@ is any of the modifiers in the list that is the value of
which count from the last tab: 1 is the last tab, 2 the one before
that, etc.
----
*** New command 'tab-duplicate' bound to 'C-x t n'.
----
*** 'C-x t N' creates a new tab at the specified absolute position.
The position is provided as prefix arg, and specifies an index that
starts at 1. Negative values count from the end of the tab bar.
----
*** 'C-x t M' moves the current tab to the specified absolute position.
The position is provided as prefix arg, whose interpretation is as in
'C-x t N'.
----
*** 'C-x t G' assigns a tab to a named group of tabs.
'tab-close-group' closes all tabs that belong to the selected group.
The user option 'tab-bar-new-tab-group' defines the default group of
@@ -543,18 +468,14 @@ new tabs. After customizing 'tab-bar-tab-post-change-group-functions'
to 'tab-bar-move-tab-to-group', changing the group of a tab will also
move it closer to other tabs in the same group.
----
*** New user option 'tab-bar-tab-name-format-function'.
----
*** New user option 'tab-line-tab-name-format-function'.
----
*** The tabs in the tab line can now be scrolled using horizontal scroll.
If your mouse or trackpad supports it, you can now scroll tabs when
the mouse pointer is in the tab line by scrolling left or right.
----
*** New tab-line faces and user options.
The face 'tab-line-tab-special' is used for tabs whose buffers are
special, i.e. buffers that don't visit a file. The face
@@ -569,17 +490,14 @@ in other ways.
** Mouse wheel
----
*** Mouse wheel scrolling now defaults to one line at a time.
----
*** Mouse wheel scrolling now works on more parts of frame's display.
When using 'mouse-wheel-mode', the mouse wheel will now scroll also when
the mouse cursor is on the scroll bars, fringes, margins, header line,
and mode line. ('mouse-wheel-mode' is enabled by default on most graphical
displays.)
-+++
*** Mouse wheel scrolling with Shift modifier now scrolls horizontally.
This works in text buffers and over images. Typing a numeric prefix arg
(e.g. 'M-5') before starting horizontal scrolling changes its step value.
@@ -587,10 +505,8 @@ The value is saved in the user option 'mouse-wheel-scroll-amount-horizontal'.
** Customize
----
*** Customize buffers can now be reverted with 'C-x x g'.
----
*** Most customize commands now hide obsolete user options.
Obsolete user options are no longer shown in the listings produced by
the commands 'customize', 'customize-group', 'customize-apropos' and
@@ -599,35 +515,28 @@ the commands 'customize', 'customize-group', 'customize-apropos' and
To customize obsolete user options, use 'customize-option' or
'customize-saved'.
----
*** New SVG icons for checkboxes and arrows.
They will be used automatically instead of the old icons. If Emacs is
built without SVG support, the old icons will be used instead.
** Help
----
*** The order of things displayed in the "*Help*" buffer has been changed.
The indented "administrative" block (containing the "probably
introduced" and "other relevant functions" (and similar things) has
been moved to after the doc string.
-+++
*** New command 'describe-command' shows help for a command.
This can be used instead of 'describe-function' for interactive
commands and is globally bound to 'C-h x'.
-+++
*** New command 'describe-keymap' describes keybindings in a keymap.
----
*** New command 'apropos-function'.
This works like 'C-u M-x apropos-command' but is more discoverable.
----
*** New keybinding 'C-h R' prompts for an Info manual and displays it.
----
*** Keybindings in 'help-mode' use the new 'help-key-binding' face.
This face is added by 'substitute-command-keys' to any "\[command]"
substitution. The return value of that function should consequently
@@ -638,17 +547,14 @@ with the new optional argument NO-FACE non-nil.
Note that the new face will also be used in tooltips. When using the
GTK toolkit, this is only true if 'x-gtk-use-system-tooltips' is t.
-+++
*** New user option 'help-enable-symbol-autoload'.
If non-nil, displaying help for an autoloaded function whose
'autoload' form provides no documentation string will try to load the
file it's from. This will give more extensive help for such
functions.
----
*** The 'help-for-help' ('C-h C-h') screen has been redesigned.
-+++
*** New convenience commands with short keys in the "*Help*" buffer.
New command 'help-view-source' ('s') will view the source file (if
any) of the current help topic. New command 'help-goto-info' ('i')
@@ -656,79 +562,65 @@ will look up the current symbol (if any) in Info. New command
'help-customize' ('c') will customize the user option or the face
(if any) whose doc string is being shown in the "*Help*" buffer.
----
*** New user option 'describe-bindings-outline'.
It enables outlines in the output buffer of 'describe-bindings' that
can provide a better overview in a long list of available bindings.
-+++
*** New commands to describe buttons and widgets.
'widget-describe' (on a widget) will pop up the "*Help*" buffer and
give a description of the properties. Likewise 'button-describe' does
the same for a button.
----
*** Improved "find definition" feature of "*Help*" buffers.
Now clicking on the link to find the definition of functions generated
by 'cl-defstruct', or variables generated by 'define-derived-mode',
for example, will go to the exact place where they are defined.
----
*** New commands 'apropos-next-symbol' and 'apropos-previous-symbol'.
These new navigation commands are bound to 'n' and 'p' in
'apropos-mode'.
----
*** The command 'view-lossage' can now be invoked from the menu bar.
The menu bar "Help" menu now has a "Show Recent Inputs" item under the
"Describe" sub-menu.
-+++
*** New command 'lossage-size'.
It allows users to change the maximum number of keystrokes and
commands recorded for the purpose of 'view-lossage'.
----
*** Closing the "*Help*" buffer from the toolbar now buries the buffer.
In previous Emacs versions, the "*Help*" buffer was killed instead when
clicking the "X" icon in the tool bar.
----
*** 'g' ('revert-buffer') in 'help-mode' no longer requires confirmation.
** File Locks
-+++
*** New user option 'lock-file-name-transforms'.
This option allows controlling where lock files are written. It uses
the same syntax as 'auto-save-file-name-transforms'.
-+++
*** New user option 'remote-file-name-inhibit-locks'.
When non-nil, this option suppresses lock files for remote files.
Default is nil.
-+++
*** New minor mode 'lock-file-mode'.
This command, called interactively, toggles the local value of
'create-lockfiles' in the current buffer.
** Emacs Server
-+++
*** New user option 'server-client-instructions'.
When emacsclient connects, Emacs will (by default) output a message
about how to exit the client frame. If 'server-client-instructions'
is set to nil, this message is inhibited.
-+++
*** New command 'server-edit-abort'.
This command (not bound to any key by default) can be used to abort
an edit instead of marking it as "Done" (which the 'C-x #' command
does). The 'emacsclient' program exits with an abnormal status as
result of this command.
-+++
*** New desktop integration for connecting to the server.
If your operating system's desktop environment is
freedesktop.org-compatible (which is true of most GNU/Linux and other
@@ -739,25 +631,20 @@ running.
** Miscellaneous
-+++
*** New command 'font-lock-update', bound to 'C-x x f'.
This command updates the syntax highlighting in this buffer.
-+++
*** New command 'memory-report'.
This command opens a new buffer called "*Memory Report*" and gives a
summary of where Emacs is using memory currently.
-+++
*** New command 'submit-emacs-patch'.
This works like 'report-emacs-bug', but is more geared towards sending
patches to the Emacs issue tracker.
----
*** New face 'apropos-button'.
Applies to buttons that indicate a face.
-+++
*** New face 'font-lock-doc-markup-face'.
Intended for documentation mark-up syntax and tags inside text that
uses 'font-lock-doc-face', which it should appropriately stand out
@@ -766,41 +653,34 @@ documentation comments in program source code by language-specific
modes, for mark-up conventions like Haddock, Javadoc or Doxygen. By
default this face inherits from 'font-lock-constant-face'.
-+++
*** New face box style 'flat-button'.
This is a plain 2D button, but uses the background color instead of
the foreground color.
----
*** New faces 'shortdoc-heading' and 'shortdoc-section'.
Applied to shortdoc headings and sections.
----
*** New face 'separator-line'.
This is used by 'make-separator-line' (see below).
-+++
*** 'redisplay-skip-fontification-on-input' helps Emacs keep up with fast input.
This is another attempt to solve the problem of handling high key repeat rate
and other "slow scrolling" situations. It is hoped it behaves better
than 'fast-but-imprecise-scrolling' and 'jit-lock-defer-time'.
It is not enabled by default.
----
*** Obsolete aliases are no longer hidden from command completion.
Completion of command names now considers obsolete aliases as
candidates, if they were marked obsolete in the current major version
of Emacs. Invoking a command via an obsolete alias now mentions the
obsolescence fact and shows the new name of the command.
-+++
*** Support for '(box . SIZE)' 'cursor-type'.
By default, 'box' cursor always has a filled box shape. But if you
specify 'cursor-type' to be '(box . SIZE)', the cursor becomes a hollow
box if the point is on an image larger than SIZE pixels in any
dimension.
-+++
*** The user can now customize how "default" values are prompted for.
The new utility function 'format-prompt' has been added which uses the
new 'minibuffer-default-prompt-format' user option to format "default"
@@ -810,7 +690,6 @@ number [10]", or not have the default displayed at all, like "Enter a
number". (This only affects callers that were altered to use
'format-prompt'.)
----
*** New help window when Emacs prompts before opening a large file.
Commands like 'find-file' or 'visit-tags-table' ask to visit a file
normally or literally when the file is larger than a certain size (by
@@ -818,20 +697,17 @@ default, 9.5 MiB). Press '?' or 'C-h' in that prompt to read more
about the different options to visit a file, how you can disable the
prompt, and how you can tweak the file size threshold.
-+++
*** Emacs now defaults to UTF-8 instead of ISO-8859-1.
This is only for the default, where the user has set no 'LANG' (or
similar) variable or environment. This change should lead to no
user-visible changes for normal usage.
----
*** 'global-display-fill-column-indicator-mode' skips some buffers.
By default, turning on 'global-display-fill-column-indicator-mode'
doesn't turn on 'display-fill-column-indicator-mode' in special-mode
buffers. This can be controlled by customizing the user option
'global-display-fill-column-indicator-modes'.
-+++
*** 'nobreak-char-display' now also affects all non-ASCII space characters.
Previously, this was limited only to 'NO-BREAK SPACE' and hyphen
characters. Now it also covers the rest of the non-ASCII Unicode
@@ -840,7 +716,6 @@ non-ASCII characters are displayed as themselves when
'nobreak-char-display' is t, i.e. they are not replaced on display
with the ASCII space and hyphen characters.
----
*** New backward compatibility variable 'nobreak-char-ascii-display'.
This variable is nil by default, and non-ASCII space and hyphen
characters are displayed as themselves, even if 'nobreak-char-display'
@@ -854,7 +729,6 @@ t. You may need this on text-mode terminals that produce messed up
display when non-ASCII spaces and hyphens are written to the display.
(This variable is only effective when 'nobreak-char-display' is t.)
-+++
*** Improved support for terminal emulators that encode the Meta flag.
Some terminal emulators set the 8th bit of Meta characters, and then
encode the resulting character code as if it were non-ASCII character
@@ -865,7 +739,6 @@ Meta characters to Emacs, e.g., send "ESC x" when the user types
emulators by using the new input-meta-mode with the special value
'encoded' with these terminal emulators.
----
*** 'auto-composition-mode' can now be selectively disabled on some TTYs.
Some text-mode terminals produce display glitches trying to compose
characters. The 'auto-composition-mode' can now have a string value
@@ -874,14 +747,12 @@ function compares equal with that string, automatic composition will
be disabled in windows shown on that terminal. The Linux terminal
sets this up by default.
----
*** Support for the 'strike-through' face attribute on TTY frames.
If your terminal's termcap or terminfo database entry has the 'smxx'
capability defined, Emacs will now emit the prescribed escape
sequences necessary to render faces with the 'strike-through'
attribute on TTY frames.
----
*** TTY menu navigation is now supported in 'xterm-mouse-mode'.
TTY menus support mouse navigation and selection when 'xterm-mouse-mode'
is active. When run on a terminal, clicking on the menu bar with the
@@ -889,19 +760,15 @@ mouse now pops up a TTY menu by default instead of running the command
'tmm-menubar'. To restore the old behavior, set the user option
'tty-menu-open-use-tmm' to non-nil.
----
*** 'M-x report-emacs-bug' will no longer include "Recent messages" section.
These were taken from the "*Messages*" buffer, and may inadvertently
leak information from the reporting user.
----
*** 'C-u M-x dig' will now prompt for a query type to use.
----
*** Rudimentary support for the 'st' terminal emulator.
Emacs now supports 256 color display on the 'st' terminal emulator.
-+++
*** Update IRC-related references to point to Libera.Chat.
The Free Software Foundation and the GNU Project have moved their
official IRC channels from the Freenode network to Libera.Chat. For the
@@ -921,12 +788,10 @@ https://lists.gnu.org/archive/html/info-gnu-emacs/2021-06/msg00000.html
* Incompatible Editing Changes in Emacs 28.1
----
** 'toggle-truncate-lines' now disables 'visual-line-mode'.
This is for symmetry with 'visual-line-mode', which disables
'truncate-lines'.
----
** 'electric-indent-mode' now also indents inside strings and comments.
(This only happens when indentation function also supports this.)
@@ -935,7 +800,6 @@ To recover the previous behavior you can use:
(add-hook 'electric-indent-functions
(lambda (_) (if (nth 8 (syntax-ppss)) 'no-indent)))
----
** The 'M-o' ('facemenu-keymap') global binding has been removed.
To restore the old binding, say something like:
@@ -947,7 +811,6 @@ To restore the old binding, say something like:
The last two lines are not strictly necessary if you don't care about
having those two commands on the 'M-o' keymap; see the next section.
----
** The 'M-o M-s' and 'M-o M-S' global bindings have been removed.
Use 'M-x center-line' and 'M-x center-paragraph' instead. See the
previous section for how to get back the old bindings. Alternatively,
@@ -957,12 +820,10 @@ had before, you can add the following to your init file:
(define-key global-map "\M-o\M-s" 'center-line)
(define-key global-map "\M-o\M-S" 'center-paragraph)
----
** The 'M-o M-o' global binding has been removed.
Use 'M-x font-lock-fontify-block' instead, or the new 'C-x x f'
command, which updates the syntax highlighting in the current buffer.
----
** The escape sequence '\e[29~' in Xterm is now mapped to 'menu'.
Xterm sends this sequence for both 'F16' and 'Menu' keys
It used to be mapped to 'print' but we couldn't find a terminal
@@ -970,26 +831,21 @@ that uses this sequence for any kind of 'Print' key.
This makes the Menu key (see https://en.wikipedia.org/wiki/Menu_key)
work for 'context-menu-mode' in Xterm.
----
** New user option 'xterm-store-paste-on-kill-ring'.
If non-nil (the default), Emacs pushes pasted text onto the kill ring
(if using an xterm-like terminal that supports bracketed paste).
Setting this to nil inhibits that.
----
** 'vc-print-branch-log' shows the change log from its root directory.
It previously used to use the default directory.
----
** 'project-shell' and 'shell' now use 'pop-to-buffer-same-window'.
This is to keep the same behavior as Eshell.
----
** In 'nroff-mode', 'center-line' is no longer bound to a key.
The original key binding was 'M-s', which interfered with Isearch,
since the latter uses 'M-s' as a prefix key of the search prefix map.
----
** In 'f90-mode', the backslash character ('\') no longer escapes.
For about a decade, the backslash character has no longer had a
special escape syntax in Fortran F90. To get the old behavior back,
@@ -997,7 +853,6 @@ say something like:
(modify-syntax-entry ?\\ "\\" f90-mode-syntax-table)
-+++
** Setting 'fill-column' to nil is obsolete.
This undocumented use of 'fill-column' is now obsolete. To disable
auto filling, turn off 'auto-fill-mode' instead.
@@ -1012,7 +867,6 @@ file:
** Input methods
-+++
*** Emacs now supports "transient" input methods.
A transient input method is enabled for inserting a single character,
and is then automatically disabled. 'C-x \' temporarily enables the
@@ -1024,33 +878,27 @@ character '½', and disable the 'compose' input method afterwards.
You can use 'C-x \' in incremental search to insert a single character
to the search string.
----
*** New input method 'compose' based on X Multi_key sequences.
----
*** New input method 'iso-transl' with the same keys as 'C-x 8'.
After selecting it as a transient input method with 'C-u C-x \
iso-transl RET', it supports the same key sequences as 'C-x 8',
so e.g. like 'C-x 8 [' inserts a left single quotation mark,
'C-x \ [' does the same.
----
*** New user option 'read-char-by-name-sort'.
It defines the sorting order of characters for completion of 'C-x 8 RET TAB'
and can be customized to sort them by codepoints instead of character names.
Additionally, you can group characters by Unicode blocks after customizing
'completions-group' and 'completions-group-sort'.
----
*** Improved language transliteration in Malayalam input methods.
Added a new Mozhi scheme. The inapplicable ITRANS scheme is now
deprecated. Errors in the Inscript method were corrected.
----
*** New input method 'cham'.
There's also a Cham greeting in "etc/HELLO".
----
*** New input methods for Lakota language orthographies.
Two orthographies are represented here, the Suggested Lakota
Orthography and what is known as the White Hat Orthography. Input
@@ -1058,7 +906,6 @@ methods 'lakota-slo-prefix', 'lakota-slo-postfix', and
'lakota-white-hat-postfix' have been added. There is also a Lakota
greeting in "etc/HELLO".
-+++
** Standalone 'M-y' allows interactive selection from previous kills.
'M-y' can now be typed after a command that is not a yank command.
When invoked like that, it prompts in the minibuffer for one of the
@@ -1068,14 +915,12 @@ in Isearch can be invoked if you bind 'C-s M-y' to the command
'isearch-yank-pop'. When the user option 'yank-from-kill-ring-rotate'
is nil the kill ring is not rotated after 'yank-from-kill-ring'.
-+++
** New user option 'word-wrap-by-category'.
When word-wrap is enabled, and this option is non-nil, that allows
Emacs to break lines after more characters than just whitespace
characters. In particular, this significantly improves word-wrapping
for CJK text mixed with Latin text.
-+++
** New command 'undo-redo'.
It undoes previous undo commands, but doesn't record itself as an
undoable command. It is bound to 'C-?' and 'C-M-_', the first binding
@@ -1084,43 +929,35 @@ works well in graphical mode, and the second one is easy to hit on tty.
For full conventional undo/redo behavior, you can also customize the
user option 'undo-no-redo' to t.
-+++
** New commands 'copy-matching-lines' and 'kill-matching-lines'.
These commands are similar to the command 'flush-lines',
but add the matching lines to the kill ring as a single string,
including the newlines that separate the lines.
-+++
** New user option 'kill-transform-function'.
This can be used to transform (and suppress) strings from entering the
kill ring.
-+++
** 'save-interprogram-paste-before-kill' can now be a number.
In that case, it's interpreted as a limit on the size of the clipboard
data that will be saved to the 'kill-ring' prior to killing text: if
the size of the clipboard data is greater than or equal to the limit,
it will not be saved.
-+++
** New user option 'tab-first-completion'.
If 'tab-always-indent' is 'complete', this new user option can be used to
further tweak whether to complete or indent.
----
** 'indent-tabs-mode' is now a global minor mode instead of just a variable.
-+++
** New choice 'permanent' for 'shift-select-mode'.
When the mark was activated by shifted motion keys, non-shifted motion
keys don't deactivate the mark after customizing 'shift-select-mode'
to 'permanent'. Similarly, the active mark will not be deactivated by
typing shifted motion keys.
-+++
** The "Edit => Clear" menu item now obeys a rectangular region.
-+++
** New command 'revert-buffer-with-fine-grain'.
Revert a buffer trying to be as non-destructive as possible,
preserving markers, properties and overlays. The new variable
@@ -1128,18 +965,15 @@ preserving markers, properties and overlays. The new variable
number of seconds that 'revert-buffer-with-fine-grain' should spend
trying to be non-destructive, with a default value of 2 seconds.
-+++
** New command 'revert-buffer-quick'.
This is bound to 'C-x x g' and is like 'revert-buffer', but prompts
less.
-+++
** New user option 'revert-buffer-quick-short-answers'.
This controls how the new 'revert-buffer-quick' ('C-x x g') command
prompts. A non-nil value will make it use 'y-or-n-p' rather than
'yes-or-no-p'. Defaults to nil.
-+++
** New user option 'query-about-changed-file'.
If non-nil (the default), Emacs prompts as before when re-visiting a
file that has changed externally after it was visited the first time.
@@ -1147,30 +981,25 @@ If nil, Emacs does not prompt, but instead shows the buffer with its
contents before the change, and provides instructions how to revert
the buffer.
----
** New value 'save-some-buffers-root' of 'save-some-buffers-default-predicate'.
When using this predicate, only buffers under the current project root
will be considered when saving buffers with 'save-some-buffers'.
----
** New user option 'save-place-abbreviate-file-names'.
This can simplify sharing the 'save-place-file' file across
different hosts.
----
** New user options 'copy-region-blink-delay' and 'delete-pair-blink-delay'.
'copy-region-blink-delay' specifies a delay to indicate the region
copied by 'kill-ring-save'. 'delete-pair-blink-delay' specifies
a delay to show the paired character to delete.
----
** 'zap-up-to-char' now uses 'read-char-from-minibuffer'.
This allows navigating through the history of characters that have
been input. This is mostly useful for characters that have complex
input methods where inputting the character again may involve many
keystrokes.
-+++
** Input history for 'goto-line' can now be made local to every buffer.
In any event, line numbers used with 'goto-line' are kept in their own
history list. This should help make faster the process of finding
@@ -1178,7 +1007,6 @@ line numbers that were previously jumped to. By default, all buffers
share a single history list. To make every buffer have its own
history list, customize the user option 'goto-line-history-local'.
-+++
** New command 'goto-line-relative' for use in a narrowed buffer.
It moves point to the line relative to the accessible portion of the
narrowed buffer. 'M-g M-g' in Info is rebound to this command.
@@ -1186,7 +1014,6 @@ When 'widen-automatically' is non-nil, 'goto-line' widens the narrowed
buffer to be able to move point to the inaccessible portion.
'goto-line-relative' is bound to 'C-x n g'.
-+++
** 'goto-char' prompts for the character position.
When called interactively, 'goto-char' now offers the position at
point as the default.
@@ -1195,11 +1022,9 @@ point as the default.
Set the user option 'auto-save-visited-mode' buffer-locally to nil to
achieve that.
-+++
** New command 'kdb-macro-redisplay' to force redisplay in keyboard macros.
This command is bound to 'C-x C-k d'.
----
** 'blink-cursor-mode' is now enabled by default regardless of the UI.
It used to be enabled when Emacs is started in GUI mode but not when started
in text mode. The cursor still only actually blinks in GUI frames.
@@ -1208,7 +1033,6 @@ in text mode. The cursor still only actually blinks in GUI frames.
To go back to the previous behavior, customize the user option of the
same name to nil.
-+++
** New minor mode 'show-paren-local-mode'.
It serves as a local counterpart for 'show-paren-mode', allowing you
to toggle it separately in different buffers. To use it only in
@@ -1221,7 +1045,6 @@ programming modes, for example, add the following to your init file:
** Isearch and Replace
-+++
*** Interactive regular expression search now uses faces for sub-groups.
E.g., 'C-M-s foo-\([0-9]+\)' will now use the 'isearch-group-1' face
on the part of the regexp that matches the sub-expression "[0-9]+".
@@ -1233,12 +1056,10 @@ This is controlled by the 'search-highlight-submatches' user option.
This feature is available only on terminals that have enough colors to
distinguish between sub-expression highlighting.
-+++
*** Interactive regular expression replace now uses faces for sub-groups.
Like 'search-highlight-submatches', this is controlled by the new user option
'query-replace-highlight-submatches'.
-+++
*** New key 'M-s M-.' starts isearch looking for the thing at point.
This key is bound to the new command 'isearch-forward-thing-at-point'.
The new user option 'isearch-forward-thing-at-point' defines
@@ -1246,20 +1067,17 @@ a list of symbols to try to get the "thing" at point. By default,
the first element of the list is 'region' that tries to yank
the currently active region to the search string.
-+++
*** New user option 'isearch-wrap-pause' defines how to wrap the search.
There are choices to disable wrapping completely and to wrap immediately.
When wrapping immediately, it consistently handles the numeric arguments
of 'C-s' ('isearch-repeat-forward') and 'C-r' ('isearch-repeat-backward'),
continuing with the remaining count after wrapping.
-+++
*** New user option 'isearch-repeat-on-direction-change'.
When this option is set, direction changes in Isearch move to another
search match, if there is one, instead of moving point to the other
end of the current match.
-+++
*** New user option 'isearch-allow-motion'.
When 'isearch-allow-motion' is set, the commands 'beginning-of-buffer',
'end-of-buffer', 'scroll-up-command' and 'scroll-down-command', when
@@ -1271,14 +1089,12 @@ during Isearch by using their 'isearch-motion' property. The user
option 'isearch-motion-changes-direction' controls whether the
direction of the search changes after a motion command.
-+++
*** New user option 'lazy-highlight-no-delay-length'.
Lazy highlighting of matches in Isearch now starts immediately if the
search string is at least this long. 'lazy-highlight-initial-delay'
still applies for shorter search strings, which avoids flicker in the
search buffer due to too many matches being highlighted.
-+++
*** The default 'search-whitespace-regexp' value has changed.
This used to be "\\s-+", which meant that it was mode-dependent whether
newlines were included in the whitespace set. This has now been
@@ -1286,52 +1102,43 @@ changed to only match spaces and tab characters.
** Dired
-+++
*** New user option 'dired-kill-when-opening-new-dired-buffer'.
If non-nil, Dired will kill the current buffer when selecting a new
directory to display.
-+++
*** Behavior change on 'dired-do-chmod'.
As a security precaution, Dired's 'M' command no longer follows
symbolic links. Instead, it changes the symbolic link's own mode;
this always fails on platforms where such modes are immutable.
----
*** Behavior change on 'dired-clean-confirm-killing-deleted-buffers'.
Previously, if 'dired-clean-up-buffers-too' was non-nil, and
'dired-clean-confirm-killing-deleted-buffers' was nil, the buffers
wouldn't be killed. This combination will now kill the buffers.
-+++
*** New user option 'dired-switches-in-mode-line'.
This user option controls how 'ls' switches are displayed in the mode
line, and allows truncating them (to preserve space on the mode line)
or showing them literally, either instead of, or in addition to,
displaying "by name" or "by date" sort order.
-+++
*** New user option 'dired-compress-directory-default-suffix'.
This user option controls the default suffix for compressing a
directory. If it's nil, ".tar.gz" will be used. Refer to
'dired-compress-files-alist' for a list of supported suffixes.
-+++
*** New user option 'dired-compress-file-default-suffix'.
This user option controls the default suffix for compressing files.
If it's nil, ".gz" will be used. Refer to 'dired-compress-file-alist'
for a list of supported suffixes.
----
*** Broken and circular links are shown with the 'dired-broken-symlink' face.
----
*** '=' ('dired-diff') will now put all backup files into the 'M-n' history.
When using '=' on a file with backup files, the default file to use
for diffing is the newest backup file. You can now use 'M-n' to quickly
select a different backup file instead.
-+++
*** New user option 'dired-maybe-use-globstar'.
If set, enables globstar (recursive globbing) in shells that support
this feature, but have it turned off by default. This allows producing
@@ -1340,19 +1147,16 @@ subdirectories of a given directory. The new variable
'dired-enable-globstar-in-shell' lists which shells can have globstar
enabled, and how to enable it.
-+++
*** New user option 'dired-copy-dereference'.
If set to non-nil, Dired will dereference symbolic links when copying.
This can be switched off on a per-usage basis by providing
'dired-do-copy' with a 'C-u' prefix.
----
*** New user option 'dired-do-revert-buffer'.
Non-nil reverts the destination Dired buffer after performing one
of these operations: 'dired-do-copy', 'dired-do-rename',
'dired-do-symlink', 'dired-do-hardlink'.
----
*** New user option 'dired-mark-region'.
This option affects all Dired commands that mark files. When non-nil
and the region is active in Transient Mark mode, then Dired commands
@@ -1360,12 +1164,10 @@ operate only on files in the active region. The values 'file' and
'line' of this user option define the details of marking the file at
the end of the region.
-+++
*** State changing VC operations are supported in Dired.
These operations are supported on files and directories via the new
command 'dired-vc-next-action'.
-+++
*** 'dired-jump' and 'dired-jump-other-window' moved from 'dired-x' to 'dired'.
The 'dired-jump' and 'dired-jump-other-window' commands have been
moved from the 'dired-x' package to 'dired'. The user option
@@ -1378,25 +1180,21 @@ keys, add the following to your init file:
(global-set-key "\C-x\C-j" nil)
(global-set-key "\C-x4\C-j" nil)
----
*** 'dired-query' now uses 'read-char-from-minibuffer'.
Using it instead of 'read-char-choice' allows using 'C-x o'
to switch to the help window displayed after typing 'C-h'.
-+++
** Emacs 28.1 comes with Org v9.5.
See the file ORG-NEWS for user-visible changes in Org.
** Outline
-+++
*** New commands to cycle heading visibility.
Typing 'TAB' on a heading line cycles the current section between
"hide all", "subheadings", and "show all" states. Typing 'S-TAB'
anywhere in the buffer cycles the whole buffer between "only top-level
headings", "all headings and subheadings", and "show all" states.
-+++
*** New user option 'outline-minor-mode-cycle'.
This user option customizes 'outline-minor-mode', with the difference
that 'TAB' and 'S-TAB' on heading lines cycle heading visibility.
@@ -1405,7 +1203,6 @@ Typing 'TAB' on a heading line cycles the current section between
heading line cycles the whole buffer between "only top-level
headings", "all headings and subheadings", and "show all" states.
----
*** New user option 'outline-minor-mode-highlight'.
This user option customizes 'outline-minor-mode'. It puts
highlighting on heading lines using standard outline faces. This
@@ -1414,27 +1211,22 @@ major mode.
** Ispell
-+++
*** 'ispell-comments-and-strings' now accepts START and END arguments.
These arguments default to the active region when used interactively.
-+++
*** New command 'ispell-comment-or-string-at-point'.
----
*** New user option 'ispell-help-timeout'.
This controls how long the ispell help (on the '?' key) is displayed.
** Flyspell mode
-+++
*** Corrections and actions menu can be optionally bound to 'mouse-3'.
When Flyspell mode highlights a word as misspelled, you can click on
it to display a menu of possible corrections and actions. You can now
easily bind this menu to 'down-mouse-3' (usually the right mouse button)
instead of 'mouse-2' (the default) by enabling 'context-menu-mode'.
----
*** The current dictionary is now displayed in the minor mode lighter.
Clicking the dictionary name changes the current dictionary.
@@ -1444,7 +1236,6 @@ Clicking the dictionary name changes the current dictionary.
Thus, packages on NonGNU ELPA will appear by default in the list shown
by 'list-packages'.
----
*** '/ s' ('package-menu-filter-by-status') changed parameter handling.
The command was documented to take a comma-separated list of statuses
to filter by, but instead it used the parameter as a regexp. The
@@ -1452,10 +1243,8 @@ command has been changed so that it now works as documented, and
checks statuses not as a regexp, but instead an exact match from the
comma-separated list.
-+++
*** New command 'package-browse-url' and keystroke 'w'.
-+++
*** New commands to filter the package list.
The filter commands are bound to the following keys:
@@ -1482,7 +1271,6 @@ run the native-compilation of the package files. (Be sure to leave
Emacs running until these asynchronous subprocesses exit, or else the
native-compilation will be aborted when you exit Emacs.)
----
*** Column widths in 'list-packages' display can now be customized.
See the new user options 'package-name-column-width',
'package-version-column-width', 'package-status-column-width', and
@@ -1490,7 +1278,6 @@ See the new user options 'package-name-column-width',
** Info
----
*** New user option 'Info-warn-on-index-alternatives-wrap'.
This option affects what happens when using the ',' command after
looking up an entry with 'i' in info buffers. If non-nil (the
@@ -1500,7 +1287,6 @@ you to the first match.
** Abbrev mode
-+++
*** Emacs can now suggest to use an abbrev based on text you type.
A new user option, 'abbrev-suggest', enables the new abbrev suggestion
feature. When enabled, if a user manually types a piece of text that
@@ -1510,17 +1296,14 @@ used instead.
** Bookmarks
----
*** Bookmarks can now be targets for new tabs.
When the bookmark.el library is loaded, a customize choice is added
to 'tab-bar-new-tab-choice' for new tabs to show the bookmark list.
----
*** New user option 'bookmark-set-fringe-mark'.
If non-nil, setting a bookmark will set a fringe mark on the current
line, and jumping to a bookmark will also set this mark.
----
*** New user option 'bookmark-menu-confirm-deletion'.
In Bookmark Menu mode, Emacs by default does not prompt for
confirmation when you type 'x' to execute the deletion of bookmarks
@@ -1528,7 +1311,6 @@ that have been marked for deletion. However, if this new option is
non-nil then Emacs will require confirmation with 'yes-or-no-p' before
deleting.
----
*** The 'list-bookmarks' menu is now based on 'tabulated-list-mode'.
The interactive bookmark list will now benefit from features in
'tabulated-list-mode' like sorting columns or changing column width.
@@ -1540,17 +1322,14 @@ The variables 'bookmark-bmenu-use-header-line' and
** Recentf
----
*** The recentf files are no longer backed up.
----
*** 'recentf-auto-cleanup' now repeats daily when set to a time string.
When 'recentf-auto-cleanup' is set to a time string, it now repeats
every day, rather than only running once after the mode is turned on.
** Calc
----
*** The behavior when doing forward-delete has been changed.
Previously, using the 'C-d' command would delete the final number in
the input field, no matter where point was. This has been changed to
@@ -1558,42 +1337,35 @@ work more traditionally, with 'C-d' deleting the next character.
Likewise, point isn't moved to the end of the string before inserting
digits.
-+++
*** Setting the word size to zero disables word clipping.
The word size normally clips the results of certain bit-oriented
operations such as shifts and bitwise XOR. A word size of zero, set
by 'b w', makes the operation have effect on the whole argument values
and the result is not truncated in any way.
----
*** The '/' operator now has higher precedence in (La)TeX input mode.
It no longer has lower precedence than '+' and '-'.
----
*** New user option 'calc-make-windows-dedicated'.
When this user option is non-nil, Calc will mark its windows as
dedicated.
** Calendar
-+++
*** New user option 'calendar-time-zone-style'.
If 'numeric', calendar functions (eg 'calendar-sunrise-sunset') that display
time zones will use a form like "+0100" instead of "CET".
** Imenu
-+++
*** New user option 'imenu-max-index-time'.
If creating the imenu index takes longer than specified by this
option (default 5 seconds), imenu indexing is stopped.
** Ido
----
*** Switching on 'ido-mode' now also overrides 'ffap-file-finder'.
----
*** Killing virtual ido buffers interactively will make them go away.
Previously, killing a virtual ido buffer with 'ido-kill-buffer' didn't
do anything. This has now been changed, and killing virtual buffers
@@ -1601,13 +1373,11 @@ with that command will remove the buffer from recentf.
** So Long
----
*** New 'so-long-predicate' function 'so-long-statistics-excessive-p'.
It efficiently detects the presence of a long line anywhere in the
buffer using 'buffer-line-statistics' (see above). This is now the
default predicate (replacing 'so-long-detected-long-line-p').
----
*** Default values 'so-long-threshold' and 'so-long-max-lines' increased.
The values of these user options have been raised to 10000 bytes and 500
lines respectively, to reduce the likelihood of false-positives when
@@ -1615,14 +1385,12 @@ lines respectively, to reduce the likelihood of false-positives when
by the old predicate, as the new predicate knows the longest line in
the entire buffer.
----
*** 'so-long-target-modes' now includes 'fundamental-mode' by default.
This means that 'global-so-long-mode' will also process files which were
not recognised. (This only has an effect if 'set-auto-mode' chooses
'fundamental-mode'; buffers which are simply in 'fundamental-mode' by
default are unaffected.)
----
*** New user options to preserve modes and variables.
The new options 'so-long-mode-preserved-minor-modes' and
'so-long-mode-preserved-variables' allow specified mode and variable
@@ -1631,7 +1399,6 @@ mode. By default, these new options support 'view-mode'.
** Grep
-+++
*** New user option 'grep-match-regexp' matches grep markers to highlight.
Grep emits SGR ANSI escape sequences to color its output. The new
user option 'grep-match-regexp' holds the regular expression to match
@@ -1639,7 +1406,6 @@ the appropriate markers in order to provide highlighting in the source
buffer. The user option can be customized to accommodate other
grep-like tools.
----
*** The 'lgrep' command now ignores directories.
On systems where the grep command supports it, directories will be
skipped.
@@ -1653,19 +1419,16 @@ any directory names on the 'find' command lines end in a slash.
This change is for better compatibility with old versions of non-GNU
'find', such as the one used on macOS.
----
*** New utility function 'grep-file-at-point'.
This returns the name of the file at point (if any) in 'grep-mode'
buffers.
** Shell
----
*** New command in 'shell-mode': 'shell-narrow-to-prompt'.
This is bound to 'C-x n d' in 'shell-mode' buffers, and narrows to the
command line under point (and any following output).
----
*** New user option 'shell-has-auto-cd'.
If non-nil, 'shell-mode' handles implicit "cd" commands, changing the
directory if the command is a directory. Useful for shells like "zsh"
@@ -1673,20 +1436,17 @@ that has this feature.
** Term mode
----
*** New user option 'term-scroll-snap-to-bottom'.
By default, 'term' and 'ansi-term' will now recenter the buffer so
that the prompt is on the final line in the window. Setting this new
user option to nil inhibits this behavior.
----
*** New user option 'term-set-terminal-size'.
If non-nil, the 'LINES' and 'COLUMNS' environment variables will be set
based on the current window size. In previous versions of Emacs, this
was always done (and that could lead to odd displays when resizing the
window after starting). This variable defaults to nil.
----
*** 'term-mode' now supports "bright" color codes.
"Bright" ANSI color codes are now displayed using the color values
defined in 'term-color-bright-*'. In addition, bold text with regular
@@ -1695,15 +1455,12 @@ is non-nil.
** Eshell
----
*** 'eshell-hist-ignoredups' can now also be used to mimic "erasedups" in bash.
----
*** Environment variable 'INSIDE_EMACS' is now copied to subprocesses.
Its value contains the result of evaluating '(format "%s,eshell"
emacs-version)'. Other package names, like "tramp", could also be included.
----
*** Eshell no longer re-initializes its keymap every call.
This allows users to use '(define-key eshell-mode-map ...)' as usual.
Some modules have their own minor mode now to account for these
@@ -1715,7 +1472,6 @@ will create a bookmark that opens the current directory in Eshell.
** Archive mode
----
*** Archive mode can now parse ".squashfs" files.
*** Can now modify members of 'ar' archives.
@@ -1727,7 +1483,6 @@ New user option 'archive-hidden-columns' and new command
'archive-hideshow-column' let you control which columns are displayed
and which are kept hidden.
----
*** New command bound to 'C': 'archive-copy-file'.
This command extracts the file at point and writes its data to a
file.
@@ -1756,15 +1511,12 @@ symbol property to the browsing commands. With a new command
'browse-url-with-browser-kind', an URL can explicitly be browsed with
either an internal or external browser.
----
*** Support for browsing of remote files.
If a remote file is specified, a local temporary copy of that file is
passed to the browser.
----
*** Support for the conkeror browser is now obsolete.
----
*** Support for the Mosaic browser has been removed.
This support has been obsolete since 25.1.
@@ -1775,7 +1527,6 @@ New key bindings have been added to 'completion-list-mode': 'n' and
'p' now navigate completions, and 'M-g M-c' switches to the
minibuffer and back to the completion list buffer.
-+++
** Profiler
The results displayed by 'profiler-report' now have the usage figures
at the left hand side followed by the function name. This is intended
@@ -1785,12 +1536,10 @@ layout back.
** Icomplete
----
*** New user option 'icomplete-matches-format'.
This allows controlling the current/total number of matches for the
prompt prefix.
-+++
*** New minor modes 'icomplete-vertical-mode' and 'fido-vertical-mode'.
These modes modify Icomplete ('icomplete-mode') and Fido
('fido-mode'), to display completion candidates vertically instead of
@@ -1799,20 +1548,16 @@ kept at the top. In Fido, completions scroll like a typical dropdown
widget. Both these new minor modes will turn on their non-vertical
counterparts first, if they are not on already.
----
*** Default value of 'icomplete-compute-delay' has been changed to 0.15 s.
----
*** Default value of 'icomplete-max-delay-chars' has been changed to 2.
----
*** Reduced blinking while completing the next completions set.
Icomplete doesn't hide the hint with the previously computed
completions anymore when compute delay is in effect, or the previous
computation has been aborted by input. Instead it shows the previous
completions until the new ones are ready.
----
*** Change in meaning of 'icomplete-show-matches-on-no-input'.
Previously, choosing a different completion with commands like 'C-.'
and then hitting 'RET' would choose the default completion. Doing this
@@ -1822,7 +1567,6 @@ with initial input as the default directory.
** Windmove
-+++
*** New user options to customize windmove keybindings.
These options include 'windmove-default-keybindings',
'windmove-display-default-keybindings',
@@ -1832,25 +1576,20 @@ Also new mode 'windmove-mode' enables the customized keybindings.
** Occur mode
----
*** New bindings in 'occur-mode'.
The command 'next-error-no-select' is now bound to 'n' and
'previous-error-no-select' is bound to 'p'.
----
*** New command 'recenter-current-error'.
It is bound to 'l' in Occur or compilation buffers, and recenters the
current displayed occurrence/error.
----
*** Matches in target buffers are now highlighted as in 'compilation-mode'.
The method of highlighting is specified by the user options
'next-error-highlight' and 'next-error-highlight-no-select'.
----
*** A fringe arrow in the "*Occur*" buffer indicates the selected match.
----
*** Occur mode may use a different type for 'occur-target' property values.
The value was previously always a marker set to the start of the first
match on the line but can now also be a list of '(BEGIN . END)' pairs
@@ -1861,10 +1600,8 @@ work as before.
** Emacs Lisp mode
----
*** The mode-line now indicates whether we're using lexical or dynamic scoping.
-+++
*** A space between an open paren and a symbol changes the indentation rule.
The presence of a space between an open paren and a symbol now is
taken as a statement by the programmer that this should be indented
@@ -1876,37 +1613,31 @@ as a data list rather than as a piece of code.
The mode provides refined highlighting of built-in functions, types,
and variables.
----
*** Lisp mode now uses 'common-lisp-indent-function'.
To revert to the previous behavior,
'(setq lisp-indent-function 'lisp-indent-function)' from 'lisp-mode-hook'.
** Change Logs and VC
-+++
*** 'vc-revert-show-diff' now has a third possible value: 'kill'.
If this user option is 'kill', then the diff buffer will be killed
after the 'vc-revert' action instead of buried.
----
*** More VC commands can be used from non-file buffers.
The relevant commands are those that don't change the VC state.
The non-file buffers which can use VC commands are those that have
their 'default-directory' under VC.
----
*** New face 'log-view-commit-body'.
This is used when expanding commit messages from 'vc-print-root-log'
and similar commands.
----
*** New faces for 'vc-dir' buffers.
Those are: 'vc-dir-header', 'vc-dir-header-value', 'vc-dir-directory',
'vc-dir-file', 'vc-dir-mark-indicator', 'vc-dir-status-warning',
'vc-dir-status-edited', 'vc-dir-status-up-to-date',
'vc-dir-status-ignored'.
----
*** The responsible VC backend is now the most specific one.
'vc-responsible-backend' loops over the backends in
'vc-handled-backends' to determine which backend is responsible for a
@@ -1914,41 +1645,32 @@ specific (unregistered) file. Previously, the first matching backend
was chosen, but now the one with the most specific path is chosen (in
case there's a directory handled by one backend inside another).
----
*** New command 'vc-dir-root' uses the root directory without asking.
----
*** New commands 'vc-dir-mark-registered-files' (bound to '* r') and
'vc-dir-mark-unregistered-files'.
----
*** Support for bookmark.el.
Bookmark locations can refer to VC directory buffers.
----
*** New user option 'vc-hg-create-bookmark'.
It controls whether a bookmark or branch will be created when you
invoke 'C-u C-x v s' ('vc-create-tag').
----
*** 'vc-hg' now uses 'hg summary' to populate extra 'vc-dir' headers.
----
*** New user option 'vc-git-revision-complete-only-branches'.
If non-nil, only branches and remotes are considered when doing
completion over Git branch names. The default is nil, which causes
tags to be considered as well.
----
*** New user option 'vc-git-log-switches'.
String or list of strings specifying switches for Git log under VC.
----
*** Command 'vc-switch-backend' is now obsolete.
If you are still using it with any regularity, please file a bug
report with some details.
----
*** New variable 'vc-git-use-literal-pathspecs'.
The Git backend's function now treat all file names "literally", where
some of them previously could interpret file names (pathspecs) as
@@ -1957,35 +1679,28 @@ the aforementioned variable to nil locally to avoid this.
** Gnus
-+++
*** New user option 'gnus-topic-display-predicate'.
This can be used to inhibit the display of some topics completely.
-+++
*** nnimap now supports the oauth2.el library.
-+++
*** New Summary buffer sort options for extra headers.
The extra header sort option ('C-c C-s C-x') prompts for a header
and fails if no sort function has been defined. Sorting by
Newsgroups ('C-c C-s C-u') has been pre-defined.
-+++
*** The '#' command in the Group and Summary buffer now toggles,
instead of sets, the process mark.
-+++
*** New user option 'gnus-process-mark-toggle'.
If non-nil (the default), the '#' command in the Group and Summary
buffers will toggle, instead of set, the process mark.
-+++
*** New user option 'gnus-registry-register-all'.
If non-nil (the default), create registry entries for all messages.
If nil, don't automatically create entries, they must be created
manually.
-+++
*** New user options to customise the summary line specs "%[" and "%]".
Four new options introduced in customisation group
'gnus-summary-format'. These are 'gnus-sum-opening-bracket',
@@ -1998,29 +1713,24 @@ the value of 'gnus-sum-opening-bracket', but can also be
normally display the value of 'gnus-sum-closing-bracket', but can also
be 'gnus-sum-closing-bracket-adopted' for the adopted articles.
-+++
*** New user option 'gnus-paging-select-next'.
This controls what happens when using commands like 'SPC' and 'DEL' to
page the current article. If non-nil (the default), go to the
next/prev article, but if nil, do nothing at the end/start of the article.
-+++
*** New gnus-search library.
A new unified search syntax which can be used across multiple
supported search engines. Set 'gnus-search-use-parsed-queries' to
non-nil to enable.
-+++
*** New value for user option 'smiley-style'.
Smileys can now be rendered with emojis instead of small images when
using the new 'emoji' value in 'smiley-style'.
-+++
*** New user option 'gnus-agent-eagerly-store-articles'.
If non-nil (which is the default), the Gnus Agent will store all read
articles in the Agent cache.
-+++
*** New user option 'gnus-global-groups'.
Gnus handles private groups differently from public (i.e., NNTP-like)
groups. Most importantly, Gnus doesn't download external images from
@@ -2028,17 +1738,14 @@ mail-like groups. This can be overridden by putting group names in
'gnus-global-groups': Any group present in that list will be treated
like a public group.
-+++
*** New scoring types for the Date header.
You can now score based on the relative age of an article with the new
'<' and '>' date scoring types.
-+++
*** User-defined scoring is now possible.
The new type is 'score-fn'. More information in the Gnus manual node
"(gnus) Score File Format".
-+++
*** New backend 'nnselect'.
The newly added 'nnselect' backend allows creating groups from an
arbitrary list of articles that may come from multiple groups and
@@ -2061,35 +1768,29 @@ has been removed; its functionality is now available directly in the
'gnus-refer-thread-use-nnir' has been renamed to
'gnus-refer-thread-use-search'.
-+++
*** New user option 'gnus-dbus-close-on-sleep'.
On systems with D-Bus support, it is now possible to register a signal
to close all Gnus servers before the system sleeps.
-+++
*** The key binding of 'gnus-summary-search-article-forward' has changed.
This command was previously on 'M-s' and shadowed the global 'M-s'
search prefix. The command has now been moved to 'M-s M-s'. (For
consistency, the 'M-s M-r' key binding has been added for the
'gnus-summary-search-article-backward' command.)
----
*** The value for "all" in the 'large-newsgroup-initial' group parameter has changed.
It was previously nil, which didn't work, because nil is
indistinguishable from not being present. The new value for "all" is
the symbol 'all'.
-+++
*** The name of dependent Gnus sessions has changed from "slave" to "child".
The names of the commands 'gnus-slave', 'gnus-slave-no-server' and
'gnus-slave-unplugged' have changed to 'gnus-child',
'gnus-child-no-server' and 'gnus-child-unplugged' respectively.
-+++
*** The 'W Q' summary mode command now takes a numerical prefix to
allow adjusting the fill width.
-+++
*** New variable 'mm-inline-font-lock'.
This variable is supposed to be bound by callers to determine whether
inline MIME parts (that support it) are supposed to be font-locked or
@@ -2097,23 +1798,19 @@ not.
** Message
----
*** Respect 'message-forward-ignored-headers' more.
Previously, this user option would not be consulted if
'message-forward-show-mml' was nil and forwarding as MIME.
-+++
*** New user option 'message-forward-included-mime-headers'.
This is used when forwarding messages as MIME, but not using MML.
-+++
*** Message now supports the OpenPGP header.
To generate these headers, add the new function
'message-add-openpgp-header' to 'message-send-hook'. The header will
be generated according to the new 'message-openpgp-header' user
option.
----
*** A change to how "Mail-Copies-To: never" is handled.
If a user has specified "Mail-Copies-To: never", and Message was asked
to do a "wide reply", some other arbitrary recipient would end up in
@@ -2123,7 +1820,6 @@ you're responding to a specific person in particular. This has been
changed so that all the recipients are put in the "To" header in these
instances.
-+++
*** New command to start Emacs in Message mode to send an email.
Emacs can be defined as a handler for the "x-scheme-handler/mailto"
MIME type with the following command: "emacs -f message-mailto %u".
@@ -2136,7 +1832,6 @@ Emacs with headers filled out according to the link, e.g.
emacsclient, use "emacsclient -e '(message-mailto "%u")'"
or "emacsclient-mail.desktop".
----
*** Change to default value of 'message-draft-headers' user option.
The 'Date' symbol has been removed from the default value, meaning that
draft or delayed messages will get a date reflecting when the message
@@ -2144,7 +1839,6 @@ was sent. To restore the original behavior of dating a message
from when it is first saved or delayed, add the symbol 'Date' back to
this user option.
-+++
*** New command to take screenshots.
In Message mode buffers, the 'C-c C-p' ('message-insert-screenshot')
command has been added. It depends on using an external program to
@@ -2152,30 +1846,25 @@ take the actual screenshot, and defaults to "ImageMagick import".
** Smtpmail
-+++
*** smtpmail now supports using the oauth2.el library.
-+++
*** New user option 'smtpmail-store-queue-variables'.
If non-nil, SMTP variables will be stored together with the queued
messages, and will then be used when sending with command
'smtpmail-send-queued-mail'.
-+++
*** Allow direct selection of smtp authentication mechanism.
A server entry retrieved by auth-source can request a desired smtp
authentication mechanism by setting a value for the key 'smtp-auth'.
** ElDoc
-+++
*** New user option 'eldoc-echo-area-display-truncation-message'.
If non-nil (the default), eldoc will display a message saying
something like "(Documentation truncated. Use `M-x eldoc-doc-buffer'
to see rest)" when a message has been truncated. If nil, truncated
messages will be marked with just "..." at the end.
-+++
*** New hook 'eldoc-documentation-functions'.
This hook is intended to be used for registering doc string functions.
These functions don't need to produce the doc string right away, they
@@ -2190,7 +1879,6 @@ functions receive the doc string composed according to
the user. Examples of such functions would use the echo area, a
separate buffer, or a tooltip.
-+++
*** New user option 'eldoc-documentation-strategy'.
The built-in choices available for this user option let users compose
the results of 'eldoc-documentation-functions' in various ways, even
@@ -2206,33 +1894,27 @@ it when producing a doc string.
** Tramp
-+++
*** New connection method "mtp".
It allows accessing media devices like cell phones, tablets or
cameras.
-+++
*** New connection method "sshfs".
It allows accessing remote files via a file system mounted with
'sshfs'.
-+++
*** Tramp supports SSH authentication via a hardware security key now.
This requires at least OpenSSH 8.2, and a FIDO U2F compatible
security key, like yubikey, solokey, or nitrokey.
-+++
*** Trashed remote files are moved to the local trash directory.
All remote files that are trashed are moved to the local trash
directory, except remote encrypted files, which are always deleted.
-+++
*** New command 'tramp-crypt-add-directory'.
This command marks a remote directory to contain only encrypted files.
See the "(tramp) Keeping files encrypted" node of the Tramp manual for
details. This feature is experimental.
-+++
*** Support of direct asynchronous process invocation.
When Tramp connection property "direct-async-process" is set to
non-nil for a given connection, 'make-process' and 'start-file-process'
@@ -2242,24 +1924,20 @@ performance of asynchronous remote processes" node of the Tramp manual
for details, and also for a discussion or restrictions. This feature
is experimental.
-+++
*** New user option 'tramp-debug-to-file'.
When non-nil, this user option instructs Tramp to mirror the debug
buffer to a file under the "/tmp/" directory. This is useful, if (in
rare cases) Tramp blocks Emacs, and we need further debug information.
-+++
*** Tramp supports lock files now.
In order to deactivate this, set user option
'remote-file-name-inhibit-locks' to t.
-+++
*** Writing sensitive data locally requires confirmation.
Writing auto-save, backup or lock files to the local temporary
directory must be confirmed. In order to suppress this confirmation,
set user option 'tramp-allow-unsafe-temporary-files' to t.
-+++
*** 'make-directory' of a remote directory honors the default file modes.
** GDB/MI
@@ -2268,7 +1946,6 @@ set user option 'tramp-allow-unsafe-temporary-files' to t.
If non-nil, apply a register filter based on
'gdb-registers-filter-pattern-list'.
-+++
*** gdb-mi can now save and restore window configurations.
Use 'gdb-save-window-configuration' to save window configuration to a
file and 'gdb-load-window-configuration' to load from a file. These
@@ -2276,31 +1953,26 @@ commands can also be accessed through the menu bar under "Gud =>
GDB-Windows". 'gdb-default-window-configuration-file', when non-nil,
is loaded when GDB starts up.
-+++
*** gdb-mi can now restore window configuration after quitting.
Set 'gdb-restore-window-configuration-after-quit' to non-nil and Emacs
will remember the window configuration before GDB started and restore
it after GDB quits. A toggle button is also provided under "Gud =>
GDB-Windows" menu item.
-+++
*** gdb-mi now has a better logic for displaying source buffers.
Now GDB only uses one source window to display source file by default.
Customize 'gdb-max-source-window-count' to use more than one window.
Control source file display by 'gdb-display-source-buffer-action'.
-+++
*** The default value of 'gdb-mi-decode-strings' is now t.
This means that the default coding-system is now used to decode strings
and source file names from GDB.
** Compilation mode
----
*** New function 'ansi-color-compilation-filter'.
This function is meant to be used in 'compilation-filter-hook'.
----
*** New user option 'ansi-color-for-compilation-mode'.
This controls what 'ansi-color-compilation-filter' does.
@@ -2310,7 +1982,6 @@ case-insensitive matching of messages when the old behavior is
required, but the recommended solution is to use a correctly matching
regexp instead.
----
*** New user option 'compilation-search-all-directories'.
When doing parallel builds, directories and compilation errors may
arrive in the "*compilation*" buffer out-of-order. If this option is
@@ -2318,45 +1989,37 @@ non-nil (the default), Emacs will now search backwards in the buffer
for any directory the file with errors may be in. If nil, this won't
be done (and this restores how this previously worked).
----
*** Messages from ShellCheck are now recognized.
----
*** Messages from Visual Studio that mention column numbers are now recognized.
** Hi Lock mode
----
*** Matching in 'hi-lock-mode' can be case-sensitive.
The matching is case-sensitive when a regexp contains upper case
characters and 'search-upper-case' is non-nil. 'highlight-phrase'
also uses 'search-whitespace-regexp' to substitute spaces in regexp
search.
----
*** The default value of 'hi-lock-highlight-range' was enlarged.
The new default value is 2000000 (2 megabytes).
** Whitespace mode
-+++
*** New style 'missing-newline-at-eof'.
If present in 'whitespace-style' (as it is by default), the final
character in the buffer will be highlighted if the buffer doesn't end
with a newline.
----
*** The default 'whitespace-enable-predicate' predicate has changed.
It used to check elements in the list version of
'whitespace-global-modes' with 'eq', but now uses 'derived-mode-p'.
** Texinfo
----
*** New user option 'texinfo-texi2dvi-options'.
This is used when invoking 'texi2dvi' from 'texinfo-tex-buffer'.
----
*** New commands for moving in and between environments.
An "environment" is something that ends with '@end'. The commands are
'C-c C-c C-f' (next end), 'C-c C-c C-b' (previous end),
@@ -2366,19 +2029,16 @@ current environment.
** Rmail
----
*** New user option 'rmail-re-abbrevs'.
Its default value matches localized abbreviations of the "reply"
prefix on the Subject line in various languages.
----
*** New user option 'rmail-show-message-set-modified'.
If set non-nil, showing an unseen message will set the Rmail buffer's
modified flag. The default is nil, to preserve the old behavior.
** CC mode
-+++
*** Added support for Doxygen documentation style.
'doxygen' is now a valid 'c-doc-comment-style' which recognises all
comment styles supported by Doxygen (namely '///', '//!', '/** … */'
@@ -2393,7 +2053,6 @@ use 'doxygen' by default one might evaluate:
or use it in a custom 'c-style'.
-+++
*** Added support to line up '?' and ':' of a ternary operator.
The new 'c-lineup-ternary-bodies' function can be used as a lineup
function to align question mark and colon which are part of a ternary
@@ -2413,30 +2072,25 @@ To enable, add it to appropriate entries in 'c-offsets-alist', e.g.:
** Images
----
*** You can explicitly specify base_uri for svg images.
':base-uri' image property can be used to explicitly specify base_uri
for embedded images into svg. ':base-uri' is supported for both file
and data svg images.
-+++
*** 'svg-embed-base-uri-image' added to embed images.
'svg-embed-base-uri-image' can be used to embed images located
relatively to 'file-name-directory' of the ':base-uri' svg image property.
This works much faster than 'svg-embed'.
-+++
*** New function 'image-cache-size'.
This function returns the size of the current image cache, in bytes.
----
*** Animated images stop automatically under high CPU pressure sooner.
Previously, an animated image would stop animating if any single image
took more than two seconds to display. The new algorithm maintains a
decaying average of delays, and if this number gets too high, the
animation is stopped.
-+++
*** The 'n' and 'p' commands (next/previous image) now respect Dired order.
These commands would previously display the next/previous image in
lexicographic order, but will now find the "parent" Dired buffer and
@@ -2445,7 +2099,6 @@ sorted there. The commands have also been extended to work when the
"parent" buffer is an archive mode (i.e., zip file or the like) or tar
mode buffer.
----
*** 'image-converter' is now restricted to formats in 'auto-mode-alist'.
When using external image converters, the external program is queried
for what formats it supports. This list may contain formats that are
@@ -2453,7 +2106,6 @@ problematic in some contexts (like PDFs), so this list is now filtered
based on 'auto-mode-alist'. Only file names that map to 'image-mode'
are now supported.
----
*** The background and foreground of images now default to face colors.
When an image doesn't specify a foreground or background color, Emacs
now uses colors from the face used to draw the surrounding text
@@ -2469,7 +2121,6 @@ To load images with the default frame colors use the ':foreground' and
This change only affects image types that support foreground and
background colors or transparency, such as xbm, pbm, svg, png and gif.
-+++
*** Image smoothing can now be explicitly enabled or disabled.
Smoothing applies a bilinear filter while scaling or rotating an image
to prevent aliasing and other unwanted effects. The new image
@@ -2479,13 +2130,11 @@ and nil to disable smoothing.
The default behavior of smoothing on down-scaling and not smoothing
on up-scaling remains unchanged.
-+++
*** New user option 'image-transform-smoothing'.
This controls whether to use smoothing or not for an image. Values
include nil (no smoothing), t (do smoothing) or a predicate function
that's called with the image object and should return nil/t.
-+++
*** SVG images now support user stylesheets.
The ':css' image attribute can be used to override the default CSS
stylesheet for an image. The default sets 'font-family' and
@@ -2494,7 +2143,6 @@ will match the font size in use where it is embedded.
This feature relies on librsvg 2.48 or above being available.
-+++
*** Image properties support 'em' sizes.
Size image properties, for example ':height', ':max-height', etc., can
be given a cons of the form '(SIZE . em)', where SIZE is an integer or
@@ -2503,42 +2151,35 @@ size, and 'em' is a symbol.
** EWW
-+++
*** New user option 'eww-use-browse-url'.
This is a regexp that can be set to alter how links are followed in eww.
-+++
*** New user option 'eww-retrieve-command'.
This can be used to download data via an external command. If nil
(the default), then 'url-retrieve' is used. When 'sync', then
'url-retrieve-synchronously' is used. A list of strings specifies
an external program with parameters.
-+++
*** New Emacs command line convenience command.
The 'eww-browse' command has been added, which allows you to register
Emacs as a MIME handler for "text/x-uri", and will call 'eww' on the
supplied URL. Usage example: "emacs -f eww-browse https://gnu.org".
-+++
*** 'eww-download-directory' will now use the XDG location, if defined.
However, if "~/Downloads/" already exists, that will continue to be
used.
----
*** The command 'eww-follow-link' now supports custom 'mailto:' handlers.
The function that is invoked when clicking on or otherwise following a
'mailto:' link in an EWW buffer can now be customized. For more
information, see the related entry about 'shr-browse-url' below.
----
*** Support for bookmark.el.
The command 'bookmark-set' (bound to 'C-x r m') is now supported, and
will create a bookmark that opens the current URL in EWW.
** SHR
----
*** The command 'shr-browse-url' now supports custom 'mailto:' handlers.
Clicking on or otherwise following a 'mailto:' link in an HTML buffer
rendered by SHR previously invoked the command 'browse-url-mail'.
@@ -2546,7 +2187,6 @@ This is still the case by default, but if you customize
'browse-url-mailto-function' or 'browse-url-handlers' to call some
other function, it will now be called instead of the default.
----
*** New user option 'shr-offer-extend-specpdl'.
If this is nil, rendering of HTML that requires enlarging
'max-specpdl-size', the number of Lisp variable bindings, will be
@@ -2554,7 +2194,6 @@ aborted, and Emacs will not ask you whether to enlarge
'max-specpdl-size' to complete the rendering. The default is t, which
preserves the original behavior.
-+++
*** New user option 'shr-max-width'.
If this user option is non-nil, and 'shr-width' is nil, then SHR will
use the value of 'shr-max-width' to limit the width of the rendered
@@ -2564,80 +2203,64 @@ to a more readable text. Customize it to nil to get the previous
behavior of rendering as wide as the 'window-width' allows. If
'shr-width' is non-nil, it overrides this option.
----
*** New faces for heading elements.
Those are 'shr-h1', 'shr-h2', 'shr-h3', 'shr-h4', 'shr-h5', 'shr-h6'.
** Project
----
*** New user option 'project-vc-merge-submodules'.
----
*** Project commands now have their own history.
Previously used project directories are now suggested by all commands
that prompt for a project directory.
-+++
*** New prefix keymap 'project-prefix-map'.
Key sequences that invoke project-related commands start with the
prefix 'C-x p'. Type 'C-x p C-h' to show the full list.
-+++
*** New commands 'project-dired', 'project-vc-dir', 'project-shell',
'project-eshell'. These commands run Dired/VC-Dir and Shell/Eshell in
a project's root directory, respectively.
-+++
*** New command 'project-compile'.
This command runs compilation in the current project's root directory.
-+++
*** New command 'project-switch-project'.
This command lets you "switch" to another project and run a project
command chosen from a dispatch menu.
-+++
*** New commands 'project-shell-command' and 'project-async-shell-command'.
These commands run 'shell-command' and 'async-shell-command' in a
project's root directory, respectively.
-+++
*** New user option 'project-list-file'.
This specifies the file in which to save the list of known projects.
-+++
*** New command 'project-remember-projects-under'.
This command can automatically locate and index projects in a
directory and optionally also its subdirectories, storing them in
'project-list-file'.
-+++
*** New commands 'project-forget-project' and 'project-forget-projects-under'.
These commands let you interactively remove entries from the list of projects
in 'project-list-file'.
-+++
*** New command 'project-forget-zombie-projects'.
This command detects indexed projects that have since been deleted,
and removes them from the list of known projects in 'project-list-file'.
----
*** 'project-find-file' now accepts non-existent file names.
This is to allow easy creation of files inside some nested
sub-directory.
-+++
*** 'project-find-file' doesn't use the string at point as default input.
Now it's only suggested as part of the "future history", accessible
via 'M-n'.
-+++
*** New command 'project-find-dir' runs Dired in a directory inside project.
** Xref
-+++
*** New user options to automatically show the first Xref match.
The new user option 'xref-auto-jump-to-first-definition' controls the
behavior of 'xref-find-definitions' and its variants, like
@@ -2653,57 +2276,47 @@ visit. 'xref-auto-jump-to-first-xref' changes their behavior much in
the same way as 'xref-auto-jump-to-first-definition' affects the
'xref-find-definitions*' commands.
----
*** New user options 'xref-search-program' and 'xref-search-program-alist'.
So far 'grep' and 'ripgrep' are supported. 'ripgrep' seems to offer better
performance in certain cases, in particular for case-insensitive
searches.
-+++
*** New commands 'xref-prev-group' and 'xref-next-group'.
These commands are bound respectively to 'P' and 'N', and navigate to
the first item of the previous or next group in the "*xref*" buffer.
----
*** New alternative value for 'xref-show-definitions-function':
'xref-show-definitions-completing-read'.
----
*** The two existing alternatives for 'xref-show-definitions-function'
have been renamed to have "proper" public names and documented
('xref-show-definitions-buffer' and
'xref-show-definitions-buffer-at-bottom').
-+++
*** New command 'xref-quit-and-pop-marker-stack'.
This command is bound to 'M-,' in "*xref*" buffers. This combination
is easy to press semi-accidentally if the user wants to go back in the
middle of choosing the exact definition to go to, and this should do
TRT.
----
*** New value 'project-relative' for 'xref-file-name-display'.
If chosen, file names in "*xref*" buffers will be displayed relative
to the 'project-root' of the current project, when available.
----
*** Prefix arg of 'xref-goto-xref' quits the "*xref*" buffer.
So typing 'C-u RET' in the "*xref*" buffer quits its window
before navigating to the selected location.
-+++
*** The 'TAB' key binding in "*xref*" buffers is obsolete.
Use 'C-u RET' instead. The 'TAB' binding in "*xref*" buffers is still
supported, but we plan on removing it in a future version; at that
time, the command 'xref-quit-and-goto-xref' will no longer have a key
binding in 'xref--xref-buffer-mode-map'.
----
*** New user option 'etags-xref-prefer-current-file'.
When non-nil, matches for identifiers in the file visited by the
current buffer will be shown first in the "*xref*" buffer.
-+++
*** The etags Xref backend now honors 'tags-apropos-additional-actions'.
You can customize it to augment the output of 'xref-find-apropos',
like it affected the output of 'tags-apropos', which is obsolete since
@@ -2711,7 +2324,6 @@ Emacs 25.1.
** Battery
----
*** UPower is now the default battery status backend when available.
UPower support via the function 'battery-upower' was added in Emacs
26.1, but was disabled by default. It is now the default value of
@@ -2721,7 +2333,6 @@ service. The user options 'battery-upower-device' and
whether to respond to status change notifications in addition to
polling, respectively.
----
*** A richer syntax can be used to format battery status information.
The user options 'battery-mode-line-format' and
'battery-echo-area-format' now support the full formatting syntax of
@@ -2731,7 +2342,6 @@ truncation, amongst other things.
** Bug Reference
----
*** Bug reference mode uses auto-setup.
If 'bug-reference-mode' or 'bug-reference-prog-mode' have been
activated, their respective hook has been run, and both
@@ -2748,17 +2358,14 @@ variables 'bug-reference-setup-from-vc-alist',
** HTML mode
----
*** A new skeleton for adding relative URLs has been added.
It's bound to the 'C-c C-c f' keystroke, and prompts for a local file
name.
** Widget
-+++
*** 'widget-choose' now supports menus in extended format.
----
*** The 'editable-list' widget now supports moving items up and down.
You can now move items up and down by deleting and then reinserting
them, using the 'DEL' and 'INS' buttons respectively. This is useful
@@ -2767,62 +2374,50 @@ a list.
** Diff
----
*** New face 'diff-changed-unspecified'.
This is used to highlight "changed" lines (those marked with '!') in
context diffs, when 'diff-use-changed-face' is non-nil.
----
*** New 'diff-mode' font locking face 'diff-error'.
This face is used for error messages from 'diff'.
-+++
*** New command 'diff-refresh-hunk'.
This new command (bound to 'C-c C-l') regenerates the current hunk.
** Thing at point
-+++
*** New 'thing-at-point' target: 'existing-filename'.
This is like 'filename', but is a full path, and is nil if the file
doesn't exist.
-+++
*** New 'thing-at-point' target: 'string'.
If point is inside a string, it returns that string.
-+++
*** New variable 'thing-at-point-provider-alist'.
This allows mode-specific alterations to how 'thing-at-point' works.
----
*** 'thing-at-point' now respects fields.
'thing-at-point' (and all functions that use it, like
'symbol-at-point') will narrow to the current field (if any) before
trying to identify the thing at point.
----
*** New function 'thing-at-mouse'.
This is like 'thing-at-point', but uses the mouse event position instead.
** Image Dired
-+++
*** New user option 'image-dired-thumb-visible-marks'.
If non-nil (the default), use the new face 'image-dired-thumb-mark'
for marked images.
----
*** New command 'image-dired-delete-marked'.
----
*** 'image-dired-mouse-toggle-mark' is now sensitive to the active region.
If the region is active, this command now toggles Dired marks of all
the thumbnails in the region.
** Flymake mode
-+++
*** New command 'flymake-show-project-diagnostics'.
This lists all diagnostics for buffers in the currently active
project. The listing is similar to the one obtained by
@@ -2831,7 +2426,6 @@ project-relative file name. For backends which support it,
'flymake-show-project-diagnostics' also lists diagnostics for files
that have not yet been visited.
-+++
*** New user options to customize Flymake's mode-line.
The new user option 'flymake-mode-line-format' is a mix of strings and
symbols like 'flymake-mode-line-title', 'flymake-mode-line-exception'
@@ -2842,7 +2436,6 @@ like 'flymake-mode-line-error-counter',
** Time
----
*** 'display-time-world' has been renamed to 'world-clock'.
'world-clock' creates a buffer with an updating time display using
several time zones. It is hoped that the new names are more
@@ -2865,21 +2458,17 @@ The following user options have been renamed:
The old names are now obsolete.
----
*** 'world-clock-mode' can no longer be turned on interactively.
Use 'world-clock' to turn on that mode.
** Python mode
----
*** New user option 'python-forward-sexp-function'.
This allows the user easier customization of whether to use block-based
navigation or not.
----
*** 'python-shell-interpreter' now defaults to python3 on systems with python3.
----
*** 'C-c C-r' can now be used on arbitrary regions.
The command previously extended the start of the region to the start
of the line, but will now actually send the marked region, as
@@ -2887,12 +2476,10 @@ documented.
** Ruby mode
----
*** 'ruby-use-smie' is declared obsolete.
SMIE is now always enabled and 'ruby-use-smie' only controls whether
indentation is done using SMIE or with the old ad-hoc code.
----
*** Indentation has changed when 'ruby-align-chained-calls' is non-nil.
This previously used to align subsequent lines with the last sibling,
but it now aligns with the first sibling (which is the preferred style
@@ -2900,10 +2487,8 @@ in Ruby).
** CPerl mode
----
*** New face 'perl-heredoc', used for heredoc elements.
----
*** The command 'cperl-set-style' offers the new value "PBP".
This value customizes Emacs to use the style recommended in Damian
Conway's book "Perl Best Practices" for indentation and formatting
@@ -2911,20 +2496,17 @@ of conditionals.
** Perl mode
----
*** New face 'perl-non-scalar-variable'.
This is used to fontify non-scalar variables.
** Octave mode
-+++
*** Line continuations in double-quoted strings now use a backslash.
Typing 'C-M-j' (bound to 'octave-indent-new-comment-line') now follows
the behavior introduced in Octave 3.8 of using a backslash as a line
continuation marker within double-quoted strings, and an ellipsis
everywhere else.
-+++
** EasyPG
GPG key servers can now be queried for keys with the
'epa-search-keys' command. Keys can then be added to your
@@ -2932,11 +2514,9 @@ personal key ring.
** Etags
-+++
*** Etags now supports the Mercury programming language.
See https://mercurylang.org.
-+++
*** Etags command line option '--declarations' now has Mercury-specific behavior.
All Mercury declarations are tagged by default. However, for
compatibility with 'etags' support for Prolog, predicates and
@@ -2945,7 +2525,6 @@ invoked with the '--declarations' command-line option.
** Comint
-+++
*** Support for OSC escape sequences.
Adding the new function 'comint-osc-process-output' to
'comint-output-filter-functions' enables the interpretation of OSC
@@ -2955,18 +2534,15 @@ tracking, are acted upon. Adding more entries to
'comint-osc-handlers' allows a customized treatment of further escape
sequences.
-+++
*** 'comint-delete-output' can now save deleted text in the kill-ring.
Interactively, 'C-u C-c C-o' triggers this new optional behavior.
** ANSI color
----
*** Colors are now defined by faces.
ANSI SGR codes now have corresponding faces to describe their
appearance, e.g. 'ansi-color-bold'.
----
*** Support for "bright" color codes.
"Bright" ANSI color codes are now displayed when applying ANSI color
filters using the color values defined by the faces
@@ -2981,45 +2557,37 @@ user-visible changes in ERC.
** Xwidget Webkit mode
----
*** New xwidget commands.
'xwidget-webkit-uri' (return the current URL), 'xwidget-webkit-title'
(return the current title), and 'xwidget-webkit-goto-history' (goto a
point in history).
----
*** Downloading files from xwidget-webkit is now supported.
The new user option 'xwidget-webkit-download-dir' says where to download to.
----
*** New command 'xwidget-webkit-clone-and-split-below'.
Open a new window below displaying the current URL.
----
*** New command 'xwidget-webkit-clone-and-split-right'.
Open a new window to the right displaying the current URL.
----
*** Pixel-based scrolling.
The 'xwidget-webkit-scroll-up', 'xwidget-webkit-scroll-down' commands
now supports scrolling arbitrary pixel values. It now treats the
optional 2nd argument as the pixel values to scroll.
----
*** New commands for scrolling.
The new commands 'xwidget-webkit-scroll-up-line',
'xwidget-webkit-scroll-down-line', 'xwidget-webkit-scroll-forward',
'xwidget-webkit-scroll-backward' can be used to scroll webkit by the
height of lines or width of chars.
----
*** New user option 'xwidget-webkit-bookmark-jump-new-session'.
When non-nil, use a new xwidget webkit session after bookmark jump.
Otherwise, it will use 'xwidget-webkit-last-session'.
** Checkdoc
----
*** No longer warns about command substitutions by default.
Checkdoc used to warn about "too many command substitutions" (as in
"\\[foo-command]"), even if you only used ten of them in a docstring.
@@ -3028,19 +2596,16 @@ substitutions before it becomes a performance issue, so this warning
is now disabled by default. To re-enable this warning, customize the
user option 'checkdoc-max-keyref-before-warn'.
----
*** New user option 'checkdoc-column-zero-backslash-before-paren'.
Checkdoc warns if there is a left parenthesis in column zero of a
documentation string. That warning can now be disabled by customizing
this new user option to nil. This is useful if you don't expect
your code to be edited with an Emacs older than version 27.1.
----
*** Now checks the prompt format for 'yes-or-no-p'.
In addition to verifying the format of the prompt for 'y-or-n-p',
checkdoc will now check the format of 'yes-or-no-p'.
----
*** New command 'checkdoc-dired'.
This can be used to run checkdoc on files from a Dired buffer.
@@ -3052,14 +2617,12 @@ this warning therefore mostly led to false positives.
** Enriched mode
----
*** 'C-a' is by default no longer bound to 'beginning-of-line-text'.
This is so 'C-a' works as in other modes, and in particular holding
Shift while typing 'C-a', i.e. 'C-S-a', will now highlight the text.
** Gravatar
----
*** New user option 'gravatar-service' for host to query for gravatars.
Defaults to 'gravatar', with 'unicornify' and 'libravatar' as options.
@@ -3068,89 +2631,69 @@ Defaults to 'gravatar', with 'unicornify' and 'libravatar' as options.
Functions and variables related to handling junk mail have been
renamed to not associate color with sender quality.
-+++
*** New names for mh-junk interactive functions.
Function 'mh-junk-whitelist' is renamed 'mh-junk-allowlist'.
Function 'mh-junk-blacklist' is renamed 'mh-junk-blocklist'.
-+++
*** New binding for 'mh-junk-allowlist'.
The key binding for 'mh-junk-allowlist' is changed from 'J w' to 'J a'.
The old binding is supported but warns that it is obsolete.
-+++
*** New names for some hooks.
'mh-whitelist-msg-hook' is renamed 'mh-allowlist-msg-hook'.
'mh-blacklist-msg-hook' is renamed 'mh-blocklist-msg-hook'.
-+++
*** New names for some user options.
User option 'mh-whitelist-preserves-sequences-flag' is renamed
'mh-allowlist-preserves-sequences-flag'.
-+++
*** New names for some faces.
Face 'mh-folder-blacklisted' is renamed 'mh-folder-blocklisted'.
Face 'mh-folder-whitelisted' is renamed 'mh-folder-allowlisted'.
** Rcirc
-+++
*** rcirc now supports SASL authentication.
----
*** #emacs on Libera.chat has been added to 'rcirc-server-alist'.
----
*** rcirc connects asynchronously.
----
*** Integrate formatting into 'rcirc-send-string'.
The function now accepts a variable number of arguments.
-+++
*** Deprecate 'rcirc-command' in favor of 'rcirc-define-command'.
The new macro handles multiple and optional arguments.
----
*** Add basic IRCv3 support.
This includes support for the capabilities: 'server-time', 'batch',
'message-ids', 'invite-notify', 'multi-prefix' and 'standard-replies'.
----
*** Add mouse property support to 'rcirc-track-minor-mode'.
----
*** Improve support for IRC markup codes.
----
*** Check 'auth-sources' for server passwords.
-+++
*** Implement repeated reconnection strategy.
See 'rcirc-reconnect-attempts'.
** MPC
----
*** New command 'mpc-goto-playing-song'.
This command, bound to 'o' in any 'mpc-mode' buffer, moves point to
the currently playing song in the "*MPC-Songs*" buffer.
----
*** New user option 'mpc-cover-image-re'.
If non-nil, it is a regexp that should match a valid cover image.
** Miscellaneous
----
*** 'shell-script-mode' now supports 'outline-minor-mode'.
The outline headings have lines that start with "###".
----
*** fileloop will now skip missing files instead of signalling an error.
----
*** 'tabulated-list-mode' can now restore original display order.
Many commands (like 'C-x C-b') are derived from 'tabulated-list-mode',
and that mode allows the user to sort on any column. There was
@@ -3158,73 +2701,58 @@ previously no easy way to get back to the original displayed order
after sorting, but giving a -1 numerical prefix to the sorting command
will now restore the original order.
----
*** 'M-left' and 'M-right' now move between columns in 'tabulated-list-mode'.
----
*** New variable 'hl-line-overlay-priority'.
This can be used to change the priority of the hl-line overlays.
-+++
*** New command 'mailcap-view-file'.
This command will open a viewer based on the file type, as determined
by "~/.mailcap" and related files and variables.
----
*** New user option 'remember-diary-regexp'.
----
*** New user option 'remember-text-format-function'.
----
*** New user option 'authinfo-hide-elements'.
This can be set to nil to inhibit hiding passwords in ".authinfo" files.
----
*** 'hexl-mode' scrolling commands now heed 'next-screen-context-lines'.
Previously, 'hexl-scroll-down' and 'hexl-scroll-up' would scroll
up/down an entire window, but they now work more like the standard
scrolling commands.
----
*** New user option 'bibtex-unify-case-function'.
This new option allows the user to customize how case is converted
when unifying entries.
----
*** The user option 'bibtex-maintain-sorted-entries' now permits
user-defined sorting schemes.
----
*** New user option 'reveal-auto-hide'.
If non-nil (the default), revealed text is automatically hidden when
point leaves the text. If nil, the text is not hidden again. Instead the
command 'reveal-hide-revealed' can be used to hide all the revealed text.
----
*** New user option 'ffap-file-name-with-spaces'.
If non-nil, 'find-file-at-point' and friends will try to guess more
expansively to identify a file name with spaces. Default value is
nil.
----
*** Two new commands for centering in 'doc-view-mode'.
The new commands 'doc-view-center-page-horizontally' (bound to 'c h')
and 'doc-view-center-page-vertically' (bound to 'c v') center the page
horizontally and vertically, respectively.
----
*** 'tempo-define-template' can now re-assign templates to tags.
Previously, assigning a new template to an already defined tag had no
effect.
----
*** The width of the buffer-name column in 'list-buffers' is now dynamic.
The width now depends on the width of the window, but will never be
wider than the length of the longest buffer name, except that it will
never be narrower than 19 characters.
-+++
*** New diary sexp 'diary-offset'.
It offsets another diary sexp by a number of days. This is useful
when for example your organization has a committee meeting two days
@@ -3232,13 +2760,10 @@ after every monthly meeting which takes place on the third Thursday,
or if you would like to attend a virtual meeting scheduled in a
different timezone causing a difference in the date.
----
*** The old non-SMIE indentation of 'sh-mode' has been removed.
----
*** 'mspools-show' is now autoloaded.
----
*** Loading dunnet.el in batch mode doesn't start the game any more.
Instead you need to do "emacs --batch -f dunnet" to start the game in
batch mode.
@@ -3246,7 +2771,6 @@ batch mode.
* New Modes and Packages in Emacs 28.1
-+++
** New mode 'repeat-mode' to allow shorter key sequences.
Type 'M-x repeat-mode' to enable this mode. You can then type
'C-x u u' instead of 'C-x u C-x u' to undo many changes, 'C-x o o'
@@ -3272,7 +2796,6 @@ columns.
Command 'describe-repeat-maps' will display a buffer showing
which commands are repeatable in 'repeat-mode'.
----
** New themes 'modus-vivendi' and 'modus-operandi'.
These themes are designed to conform with the highest standard for
color-contrast accessibility (WCAG AAA). You can load either of them
@@ -3288,14 +2811,12 @@ This is a mode for searching a RFC 2229 dictionary server.
the mouse in 'dictionary-tooltip-dictionary' (which must be customized
first).
----
** Lisp Data mode
The new command 'lisp-data-mode' enables a major mode for buffers
composed of Lisp symbolic expressions that do not form a computer
program. The ".dir-locals.el" file is automatically set to use this
mode, as are other data files produced by Emacs.
-+++
** New global mode 'global-goto-address-mode'.
This will enable 'goto-address-mode' in all buffers.
@@ -3309,7 +2830,6 @@ similar to prefix arguments, but are more flexible and discoverable.
This library can create, query, navigate and display hierarchical
structures.
----
** New major mode for displaying the "etc/AUTHORS" file.
This new 'etc-authors-mode' provides font-locking for displaying the
"etc/AUTHORS" file from the Emacs distribution, and not much else.
@@ -3317,13 +2837,11 @@ This new 'etc-authors-mode' provides font-locking for displaying the
* Incompatible Lisp Changes in Emacs 28.1
-+++
** Emacs now prints a backtrace when signaling an error in batch mode.
This makes debugging Emacs Lisp scripts run in batch mode easier. To
get back the old behavior, set the new variable
'backtrace-on-error-noninteractive' to a nil value.
----
** Some floating-point numbers are now handled differently by the Lisp reader.
In previous versions of Emacs, numbers with a trailing dot and an exponent
were read as integers and the exponent ignored: 2.e6 was interpreted as the
@@ -3331,28 +2849,24 @@ integer 2. Such numerals are now read as floats with the exponent included:
2.e6 is now read as the floating-point value 2000000.0.
That is, '(read-from-string "1.e3")' => '(1000.0 . 4)' now.
----
** 'equal' no longer examines some contents of window configurations.
Instead, it considers window configurations to be equal only if they
are 'eq'. To compare contents, use 'compare-window-configurations'
instead. This change helps fix a bug in 'sxhash-equal', which returned
incorrect hashes for window configurations and some other objects.
-+++
** The 'lexical-binding' local variable is always enabled.
Previously, if 'enable-local-variables' was nil, a 'lexical-binding'
local variable would not be heeded. This has now changed, and a file
with a 'lexical-binding' cookie is always heeded. To revert to the
old behavior, set 'permanently-enabled-local-variables' to nil.
-+++
** '&rest' in argument lists must always be followed by a variable name.
Omitting the variable name after '&rest' was previously tolerated in
some cases but not consistently so; it could lead to crashes or
outright wrong results. Since the utility was marginal at best, it is
now an error to omit the variable.
----
** 'kill-all-local-variables' has changed how it handles non-symbol hooks.
The function is documented to eliminate all buffer-local bindings
except variables with a 'permanent-local' property, or hooks that
@@ -3360,14 +2874,12 @@ have elements with a 'permanent-local-hook' property. In addition, it
would also keep lambda expressions in hooks sometimes. The latter has
now been changed: The function will now also remove these.
-+++
** Temporary buffers no longer run certain buffer hooks.
The macros 'with-temp-buffer' and 'with-temp-file' no longer run the
hooks 'kill-buffer-hook', 'kill-buffer-query-functions', and
'buffer-list-update-hook' for the temporary buffers they create. This
avoids slowing them down when a lot of these hooks are defined.
-+++
** New face 'child-frame-border' and frame parameter 'child-frame-border-width'.
The face and width of child frames borders can now be determined
separately from those of normal frames. To minimize backward
@@ -3376,7 +2888,6 @@ parameter will fall back to using 'internal-border-width'. However,
the new 'child-frame-border' face does constitute a breaking change
since child frames' borders no longer use the 'internal-border' face.
----
** 'run-at-time' now tries harder to implement the t TIME parameter.
If TIME is t, the timer runs at an integral multiple of REPEAT.
(I.e., if given a REPEAT of 60, it'll run at 08:11:00, 08:12:00,
@@ -3387,18 +2898,15 @@ has now changed, and the timer code now recomputes the integral
multiple every time it runs, which means that if the laptop wakes at
08:16:43, it'll fire at that time, but then at 08:17:00, 08:18:00...
----
** 'parse-partial-sexp' now signals an error if TO is smaller than FROM.
Previously, this would lead to the function interpreting FROM as TO and
vice versa, which would be confusing when passing in OLDSTATE, which
refers to the old state at FROM.
-+++
** 'global-mode-string' constructs should end with a space.
This was previously not formalized, which led to combinations of modes
displaying data "smushed together" on the mode line.
-+++
** 'overlays-in' now handles zero-length overlays slightly differently.
Previously, zero-length overlays at the end of the buffer were included
in the result (if the region queried for stopped at that position).
@@ -3406,7 +2914,6 @@ The same was not the case if the buffer had been narrowed to exclude
the real end of the buffer. This has now been changed, and
zero-length overlays at 'point-max' are always included in the results.
----
** 'replace-match' now runs modification hooks slightly later.
The function is documented to leave point after the replacement text,
but this was not always the case if a modification hook inserted text
@@ -3415,28 +2922,23 @@ point where the end of the inserted text would have been before the
hook ran. 'replace-match' now always leaves point after the
replacement text.
-+++
** 'completing-read-default' sets completion variables buffer-locally.
'minibuffer-completion-table' and related variables are now set buffer-locally
in the minibuffer instead of being set via a global let-binding.
----
** XML serialization functions now reject invalid characters.
Previously, 'xml-print' would produce invalid XML when given a string
with characters that are not valid in XML (see
https://www.w3.org/TR/xml/#charsets). Now it rejects such strings.
----
** JSON
----
*** JSON number parsing is now stricter.
Numbers with a leading plus sign, leading zeros, or a missing integer
component are now rejected by 'json-read' and friends. This makes
them more compliant with the JSON specification and consistent with
the native JSON parsing functions.
----
*** JSON functions support the semantics of RFC 8259.
The JSON functions 'json-serialize', 'json-insert',
'json-parse-string', and 'json-parse-buffer' now implement some of the
@@ -3444,7 +2946,6 @@ semantics of RFC 8259 instead of the earlier RFC 4627. In particular,
these functions now accept top-level JSON values that are neither
arrays nor objects.
----
*** Some JSON encoding functions are now obsolete.
The functions 'json-encode-number', 'json-encode-hash-table',
'json-encode-key', and 'json-encode-list' are now obsolete.
@@ -3454,7 +2955,6 @@ used instead. Uses of 'json-encode-list' should be changed to call
one of 'json-encode', 'json-encode-alist', 'json-encode-plist', or
'json-encode-array' instead.
-+++
*** Native JSON functions now signal an error if libjansson is unavailable.
This affects 'json-serialize', 'json-insert', 'json-parse-string',
and 'json-parse-buffer'. This can happen if Emacs was compiled with
@@ -3462,148 +2962,117 @@ libjansson, but the DLL cannot be found and/or loaded by Emacs at run
time. Previously, Emacs would display a message and return nil in
these cases.
-+++
** The use of positional arguments in 'define-minor-mode' is obsolete.
These were actually rendered obsolete in Emacs 21 but were never
marked as such.
----
** 'pcomplete-ignore-case' is now an obsolete alias of 'completion-ignore-case'.
-+++
** 'completions-annotations' face is not used when the caller puts own face.
This affects the suffix specified by completion 'annotation-function'.
-+++
** An active minibuffer now has major mode 'minibuffer-mode'.
This is instead of the erroneous 'minibuffer-inactive-mode' it
formerly had.
----
** 'make-text-button' no longer modifies text properties of its first argument.
When its first argument is a string, 'make-text-button' no longer
modifies the string's text properties; instead, it uses and returns
a copy of the string. This helps avoid trouble when strings are
shared or constants.
-+++
** Some properties from completion tables are now preserved.
If 'minibuffer-allow-text-properties' is non-nil, doing completion
over a table of strings with properties will no longer remove all the
properties before returning. This affects things like 'completing-read'.
----
** 'dns-query' now consistently uses Lisp integers to represent integers.
Formerly it made an exception for integer components of SOA records,
because SOA serial numbers can exceed fixnum ranges on 32-bit platforms.
Emacs now supports bignums so this old glitch is no longer needed.
-+++
** The '&define' keyword in an Edebug specification now disables backtracking.
The implementation was buggy, and multiple '&define' forms in an '&or'
form should be exceedingly rare. See the Info node "(elisp) Backtracking" in
the Emacs Lisp reference manual for background.
-+++
** The error 'ftp-error' belongs also to category 'remote-file-error'.
-+++
** The WHEN argument of 'make-obsolete' and related functions is mandatory.
The use of those functions without a WHEN argument was marked obsolete
back in Emacs 23.1. The affected functions are: 'make-obsolete',
'define-obsolete-function-alias', 'make-obsolete-variable',
'define-obsolete-variable-alias'.
-+++
** 'inhibit-nul-byte-detection' is renamed to 'inhibit-null-byte-detection'.
----
** Some functions are no longer considered safe by 'unsafep':
'replace-regexp-in-string', 'catch', 'throw', 'error', 'signal'
and 'play-sound-file'.
----
** 'sql-*-statement-starters' are no longer user options.
These variables describe facts about the SQL standard and
product-specific additions. There should be no need for users to
customize them.
----
** Some locale-related variables have been removed.
The Lisp variables 'previous-system-messages-locale' and
'previous-system-time-locale' have been removed, as they were created
by mistake and were not useful to Lisp code.
----
** Function 'lm-maintainer' is replaced with 'lm-maintainers'.
The former is now declared obsolete.
-+++
** facemenu.el is no longer preloaded.
To use functions/variables from the package, you now have to say
'(require 'facemenu)' or similar.
----
** 'facemenu-color-alist' is now obsolete, and is not used.
----
** The variable 'keyboard-type' is obsolete and not dynamically scoped any more.
-+++
** The 'values' variable is now obsolete.
Using it just contributes to the growth of the Emacs memory
footprint.
----
** The 'load-dangerous-libraries' variable is now obsolete.
It was used to allow loading Lisp libraries compiled by XEmacs, a
modified version of Emacs which is no longer actively maintained.
This is no longer supported, and setting this variable has no effect.
-+++
** The macro 'with-displayed-buffer-window' is now obsolete.
Use macro 'with-current-buffer-window' with action alist entry 'body-function'.
----
** The rfc2368.el library is now obsolete.
Use rfc6068.el instead. The main difference is that
'rfc2368-parse-mailto-url' and 'rfc2368-unhexify-string' assumed that
the strings were all-ASCII, while 'rfc6068-parse-mailto-url' and
'rfc6068-unhexify-string' parse UTF-8 strings.
----
** The inversion.el library is now obsolete.
----
** The metamail.el library is now obsolete.
** Edebug changes
----
*** 'get-edebug-spec' is obsolete, replaced by 'edebug-get-spec'.
-+++
*** The spec operator ':name NAME' is obsolete, use '&name' instead.
-+++
*** The spec element 'function-form' is obsolete, use 'form' instead.
-+++
*** New function 'def-edebug-elem-spec' to define Edebug spec elements.
These used to be defined with 'def-edebug-spec' thus conflating the
two name spaces, which lead to name collisions.
The use of 'def-edebug-spec' to define Edebug spec elements is
declared obsolete.
----
** The sb-image.el library is now obsolete.
This was a compatibility kludge which is no longer needed.
----
** Some libraries obsolete since Emacs 23 have been removed:
ledit.el, lmenu.el, lucid.el and old-whitespace.el.
----
** Some functions and variables obsolete since Emacs 23 have been removed:
'GOLD-map', 'advertised-xscheme-send-previous-expression',
'allout-init', 'bookmark-jump-noselect',
@@ -3675,20 +3144,16 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
'vcursor-toggle-vcursor-map', 'w32-focus-frame', 'w32-select-font',
'wisent-lex-make-token-table'.
----
** Some functions and variables obsolete since Emacs 22 have been removed:
'erc-current-network', 'gnus-article-hide-pgp-hook',
'gnus-inews-mark-gcc-as-read', 'gnus-treat-display-xface',
'gnus-treat-strip-pgp', 'nnmail-spool-file'.
----
** The obsolete function 'thread-alive-p' has been removed.
----
** The variable 'force-new-style-backquotes' has been removed.
This removes the final remaining trace of old-style backquotes.
----
** Some obsolete variable and function aliases in dbus.el have been removed.
In Emacs 24.3, the variable 'dbus-event-error-hooks' was renamed to
'dbus-event-error-functions' and the function
@@ -3696,7 +3161,6 @@ In Emacs 24.3, the variable 'dbus-event-error-hooks' was renamed to
The old names, which were kept as obsolete aliases of the new names,
have now been removed.
----
** 'find-function-source-path' renamed and re-documented.
The 'find-function' command (and various related commands) were
documented to respect 'find-function-source-path', and to search for
@@ -3709,7 +3173,6 @@ still being used by 'find-library' and related commands, so the
user option has been renamed to 'find-library-source-path', and
'find-function-source-path' is now an obsolete variable alias.
----
** The macro 'vc-call' no longer evaluates its second argument twice.
** Xref migrated from EIEIO to 'cl-defstruct' for its core objects.
@@ -3729,7 +3192,6 @@ use with "match items" without adding EIEIO as a dependency.
* Lisp Changes in Emacs 28.1
-+++
** The 'interactive' syntax has been extended to allow listing applicable modes.
Forms like '(interactive "p" dired-mode)' can be used to annotate the
commands as being applicable for modes derived from 'dired-mode',
@@ -3740,7 +3202,6 @@ Also note that by default these annotations have no effect, unless the
new user option 'read-extended-command-predicate' option is customized
to call 'command-completion-default-include-p' or a similar function.
-+++
** New 'declare' forms to control completion of commands in 'M-x'.
'(declare (completion PREDICATE))' can be used as a general predicate
to say whether the command should be considered a completion candidate
@@ -3759,74 +3220,61 @@ default value of 'read-extended-command-predicate' is nil, which means
no commands that match what you have typed are excluded from being
completion candidates.
-+++
** 'define-minor-mode' now takes an ':interactive' argument.
This can be used for specifying which modes this minor mode is meant
for, or to make the new minor mode non-interactive. The default value
is t.
-+++
** 'define-derived-mode' now takes an ':interactive' argument.
This can be used to control whether the defined mode is a command
or not, and is useful when defining commands that aren't meant to be
used by users directly.
-+++
** 'define-globalized-minor-mode' now takes a ':predicate' parameter.
This can be used to control which major modes the minor mode should be
used in.
-+++
** 'condition-case' now allows for a success handler.
It is written as '(:success BODY...)' where BODY is executed
whenever the protected form terminates without error, with the
specified variable bound to the value of the protected form.
-+++
** New function 'benchmark-call' to measure the execution time of a function.
Additionally, the number of repetitions can be expressed as a minimal duration
in seconds.
-+++
** The value thrown to the 'exit' label can now be a function.
This is in addition to values t or nil. If the value is a function,
the command loop will call it with zero arguments before returning.
-+++
** The behavior of 'format-spec' is now closer to that of 'format'.
In order for the two functions to behave more consistently,
'format-spec' now pads and truncates based on string width rather than
length, and also supports format specifications that include a
truncating precision field, such as "%.2a".
----
** 'defvar' detects the error of defining a variable currently lexically bound.
Such mixes are always signs that the outer lexical binding was an
error and should have used dynamic binding instead.
----
** New variable 'inhibit-mouse-event-check'.
If bound to non-nil, a command with '(interactive "e")' doesn't signal
an error when invoked by input event that is not a mouse click (e.g.,
a key sequence).
----
** New variable 'redisplay-skip-initial-frame' to enable batch redisplay tests.
Setting it to nil forces the redisplay to do its job even in the
initial frame used in batch mode.
-+++
** Doc strings can now link to customization groups.
Text like "customization group `whitespace'" will be made into a
button. When clicked, it will open a Custom buffer displaying that
customization group.
-+++
** Doc strings can now link to man pages.
Text like "man page `chmod(1)'" will be made into a button. When
clicked, it will open a Man mode buffer displaying that man page.
-+++
** Buffers can now be created with certain hooks disabled.
The functions 'get-buffer-create' and 'generate-new-buffer' accept a
new optional argument INHIBIT-BUFFER-HOOKS. If non-nil, the new
@@ -3835,78 +3283,63 @@ buffer does not run the hooks 'kill-buffer-hook',
avoids slowing down internal or temporary buffers that are never
presented to users or passed on to other applications.
-+++
** New command 'make-directory-autoloads'.
This does the same as the old command 'update-directory-autoloads',
but has different semantics: Instead of passing in the output file via
the dynamically bound 'generated-autoload-file' variable, the output
file is now an explicit parameter.
----
** Dragging a file into Emacs pushes the file name onto 'file-name-history'.
----
** The 'easymenu' library is now preloaded.
----
** The 'iso-transl' library is now preloaded.
This means that keystrokes like 'Alt-[' are defined by default,
instead of only becoming available after doing (for instance)
'C-x 8 '.
----
** ':safe' settings in 'defcustom' are now propagated to the loaddefs files.
-+++
** New ':type' for 'defcustom' for nonnegative integers.
The new 'natnum' type can be used for options that should be
nonnegative integers.
-+++
** ERT can now output more verbose test failure reports.
If the 'EMACS_TEST_VERBOSE' environment variable is set, failure
summaries will include the failing condition.
** Byte compiler changes
-+++
*** New byte-compiler check for missing dynamic variable declarations.
It is meant as an (experimental) aid for converting Emacs Lisp code
to lexical binding, where dynamic (special) variables bound in one
file can affect code in another. For details, see the Info node
"(elisp) Converting to Lexical Binding".
-+++
*** 'byte-recompile-directory' can now compile symlinked "*.el" files.
This is achieved by giving a non-nil FOLLOW-SYMLINKS parameter.
----
*** The byte-compiler now warns about too wide documentation strings.
By default, it will warn if a documentation string is wider than the
largest of 'byte-compile-docstring-max-column' or 'fill-column'
characters.
-+++
*** 'byte-compile-file' optional argument LOAD is now obsolete.
To load the file after byte-compiling, add a call to 'load' from Lisp
or use 'M-x emacs-lisp-byte-compile-and-load' interactively.
** Macroexp
----
*** New function 'macroexp-file-name' to know the name of the current file.
----
*** New function 'macroexp-compiling-p' to know if we're compiling.
----
*** New function 'macroexp-warn-and-return' to help emit warnings.
This used to be named 'macroexp--warn-and-return' and has proved useful
and well-behaved enough to lose the "internal" marker.
** map.el
----
*** Alist keys are now consistently compared with 'equal' by default.
Until now, 'map-elt' and 'map-delete' compared alist keys with 'eq' by
default. They now use 'equal' instead, for consistency with
@@ -3916,14 +3349,11 @@ default. They now use 'equal' instead, for consistency with
A pattern like '(map :sym)' binds the map's value for ':sym' to 'sym',
equivalent to '(map (:sym sym))'.
----
*** The function 'map-copy' now uses 'copy-alist' on alists.
This is a slightly deeper copy than the previous 'copy-sequence'.
----
*** The function 'map-contains-key' now supports plists.
----
*** More consistent duplicate key handling in 'map-merge-with'.
Until now, 'map-merge-with' promised to call its function argument
whenever multiple maps contained 'eql' keys. However, this did not
@@ -3933,26 +3363,21 @@ are merged, for greater consistency with 'map-merge' and 'map-elt'.
** Pcase
-+++
*** The 'or' pattern now binds the union of the vars of its sub-patterns.
If a variable is not bound by the subpattern that matched, it gets bound
to nil. This was already sometimes the case, but it is now guaranteed.
-+++
*** The 'pred' pattern can now take the form '(pred (not FUN))'.
This is like '(pred (lambda (x) (not (FUN x))))' but results
in better code.
----
*** New function 'pcase-compile-patterns' to write other macros.
-+++
*** Added 'cl-type' pattern.
The new 'cl-type' pattern compares types using 'cl-typep', which allows
comparing simple types like '(cl-type integer)', as well as forms like
'(cl-type (integer 0 10))'.
-+++
*** New macro 'pcase-setq'.
This macro is the 'setq' equivalent of 'pcase-let', which allows for
destructuring patterns in a 'setq' form.
@@ -3961,49 +3386,40 @@ destructuring patterns in a 'setq' form.
*** Edebug specification lists can use some new keywords:
-+++
**** '&interpose SPEC FUN ARGS...' lets FUN control parsing after SPEC.
More specifically, FUN is called with 'HEAD PF ARGS...' where
PF is a parsing function that expects a single argument (the specs to
use) and HEAD is the code that matched SPEC.
-+++
**** '&error MSG' unconditionally aborts the current edebug instrumentation.
-+++
**** '&name SPEC FUN' extracts the current name from the code matching SPEC.
** Dynamic modules changes
-+++
*** Type aliases for module functions and finalizers.
The module header "emacs-module.h" now contains type aliases
'emacs_function' and 'emacs_finalizer' for module functions and
finalizers, respectively.
-+++
*** Module functions can now be made interactive.
Use 'make_interactive' to give a module function an interactive
specification.
-+++
*** Module functions can now install an optional finalizer.
The finalizer is called when the function object is garbage-collected.
Use 'set_function_finalizer' to set the finalizer and
'get_function_finalizer' to retrieve it.
-+++
*** Modules can now open a channel to an existing pipe process.
Modules can use the new module function 'open_channel' to do that.
On capable systems, modules can use this functionality to
asynchronously send data back to Emacs.
-+++
*** A new module API 'make_unibyte_string'.
It can be used to create Lisp strings with arbitrary byte sequences
(a.k.a. "raw bytes").
-+++
** Shorthands for Lisp symbols.
Shorthands are a general purpose namespacing system to make Emacs
Lisp's symbol-naming etiquette easier to use. A shorthand is any
@@ -4014,230 +3430,182 @@ worth of symbols with proper and longer prefixes, without actually
touching the Lisp source. For details, see the Info node "(elisp)
Shorthands".
-+++
** New function 'string-search'.
This function takes two string parameters and returns the position of
the first instance of the former string in the latter.
-+++
** New function 'string-replace'.
This function works along the line of 'replace-regexp-in-string', but
it matches on fixed strings instead of regexps, and does not change
the global match state.
-+++
** New function 'ensure-list'.
This function makes a list of its object if it's not a list already.
If it's already a list, the list is returned as is.
-+++
** New function 'split-string-shell-command'.
This splits a shell command string into separate components,
respecting quoting with single ('like this') and double ("like this")
quotes, as well as backslash quoting (like\ this).
-+++
** New function 'string-clean-whitespace'.
This removes whitespace from a string.
-+++
** New function 'string-fill'.
Word-wrap a string so that no lines are longer that a specific length.
-+++
** New function 'string-limit'.
Return (up to) a specific substring length.
-+++
** New function 'string-lines'.
Return a list of strings representing the individual lines in a
string.
-+++
** New function 'string-pad'.
Pad a string to a specific length.
-+++
** New function 'string-chop-newline'.
Remove a trailing newline from a string.
-+++
** New function 'replace-regexp-in-region'.
-+++
** New function 'replace-string-in-region'.
-+++
** New function 'file-name-with-extension'.
This function allows a canonical way to set/replace the extension of a
file name.
-+++
** New function 'file-modes-number-to-symbolic' to convert a numeric
file mode specification into symbolic form.
-+++
** New function 'file-name-concat'.
This appends file name components to a directory name and returns the
result.
-+++
** New function 'file-backup-file-names'.
This function returns the list of file names of all the backup files
for the specified file.
-+++
** New function 'directory-empty-p'.
This predicate tests whether a given file name is an accessible
directory and whether it contains no other directories or files.
-+++
** New function 'buffer-local-boundp'.
This predicate says whether a symbol is bound in a specific buffer.
-+++
** New function 'always'.
This is identical to 'ignore', but returns t instead.
-+++
** New function 'sxhash-equal-including-properties'.
This is identical to 'sxhash-equal' but also accounts for string
properties.
----
** New function 'buffer-line-statistics'.
This function returns some statistics about the line lengths in a buffer.
----
** New function 'color-values-from-color-spec'.
This can be used to parse RGB color specs in several formats and
convert them to a list '(R G B)' of primary color values.
----
** New function 'custom-add-choice'.
This function can be used by modes to add elements to the
'choice' customization type of a variable.
----
** New function 'decoded-time-period'.
It interprets a decoded time structure as a period and returns the
equivalent period in seconds.
-+++
** New function 'dom-print'.
-+++
** New function 'dom-remove-attribute'.
----
** New function 'dns-query-asynchronous'.
It takes the same parameters as 'dns-query', but adds a callback
parameter.
** New function 'garbage-collect-maybe' to trigger GC early.
----
** New function 'get-locale-names'.
This utility function returns a list of names of locales available on
the current system.
-+++
** New function 'insert-into-buffer'.
This inserts the contents of the current buffer into another buffer.
-+++
** New function 'json-available-p'.
This predicate returns non-nil if Emacs is built with libjansson
support, and it is available on the current system.
----
** New function 'mail-header-parse-addresses-lax'.
This takes a comma-separated string and returns a list of mail/name
pairs.
----
** New function 'mail-header-parse-address-lax'.
Parse a string as a mail address-like string.
----
** New function 'make-separator-line'.
Make a string appropriate for usage as a visual separator line.
-+++
** New function 'num-processors'.
Return the number of processors on the system.
-+++
** New function 'object-intervals'.
This function returns a copy of the list of intervals (i.e., text
properties) in the object in question (which must either be a string
or a buffer).
-+++
** New function 'process-lines-ignore-status'.
This is like 'process-lines', but does not signal an error if the
return status is non-zero. 'process-lines-handling-status' has also
been added, and takes a callback to handle the return status.
-+++
** New function 'require-theme'.
This function is like 'require', but searches 'custom-theme-load-path'
instead of 'load-path'. It can be used by Custom themes to load
supporting Lisp files when 'require' is unsuitable.
-+++
** New function 'seq-union'.
This function takes two sequences and returns a list of all elements
that appear in either of them, with no two elements that compare equal
appearing in the result.
-+++
** New function 'syntax-class-to-char'.
This does almost the opposite of 'string-to-syntax' -- it returns the
syntax descriptor (a character) given a raw syntax descriptor (an
integer).
-+++
** New functions 'null-device' and 'path-separator'.
These functions return the connection local value of the respective
variables. This can be used for remote hosts.
-+++
** New predicate functions 'length<', 'length>' and 'length='.
Using these functions may be more efficient than using 'length' (if
the length of a (long) list is being computed just to compare this
length to a number).
-+++
** New macro 'dlet' to dynamically bind variables.
-+++
** New macro 'with-existing-directory'.
This macro binds 'default-directory' to some other existing directory
if 'default-directory' doesn't exist, and then executes the body forms.
-+++
** New variable 'current-minibuffer-command'.
This is like 'this-command', but it is bound recursively when entering
the minibuffer.
-+++
** New variable 'inhibit-interaction' to make user prompts signal an error.
If this is bound to something non-nil, functions like
'read-from-minibuffer', 'read-char' (and related) will signal an
'inhibited-interaction' error.
----
** New variable 'indent-line-ignored-functions'.
This allows modes to cycle through a set of indentation functions
appropriate for those modes.
-+++
** New variable 'print-integers-as-characters' modifies integer printing.
If this variable is non-nil, character syntax is used for printing
numbers when this makes sense, such as '?A' for 65.
-+++
** New variable 'tty-menu-calls-mouse-position-function'.
This controls whether 'mouse-position-function' is called by functions
that retrieve the mouse position when that happens during TTY menu
@@ -4245,46 +3613,38 @@ handling. Lisp programs that set 'mouse-position-function' should
also set this variable non-nil if they are compatible with the tty
menu handling.
-+++
** New variables that hold default buffer names for shell output.
The new constants 'shell-command-buffer-name' and
'shell-command-buffer-name-async' store the default buffer names
for the output of, respectively, synchronous and async shell
commands.
----
** New variables 'read-char-choice-use-read-key' and 'y-or-n-p-use-read-key'.
When non-nil, then functions 'read-char-choice' and 'y-or-n-p'
(respectively) use the function 'read-key' to read a character instead
of using the minibuffer.
-+++
** New variable 'global-minor-modes'.
This variable holds a list of currently enabled global minor modes (as
a list of symbols).
-+++
** New buffer-local variable 'local-minor-modes'.
This permanently buffer-local variable holds a list of currently
enabled non-global minor modes in the current buffer (as a list of
symbols).
-+++
** New completion function 'affixation-function' to add prefix/suffix.
It accepts a list of completions and should return a list where
each element is a list with three elements: a completion,
a prefix string, and a suffix string.
-+++
** New completion function 'group-function' for grouping candidates.
It takes two arguments: a completion candidate and a 'transform' flag.
-+++
** New error symbol 'minibuffer-quit'.
Signaling it has almost the same effect as 'quit' except that it
doesn't cause keyboard macro termination.
-+++
** New error symbol 'remote-file-error', a subcategory of 'file-error'.
It is signaled if a remote file operation fails due to internal
reasons, and could block Emacs. It does not replace 'file-error'
@@ -4298,11 +3658,9 @@ Until it is solved you could ignore such errors by performing
(setq debug-ignored-errors
(cons 'remote-file-error debug-ignored-errors))
-+++
** New macro 'named-let'.
It provides Scheme's "named let" looping construct.
----
** Emacs now attempts to test for high-rate subprocess output more fairly.
When several subprocesses produce output simultaneously at high rate,
Emacs will now by default attempt to service them all in a round-robin
@@ -4311,81 +3669,66 @@ non-nil value to get back the old behavior, whereby after reading
from a subprocess, Emacs would check for output of other subprocesses
in a way that is likely to read from the same process again.
-+++
** 'set-process-buffer' now updates the process mark.
The mark will be set to point to the end of the new buffer.
-+++
** 'unlock-buffer' displays warnings instead of signaling.
Instead of signaling 'file-error' conditions for file system level
errors, the function now calls 'display-warning' and continues as if
the error did not occur.
-+++
** 'read-char-from-minibuffer' and 'y-or-n-p' support 'help-form'.
If you bind 'help-form' to a non-nil value while calling these functions,
then pressing 'C-h' ('help-char') causes the function to evaluate 'help-form'
and display the result.
-+++
** 'read-number' now has its own history variable.
Additionally, the function now accepts an optional HIST argument which
can be used to specify a custom history variable.
-+++
** 'set-window-configuration' now takes two optional parameters,
DONT-SET-FRAME and DONT-SET-MINIWINDOW. The first of these, when
non-nil, instructs the function not to select the frame recorded in
the configuration. The second prevents the current minibuffer being
replaced by the one stored in the configuration.
----
** 'count-windows' now takes an optional parameter ALL-FRAMES.
The semantics are as with 'walk-windows'.
-+++
** 'truncate-string-ellipsis' now uses '…' by default.
Modes that use 'truncate-string-to-width' with non-nil, non-string
argument ELLIPSIS, will now indicate truncation using '…' when
the selected frame can display it, and using "..." otherwise.
-+++
** 'string-width' now accepts two optional arguments FROM and TO.
This allows calculating the width of a substring without consing a
new string.
-+++
** 'directory-files' now takes an additional COUNT parameter.
The parameter makes 'directory-files' return COUNT first file names
from a directory. If MATCH is also given, the function will return
first COUNT file names that match the expression. The same COUNT
parameter has been added to 'directory-files-and-attributes'.
-+++
** 'count-lines' can now ignore invisible lines.
This is controlled by the optional parameter IGNORE-INVISIBLE-LINES.
----
** 'count-words' now crosses field boundaries.
Originally, 'count-words' would stop counting at the first field
boundary it encountered; now it keeps counting all the way to the
region's (or buffer's) end.
-+++
** File-related APIs can optionally follow symlinks.
The functions 'file-modes', 'set-file-modes', and 'set-file-times' now
have an optional argument specifying whether to follow symbolic links.
-+++
** 'format-seconds' can now be used for sub-second times.
The new optional "," parameter has been added, and
'(format-seconds "%mm %,1ss" 66.4)' will now result in "1m 6.4s".
-+++
** 'parse-time-string' can now parse ISO 8601 format strings.
These have a format like "2020-01-15T16:12:21-08:00".
----
** 'lookup-key' is more allowing when searching for extended menu items.
When looking for a menu item '[menu-bar Foo-Bar]', first try to find
an exact match, then look for the lowercased '[menu-bar foo-bar]'.
@@ -4393,7 +3736,6 @@ It will only try to downcase ASCII characters in the range "A-Z".
This improves backwards-compatibility when converting menus to use
'easy-menu-define'.
----
** 'make-network-process', 'make-serial-process' ':coding' behavior change.
Previously, passing ':coding nil' to either of these functions would
override any non-nil binding for 'coding-system-for-read' and
@@ -4403,92 +3745,73 @@ Emacs depended on the previous behavior; if you really want the
process' coding-system to be nil, use 'set-process-coding-system'
after the process has been created, or pass in ':coding '(nil nil)'.
-+++
** 'open-network-stream' now accepts a ':coding' argument.
This allows specifying the coding systems used by a network process
for encoding and decoding without having to bind
'coding-system-for-{read,write}' or call 'set-process-coding-system'.
-+++
** 'open-network-stream' can now take a ':capability-command' that's a function.
The function is called with the greeting from the server as its only
parameter, and allows sending different TLS capability commands to the
server based on that greeting.
-+++
** 'open-gnutls-stream' now also accepts a ':coding' argument.
----
** 'process-attributes' now works under OpenBSD, too.
-+++
** 'format-spec' now takes an optional SPLIT parameter.
If non-nil, 'format-spec' will split the resulting string into a list
of strings, based on where the format specs (and expansions) were.
----
** 'unload-feature' now also tries to undo additions to buffer-local hooks.
----
** 'while-no-input-ignore-events' accepts more special events.
The special events 'dbus-event' and 'file-notify' are now ignored in
'while-no-input' when added to this variable.
----
** 'start-process-shell-command' and 'start-file-process-shell-command'
do not support the old calling conventions any longer.
-+++
** 'yes-or-no-p' and 'y-or-n-p' PROMPT parameter no longer needs trailing space.
In other words, the prompt can now end with "?" instead of "? ". This
has been the case since Emacs 24.4 but was not announced or documented
until now. (Checkdoc has also been updated to accept this convention.)
-+++
** The UNIQUIFY argument in 'auto-save-file-name-transforms' can be a symbol.
If this symbol is one of the members of 'secure-hash-algorithms',
Emacs constructs the nondirectory part of the auto-save file name by
applying that 'secure-hash' to the buffer file name. This avoids any
risk of excessively long file names.
-+++
** New user option 'process-file-return-signal-string'.
It controls, whether 'process-file' returns a string when a remote
process is interrupted by a signal.
** EIEIO Changes
-+++
*** The macro 'oref-default' can now be used with 'setf'.
It is now defined as a generalized variable that can be used with
'setf' to modify the value stored in a given class slot.
----
*** 'form' in '(eql form)' specializers in 'cl-defmethod' is now evaluated.
This corresponds to the behavior of defmethod in Common Lisp Object System.
For compatibility, '(eql SYMBOL)' does not evaluate SYMBOL, for now.
** D-Bus
-+++
*** Property values can be typed explicitly.
'dbus-register-property' and 'dbus-set-property' accept now optional
type symbols. Both functions propagate D-Bus errors.
-+++
*** Registered properties can have the new access type ':write'.
-+++
*** In case of problems, handlers can emit proper D-Bus error messages now.
-+++
*** D-Bus errors, which have been converted from incoming D-Bus error
messages, contain the error name of that message now.
-+++
*** D-Bus messages can be monitored with the new command 'dbus-monitor'.
-+++
*** D-Bus events have changed their internal structure.
They carry now the destination and the error-name of an event. They
also keep the type information of their arguments. Use the
@@ -4496,19 +3819,16 @@ also keep the type information of their arguments. Use the
** Buttons
-+++
*** New minor mode 'button-mode'.
This minor mode does nothing except install 'button-buffer-map' as
a minor mode map (which binds the 'TAB' / 'S-TAB' key bindings to navigate
to buttons), and can be used in any view-mode-like buffer that has
buttons in it.
-+++
*** New utility function 'button-buttonize'.
This function takes a string and returns a string propertized in a way
that makes it a valid button.
----
** 'text-scale-mode' can now adjust font size of the header line.
When the new buffer local variable 'text-scale-remap-header-line'
is non-nil, 'text-scale-adjust' will also scale the text in the header
@@ -4519,10 +3839,8 @@ form below the header line. It is enabled by default in
'tabulated-list-mode' and its derived modes, and disabled by default
elsewhere.
----
** 'ascii' is now a coding system alias for 'us-ascii'.
----
** New coding-systems for EBCDIC variants.
New coding-systems 'ibm256', 'ibm273', 'ibm274', 'ibm277', 'ibm278',
'ibm280', 'ibm281', 'ibm284', 'ibm285', 'ibm290', 'ibm297'. These are
@@ -4532,14 +3850,12 @@ locales. They are also available as aliases 'ebcdic-cp-*' (e.g.,
'cp278' for 'ibm278'). There are also new charsets 'ibm2xx' to
support these coding-systems.
-+++
** New "Bindat type expression" description language.
This new system is provided by the new macro 'bindat-type' and
obsoletes the old data layout specifications. It supports
arbitrary-size integers, recursive types, and more. See the Info node
"(elisp) Byte Packing" in the ELisp manual for more details.
-+++
** New macro 'with-environment-variables'.
This macro allows setting environment variables temporarily when
executing a form.
@@ -4547,7 +3863,6 @@ executing a form.
* Changes in Emacs 28.1 on Non-Free Operating Systems
-+++
** On MS-Windows, Emacs can now use the native image API to display images.
Emacs can now use the MS-Windows GDI+ library to load and display
images in JPEG, PNG, GIF and TIFF formats. This support is available
@@ -4558,7 +3873,6 @@ To turn this on, set the variable 'w32-use-native-image-API' to a
non-nil value. Please report any bugs you find while using the native
image API via 'M-x report-emacs-bug'.
-+++
** On MS-Windows, Emacs can now toggle the IME.
A new function 'w32-set-ime-open-status' can now be used to disable
and enable the MS-Windows native Input Method Editor (IME) at run
@@ -4570,26 +3884,21 @@ current IME activation status.
'move-beginning-of-line' and 'move-end-of-line' respectively. The commands
to select previous/next frame are still bound to 's-~' and 's-`'.
-+++
** On macOS, Emacs can now load dynamic modules with a ".dylib" suffix.
'module-file-suffix' now has the value ".dylib" on macOS, but the
".so" suffix is supported as well.
----
** On macOS, the user option 'make-pointer-invisible' is now honored.
----
** On macOS, Xwidget is now supported.
If Emacs was built with xwidget support, you can access the embedded
webkit browser with command 'xwidget-webkit-browse-url'. Viewing two
instances of xwidget webkit is not supported.
----
*** New user option 'xwidget-webkit-enable-plugins'.
If non-nil, enable plugins in xwidget. (This is only available on
macOS.)
-+++
** New macOS Contacts back-end for EUDC.
This backend works on newer versions of macOS and is generally
preferred over the eudcb-mab.el backend.
From de7901abbc21114721057c907cc52455e228f826 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 3 Apr 2022 07:38:15 -0400
Subject: [PATCH 044/466] Bump Emacs version to 28.1
* README:
* configure.ac:
* nt/README.W32:
* msdos/sed2v2.inp: Bump Emacs version to 28.1
---
README | 2 +-
configure.ac | 2 +-
msdos/sed2v2.inp | 2 +-
nt/README.W32 | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/README b/README
index 7840e7a10841..5e7cadeaa02e 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
-This directory tree holds version 28.0.92 of GNU Emacs, the extensible,
+This directory tree holds version 28.1 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
diff --git a/configure.ac b/configure.ac
index 7c2b7aa62e50..660784347bbc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see .
AC_PREREQ(2.65)
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 28.0.92, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
+AC_INIT(GNU Emacs, 28.1, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
dnl and then quoted again for a C string. Separate options with spaces.
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index c2bb17c54605..6f57ad31812c 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -67,7 +67,7 @@
/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/
/^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
-/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.0.92"/
+/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.1"/
/^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
/^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
/^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
diff --git a/nt/README.W32 b/nt/README.W32
index 57c87e9c4b5e..94f538aa91a9 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,7 +1,7 @@
Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
- Emacs version 28.0.92 for MS-Windows
+ Emacs version 28.1 for MS-Windows
This README file describes how to set up and run a precompiled
distribution of the latest version of GNU Emacs for MS-Windows. You
From 5a223c7f2ef4c31abbd46367b6ea83cd19d30aa7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 3 Apr 2022 08:26:02 -0400
Subject: [PATCH 045/466] Update logs and HISTORY for Emacs 28.1
* ChangeLog.3:
* etc/HISTORY:
* etc/AUTHORS: Update for Emacs 28.1 release.
---
ChangeLog.3 | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++-
etc/AUTHORS | 22 +++++-----
etc/HISTORY | 2 +
3 files changed, 127 insertions(+), 12 deletions(-)
diff --git a/ChangeLog.3 b/ChangeLog.3
index 778c01b5e5f8..52c6300f1f93 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,116 @@
+2022-03-30 Tassilo Horn
+
+ dired: implement feature from 7b50ed553f differently
+
+ * lisp/dired.el (dired-buffers-for-dir): Restore to emacs-27 version.
+ (dired-buffers-for-dir-or-subdir): New function.
+ (dired-clean-up-after-deletion): Use dired-buffers-for-dir-or-subdir
+ instead dired-buffers-for-dir.
+
+2022-03-30 Eli Zaretskii
+
+ Fix regression in 'dired-buffers-for-dir'
+
+ * lisp/dired.el (dired-buffers-for-dir): Fix inadvertently swapped
+ arguments. (Bug#54636)
+
+2022-03-27 Eli Zaretskii
+
+ * lisp/desktop.el (desktop-read): Clarify warning text.
+
+2022-03-26 Po Lu
+
+ * doc/emacs/anti.texi (Antinews): Unannounce removal of Motif.
+
+2022-03-25 Lars Ingebrigtsen
+
+ Fix eshell-explicit-command-char doc string typo
+
+ * lisp/eshell/esh-ext.el (eshell-explicit-command-char): Fix typo
+ in doc string (bug#54567).
+
+2022-03-24 Eli Zaretskii
+
+ Clarify the description of "selected tags table"
+
+ * doc/emacs/maintaining.texi (Select Tags Table): Clarify the
+ distinction between the "selected tags table" and the "current
+ list of tags tables". (Bug#54543)
+
+2022-03-21 Lars Ingebrigtsen
+
+ Add notes about command modes and nativecomp interaction
+
+ * doc/lispref/commands.texi (Command Modes): Note interaction with
+ native-compile (bug#54437).
+
+ * src/data.c: Add comment about not being supported.
+
+ Do not merge to master.
+
+2022-03-20 Kyle Meyer
+
+ Update to Org 9.5.2-25-gaf6f12
+
+2022-03-20 Eli Zaretskii
+
+ Improve doc strings of read-char-from-minibuffer-insert-* commands
+
+ * lisp/subr.el (read-char-from-minibuffer-insert-char)
+ (read-char-from-minibuffer-insert-other): Clarify the doc strings.
+ (Bug#54479)
+
+2022-03-19 Eli Zaretskii
+
+ Fix region highlight in non-selected windows
+
+ * src/xdisp.c (prepare_menu_bars): Include in the windows passed
+ to pre-redisplay-functions windows whose point was moved from the
+ last recorded position. (Bug#54450)
+
+2022-03-18 Eli Zaretskii
+
+ Fix a regression in 'decipher-digram-list'
+
+ * lisp/play/decipher.el (decipher-stats-buffer): Don't assume the
+ statistics buffer always exists. (Bug#54443)
+
+2022-03-17 Karl Fogel
+
+ Improve documentation of bookmark default sorting
+
+ * lisp/bookmark.el (bookmark-alist, bookmark-store,
+ bookmark-maybe-sort-alist): Update doc strings and comments.
+
+2022-03-15 Juri Linkov
+
+ * doc/misc/transient.texi: Fix @dircategory to "Emacs misc features" for dir.
+
+2022-03-13 Jim Porter
+
+ Fix evaluation of negated argument predicates in Eshell
+
+ * lisp/eshell/em-pred.el (eshell-add-pred-func): Let-bind 'pred' so
+ the lambdas see the original value (bug#54369).
+
+ Committed on the wrong branch.
+
+ Do not merge to master.
+
+2022-03-12 Eli Zaretskii
+
+ Emacs pretest 28.0.92
+
+ * README:
+ * configure.ac:
+ * nt/README.W32:
+ * msdos/sed2v2.inp: Bump Emacs version to 28.0.92.
+
+ * etc/AUTHORS:
+ * lisp/ldefs-boot.el: Update for pretest 28.0.92.
+
+ * ChangeLog.3: Regenerate.
+
2022-03-10 Eli Zaretskii
Fix regression in 'custom-prompt-customize-unsaved-options'
@@ -234865,7 +234978,7 @@
This file records repository revisions from
commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-commit dbe6a3ecf74536cbfb7ca59630b48020ae4e732a (inclusive).
+commit f2ae39829812098d8269eafbc0fcb98959ee5bb7 (inclusive).
See ChangeLog.2 for earlier changes.
;; Local Variables:
diff --git a/etc/AUTHORS b/etc/AUTHORS
index 8281aa96927a..61bdf9366195 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -1573,7 +1573,7 @@ and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c w32fns.c simple.el
files.el fileio.c keyboard.c emacs.c w32term.c text.texi dispnew.c
w32proc.c files.texi frames.texi configure.ac dispextern.h lisp.h
- process.c ms-w32.h and 1235 other files
+ process.c ms-w32.h and 1236 other files
Eliza Velasquez: changed server.el
@@ -2610,9 +2610,9 @@ Jim Paris: changed process.c
Jim Porter: changed delsel.el ansi-color-tests.el ansi-color.el
bindings.el esh-var.el term-tests.el term.el tramp.el callproc.c
- dichromacy-theme.el diff-mode.el eshell-tests.el eshell.texi
+ dichromacy-theme.el diff-mode.el em-pred.el eshell-tests.el eshell.texi
files-tests.el gdb-mi.el grep-tests.el ispell.el leuven-theme.el man.el
- menu-bar.el misterioso-theme.el and 9 other files
+ menu-bar.el and 10 other files
Jim Radford: changed gnus-start.el
@@ -2949,7 +2949,7 @@ Juri Linkov: wrote compose.el files-x.el misearch.el repeat-tests.el
and changed isearch.el simple.el info.el replace.el dired.el dired-aux.el
progmodes/grep.el subr.el window.el image-mode.el mouse.el diff-mode.el
files.el menu-bar.el minibuffer.el progmodes/compile.el startup.el
- faces.el vc.el display.texi search.texi and 445 other files
+ faces.el vc.el display.texi search.texi and 446 other files
Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
w32console.c w32heap.c w32inevt.c w32term.h
@@ -3306,7 +3306,7 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el
and changed gnus.texi simple.el subr.el files.el process.c text.texi
display.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
auth-source.el url-http.el edebug.el image.el gnus-cite.el pop3.el
- dired-aux.el fns.c image.c and 859 other files
+ dired-aux.el fns.c image.c and 860 other files
Lars Rasmusson: changed ebrowse.c
@@ -4565,10 +4565,10 @@ and changed xdisp.c comp.c fns.c pdumper.c alloc.c byte-opt.el
ccl-tests.el ccl.c ccl.el cmds.c comint.el comp-test-funcs.el
comp-tests.el comp.el composite.c and 28 other files
-Po Lu: changed xdisp.c browse-url.el callproc.c cc-compat.el config.bat
- esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h nsfns.m
- nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp sedlibmk.inp
- tooltip.el xterm.c
+Po Lu: changed xdisp.c anti.texi browse-url.el callproc.c cc-compat.el
+ config.bat esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h
+ nsfns.m nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp
+ sedlibmk.inp tooltip.el xterm.c
Pontus Michael: changed simple.el
@@ -5389,8 +5389,8 @@ and co-wrote ol-gnus.el
and changed bug-reference.el reftex-vars.el tex-mode.el browse-url.el
gnus.texi reftex-cite.el tsdh-dark-theme.el tsdh-light-theme.el
gnus-sum.el maintaining.texi file-notify-tests.el gnus-art.el misc.texi
- reftex.el org-gnus.el prog-mode.el subword.el image-mode.el json.el
- lisp-mode.el rcirc.el and 99 other files
+ reftex.el org-gnus.el prog-mode.el subword.el dired.el image-mode.el
+ json.el lisp-mode.el and 99 other files
Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el
diff --git a/etc/HISTORY b/etc/HISTORY
index 1d6425e93801..bb4e3e38e1bf 100644
--- a/etc/HISTORY
+++ b/etc/HISTORY
@@ -224,6 +224,8 @@ GNU Emacs 27.1 (2020-08-10) emacs-27.1
GNU Emacs 27.2 (2021-03-25) emacs-27.2
+GNU Emacs 28.1 (2022-04-04) emacs-28.1
+
----------------------------------------------------------------------
This file is part of GNU Emacs.
From dd3863d8bcc77c43363bbd041da1c1eb37a3ee32 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 3 Apr 2022 16:09:11 +0300
Subject: [PATCH 046/466] ; Prepare the release branch for Emacs-28.2
development
* README:
* configure.ac:
* nt/README.W32:
* msdos/sed2v2.inp: Bump Emacs version to 28.1.50.
* etc/NEWS: Add Emacs-28.2 sections.
---
README | 2 +-
configure.ac | 2 +-
etc/NEWS | 27 +++++++++++++++++++++++++++
msdos/sed2v2.inp | 2 +-
nt/README.W32 | 2 +-
5 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/README b/README
index 5e7cadeaa02e..559c8aeca01e 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
-This directory tree holds version 28.1 of GNU Emacs, the extensible,
+This directory tree holds version 28.1.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
diff --git a/configure.ac b/configure.ac
index 660784347bbc..7314eb6978e7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see .
AC_PREREQ(2.65)
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
-AC_INIT(GNU Emacs, 28.1, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
+AC_INIT(GNU Emacs, 28.1.50, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
dnl and then quoted again for a C string. Separate options with spaces.
diff --git a/etc/NEWS b/etc/NEWS
index 995de8d3177f..7fb8e8dce8ef 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -15,6 +15,33 @@ in older Emacs versions.
You can narrow news to a specific version by calling 'view-emacs-news'
with a prefix argument or by typing 'C-u C-h C-n'.
+
+* Installation Changes in Emacs 28.2
+
+
+* Startup Changes in Emacs 28.2
+
+
+* Changes in Emacs 28.2
+
+
+* Editing Changes in Emacs 28.2
+
+
+* Changes in Specialized Modes and Packages in Emacs 28.2
+
+
+* New Modes and Packages in Emacs 28.2
+
+
+* Incompatible Lisp Changes in Emacs 28.2
+
+
+* Lisp Changes in Emacs 28.2
+
+
+* Changes in Emacs 28.2 on Non-Free Operating Systems
+
* Installation Changes in Emacs 28.1
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index 6f57ad31812c..fedccef4ef51 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -67,7 +67,7 @@
/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/
/^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
-/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.1"/
+/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "28.1.50"/
/^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
/^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
/^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
diff --git a/nt/README.W32 b/nt/README.W32
index 94f538aa91a9..f0a8c8c3264c 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,7 +1,7 @@
Copyright (C) 2001-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
- Emacs version 28.1 for MS-Windows
+ Emacs version 28.1.50 for MS-Windows
This README file describes how to set up and run a precompiled
distribution of the latest version of GNU Emacs for MS-Windows. You
From 8c71ac606ec484d5e9cf967b41aadbddb5c8b694 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 5 Apr 2022 21:15:32 +0300
Subject: [PATCH 047/466] Fix fallout from lexical-binding in vhdl-mode.el
* lisp/progmodes/vhdl-mode.el (vhdl-update-sensitivity-list): Fix
production of a list with embedded function calls. (Bug#54730)
---
lisp/progmodes/vhdl-mode.el | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 64ebc1416704..e562a463e152 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -8396,30 +8396,30 @@ buffer."
((visible-list (vhdl-get-visible-signals))
;; define syntactic regions where signals are read
(scan-regions-list
- '(;; right-hand side of signal/variable assignment
+ `(;; right-hand side of signal/variable assignment
;; (special case: "<=" is relational operator in a condition)
- ((vhdl-re-search-forward "[<:]=" proc-end t)
- (vhdl-re-search-forward ";\\|\\<\\(then\\|loop\\|report\\|severity\\|is\\)\\>" proc-end t))
+ ((vhdl-re-search-forward "[<:]=" ,proc-end t)
+ (vhdl-re-search-forward ";\\|\\<\\(then\\|loop\\|report\\|severity\\|is\\)\\>" ,proc-end t))
;; if condition
- ((vhdl-re-search-forward "^\\s-*if\\>" proc-end t)
- (vhdl-re-search-forward "\\" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*if\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\" ,proc-end t))
;; elsif condition
- ((vhdl-re-search-forward "\\" proc-end t)
- (vhdl-re-search-forward "\\" proc-end t))
+ ((vhdl-re-search-forward "\\" ,proc-end t)
+ (vhdl-re-search-forward "\\" ,proc-end t))
;; while loop condition
- ((vhdl-re-search-forward "^\\s-*while\\>" proc-end t)
- (vhdl-re-search-forward "\\" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*while\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\" ,proc-end t))
;; exit/next condition
- ((vhdl-re-search-forward "\\<\\(exit\\|next\\)\\s-+\\w+\\s-+when\\>" proc-end t)
- (vhdl-re-search-forward ";" proc-end t))
+ ((vhdl-re-search-forward "\\<\\(exit\\|next\\)\\s-+\\w+\\s-+when\\>" ,proc-end t)
+ (vhdl-re-search-forward ";" ,proc-end t))
;; assert condition
- ((vhdl-re-search-forward "\\" proc-end t)
- (vhdl-re-search-forward "\\(\\\\|\\\\|;\\)" proc-end t))
+ ((vhdl-re-search-forward "\\" ,proc-end t)
+ (vhdl-re-search-forward "\\(\\\\|\\\\|;\\)" ,proc-end t))
;; case expression
- ((vhdl-re-search-forward "^\\s-*case\\>" proc-end t)
- (vhdl-re-search-forward "\\" proc-end t))
+ ((vhdl-re-search-forward "^\\s-*case\\>" ,proc-end t)
+ (vhdl-re-search-forward "\\" ,proc-end t))
;; parameter list of procedure call, array index
- ((and (re-search-forward "^\\s-*\\(\\w\\|\\.\\)+[ \t\n\r\f]*(" proc-end t)
+ ((and (re-search-forward "^\\s-*\\(\\w\\|\\.\\)+[ \t\n\r\f]*(" ,proc-end t)
(1- (point)))
(progn (backward-char) (forward-sexp)
(while (looking-at "(") (forward-sexp)) (point)))))
From 4161a368499a3326d13113aa5c6ab332047df767 Mon Sep 17 00:00:00 2001
From: Stefan Monnier
Date: Wed, 5 Jan 2022 14:28:08 -0500
Subject: [PATCH 048/466] cl-generic.el: Fix bug#46722
Fix longstanding bug due to unexpected interference via side-effect.
* lisp/emacs-lisp/cl-generic.el (cl--generic-get-dispatcher):
Copy the `dispatch` arg before storing it into the hash-table.
Backport from `master` (cherrypick from commit 61f8f7f68f).
---
lisp/emacs-lisp/cl-generic.el | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index a7e24236a32f..add8e7fda0c0 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -602,7 +602,9 @@ The set of acceptable TYPEs (also called \"specializers\") is defined
(defun cl--generic-get-dispatcher (dispatch)
(cl--generic-with-memoization
- (gethash dispatch cl--generic-dispatchers)
+ ;; We need `copy-sequence` here because this `dispatch' object might be
+ ;; modified by side-effect in `cl-generic-define-method' (bug#46722).
+ (gethash (copy-sequence dispatch) cl--generic-dispatchers)
;; (message "cl--generic-get-dispatcher (%S)" dispatch)
(let* ((dispatch-arg (car dispatch))
(generalizers (cdr dispatch))
From 009e88e002333b4090b021d24390c9137e5a2555 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 7 Apr 2022 11:17:52 +0200
Subject: [PATCH 049/466] Merge with Tramp 2.5.2.3 (Do not merge with master)
* doc/misc/tramp.texi (Archive file names): Explicitly say how to
open an archive with Tramp (Bug#25076).
* doc/misc/trampver.texi:
* lisp/net/trampver.el: Change version to "2.5.3-pre".
* lisp/net/tramp-adb.el (tramp-adb-handle-process-file)
* lisp/net/tramp-sh.el (tramp-sh-handle-process-file):
* lisp/net/tramp-smb.el (tramp-smb-handle-process-file):
* lisp/net/tramp-sshfs.el (tramp-sshfs-handle-process-file):
Improve implementation. (Bug#53854)
* lisp/net/tramp-adb.el (tramp-adb-tolerate-tilde):
* lisp/net/tramp-sshfs.el (tramp-sshfs-tolerate-tilde):
New defuns. Advice `shell-mode' with them.
* lisp/net/tramp.el (tramp-register-autoload-file-name-handlers):
* lisp/net/tramp-archive.el (tramp-register-archive-file-name-handler):
Check, whether the real file name handler is already registered.
rules. (Bug#54542)
* lisp/net/tramp.el (tramp-autoload-file-name-handler)
(tramp-register-autoload-file-name-handlers)
(tramp-unload-file-name-handlers, tramp-unload-tramp):
* lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-regexp)
(tramp-archive-autoload-file-name-handler)
(tramp-register-archive-file-name-handler):
Add `tramp-autoload' property.
* lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
* lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
* lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
Use `tramp-handle-file-notify-add-watch',
`tramp-handle-file-notify-rm-watch' and
`tramp-handle-file-notify-valid-p'.
* lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
Use `tramp-handle-insert-file-contents'.
* lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
* lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection):
* lisp/net/lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
* tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection): Do not
set "lock-pid" connection-property.
(tramp-sudoedit-handle-delete-file): Use "rm -f".
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-executable-p):
* lisp/net/tramp-sh.el (tramp-sh-handle-file-executable-p):
Check also for setuid/setgid bit.
(tramp-gvfs-handle-expand-file-name):
Respect `tramp-tolerate-tilde'.
* lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
* lisp/net/tramp-smb.el (tramp-smb-handle-insert-directory):
Do not modify disk space information when
`dired--insert-disk-space' is available. (Bug#54512)
* lisp/net/tramp-sh.el (tramp-maybe-open-connection): Extend suppression
(tramp-get-remote-dev-tty): New defun.
(tramp-sh-handle-make-process): Use it.
* lisp/net/tramp-sshfs.el (tramp-methods) :
Add "-t -t" to `tramp-login-args'.
Add "-o dir_cache=no" to `tramp-mount-args'. (Bug#54126)
Add "-o transform_symlinks" to `tramp-mount-args'.
(tramp-sshfs-file-name-handler-alist):
Use `tramp-sshfs-handle-file-writable-p'.
(tramp-sshfs-handle-file-writable-p): New defun. (Bug#54130)
(tramp-sshfs-handle-write-region): Set file modification time.
(Bug#54016)
(tramp-sshfs-file-name-handler-alist):
Use `tramp-sshfs-handle-set-file-times'.
(tramp-sshfs-handle-set-file-times): New defun.
* test/lisp/net/tramp-tests.el (tramp--test-expensive-test-p):
Rename from `tramp--test-expensive-test'. Make it a defun. Adapt
all callees.
(tramp-test07-file-exists-p, tramp-test14-delete-directory)
(tramp-test18-file-attributes, tramp-test20-file-modes)
(tramp-test28-process-file, tramp-test29-start-file-process)
(tramp-test30-make-process, tramp-test32-shell-command)
(tramp-test33-environment-variables, tramp--test-check-files)
(tramp--test-special-characters, tramp-test46-unload): Adapt tests.
(tramp-test39-detect-external-change): New test.
(tramp-test29-start-file-process)
(tramp--test--deftest-direct-async-process)
(tramp-test30-make-process, tramp-test31-interrupt-process)
(tramp-test34-explicit-shell-file-name)
(tramp-test44-asynchronous-requests):
Add :tramp-asynchronous-processes tag.
(tramp--test-asynchronous-processes-p): New defun.
(tramp--test-hpux-p, tramp--test-macos-p): Protect against errors.
---
doc/misc/tramp.texi | 6 +-
doc/misc/trampver.texi | 2 +-
lisp/net/tramp-adb.el | 36 ++-
lisp/net/tramp-archive.el | 10 +-
lisp/net/tramp-cache.el | 2 -
lisp/net/tramp-crypt.el | 8 +-
lisp/net/tramp-gvfs.el | 46 ++--
lisp/net/tramp-rclone.el | 10 +-
lisp/net/tramp-sh.el | 43 +--
lisp/net/tramp-smb.el | 11 +-
lisp/net/tramp-sshfs.el | 134 +++++++--
lisp/net/tramp-sudoedit.el | 11 +-
lisp/net/trampver.el | 6 +-
test/lisp/net/tramp-tests.el | 510 +++++++++++++++++++++++++----------
14 files changed, 596 insertions(+), 239 deletions(-)
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 28da4b385c4d..a8079a0fa4ff 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -4008,8 +4008,10 @@ methods}. Internally, file archives are mounted via the
@acronym{GVFS} @option{archive} method.
A file archive is a regular file of kind @file{/path/to/dir/file.EXT}.
-The extension @samp{.EXT} identifies the type of the file archive. A
-file inside a file archive, called archive file name, has the name
+The extension @samp{.EXT} identifies the type of the file archive. To
+examine the contents of an archive with Dired, open file name as if it
+were a directory (i.e., open @file{/path/to/dir/file.EXT/}). A file
+inside a file archive, called archive file name, has the name
@file{/path/to/dir/file.EXT/dir/file}.
Most of the @ref{Magic File Names, , magic file name operations,
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index ac44c27b0d69..a6914a58d08c 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -8,7 +8,7 @@
@c In the Tramp GIT, the version numbers are auto-frobbed from
@c tramp.el, and the bug report address is auto-frobbed from
@c configure.ac.
-@set trampver 2.5.2.28.1
+@set trampver 2.5.3-pre
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 25.1
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 3c1b032baf65..aa0f558a2b62 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -815,10 +815,10 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
;; Determine input.
(if (null infile)
(setq input (tramp-get-remote-null-device v))
- (setq infile (expand-file-name infile))
+ (setq infile (tramp-compat-file-name-unquote (expand-file-name infile)))
(if (tramp-equal-remote default-directory infile)
;; INFILE is on the same remote host.
- (setq input (tramp-file-local-name infile))
+ (setq input (tramp-unquote-file-local-name infile))
;; INFILE must be copied to remote host.
(setq input (tramp-make-tramp-temp-file v)
tmpinput (tramp-make-tramp-file-name v input))
@@ -849,7 +849,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
(setcar (cdr destination) (expand-file-name (cadr destination)))
(if (tramp-equal-remote default-directory (cadr destination))
;; stderr is on the same remote host.
- (setq stderr (tramp-file-local-name (cadr destination)))
+ (setq stderr (tramp-unquote-file-local-name (cadr destination)))
;; stderr must be copied to remote host. The temporary
;; file must be deleted after execution.
(setq stderr (tramp-make-tramp-temp-file v)
@@ -870,7 +870,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
(setq ret (tramp-adb-send-command-and-check
v (format
"(cd %s; %s)"
- (tramp-shell-quote-argument localname) command)
+ (tramp-unquote-shell-quote-argument localname)
+ command)
t))
(unless (natnump ret) (setq ret 1))
;; We should add the output anyway.
@@ -900,8 +901,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
;; Cleanup. We remove all file cache values for the connection,
;; because the remote process could have changed them.
(when tmpinput (delete-file tmpinput))
-
- (unless process-file-side-effects
+ (when process-file-side-effects
(tramp-flush-directory-properties v ""))
;; Return exit status.
@@ -986,6 +986,10 @@ implementation will be used."
(name1 name)
(i 0))
+ (when (string-match-p "[[:multibyte:]]" command)
+ (tramp-error
+ v 'file-error "Cannot apply multi-byte command `%s'" command))
+
(while (get-process name1)
;; NAME must be unique as process name.
(setq i (1+ i)
@@ -1264,7 +1268,7 @@ connection if a previous connection has died for some reason."
(if (zerop (length device))
(tramp-error vec 'file-error "Device %s not connected" host))
(with-tramp-progress-reporter vec 3 "Opening adb shell connection"
- (let* ((coding-system-for-read 'utf-8-dos) ;is this correct?
+ (let* ((coding-system-for-read 'utf-8-dos) ; Is this correct?
(process-connection-type tramp-process-connection-type)
(args (if (> (length host) 0)
(list "-s" device "shell")
@@ -1368,6 +1372,24 @@ connection if a previous connection has died for some reason."
`(:application tramp :protocol ,tramp-adb-method)
'tramp-adb-connection-local-default-shell-profile))
+;; `shell-mode' tries to open remote files like "/adb::~/.history".
+;; This fails, because the tilde cannot be expanded. Tell
+;; `tramp-handle-expand-file-name' to tolerate this.
+(defun tramp-adb-tolerate-tilde (orig-fun)
+ "Advice for `shell-mode' to tolerate tilde in remote file names."
+ (let ((tramp-tolerate-tilde
+ (or tramp-tolerate-tilde
+ (equal (file-remote-p default-directory 'method)
+ tramp-adb-method))))
+ (funcall orig-fun)))
+
+(add-function
+ :around (symbol-function #'shell-mode) #'tramp-adb-tolerate-tilde)
+(add-hook 'tramp-adb-unload-hook
+ (lambda ()
+ (remove-function
+ (symbol-function #'shell-mode) #'tramp-adb-tolerate-tilde)))
+
(add-hook 'tramp-unload-hook
(lambda ()
(unload-feature 'tramp-adb 'force)))
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 1b5f42a99120..22390ef45bca 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -188,6 +188,8 @@ It must be supported by libarchive(3).")
"\\)" ;; \1
"\\(" "/" ".*" "\\)" "\\'"))) ;; \2
+(put #'tramp-archive-autoload-file-name-regexp 'tramp-autoload t)
+
;; In older Emacsen (prior 27.1), `tramp-archive-autoload-file-name-regexp'
;; is not autoloaded. So we cannot expect it to be known in
;; tramp-loaddefs.el. But it exists, when tramp-archive.el is loaded.
@@ -363,15 +365,21 @@ arguments to pass to the OPERATION."
(tramp-archive-autoload t))
(apply #'tramp-autoload-file-name-handler operation args)))))
+(put #'tramp-archive-autoload-file-name-handler 'tramp-autoload t)
+
;;;###autoload
(progn (defun tramp-register-archive-file-name-handler ()
"Add archive file name handler to `file-name-handler-alist'."
- (when tramp-archive-enabled
+ (when (and tramp-archive-enabled
+ (not
+ (rassq #'tramp-archive-file-name-handler file-name-handler-alist)))
(add-to-list 'file-name-handler-alist
(cons (tramp-archive-autoload-file-name-regexp)
#'tramp-archive-autoload-file-name-handler))
(put #'tramp-archive-autoload-file-name-handler 'safe-magic t))))
+(put #'tramp-register-archive-file-name-handler 'tramp-autoload t)
+
;;;###autoload
(progn
(add-hook 'after-init-hook #'tramp-register-archive-file-name-handler)
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
index d35f7ffa4e31..347da916edfe 100644
--- a/lisp/net/tramp-cache.el
+++ b/lisp/net/tramp-cache.el
@@ -49,8 +49,6 @@
;; an open connection. Examples: "scripts" keeps shell script
;; definitions already sent to the remote shell, "last-cmd-time" is
;; the time stamp a command has been sent to the remote process.
-;; "lock-pid" is the timestamp a (network) process is created, it is
-;; used instead of the pid in file locks.
;;
;; - The key is nil. These are temporary properties related to the
;; local machine. Examples: "parse-passwd" and "parse-group" keep
diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el
index e8313463da4d..5028e4893284 100644
--- a/lisp/net/tramp-crypt.el
+++ b/lisp/net/tramp-crypt.el
@@ -192,9 +192,9 @@ If NAME doesn't belong to a crypted remote directory, retun nil."
;; `file-name-nondirectory' performed by default handler.
;; `file-name-sans-versions' performed by default handler.
(file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
- (file-notify-add-watch . ignore)
- (file-notify-rm-watch . ignore)
- (file-notify-valid-p . ignore)
+ (file-notify-add-watch . tramp-handle-file-notify-add-watch)
+ (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+ (file-notify-valid-p . tramp-handle-file-notify-valid-p)
(file-ownership-preserved-p . tramp-crypt-handle-file-ownership-preserved-p)
(file-readable-p . tramp-crypt-handle-file-readable-p)
(file-regular-p . tramp-handle-file-regular-p)
@@ -207,7 +207,7 @@ If NAME doesn't belong to a crypted remote directory, retun nil."
(find-backup-file-name . tramp-handle-find-backup-file-name)
;; `get-file-buffer' performed by default handler.
(insert-directory . tramp-crypt-handle-insert-directory)
- ;; `insert-file-contents' performed by default handler.
+ (insert-file-contents . tramp-handle-insert-file-contents)
(load . tramp-handle-load)
(lock-file . tramp-crypt-handle-lock-file)
(make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 0bba894cdbb7..c09c016e6475 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1160,10 +1160,9 @@ file names."
(tramp-get-connection-property v "default-location" "~")
nil t localname 1)))
;; Tilde expansion is not possible.
- (when (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
- (tramp-error
- v 'file-error
- "Cannot expand tilde in file `%s'" name))
+ (when (and (not tramp-tolerate-tilde)
+ (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname))
+ (tramp-error v 'file-error "Cannot expand tilde in file `%s'" name))
(unless (tramp-run-real-handler #'file-name-absolute-p (list localname))
(setq localname (concat "/" localname)))
;; We do not pass "/..".
@@ -1181,7 +1180,9 @@ file names."
;; No tilde characters in file name, do normal
;; `expand-file-name' (this does "/./" and "/../").
(tramp-make-tramp-file-name
- v (tramp-run-real-handler #'expand-file-name (list localname))))))
+ v (if (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ localname
+ (tramp-run-real-handler #'expand-file-name (list localname)))))))
(defun tramp-gvfs-get-directory-attributes (directory)
"Return GVFS attributes association list of all files in DIRECTORY."
@@ -1396,7 +1397,8 @@ If FILE-SYSTEM is non-nil, return file system attributes."
"Like `file-executable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
(with-tramp-file-property v localname "file-executable-p"
- (tramp-check-cached-permissions v ?x))))
+ (or (tramp-check-cached-permissions v ?x)
+ (tramp-check-cached-permissions v ?s)))))
(defun tramp-gvfs-handle-file-name-all-completions (filename directory)
"Like `file-name-all-completions' for Tramp files."
@@ -1612,22 +1614,18 @@ ID-FORMAT valid values are `string' and `integer'."
(tramp-file-name-user vec)
(when-let ((localname
(tramp-get-connection-property
- (tramp-get-process vec) "share"
- (tramp-get-connection-property vec "default-location" nil))))
+ (tramp-get-process vec) "share" nil)))
(tramp-compat-file-attribute-user-id
- (file-attributes
- (tramp-make-tramp-file-name vec localname) id-format)))))
+ (file-attributes (tramp-make-tramp-file-name vec localname) id-format)))))
(defun tramp-gvfs-handle-get-remote-gid (vec id-format)
"The gid of the remote connection VEC, in ID-FORMAT.
ID-FORMAT valid values are `string' and `integer'."
(when-let ((localname
(tramp-get-connection-property
- (tramp-get-process vec) "share"
- (tramp-get-connection-property vec "default-location" nil))))
+ (tramp-get-process vec) "share" nil)))
(tramp-compat-file-attribute-group-id
- (file-attributes
- (tramp-make-tramp-file-name vec localname) id-format))))
+ (file-attributes (tramp-make-tramp-file-name vec localname) id-format))))
(defun tramp-gvfs-handle-set-file-uid-gid (filename &optional uid gid)
"Like `tramp-set-file-uid-gid' for Tramp files."
@@ -2134,9 +2132,6 @@ connection if a previous connection has died for some reason."
(process-put p 'vector vec)
(set-process-query-on-exit-flag p nil)
- ;; Mark process for filelock.
- (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
;; Set connection-local variables.
(tramp-set-connection-local-variables vec)))
@@ -2256,13 +2251,7 @@ connection if a previous connection has died for some reason."
COMMAND is a command from the gvfs-* utilities. It is replaced
by the corresponding gio tool call if available. `call-process'
is applied, and it returns t if the return code is zero."
- (let* ((locale (tramp-get-local-locale vec))
- (process-environment
- (append
- `(,(format "LANG=%s" locale)
- ,(format "LANGUAGE=%s" locale)
- ,(format "LC_ALL=%s" locale))
- process-environment)))
+ (let ((locale (tramp-get-local-locale vec)))
(when (tramp-gvfs-gio-tool-p vec)
;; Use gio tool.
(setq args (cons (cdr (assoc command tramp-gvfs-gio-mapping))
@@ -2272,7 +2261,14 @@ is applied, and it returns t if the return code is zero."
(with-current-buffer (tramp-get-connection-buffer vec)
(tramp-gvfs-maybe-open-connection vec)
(erase-buffer)
- (or (zerop (apply #'tramp-call-process vec command nil t nil args))
+ (or (zerop
+ (apply
+ #'tramp-call-process vec "env" nil t nil
+ (append `(,(format "LANG=%s" locale)
+ ,(format "LANGUAGE=%s" locale)
+ ,(format "LC_ALL=%s" locale)
+ ,command)
+ args)))
;; Remove information about mounted connection.
(and (tramp-flush-file-properties vec "/") nil)))))
diff --git a/lisp/net/tramp-rclone.el b/lisp/net/tramp-rclone.el
index 20e983c77d1b..318df2de6158 100644
--- a/lisp/net/tramp-rclone.el
+++ b/lisp/net/tramp-rclone.el
@@ -106,9 +106,9 @@
(file-name-nondirectory . tramp-handle-file-name-nondirectory)
;; `file-name-sans-versions' performed by default handler.
(file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
- (file-notify-add-watch . ignore)
- (file-notify-rm-watch . ignore)
- (file-notify-valid-p . ignore)
+ (file-notify-add-watch . tramp-handle-file-notify-add-watch)
+ (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+ (file-notify-valid-p . tramp-handle-file-notify-valid-p)
(file-ownership-preserved-p . ignore)
(file-readable-p . tramp-fuse-handle-file-readable-p)
(file-regular-p . tramp-handle-file-regular-p)
@@ -362,10 +362,6 @@ connection if a previous connection has died for some reason."
(process-put p 'vector vec)
(set-process-query-on-exit-flag p nil)
- ;; Mark process for filelock.
- (tramp-set-connection-property
- p "lock-pid" (truncate (time-to-seconds)))
-
;; Set connection-local variables.
(tramp-set-connection-local-variables vec)))
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index de4d579740ae..54fb539a564d 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1574,6 +1574,7 @@ ID-FORMAT valid values are `string' and `integer'."
;; Examine `file-attributes' cache to see if request can be
;; satisfied without remote operation.
(or (tramp-check-cached-permissions v ?x)
+ (tramp-check-cached-permissions v ?s)
(tramp-run-test "-x" filename)))))
(defun tramp-sh-handle-file-readable-p (filename)
@@ -2663,7 +2664,9 @@ The method used must be an out-of-band method."
;; Try to insert the amount of free space.
(goto-char (point-min))
;; First find the line to put it on.
- (when (re-search-forward "^\\([[:space:]]*total\\)" nil t)
+ (when (and (re-search-forward "^\\([[:space:]]*total\\)" nil t)
+ ;; Emacs 29.1 or later.
+ (not (fboundp 'dired--insert-disk-space)))
(when-let ((available (get-free-disk-space ".")))
;; Replace "total" with "total used", to avoid confusion.
(replace-match "\\1 used in directory")
@@ -2817,8 +2820,10 @@ implementation will be used."
(string-match-p "sh$" program)
(= (length args) 2)
(string-equal "-c" (car args))
- ;; Don't if there is a string.
- (not (string-match-p "'\\|\"" (cadr args)))))
+ ;; Don't if there is a quoted string.
+ (not (string-match-p "'\\|\"" (cadr args)))
+ ;; Check, that /dev/tty is usable.
+ (tramp-get-remote-dev-tty v)))
;; When PROGRAM is nil, we just provide a tty.
(args (if (not heredoc) args
(let ((i 250))
@@ -3080,10 +3085,10 @@ implementation will be used."
;; Determine input.
(if (null infile)
(setq input (tramp-get-remote-null-device v))
- (setq infile (expand-file-name infile))
+ (setq infile (tramp-compat-file-name-unquote (expand-file-name infile)))
(if (tramp-equal-remote default-directory infile)
;; INFILE is on the same remote host.
- (setq input (tramp-file-local-name infile))
+ (setq input (tramp-unquote-file-local-name infile))
;; INFILE must be copied to remote host.
(setq input (tramp-make-tramp-temp-file v)
tmpinput (tramp-make-tramp-file-name v input 'nohop))
@@ -3114,7 +3119,7 @@ implementation will be used."
(setcar (cdr destination) (expand-file-name (cadr destination)))
(if (tramp-equal-remote default-directory (cadr destination))
;; stderr is on the same remote host.
- (setq stderr (tramp-file-local-name (cadr destination)))
+ (setq stderr (tramp-unquote-file-local-name (cadr destination)))
;; stderr must be copied to remote host. The temporary
;; file must be deleted after execution.
(setq stderr (tramp-make-tramp-temp-file v)
@@ -3135,7 +3140,8 @@ implementation will be used."
(setq ret (tramp-send-command-and-check
v (format
"cd %s && %s"
- (tramp-shell-quote-argument localname) command)
+ (tramp-unquote-shell-quote-argument localname)
+ command)
t t t))
(unless (natnump ret) (setq ret 1))
;; We should add the output anyway.
@@ -3167,8 +3173,7 @@ implementation will be used."
;; Cleanup. We remove all file cache values for the connection,
;; because the remote process could have changed them.
(when tmpinput (delete-file tmpinput))
-
- (unless process-file-side-effects
+ (when process-file-side-effects
(tramp-flush-directory-properties v ""))
;; Return exit status.
@@ -4093,13 +4098,10 @@ file exists and nonzero exit status otherwise."
;; The algorithm is as follows: we try a list of several commands.
;; For each command, we first run `$cmd /' -- this should return
;; true, as the root directory always exists. And then we run
- ;; `$cmd /this\ file\ does\ not\ exist ', hoping that the file indeed
- ;; does not exist. This should return false. We use the first
- ;; command we find that seems to work.
+ ;; `$cmd /\ this\ file\ does\ not\ exist\ ', hoping that the file
+ ;; indeed does not exist. This should return false. We use the
+ ;; first command we find that seems to work.
;; The list of commands to try is as follows:
- ;; `ls -d' This works on most systems, but NetBSD 1.4
- ;; has a bug: `ls' always returns zero exit
- ;; status, even for files which don't exist.
;; `test -e' Some Bourne shells have a `test' builtin
;; which does not know the `-e' option.
;; `/bin/test -e' For those, the `test' binary on disk normally
@@ -4107,6 +4109,10 @@ file exists and nonzero exit status otherwise."
;; is sometimes `/bin/test' and sometimes it's
;; `/usr/bin/test'.
;; `/usr/bin/test -e' In case `/bin/test' does not exist.
+ ;; `ls -d' This works on most systems, but NetBSD 1.4
+ ;; has a bug: `ls' always returns zero exit
+ ;; status, even for files which don't exist.
+
(unless (or
(ignore-errors
(and (setq result (format "%s -e" (tramp-get-test-command vec)))
@@ -4839,6 +4845,7 @@ connection if a previous connection has died for some reason."
;; If Tramp opens the same connection within a short time frame,
;; there is a problem. We shall signal this.
(unless (or (process-live-p p)
+ (and (processp p) (not non-essential))
(not (tramp-file-name-equal-p
vec (car tramp-current-connection)))
(time-less-p
@@ -5815,6 +5822,12 @@ This command is returned only if `delete-by-moving-to-trash' is non-nil."
command))
(delete-file tmpfile)))))
+(defun tramp-get-remote-dev-tty (vec)
+ "Check, whether remote /dev/tty is usable."
+ (with-tramp-connection-property vec "dev-tty"
+ (tramp-send-command-and-check
+ vec "echo %s" command stderr)))
+
(unwind-protect
(apply
#'tramp-call-process
v (tramp-get-method-parameter v 'tramp-login-program)
- infile destination display
+ nil outbuf display
(tramp-expand-args
v 'tramp-login-args
?h (or (tramp-file-name-host v) "")
@@ -256,7 +316,20 @@ arguments to pass to the OPERATION."
?p (or (tramp-file-name-port v) "")
?l command))
- (unless process-file-side-effects
+ ;; Synchronize stderr.
+ (when tmpstderr
+ (tramp-cleanup-connection v 'keep-debug 'keep-password)
+ (tramp-fuse-unmount v))
+
+ ;; Provide error file.
+ (when tmpstderr
+ (rename-file tmpstderr (cadr destination) t))
+
+ ;; Cleanup. We remove all file cache values for the
+ ;; connection, because the remote process could have changed
+ ;; them.
+ (when tmpinput (delete-file tmpinput))
+ (when process-file-side-effects
(tramp-flush-directory-properties v ""))))))
(defun tramp-sshfs-handle-rename-file
@@ -285,6 +358,15 @@ arguments to pass to the OPERATION."
(tramp-compat-set-file-modes
(tramp-fuse-local-file-name filename) mode flag))))
+(defun tramp-sshfs-handle-set-file-times (filename &optional timestamp flag)
+ "Like `set-file-times' for Tramp files."
+ (or (file-exists-p filename) (write-region "" nil filename nil 0))
+ (with-parsed-tramp-file-name filename nil
+ (unless (and (eq flag 'nofollow) (file-symlink-p filename))
+ (tramp-flush-file-properties v localname)
+ (tramp-compat-set-file-times
+ (tramp-fuse-local-file-name filename) timestamp flag))))
+
(defun tramp-sshfs-handle-write-region
(start end filename &optional append visit lockname mustbenew)
"Like `write-region' for Tramp files."
@@ -313,6 +395,13 @@ arguments to pass to the OPERATION."
start end (tramp-fuse-local-file-name filename) append 'nomessage)
(tramp-flush-file-properties v localname))
+ ;; Set file modification time.
+ (when (or (eq visit t) (stringp visit))
+ (set-visited-file-modtime
+ (or (tramp-compat-file-attribute-modification-time
+ (file-attributes filename))
+ (current-time))))
+
;; Unlock file.
(when file-locked
;; `unlock-file' exists since Emacs 28.1.
@@ -345,9 +434,6 @@ connection if a previous connection has died for some reason."
(process-put p 'vector vec)
(set-process-query-on-exit-flag p nil)
- ;; Mark process for filelock.
- (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
;; Set connection-local variables.
(tramp-set-connection-local-variables vec)))
@@ -386,6 +472,24 @@ connection if a previous connection has died for some reason."
(with-tramp-connection-property
vec "gid-string" (tramp-get-local-gid 'string)))
+;; `shell-mode' tries to open remote files like "/sshfs:user@host:~/.history".
+;; This fails, because the tilde cannot be expanded. Tell
+;; `tramp-handle-expand-file-name' to tolerate this.
+(defun tramp-sshfs-tolerate-tilde (orig-fun)
+ "Advice for `shell-mode' to tolerate tilde in remote file names."
+ (let ((tramp-tolerate-tilde
+ (or tramp-tolerate-tilde
+ (equal (file-remote-p default-directory 'method)
+ tramp-sshfs-method))))
+ (funcall orig-fun)))
+
+(add-function
+ :around (symbol-function #'shell-mode) #'tramp-sshfs-tolerate-tilde)
+(add-hook 'tramp-sshfs-unload-hook
+ (lambda ()
+ (remove-function
+ (symbol-function #'shell-mode) #'tramp-sshfs-tolerate-tilde)))
+
(add-hook 'tramp-unload-hook
(lambda ()
(unload-feature 'tramp-sshfs 'force)))
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index c4222b28a20e..06100fbde0df 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -99,9 +99,9 @@ See `tramp-actions-before-shell' for more info.")
(file-name-nondirectory . tramp-handle-file-name-nondirectory)
;; `file-name-sans-versions' performed by default handler.
(file-newer-than-file-p . tramp-handle-file-newer-than-file-p)
- (file-notify-add-watch . ignore)
- (file-notify-rm-watch . ignore)
- (file-notify-valid-p . ignore)
+ (file-notify-add-watch . tramp-handle-file-notify-add-watch)
+ (file-notify-rm-watch . tramp-handle-file-notify-rm-watch)
+ (file-notify-valid-p . tramp-handle-file-notify-valid-p)
(file-ownership-preserved-p . ignore)
(file-readable-p . tramp-sudoedit-handle-file-readable-p)
(file-regular-p . tramp-handle-file-regular-p)
@@ -336,7 +336,7 @@ absolute file names."
(if (and delete-by-moving-to-trash trash)
(move-file-to-trash filename)
(unless (tramp-sudoedit-send-command
- v "rm" (tramp-compat-file-name-unquote localname))
+ v "rm" "-f" (tramp-compat-file-name-unquote localname))
;; Propagate the error.
(with-current-buffer (tramp-get-connection-buffer v)
(goto-char (point-min))
@@ -789,9 +789,6 @@ connection if a previous connection has died for some reason."
(process-put p 'vector vec)
(set-process-query-on-exit-flag p nil)
- ;; Mark process for filelock.
- (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
;; Set connection-local variables.
(tramp-set-connection-local-variables vec)
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 1f41a9267633..9c04abc82890 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -7,7 +7,7 @@
;; Maintainer: Michael Albinus
;; Keywords: comm, processes
;; Package: tramp
-;; Version: 2.5.2.28.1
+;; Version: 2.5.3-pre
;; Package-Requires: ((emacs "25.1"))
;; Package-Type: multi
;; URL: https://www.gnu.org/software/tramp/
@@ -40,7 +40,7 @@
;; ./configure" to change them.
;;;###tramp-autoload
-(defconst tramp-version "2.5.2.28.1"
+(defconst tramp-version "2.5.3-pre"
"This version of Tramp.")
;;;###tramp-autoload
@@ -76,7 +76,7 @@
;; Check for Emacs version.
(let ((x (if (not (string-lessp emacs-version "25.1"))
"ok"
- (format "Tramp 2.5.2.28.1 is not fit for %s"
+ (format "Tramp 2.5.3-pre is not fit for %s"
(replace-regexp-in-string "\n" "" (emacs-version))))))
(unless (string-equal "ok" x) (error "%s" x)))
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 8e11e509b597..8b999a6e3465 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -160,13 +160,6 @@ being the result.")
;; Return result.
(cdr tramp--test-enabled-checked))
-(defsubst tramp--test-expensive-test ()
- "Whether expensive tests are run."
- (ert-select-tests
- (ert--stats-selector ert--current-run-stats)
- (list (make-ert-test :name (ert-test-name (ert-running-test))
- :body nil :tags '(:expensive-test)))))
-
(defun tramp--test-make-temp-name (&optional local quoted)
"Return a temporary file name for test.
If LOCAL is non-nil, a local file name is returned.
@@ -2298,7 +2291,7 @@ This checks also `file-name-as-directory', `file-name-directory',
"Check `file-exist-p', `write-region' and `delete-file'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(should-not (file-exists-p tmp-name))
(write-region "foo" nil tmp-name)
@@ -2306,8 +2299,10 @@ This checks also `file-name-as-directory', `file-name-directory',
(delete-file tmp-name)
(should-not (file-exists-p tmp-name))
- ;; Trashing files doesn't work on MS Windows, and for crypted remote files.
- (unless (or (tramp--test-windows-nt-p) (tramp--test-crypt-p))
+ ;; Trashing files doesn't work when `system-move-file-to-trash'
+ ;; is defined (on MS Windows and macOS), and for crypted remote
+ ;; files.
+ (unless (or (fboundp 'system-move-file-to-trash) (tramp--test-crypt-p))
(let ((trash-directory (tramp--test-make-temp-name 'local quoted))
(delete-by-moving-to-trash t))
(make-directory trash-directory)
@@ -2331,7 +2326,7 @@ This checks also `file-name-as-directory', `file-name-directory',
"Check `file-local-copy'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
tmp-name2)
(unwind-protect
@@ -2363,7 +2358,7 @@ This checks also `file-name-as-directory', `file-name-directory',
"Check `insert-file-contents'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(with-temp-buffer
@@ -2400,7 +2395,7 @@ This checks also `file-name-as-directory', `file-name-directory',
"Check `write-region'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted))
(inhibit-message t))
(unwind-protect
@@ -2541,8 +2536,9 @@ This checks also `file-name-as-directory', `file-name-directory',
(skip-unless (tramp--test-enabled))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
- (dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
- '(nil t) '(nil)))
+ (dolist (quoted
+ (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+ '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -2569,7 +2565,7 @@ This checks also `file-name-as-directory', `file-name-directory',
(with-temp-buffer
(insert-file-contents target)
(should (string-equal (buffer-string) "foo")))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(copy-file source target)
:type 'file-already-exists))
@@ -2588,7 +2584,8 @@ This checks also `file-name-as-directory', `file-name-directory',
(make-directory target)
(should (file-directory-p target))
;; This has been changed in Emacs 26.1.
- (when (and (tramp--test-expensive-test) (tramp--test-emacs26-p))
+ (when (and (tramp--test-expensive-test-p)
+ (tramp--test-emacs26-p))
(should-error
(copy-file source target)
:type 'file-already-exists)
@@ -2653,8 +2650,9 @@ This checks also `file-name-as-directory', `file-name-directory',
(skip-unless (tramp--test-enabled))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
- (dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
- '(nil t) '(nil)))
+ (dolist (quoted
+ (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+ '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -2684,7 +2682,7 @@ This checks also `file-name-as-directory', `file-name-directory',
(should (string-equal (buffer-string) "foo")))
(write-region "foo" nil source)
(should (file-exists-p source))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(rename-file source target)
:type 'file-already-exists))
@@ -2703,7 +2701,8 @@ This checks also `file-name-as-directory', `file-name-directory',
(make-directory target)
(should (file-directory-p target))
;; This has been changed in Emacs 26.1.
- (when (and (tramp--test-expensive-test) (tramp--test-emacs26-p))
+ (when (and (tramp--test-expensive-test-p)
+ (tramp--test-emacs26-p))
(should-error
(rename-file source target)
:type 'file-already-exists)
@@ -2771,7 +2770,7 @@ This checks also `file-name-as-directory', `file-name-directory',
This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo/bar" tmp-name1))
(unusual-file-mode-1 #o740)
@@ -2809,7 +2808,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
"Check `delete-directory'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1)))
;; Delete empty directory.
@@ -2833,9 +2832,12 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
(should-not (file-directory-p tmp-name1))
;; Trashing directories works only since Emacs 27.1. It doesn't
- ;; work on MS Windows, for crypted remote directories and for ange-ftp.
- (when (and (not (tramp--test-windows-nt-p)) (not (tramp--test-crypt-p))
- (not (tramp--test-ftp-p)) (tramp--test-emacs27-p))
+ ;; work when `system-move-file-to-trash' is defined (on MS
+ ;; Windows and macOS), for crypted remote directories and for
+ ;; ange-ftp.
+ (when (and (not (fboundp 'system-move-file-to-trash))
+ (not (tramp--test-crypt-p)) (not (tramp--test-ftp-p))
+ (tramp--test-emacs27-p))
(let ((trash-directory (tramp--test-make-temp-name 'local quoted))
(delete-by-moving-to-trash t))
(make-directory trash-directory)
@@ -2883,7 +2885,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
(skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (expand-file-name
@@ -2994,7 +2996,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
"Check `directory-files'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "bla" tmp-name1))
(tmp-name3 (expand-file-name "foo" tmp-name1)))
@@ -3038,7 +3040,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
"Check `file-expand-wildcards'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1))
(tmp-name3 (expand-file-name "bar" tmp-name1))
@@ -3108,7 +3110,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
;; Emacs 27.1.
(skip-unless (or (not (tramp--test-crypt-p)) (tramp--test-emacs27-p)))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1
(expand-file-name (tramp--test-make-temp-name nil quoted)))
(tmp-name2 (expand-file-name "foo" tmp-name1))
@@ -3193,7 +3195,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
;; Since Emacs 26.1.
(skip-unless (fboundp 'insert-directory-wildcard-in-dir-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1
(expand-file-name (tramp--test-make-temp-name nil quoted)))
(tmp-name2
@@ -3297,7 +3299,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
;; Relative file names in dired are not supported in tramp-crypt.el.
(skip-unless (not (tramp--test-crypt-p)))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name1
(expand-file-name (tramp--test-make-temp-name nil quoted)))
(tmp-name2 (expand-file-name "foo" tmp-name1))
@@ -3351,7 +3353,7 @@ This tests also `access-file', `file-readable-p',
`file-regular-p' and `file-ownership-preserved-p'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
@@ -3474,8 +3476,10 @@ This tests also `access-file', `file-readable-p',
(should
(string-equal
(tramp-compat-file-attribute-type attr)
- (tramp-file-name-localname
- (tramp-dissect-file-name tmp-name3))))
+ (funcall
+ (if (tramp--test-sshfs-p) #'file-name-nondirectory #'identity)
+ (tramp-file-name-localname
+ (tramp-dissect-file-name tmp-name3)))))
(delete-file tmp-name2))
(when test-file-ownership-preserved-p
@@ -3570,7 +3574,7 @@ They might differ only in time attributes or directory size."
"Check `directory-files-and-attributes'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
;; `directory-files-and-attributes' contains also values for
;; "../". Ensure that this doesn't change during tests, for
;; example due to handling temporary files.
@@ -3628,7 +3632,7 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-set-file-modes-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted)))
@@ -3644,8 +3648,9 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
(should (= (file-modes tmp-name1) #o444))
(should-not (file-executable-p tmp-name1))
;; A file is always writable for user "root".
- (unless (zerop (tramp-compat-file-attribute-user-id
- (file-attributes tmp-name1)))
+ (unless (or (zerop (tramp-compat-file-attribute-user-id
+ (file-attributes tmp-name1)))
+ (tramp--test-sshfs-p))
(should-not (file-writable-p tmp-name1)))
;; Check the NOFOLLOW arg. It exists since Emacs 28. For
;; regular files, there shouldn't be a difference.
@@ -3723,7 +3728,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
@@ -3748,11 +3753,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(if quoted #'tramp-compat-file-name-unquote #'identity)
(file-remote-p tmp-name1 'localname))
(file-symlink-p tmp-name2)))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(make-symbolic-link tmp-name1 tmp-name2)
:type 'file-already-exists))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
;; A number means interactive case.
(cl-letf (((symbol-function #'yes-or-no-p) #'ignore))
(should-error
@@ -3792,7 +3797,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(string-equal tmp-name1 (file-symlink-p tmp-name3))))
;; Check directory as newname.
(make-directory tmp-name4)
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(make-symbolic-link tmp-name1 tmp-name4)
:type 'file-already-exists))
@@ -3820,7 +3825,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Check `add-name-to-file'.
(unwind-protect
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(tramp--test-ignore-add-name-to-file-error
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
@@ -3935,11 +3940,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(string-equal
(file-truename tmp-name2)
(file-truename tmp-name3)))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(with-temp-buffer (insert-file-contents tmp-name2))
:type tramp-file-missing))
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(should-error
(with-temp-buffer (insert-file-contents tmp-name3))
:type tramp-file-missing))
@@ -3957,7 +3962,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Detect cyclic symbolic links.
(unwind-protect
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(tramp--test-ignore-make-symbolic-link-error
(make-symbolic-link tmp-name2 tmp-name1)
(should (file-symlink-p tmp-name1))
@@ -3995,7 +4000,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(or (tramp--test-adb-p) (tramp--test-gvfs-p)
(tramp--test-sh-p) (tramp--test-sudoedit-p)))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name nil quoted)))
@@ -4045,7 +4050,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
"Check `set-visited-file-modtime' and `verify-visited-file-modtime'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
@@ -4078,8 +4083,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (not (tramp--test-crypt-p)))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
- (dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
- '(nil t) '(nil)))
+ (dolist (quoted
+ (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+ '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -4157,8 +4163,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (not (tramp--test-crypt-p)))
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
- (dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
- '(nil t) '(nil)))
+ (dolist (quoted
+ (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+ '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -4305,7 +4312,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(unwind-protect
(dolist
(syntax
- (if (tramp--test-expensive-test)
+ (if (tramp--test-expensive-test-p)
(tramp-syntax-values) `(,orig-syntax)))
(tramp-change-syntax syntax)
;; This has cleaned up all connection data, which are used
@@ -4347,7 +4354,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(tramp-change-syntax orig-syntax))))
(dolist (non-essential '(nil t))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
@@ -4414,7 +4421,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
"Check `load'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
@@ -4443,10 +4450,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-processes-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let* ((tmp-name (tramp--test-make-temp-name nil quoted))
(fnnd (file-name-nondirectory tmp-name))
(default-directory tramp-test-temporary-file-directory)
+ (buffer (get-buffer-create "*tramp-tests*"))
kill-buffer-query-functions)
(unwind-protect
(progn
@@ -4479,32 +4487,87 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(tramp--test-shell-file-name)
nil nil nil "-c" "kill -2 $$")))))
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (should (zerop (process-file "ls" nil t nil fnnd)))
- ;; "ls" could produce colorized output.
- (goto-char (point-min))
- (while
- (re-search-forward tramp-display-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- (should (string-equal (format "%s\n" fnnd) (buffer-string)))
- (should-not (get-buffer-window (current-buffer) t))
+ ;; Check DESTINATION.
+ (dolist (destination `(nil t ,buffer))
+ (when (bufferp destination)
+ (with-current-buffer destination
+ (delete-region (point-min) (point-max))))
+ (with-temp-buffer
+ (write-region "foo" nil tmp-name)
+ (should (file-exists-p tmp-name))
+ (should (zerop (process-file "ls" nil destination nil fnnd)))
+ (with-current-buffer
+ (if (bufferp destination) destination (current-buffer))
+ ;; "ls" could produce colorized output.
+ (goto-char (point-min))
+ (while (re-search-forward
+ tramp-display-escape-sequence-regexp nil t)
+ (replace-match "" nil nil))
+ (should
+ (string-equal (if destination (format "%s\n" fnnd) "")
+ (buffer-string)))
+ (should-not (get-buffer-window (current-buffer) t))
+ (goto-char (point-max)))
+
+ ;; Second run. The output must be appended.
+ (should (zerop (process-file "ls" nil destination t fnnd)))
+ (with-current-buffer
+ (if (bufferp destination) destination (current-buffer))
+ ;; "ls" could produce colorized output.
+ (goto-char (point-min))
+ (while (re-search-forward
+ tramp-display-escape-sequence-regexp nil t)
+ (replace-match "" nil nil))
+ (should
+ (string-equal
+ (if destination (format "%s\n%s\n" fnnd fnnd) "")
+ (buffer-string))))
- ;; Second run. The output must be appended.
- (goto-char (point-max))
- (should (zerop (process-file "ls" nil t t fnnd)))
- ;; "ls" could produce colorized output.
- (goto-char (point-min))
- (while
- (re-search-forward tramp-display-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- (should
- (string-equal (format "%s\n%s\n" fnnd fnnd) (buffer-string)))
- ;; A non-nil DISPLAY must not raise the buffer.
- (should-not (get-buffer-window (current-buffer) t))))
+ (unless (eq destination t)
+ (should (string-empty-p (buffer-string))))
+ ;; A non-nil DISPLAY must not raise the buffer.
+ (should-not (get-buffer-window (current-buffer) t))
+ (delete-file tmp-name)))
+
+ ;; Check remote and local INFILE.
+ (dolist (local '(nil t))
+ (with-temp-buffer
+ (setq tmp-name (tramp--test-make-temp-name local quoted))
+ (write-region "foo" nil tmp-name)
+ (should (file-exists-p tmp-name))
+ (should (zerop (process-file "cat" tmp-name t)))
+ (should (string-equal "foo" (buffer-string)))
+ (should-not (get-buffer-window (current-buffer) t))
+ (delete-file tmp-name)))
+
+ ;; Check remote and local DESTNATION file. This isn't
+ ;; implemented yet ina all file name handler backends.
+ ;; (dolist (local '(nil t))
+ ;; (setq tmp-name (tramp--test-make-temp-name local quoted))
+ ;; (should
+ ;; (zerop (process-file "echo" nil `(:file ,tmp-name) nil "foo")))
+ ;; (with-temp-buffer
+ ;; (insert-file-contents tmp-name)
+ ;; (should (string-equal "foo" (buffer-string)))
+ ;; (should-not (get-buffer-window (current-buffer) t))
+ ;; (delete-file tmp-name)))
+
+ ;; Check remote and local STDERR.
+ (dolist (local '(nil t))
+ (setq tmp-name (tramp--test-make-temp-name local quoted))
+ (should-not
+ (zerop
+ (process-file "cat" nil `(t ,tmp-name) nil "/does-not-exist")))
+ (with-temp-buffer
+ (insert-file-contents tmp-name)
+ (should
+ (string-match-p
+ "cat:.* No such file or directory" (buffer-string)))
+ (should-not (get-buffer-window (current-buffer) t))
+ (delete-file tmp-name))))
;; Cleanup.
+ (ignore-errors (kill-buffer buffer))
(ignore-errors (delete-file tmp-name))))))
;; Must be a command, because used as `sigusr1' handler.
@@ -4519,11 +4582,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(ert-deftest tramp-test29-start-file-process ()
"Check `start-file-process'."
- :tags '(:expensive-test)
+ :tags '(:expensive-test :tramp-asynchronous-processes)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-processes-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((default-directory tramp-test-temporary-file-directory)
(tmp-name (tramp--test-make-temp-name nil quoted))
kill-buffer-query-functions proc)
@@ -4586,8 +4649,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Cleanup.
(ignore-errors (delete-process proc)))
- ;; "telnet" and "sshfs" do not cooperate with disabled filter.
- (unless (or (tramp--test-telnet-p) (tramp--test-sshfs-p))
+ ;; Disabled process filter. "sshfs" does not cooperate.
+ (unless (tramp--test-sshfs-p)
(unwind-protect
(with-temp-buffer
(setq proc (start-file-process "test3" (current-buffer) "cat"))
@@ -4596,8 +4659,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(set-process-filter proc t)
(process-send-string proc "foo\n")
(process-send-eof proc)
- ;; Read output.
- (with-timeout (10 (tramp--test-timeout-handler))
+ ;; Read output. There shouldn't be any.
+ (with-timeout (10)
(while (process-live-p proc)
(while (accept-process-output proc 0 nil t))))
;; No output due to process filter.
@@ -4675,7 +4738,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
(ignore-errors (make-process :file-handler t)))
`(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) ()
,docstring
- :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test))
+ :tags (append '(:expensive-test :tramp-asynchronous-processes)
+ (and ,unstable '(:unstable)))
(skip-unless (tramp--test-enabled))
(let ((default-directory tramp-test-temporary-file-directory)
(ert-test (ert-get-test ',test))
@@ -4698,13 +4762,15 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
(ert-deftest tramp-test30-make-process ()
"Check `make-process'."
- :tags '(:expensive-test)
+ :tags (append '(:expensive-test :tramp-asynchronous-processes)
+ (and (getenv "EMACS_EMBA_CI")
+ '(:unstable)))
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-processes-p))
;; `make-process' supports file name handlers since Emacs 27.
(skip-unless (tramp--test-emacs27-p))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((default-directory tramp-test-temporary-file-directory)
(tmp-name (tramp--test-make-temp-name nil quoted))
kill-buffer-query-functions proc)
@@ -4778,8 +4844,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
;; Cleanup.
(ignore-errors (delete-process proc)))
- ;; "telnet" and "sshfs" do not cooperate with disabled filter.
- (unless (or (tramp--test-telnet-p) (tramp--test-sshfs-p))
+ ;; Disabled process filter. "sshfs" does not cooperate.
+ (unless (tramp--test-sshfs-p)
(unwind-protect
(with-temp-buffer
(setq proc
@@ -4792,8 +4858,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
(should (equal (process-status proc) 'run))
(process-send-string proc "foo\n")
(process-send-eof proc)
- ;; Read output.
- (with-timeout (10 (tramp--test-timeout-handler))
+ ;; Read output. There shouldn't be any.
+ (with-timeout (10)
(while (process-live-p proc)
(while (accept-process-output proc 0 nil t))))
;; No output due to process filter.
@@ -4941,8 +5007,9 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
(ert-deftest tramp-test31-interrupt-process ()
"Check `interrupt-process'."
- :tags (if (or (getenv "EMACS_HYDRA_CI") (getenv "EMACS_EMBA_CI"))
- '(:expensive-test :unstable) '(:expensive-test))
+ :tags (append '(:expensive-test :tramp-asynchronous-processes)
+ (and (or (getenv "EMACS_HYDRA_CI") (getenv "EMACS_EMBA_CI"))
+ '(:unstable)))
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-crypt-p)))
@@ -5009,7 +5076,7 @@ INPUT, if non-nil, is a string sent to the process."
(when (tramp--test-adb-p)
(skip-unless (tramp--test-emacs27-p)))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name (tramp--test-make-temp-name nil quoted))
(default-directory tramp-test-temporary-file-directory)
;; Suppress nasty messages.
@@ -5017,10 +5084,12 @@ INPUT, if non-nil, is a string sent to the process."
kill-buffer-query-functions)
(dolist (this-shell-command
- '(;; Synchronously.
- shell-command
- ;; Asynchronously.
- tramp--test-async-shell-command))
+ (append
+ ;; Synchronously.
+ '(shell-command)
+ ;; Asynchronously.
+ (and (tramp--test-asynchronous-processes-p)
+ '(tramp--test-async-shell-command))))
;; Test ordinary `{async-}shell-command'.
(unwind-protect
@@ -5061,31 +5130,34 @@ INPUT, if non-nil, is a string sent to the process."
(ignore-errors (kill-buffer stderr))))))
;; Test sending string to `async-shell-command'.
- (unwind-protect
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (tramp--test-async-shell-command
- "read line; ls $line" (current-buffer) nil
- ;; String to be sent.
- (format "%s\n" (file-name-nondirectory tmp-name)))
- (should
- (string-equal
- ;; tramp-adb.el echoes, so we must add the string.
- (if (and (tramp--test-adb-p) (not (tramp-direct-async-process-p)))
- (format
- "%s\n%s\n"
- (file-name-nondirectory tmp-name)
- (file-name-nondirectory tmp-name))
- (format "%s\n" (file-name-nondirectory tmp-name)))
- (buffer-string))))
+ (when (tramp--test-asynchronous-processes-p)
+ (unwind-protect
+ (with-temp-buffer
+ (write-region "foo" nil tmp-name)
+ (should (file-exists-p tmp-name))
+ (tramp--test-async-shell-command
+ "read line; ls $line" (current-buffer) nil
+ ;; String to be sent.
+ (format "%s\n" (file-name-nondirectory tmp-name)))
+ (should
+ (string-equal
+ ;; tramp-adb.el echoes, so we must add the string.
+ (if (and (tramp--test-adb-p)
+ (not (tramp-direct-async-process-p)))
+ (format
+ "%s\n%s\n"
+ (file-name-nondirectory tmp-name)
+ (file-name-nondirectory tmp-name))
+ (format "%s\n" (file-name-nondirectory tmp-name)))
+ (buffer-string))))
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
+ ;; Cleanup.
+ (ignore-errors (delete-file tmp-name))))))
;; Test `async-shell-command-width'. It exists since Emacs 26.1,
;; but seems to work since Emacs 27.1 only.
- (when (and (tramp--test-sh-p) (tramp--test-emacs27-p))
+ (when (and (tramp--test-asynchronous-processes-p)
+ (tramp--test-sh-p) (tramp--test-emacs27-p))
(let* ((async-shell-command-width 1024)
(default-directory tramp-test-temporary-file-directory)
(cols (ignore-errors
@@ -5232,10 +5304,12 @@ INPUT, if non-nil, is a string sent to the process."
(skip-unless (not (tramp--test-crypt-p)))
(dolist (this-shell-command-to-string
- '(;; Synchronously.
- shell-command-to-string
- ;; Asynchronously.
- tramp--test-shell-command-to-string-asynchronously))
+ (append
+ ;; Synchronously.
+ '(shell-command-to-string)
+ ;; Asynchronously.
+ (and (tramp--test-asynchronous-processes-p)
+ '(tramp--test-shell-command-to-string-asynchronously))))
(let ((default-directory tramp-test-temporary-file-directory)
(shell-file-name "/bin/sh")
@@ -5424,7 +5498,7 @@ Use direct async.")
;; The functions were introduced in Emacs 26.1.
(ert-deftest tramp-test34-explicit-shell-file-name ()
"Check that connection-local `explicit-shell-file-name' is set."
- :tags '(:expensive-test)
+ :tags '(:expensive-test :tramp-asynchronous-processes)
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-processes-p))
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
@@ -5598,7 +5672,7 @@ Use direct async.")
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-crypt-p)))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
;; We must use `file-truename' for the temporary directory, in
;; order to establish the connection prior running an asynchronous
;; process.
@@ -5668,7 +5742,7 @@ Use direct async.")
"Check `make-auto-save-file-name'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
tramp-allow-unsafe-temporary-files)
@@ -5791,7 +5865,7 @@ Use direct async.")
"Check `find-backup-file-name'."
(skip-unless (tramp--test-enabled))
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(ange-ftp-make-backup-files t)
@@ -5943,7 +6017,7 @@ Use direct async.")
;; `lock-file', `unlock-file', `file-locked-p' and
;; `make-lock-file-name' exists since Emacs 28.1. We don't want to
;; see compiler warnings for older Emacsen.
- (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
(let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name nil quoted))
(remote-file-name-inhibit-cache t)
@@ -6064,6 +6138,79 @@ Use direct async.")
(ignore-errors (delete-file tmp-name1))
(tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password)))))
+;; The functions were introduced in Emacs 28.1.
+(ert-deftest tramp-test39-detect-external-change ()
+ "Check that an external file modification is reported."
+ (skip-unless (tramp--test-enabled))
+ (skip-unless (not (tramp--test-ange-ftp-p)))
+ ;; Since Emacs 28.1.
+ (skip-unless (and (fboundp 'lock-file) (fboundp 'file-locked-p)))
+
+ (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
+ (dolist (create-lockfiles '(nil t))
+ (let ((tmp-name (tramp--test-make-temp-name nil quoted))
+ (remote-file-name-inhibit-cache t)
+ (remote-file-name-inhibit-locks nil)
+ tramp-allow-unsafe-temporary-files
+ (inhibit-message t)
+ ;; tramp-rclone.el and tramp-sshfs.el cache the mounted files.
+ (tramp-fuse-unmount-on-cleanup t)
+ auto-save-default
+ (backup-inhibited t)
+ noninteractive)
+ (with-temp-buffer
+ (unwind-protect
+ (progn
+ (setq buffer-file-name tmp-name
+ buffer-file-truename tmp-name)
+ (insert "foo")
+ ;; Bug#53207: with `create-lockfiles' nil, saving the
+ ;; buffer results in a prompt.
+ (cl-letf (((symbol-function 'yes-or-no-p)
+ (lambda (_) (ert-fail "Test failed unexpectedly"))))
+ (save-buffer))
+ (should-not (file-locked-p tmp-name))
+
+ ;; Macro `ert-with-message-capture' was introduced in Emacs 26.1.
+ (with-no-warnings (when (symbol-plist 'ert-with-message-capture)
+ ;; For local files, just changing the file
+ ;; modification on disk doesn't hurt, because file
+ ;; contents in buffer and on disk are equal. For
+ ;; remote files, file contents is not compared. We
+ ;; mock an older modification time in buffer,
+ ;; because Tramp regards modification times equal if
+ ;; they differ for less than 2 seconds.
+ (set-visited-file-modtime (time-add (current-time) -60))
+ ;; Some Tramp methods cannot check the file
+ ;; modification time properly, for them it doesn't
+ ;; make sense to test.
+ (when (not (verify-visited-file-modtime))
+ (cl-letf (((symbol-function 'read-char-choice)
+ (lambda (prompt &rest _) (message "%s" prompt) ?y)))
+ (ert-with-message-capture captured-messages
+ (insert "bar")
+ (when create-lockfiles
+ (should (string-match-p
+ (format
+ "^%s changed on disk; really edit the buffer\\?"
+ (if (tramp--test-crypt-p)
+ ".+" (file-name-nondirectory tmp-name)))
+ captured-messages))
+ (should (file-locked-p tmp-name)))))
+
+ ;; `save-buffer' removes the file lock.
+ (cl-letf (((symbol-function 'yes-or-no-p) #'tramp--test-always)
+ ((symbol-function 'read-char-choice)
+ (lambda (&rest _) ?y)))
+ (save-buffer))
+ (should-not (file-locked-p tmp-name))))))
+
+ ;; Cleanup.
+ (set-buffer-modified-p nil)
+ (ignore-errors (delete-file tmp-name))
+ (tramp-cleanup-connection
+ tramp-test-vec 'keep-debug 'keep-password)))))))
+
;; The functions were introduced in Emacs 26.1.
(ert-deftest tramp-test40-make-nearby-temp-file ()
"Check `make-nearby-temp-file' and `temporary-file-directory'."
@@ -6131,6 +6278,19 @@ This requires restrictions of file name syntax."
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
'tramp-ftp-file-name-handler))
+(defun tramp--test-asynchronous-processes-p ()
+ "Whether asynchronous processes tests are run.
+This is used in tests which we dont't want to tag
+`:tramp-asynchronous-processes' completely."
+ (and
+ (ert-select-tests
+ (ert--stats-selector ert--current-run-stats)
+ (list (make-ert-test :name (ert-test-name (ert-running-test))
+ :body nil :tags '(:tramp-asynchronous-processes))))
+ ;; tramp-adb.el cannot apply multi-byte commands.
+ (not (and (tramp--test-adb-p)
+ (string-match-p "[[:multibyte:]]" default-directory)))))
+
(defun tramp--test-crypt-p ()
"Check, whether the remote directory is crypted."
(tramp-crypt-file-name-p tramp-test-temporary-file-directory))
@@ -6141,6 +6301,15 @@ This does not support some special file names."
(string-equal
"docker" (file-remote-p tramp-test-temporary-file-directory 'method)))
+(defun tramp--test-expensive-test-p ()
+ "Whether expensive tests are run.
+This is used in tests which we dont't want to tag `:expensive'
+completely."
+ (ert-select-tests
+ (ert--stats-selector ert--current-run-stats)
+ (list (make-ert-test :name (ert-test-name (ert-running-test))
+ :body nil :tags '(:expensive-test)))))
+
(defun tramp--test-ftp-p ()
"Check, whether an FTP-like method is used.
This does not support globbing characters in file names (yet)."
@@ -6169,7 +6338,7 @@ If optional METHOD is given, it is checked first."
Several special characters do not work properly there."
;; We must refill the cache. `file-truename' does it.
(file-truename tramp-test-temporary-file-directory)
- (tramp-check-remote-uname tramp-test-vec "^HP-UX"))
+ (ignore-errors (tramp-check-remote-uname tramp-test-vec "^HP-UX")))
(defun tramp--test-ksh-p ()
"Check, whether the remote shell is ksh.
@@ -6184,7 +6353,7 @@ a $'' syntax."
"Check, whether the remote host runs macOS."
;; We must refill the cache. `file-truename' does it.
(file-truename tramp-test-temporary-file-directory)
- (tramp-check-remote-uname tramp-test-vec "Darwin"))
+ (ignore-errors (tramp-check-remote-uname tramp-test-vec "Darwin")))
(defun tramp--test-mock-p ()
"Check, whether the mock method is used.
@@ -6284,8 +6453,9 @@ This requires restrictions of file name syntax."
(defun tramp--test-check-files (&rest files)
"Run a simple but comprehensive test over every file in FILES."
;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
- (dolist (quoted (if (and (tramp--test-expensive-test) (tramp--test-emacs27-p))
- '(nil t) '(nil)))
+ (dolist (quoted
+ (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+ '(nil t) '(nil)))
;; We must use `file-truename' for the temporary directory,
;; because it could be located on a symlinked directory. This
;; would let the test fail.
@@ -6437,6 +6607,31 @@ This requires restrictions of file name syntax."
(delete-file file3)
(should-not (file-exists-p file3))))
+ ;; Check, that a process runs on a remote
+ ;; `default-directory' with special characters. See
+ ;; Bug#53846.
+ (when (and (tramp--test-expensive-test-p)
+ (tramp--test-supports-processes-p)
+ ;; Prior Emacs 27, `shell-file-name' was
+ ;; hard coded as "/bin/sh" for remote
+ ;; processes in Emacs. That doesn't work
+ ;; for tramp-adb.el. tramp-sshfs.el times
+ ;; out for older Emacsen, reason unknown.
+ (or (and (not (tramp--test-adb-p))
+ (not (tramp--test-sshfs-p)))
+ (tramp--test-emacs27-p)))
+ (let ((default-directory file1))
+ (dolist (this-shell-command
+ (append
+ ;; Synchronously.
+ '(shell-command)
+ ;; Asynchronously.
+ (and (tramp--test-asynchronous-processes-p)
+ '(tramp--test-async-shell-command))))
+ (with-temp-buffer
+ (funcall this-shell-command "cat -- *" (current-buffer))
+ (should (string-equal elt (buffer-string)))))))
+
(delete-file file2)
(should-not (file-exists-p file2))
(delete-directory file1)
@@ -6445,7 +6640,7 @@ This requires restrictions of file name syntax."
;; Check, that environment variables are set correctly.
;; We do not run on macOS due to encoding problems. See
;; Bug#36940.
- (when (and (tramp--test-expensive-test) (tramp--test-sh-p)
+ (when (and (tramp--test-expensive-test-p) (tramp--test-sh-p)
(not (tramp--test-crypt-p))
(not (eq system-type 'darwin)))
(dolist (elt files)
@@ -6506,7 +6701,7 @@ This requires restrictions of file name syntax."
(unless (or (tramp--test-ftp-p)
(tramp--test-gvfs-p)
(tramp--test-windows-nt-or-smb-p))
- "*foo*bar*baz*")
+ "*foo+bar*baz+")
(if (or (tramp--test-gvfs-p) (tramp--test-windows-nt-or-smb-p))
"'foo'bar'baz'"
"'foo\"bar'baz\"")
@@ -6527,7 +6722,7 @@ This requires restrictions of file name syntax."
"{foo}bar{baz}")))
;; Simplify test in order to speed up.
(apply #'tramp--test-check-files
- (if (tramp--test-expensive-test)
+ (if (tramp--test-expensive-test-p)
files (list (mapconcat #'identity files ""))))))
;; These tests are inspired by Bug#17238.
@@ -6626,7 +6821,7 @@ Use the \"ls\" command."
;; to U+1FFFF).
"🌈🍒👋")
- (when (tramp--test-expensive-test)
+ (when (tramp--test-expensive-test-p)
(delete-dups
(mapcar
;; Use all available language specific snippets.
@@ -6798,8 +6993,10 @@ This is needed in timer functions as well as process filters and sentinels."
"Check parallel asynchronous requests.
Such requests could arrive from timers, process filters and
process sentinels. They shall not disturb each other."
- :tags (if (getenv "EMACS_EMBA_CI")
- '(:expensive-test :unstable) '(:expensive-test))
+ :tags (append '(:expensive-test :tramp-asynchronous-processes)
+ (and (or (getenv "EMACS_HYDRA_CI")
+ (getenv "EMACS_EMBA_CI"))
+ '(:unstable)))
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-supports-processes-p))
;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
@@ -7113,7 +7310,6 @@ process sentinels. They shall not disturb each other."
"Check that Tramp and its subpackages unload completely.
Since it unloads Tramp, it shall be the last test to run."
:tags '(:expensive-test)
- (skip-unless noninteractive)
;; The autoloaded Tramp objects are different since Emacs 26.1. We
;; cannot test older Emacsen, therefore.
(skip-unless (tramp--test-emacs26-p))
@@ -7126,28 +7322,34 @@ Since it unloads Tramp, it shall be the last test to run."
(should (featurep 'tramp-archive))
;; This unloads also tramp-archive.el and tramp-theme.el if needed.
(unload-feature 'tramp 'force)
- ;; No Tramp feature must be left.
+
+ ;; No Tramp feature must be left except the test packages.
(should-not (featurep 'tramp))
(should-not (featurep 'tramp-archive))
(should-not (featurep 'tramp-theme))
(should-not
(all-completions
"tramp" (delq 'tramp-tests (delq 'tramp-archive-tests features))))
+
;; `file-name-handler-alist' must be clean.
(should-not (all-completions "tramp" (mapcar #'cdr file-name-handler-alist)))
+
;; There shouldn't be left a bound symbol, except buffer-local
- ;; variables, and autoload functions. We do not regard our test
+ ;; variables, and autoloaded functions. We do not regard our test
;; symbols, and the Tramp unload hooks.
(mapatoms
(lambda (x)
(and (or (and (boundp x) (null (local-variable-if-set-p x)))
- (and (functionp x) (null (autoloadp (symbol-function x)))))
+ (and (functionp x) (null (autoloadp (symbol-function x))))
+ (macrop x))
(string-match-p "^tramp" (symbol-name x))
;; `tramp-completion-mode' is autoloaded in Emacs < 28.1.
(not (eq 'tramp-completion-mode x))
(not (string-match-p "^tramp\\(-archive\\)?--?test" (symbol-name x)))
(not (string-match-p "unload-hook$" (symbol-name x)))
+ (not (get x 'tramp-autoload))
(ert-fail (format "`%s' still bound" x)))))
+
;; The defstruct `tramp-file-name' and all its internal functions
;; shall be purged.
(should-not (cl--find-class 'tramp-file-name))
@@ -7156,6 +7358,7 @@ Since it unloads Tramp, it shall be the last test to run."
(and (functionp x)
(string-match-p "tramp-file-name" (symbol-name x))
(ert-fail (format "Structure function `%s' still exists" x)))))
+
;; There shouldn't be left a hook function containing a Tramp
;; function. We do not regard the Tramp unload hooks.
(mapatoms
@@ -7165,7 +7368,24 @@ Since it unloads Tramp, it shall be the last test to run."
(not (string-match-p "unload-hook$" (symbol-name x)))
(consp (symbol-value x))
(ignore-errors (all-completions "tramp" (symbol-value x)))
- (ert-fail (format "Hook `%s' still contains Tramp function" x))))))
+ (ert-fail (format "Hook `%s' still contains Tramp function" x)))))
+
+ ;; There shouldn't be left an advice function from Tramp.
+ (mapatoms
+ (lambda (x)
+ (and (functionp x)
+ (advice-mapc
+ (lambda (fun _symbol)
+ (and (string-match-p "^tramp" (symbol-name fun))
+ (ert-fail
+ (format "Function `%s' still contains Tramp advice" x))))
+ x))))
+
+ ;; Reload.
+ (require 'tramp)
+ (require 'tramp-archive)
+ (should (featurep 'tramp))
+ (should (featurep 'tramp-archive)))
(defun tramp-test-all (&optional interactive)
"Run all tests for \\[tramp].
From 93974198b62bea0350be503c8fc017e9d1a4542f Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 7 Apr 2022 11:18:48 +0200
Subject: [PATCH 050/466] Commit missing file from previous commit
---
lisp/net/tramp.el | 110 ++++++++++++++++++++++++++++++++--------------
1 file changed, 76 insertions(+), 34 deletions(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index ee6e0e6c0881..a24d83f876ae 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -185,7 +185,7 @@ See the variable `tramp-encoding-shell' for more information."
;; Since Emacs 26.1, `system-name' can return nil at build time if
;; Emacs is compiled with "--no-build-details". We do expect it to be
-;; a string. (Bug#44481)
+;; a string. (Bug#44481, Bug#54294)
(defconst tramp-system-name (or (system-name) "")
"The system name Tramp is running locally.")
@@ -1409,8 +1409,11 @@ calling HANDLER.")
;; internal data structure. Convenience functions for internal
;; data structure.
-;; The basic structure for remote file names. We use a list :type,
-;; in order to be compatible with Emacs 25.
+;; The basic structure for remote file names. We use a list :type, in
+;; order to be compatible with Emacs 25. We must autoload it in
+;; tramp-loaddefs.el, because some functions, which need it, wouldn't
+;; work otherwise when unloading / reloading Tramp. (Bug#50869)
+;;;###tramp-autoload
(cl-defstruct (tramp-file-name (:type list) :named)
method user domain host port localname hop)
@@ -2186,10 +2189,14 @@ the resulting error message."
(defun tramp-test-message (fmt-string &rest arguments)
"Emit a Tramp message according `default-directory'."
- (if (tramp-tramp-file-p default-directory)
- (apply #'tramp-message
- (tramp-dissect-file-name default-directory) 0 fmt-string arguments)
- (apply #'message fmt-string arguments)))
+ (cond
+ ((tramp-tramp-file-p default-directory)
+ (apply #'tramp-message
+ (tramp-dissect-file-name default-directory) 0 fmt-string arguments))
+ ((tramp-file-name-p (car tramp-current-connection))
+ (apply #'tramp-message
+ (car tramp-current-connection) 0 fmt-string arguments))
+ (t (apply #'message fmt-string arguments))))
(put #'tramp-test-message 'tramp-suppress-trace t)
@@ -2676,17 +2683,21 @@ Falls back to normal file name handler if no Tramp file name handler exists."
(load "tramp" 'noerror 'nomessage)))
(apply operation args)))
+(put #'tramp-autoload-file-name-handler 'tramp-autoload t)
+
;; `tramp-autoload-file-name-handler' must be registered before
;; evaluation of site-start and init files, because there might exist
;; remote files already, f.e. files kept via recentf-mode.
;;;###autoload
(progn (defun tramp-register-autoload-file-name-handlers ()
"Add Tramp file name handlers to `file-name-handler-alist' during autoload."
- (add-to-list 'file-name-handler-alist
- (cons tramp-autoload-file-name-regexp
- #'tramp-autoload-file-name-handler))
- (put #'tramp-autoload-file-name-handler 'safe-magic t)))
+ (unless (rassq #'tramp-file-name-handler file-name-handler-alist)
+ (add-to-list 'file-name-handler-alist
+ (cons tramp-autoload-file-name-regexp
+ #'tramp-autoload-file-name-handler))
+ (put #'tramp-autoload-file-name-handler 'safe-magic t))))
+(put #'tramp-register-autoload-file-name-handlers 'tramp-autoload t)
;;;###autoload (tramp-register-autoload-file-name-handlers)
(defun tramp-use-absolute-autoload-file-names ()
@@ -2799,6 +2810,7 @@ Add operations defined in `HANDLER-alist' to `tramp-file-name-handler'."
(string-prefix-p "tramp-" (symbol-name (cdr fnh))))
(setq file-name-handler-alist (delq fnh file-name-handler-alist))))))
+(put #'tramp-unload-file-name-handlers 'tramp-autoload t)
(add-hook 'tramp-unload-hook #'tramp-unload-file-name-handlers)
;;; File name handler functions for completion mode:
@@ -3378,6 +3390,10 @@ User is always nil."
(if (file-directory-p dir) dir (file-name-directory dir)) nil
(tramp-flush-directory-properties v localname)))
+(defvar tramp-tolerate-tilde nil
+ "Indicator, that not expandable tilde shall be tolerated.
+Let-bind it when necessary.")
+
(defun tramp-handle-expand-file-name (name &optional dir)
"Like `expand-file-name' for Tramp files."
;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
@@ -3394,6 +3410,10 @@ User is always nil."
(with-parsed-tramp-file-name name nil
(unless (tramp-run-real-handler #'file-name-absolute-p (list localname))
(setq localname (concat "/" localname)))
+ ;; Tilde expansion is not possible.
+ (when (and (not tramp-tolerate-tilde)
+ (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname))
+ (tramp-error v 'file-error "Cannot expand tilde in file `%s'" name))
;; Do not keep "/..".
(when (string-match-p "^/\\.\\.?$" localname)
(setq localname "/"))
@@ -3403,7 +3423,9 @@ User is always nil."
(let ((default-directory tramp-compat-temporary-file-directory))
(tramp-make-tramp-file-name
v (tramp-drop-volume-letter
- (tramp-run-real-handler #'expand-file-name (list localname))))))))
+ (if (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ localname
+ (tramp-run-real-handler #'expand-file-name (list localname)))))))))
(defun tramp-handle-file-accessible-directory-p (filename)
"Like `file-accessible-directory-p' for Tramp files."
@@ -3890,16 +3912,19 @@ Return nil when there is no lockfile."
(insert-file-contents-literally lockname)
(buffer-string))))))
+(defvar tramp-lock-pid nil
+ "A random nunber local for every connection.
+Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.")
+
(defun tramp-get-lock-pid (file)
"Determine pid for lockfile of FILE."
- ;; Some Tramp methods do not offer a connection process, but just a
- ;; network process as a place holder. Those processes use the
- ;; "lock-pid" connection property as fake pid, in fact it is the
- ;; time stamp the process is created.
- (let ((p (tramp-get-process (tramp-dissect-file-name file))))
- (number-to-string
- (or (process-id p)
- (tramp-get-connection-property p "lock-pid" (emacs-pid))))))
+ ;; Not all Tramp methods use an own process. So we use a random
+ ;; number, which is as good as a process id.
+ (with-current-buffer
+ (tramp-get-connection-buffer (tramp-dissect-file-name file))
+ (or tramp-lock-pid
+ (setq-local
+ tramp-lock-pid (number-to-string (random most-positive-fixnum))))))
(defconst tramp-lock-file-info-regexp
;; USER@HOST.PID[:BOOT_TIME]
@@ -3910,9 +3935,11 @@ Return nil when there is no lockfile."
"Like `file-locked-p' for Tramp files."
(when-let ((info (tramp-get-lock-file file))
(match (string-match tramp-lock-file-info-regexp info)))
- (or (and (string-equal (match-string 1 info) (user-login-name))
- (string-equal (match-string 2 info) (system-name))
+ (or ; Locked by me.
+ (and (string-equal (match-string 1 info) (user-login-name))
+ (string-equal (match-string 2 info) tramp-system-name)
(string-equal (match-string 3 info) (tramp-get-lock-pid file)))
+ ; User name.
(match-string 1 info))))
(defun tramp-handle-lock-file (file)
@@ -3921,6 +3948,14 @@ Return nil when there is no lockfile."
;; was visited.
(catch 'dont-lock
(unless (eq (file-locked-p file) t) ;; Locked by me.
+ (when (and buffer-file-truename
+ (not (verify-visited-file-modtime))
+ (file-exists-p file))
+ ;; In filelock.c, `userlock--ask-user-about-supersession-threat'
+ ;; is called, which also checks file contents. This is unwise
+ ;; for remote files.
+ (ask-user-about-supersession-threat file))
+
(when-let ((info (tramp-get-lock-file file))
(match (string-match tramp-lock-file-info-regexp info)))
(unless (ask-user-about-lock
@@ -3933,7 +3968,7 @@ Return nil when there is no lockfile."
;; USER@HOST.PID[:BOOT_TIME]
(info
(format
- "%s@%s.%s" (user-login-name) (system-name)
+ "%s@%s.%s" (user-login-name) tramp-system-name
(tramp-get-lock-pid file))))
;; Protect against security hole.
@@ -4198,7 +4233,9 @@ substitution. SPEC-LIST is a list of char/value pairs used for
(command (mapconcat #'tramp-shell-quote-argument command " "))
;; Set cwd and environment variables.
(command
- (append `("cd" ,localname "&&" "(" "env") env `(,command ")"))))
+ (append
+ `("cd" ,(tramp-shell-quote-argument localname) "&&" "(" "env")
+ env `(,command ")"))))
;; Check for `tramp-sh-file-name-handler', because something
;; is different between tramp-sh.el, and tramp-adb.el or
@@ -4464,10 +4501,7 @@ BUFFER might be a list, in this case STDERR is separated."
;; We must disable cygwin-mount file name
;; handlers and alike.
(tramp-run-real-handler
- #'substitute-in-file-name (list localname))))))))
- ;; "/m:h:~" does not work for completion. We use "/m:h:~/".
- (if (and (stringp localname) (string-equal "~" localname))
- (concat filename "/")
+ #'substitute-in-file-name (list localname)))))))
filename))))
(defconst tramp-time-dont-know '(0 0 0 1000)
@@ -4871,8 +4905,9 @@ performed successfully. Any other value means an error."
(tramp-message vec 6 "\n%s" (buffer-string)))
(if (eq exit 'ok)
(ignore-errors
- (and (functionp tramp-password-save-function)
- (funcall tramp-password-save-function)))
+ (when (functionp tramp-password-save-function)
+ (funcall tramp-password-save-function)
+ (setq tramp-password-save-function nil)))
;; Not successful.
(tramp-clear-passwd vec)
(delete-process proc)
@@ -5310,7 +5345,8 @@ be granted."
(offset (cond
((eq ?r access) 1)
((eq ?w access) 2)
- ((eq ?x access) 3))))
+ ((eq ?x access) 3)
+ ((eq ?s access) 3))))
(dolist (suffix '("string" "integer") result)
(setq
result
@@ -5343,7 +5379,8 @@ be granted."
(and
(eq access
(aref (tramp-compat-file-attribute-modes file-attr) offset))
- (or (equal remote-uid
+ (or (equal remote-uid unknown-id)
+ (equal remote-uid
(tramp-compat-file-attribute-user-id file-attr))
(equal unknown-id
(tramp-compat-file-attribute-user-id file-attr))))
@@ -5352,7 +5389,8 @@ be granted."
(eq access
(aref (tramp-compat-file-attribute-modes file-attr)
(+ offset 3)))
- (or (equal remote-gid
+ (or (equal remote-gid unknown-id)
+ (equal remote-gid
(tramp-compat-file-attribute-group-id file-attr))
(equal unknown-id
(tramp-compat-file-attribute-group-id
@@ -5660,7 +5698,9 @@ Invokes `password-read' if available, `read-passwd' else."
(or prompt
(with-current-buffer (process-buffer proc)
(tramp-check-for-regexp proc tramp-password-prompt-regexp)
- (format "%s for %s " (capitalize (match-string 1)) key))))
+ (if (string-match-p "passphrase" (match-string 1))
+ (match-string 0)
+ (format "%s for %s " (capitalize (match-string 1)) key)))))
(auth-source-creation-prompts `((secret . ,pw-prompt)))
;; Use connection-local value.
(auth-sources (with-current-buffer (process-buffer proc) auth-sources))
@@ -5872,6 +5912,8 @@ BODY is the backend specific code."
;; Maybe it's not loaded yet.
(ignore-errors (unload-feature 'tramp 'force))))
+(put #'tramp-unload-tramp 'tramp-autoload t)
+
(provide 'tramp)
(run-hooks 'tramp--startup-hook)
From 71f51f1b9dc8824f0cadc53b68dbc28629bce97f Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 7 Apr 2022 11:18:48 +0200
Subject: [PATCH 051/466] Commit missing file from previous commit (Do not
merge with master)
---
lisp/net/tramp.el | 110 ++++++++++++++++++++++++++++++++--------------
1 file changed, 76 insertions(+), 34 deletions(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index ee6e0e6c0881..a24d83f876ae 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -185,7 +185,7 @@ See the variable `tramp-encoding-shell' for more information."
;; Since Emacs 26.1, `system-name' can return nil at build time if
;; Emacs is compiled with "--no-build-details". We do expect it to be
-;; a string. (Bug#44481)
+;; a string. (Bug#44481, Bug#54294)
(defconst tramp-system-name (or (system-name) "")
"The system name Tramp is running locally.")
@@ -1409,8 +1409,11 @@ calling HANDLER.")
;; internal data structure. Convenience functions for internal
;; data structure.
-;; The basic structure for remote file names. We use a list :type,
-;; in order to be compatible with Emacs 25.
+;; The basic structure for remote file names. We use a list :type, in
+;; order to be compatible with Emacs 25. We must autoload it in
+;; tramp-loaddefs.el, because some functions, which need it, wouldn't
+;; work otherwise when unloading / reloading Tramp. (Bug#50869)
+;;;###tramp-autoload
(cl-defstruct (tramp-file-name (:type list) :named)
method user domain host port localname hop)
@@ -2186,10 +2189,14 @@ the resulting error message."
(defun tramp-test-message (fmt-string &rest arguments)
"Emit a Tramp message according `default-directory'."
- (if (tramp-tramp-file-p default-directory)
- (apply #'tramp-message
- (tramp-dissect-file-name default-directory) 0 fmt-string arguments)
- (apply #'message fmt-string arguments)))
+ (cond
+ ((tramp-tramp-file-p default-directory)
+ (apply #'tramp-message
+ (tramp-dissect-file-name default-directory) 0 fmt-string arguments))
+ ((tramp-file-name-p (car tramp-current-connection))
+ (apply #'tramp-message
+ (car tramp-current-connection) 0 fmt-string arguments))
+ (t (apply #'message fmt-string arguments))))
(put #'tramp-test-message 'tramp-suppress-trace t)
@@ -2676,17 +2683,21 @@ Falls back to normal file name handler if no Tramp file name handler exists."
(load "tramp" 'noerror 'nomessage)))
(apply operation args)))
+(put #'tramp-autoload-file-name-handler 'tramp-autoload t)
+
;; `tramp-autoload-file-name-handler' must be registered before
;; evaluation of site-start and init files, because there might exist
;; remote files already, f.e. files kept via recentf-mode.
;;;###autoload
(progn (defun tramp-register-autoload-file-name-handlers ()
"Add Tramp file name handlers to `file-name-handler-alist' during autoload."
- (add-to-list 'file-name-handler-alist
- (cons tramp-autoload-file-name-regexp
- #'tramp-autoload-file-name-handler))
- (put #'tramp-autoload-file-name-handler 'safe-magic t)))
+ (unless (rassq #'tramp-file-name-handler file-name-handler-alist)
+ (add-to-list 'file-name-handler-alist
+ (cons tramp-autoload-file-name-regexp
+ #'tramp-autoload-file-name-handler))
+ (put #'tramp-autoload-file-name-handler 'safe-magic t))))
+(put #'tramp-register-autoload-file-name-handlers 'tramp-autoload t)
;;;###autoload (tramp-register-autoload-file-name-handlers)
(defun tramp-use-absolute-autoload-file-names ()
@@ -2799,6 +2810,7 @@ Add operations defined in `HANDLER-alist' to `tramp-file-name-handler'."
(string-prefix-p "tramp-" (symbol-name (cdr fnh))))
(setq file-name-handler-alist (delq fnh file-name-handler-alist))))))
+(put #'tramp-unload-file-name-handlers 'tramp-autoload t)
(add-hook 'tramp-unload-hook #'tramp-unload-file-name-handlers)
;;; File name handler functions for completion mode:
@@ -3378,6 +3390,10 @@ User is always nil."
(if (file-directory-p dir) dir (file-name-directory dir)) nil
(tramp-flush-directory-properties v localname)))
+(defvar tramp-tolerate-tilde nil
+ "Indicator, that not expandable tilde shall be tolerated.
+Let-bind it when necessary.")
+
(defun tramp-handle-expand-file-name (name &optional dir)
"Like `expand-file-name' for Tramp files."
;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
@@ -3394,6 +3410,10 @@ User is always nil."
(with-parsed-tramp-file-name name nil
(unless (tramp-run-real-handler #'file-name-absolute-p (list localname))
(setq localname (concat "/" localname)))
+ ;; Tilde expansion is not possible.
+ (when (and (not tramp-tolerate-tilde)
+ (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname))
+ (tramp-error v 'file-error "Cannot expand tilde in file `%s'" name))
;; Do not keep "/..".
(when (string-match-p "^/\\.\\.?$" localname)
(setq localname "/"))
@@ -3403,7 +3423,9 @@ User is always nil."
(let ((default-directory tramp-compat-temporary-file-directory))
(tramp-make-tramp-file-name
v (tramp-drop-volume-letter
- (tramp-run-real-handler #'expand-file-name (list localname))))))))
+ (if (string-match-p "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ localname
+ (tramp-run-real-handler #'expand-file-name (list localname)))))))))
(defun tramp-handle-file-accessible-directory-p (filename)
"Like `file-accessible-directory-p' for Tramp files."
@@ -3890,16 +3912,19 @@ Return nil when there is no lockfile."
(insert-file-contents-literally lockname)
(buffer-string))))))
+(defvar tramp-lock-pid nil
+ "A random nunber local for every connection.
+Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.")
+
(defun tramp-get-lock-pid (file)
"Determine pid for lockfile of FILE."
- ;; Some Tramp methods do not offer a connection process, but just a
- ;; network process as a place holder. Those processes use the
- ;; "lock-pid" connection property as fake pid, in fact it is the
- ;; time stamp the process is created.
- (let ((p (tramp-get-process (tramp-dissect-file-name file))))
- (number-to-string
- (or (process-id p)
- (tramp-get-connection-property p "lock-pid" (emacs-pid))))))
+ ;; Not all Tramp methods use an own process. So we use a random
+ ;; number, which is as good as a process id.
+ (with-current-buffer
+ (tramp-get-connection-buffer (tramp-dissect-file-name file))
+ (or tramp-lock-pid
+ (setq-local
+ tramp-lock-pid (number-to-string (random most-positive-fixnum))))))
(defconst tramp-lock-file-info-regexp
;; USER@HOST.PID[:BOOT_TIME]
@@ -3910,9 +3935,11 @@ Return nil when there is no lockfile."
"Like `file-locked-p' for Tramp files."
(when-let ((info (tramp-get-lock-file file))
(match (string-match tramp-lock-file-info-regexp info)))
- (or (and (string-equal (match-string 1 info) (user-login-name))
- (string-equal (match-string 2 info) (system-name))
+ (or ; Locked by me.
+ (and (string-equal (match-string 1 info) (user-login-name))
+ (string-equal (match-string 2 info) tramp-system-name)
(string-equal (match-string 3 info) (tramp-get-lock-pid file)))
+ ; User name.
(match-string 1 info))))
(defun tramp-handle-lock-file (file)
@@ -3921,6 +3948,14 @@ Return nil when there is no lockfile."
;; was visited.
(catch 'dont-lock
(unless (eq (file-locked-p file) t) ;; Locked by me.
+ (when (and buffer-file-truename
+ (not (verify-visited-file-modtime))
+ (file-exists-p file))
+ ;; In filelock.c, `userlock--ask-user-about-supersession-threat'
+ ;; is called, which also checks file contents. This is unwise
+ ;; for remote files.
+ (ask-user-about-supersession-threat file))
+
(when-let ((info (tramp-get-lock-file file))
(match (string-match tramp-lock-file-info-regexp info)))
(unless (ask-user-about-lock
@@ -3933,7 +3968,7 @@ Return nil when there is no lockfile."
;; USER@HOST.PID[:BOOT_TIME]
(info
(format
- "%s@%s.%s" (user-login-name) (system-name)
+ "%s@%s.%s" (user-login-name) tramp-system-name
(tramp-get-lock-pid file))))
;; Protect against security hole.
@@ -4198,7 +4233,9 @@ substitution. SPEC-LIST is a list of char/value pairs used for
(command (mapconcat #'tramp-shell-quote-argument command " "))
;; Set cwd and environment variables.
(command
- (append `("cd" ,localname "&&" "(" "env") env `(,command ")"))))
+ (append
+ `("cd" ,(tramp-shell-quote-argument localname) "&&" "(" "env")
+ env `(,command ")"))))
;; Check for `tramp-sh-file-name-handler', because something
;; is different between tramp-sh.el, and tramp-adb.el or
@@ -4464,10 +4501,7 @@ BUFFER might be a list, in this case STDERR is separated."
;; We must disable cygwin-mount file name
;; handlers and alike.
(tramp-run-real-handler
- #'substitute-in-file-name (list localname))))))))
- ;; "/m:h:~" does not work for completion. We use "/m:h:~/".
- (if (and (stringp localname) (string-equal "~" localname))
- (concat filename "/")
+ #'substitute-in-file-name (list localname)))))))
filename))))
(defconst tramp-time-dont-know '(0 0 0 1000)
@@ -4871,8 +4905,9 @@ performed successfully. Any other value means an error."
(tramp-message vec 6 "\n%s" (buffer-string)))
(if (eq exit 'ok)
(ignore-errors
- (and (functionp tramp-password-save-function)
- (funcall tramp-password-save-function)))
+ (when (functionp tramp-password-save-function)
+ (funcall tramp-password-save-function)
+ (setq tramp-password-save-function nil)))
;; Not successful.
(tramp-clear-passwd vec)
(delete-process proc)
@@ -5310,7 +5345,8 @@ be granted."
(offset (cond
((eq ?r access) 1)
((eq ?w access) 2)
- ((eq ?x access) 3))))
+ ((eq ?x access) 3)
+ ((eq ?s access) 3))))
(dolist (suffix '("string" "integer") result)
(setq
result
@@ -5343,7 +5379,8 @@ be granted."
(and
(eq access
(aref (tramp-compat-file-attribute-modes file-attr) offset))
- (or (equal remote-uid
+ (or (equal remote-uid unknown-id)
+ (equal remote-uid
(tramp-compat-file-attribute-user-id file-attr))
(equal unknown-id
(tramp-compat-file-attribute-user-id file-attr))))
@@ -5352,7 +5389,8 @@ be granted."
(eq access
(aref (tramp-compat-file-attribute-modes file-attr)
(+ offset 3)))
- (or (equal remote-gid
+ (or (equal remote-gid unknown-id)
+ (equal remote-gid
(tramp-compat-file-attribute-group-id file-attr))
(equal unknown-id
(tramp-compat-file-attribute-group-id
@@ -5660,7 +5698,9 @@ Invokes `password-read' if available, `read-passwd' else."
(or prompt
(with-current-buffer (process-buffer proc)
(tramp-check-for-regexp proc tramp-password-prompt-regexp)
- (format "%s for %s " (capitalize (match-string 1)) key))))
+ (if (string-match-p "passphrase" (match-string 1))
+ (match-string 0)
+ (format "%s for %s " (capitalize (match-string 1)) key)))))
(auth-source-creation-prompts `((secret . ,pw-prompt)))
;; Use connection-local value.
(auth-sources (with-current-buffer (process-buffer proc) auth-sources))
@@ -5872,6 +5912,8 @@ BODY is the backend specific code."
;; Maybe it's not loaded yet.
(ignore-errors (unload-feature 'tramp 'force))))
+(put #'tramp-unload-tramp 'tramp-autoload t)
+
(provide 'tramp)
(run-hooks 'tramp--startup-hook)
From aab36e18950e23100718eaedb14ef9176f5d3da2 Mon Sep 17 00:00:00 2001
From: Felix Dietrich
Date: Thu, 7 Apr 2022 12:04:22 +0200
Subject: [PATCH 052/466] Fix error in tramp-archive-autoload-file-name-handler
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-handler):
Always call `tramp-autoload-file-name'. Otherwise, when
`tramp-archive-enabled’ is nil and
`tramp-archive-autoload-file-name-handler’ is in the
`file-name-handler-alist’ results in an error “Invalid handler in
`file-name-handler-alist” once Emacs calls
`tramp-archive-autoload-file-name-handler’ with a handler that
does not expect nil. Always returning nil is also false in
general.
Copyright-paperwork-exempt: yes
---
lisp/net/tramp-archive.el | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 22390ef45bca..4b649edaabd5 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -356,14 +356,13 @@ arguments to pass to the OPERATION."
(progn (defun tramp-archive-autoload-file-name-handler (operation &rest args)
"Load Tramp archive file name handler, and perform OPERATION."
(defvar tramp-archive-autoload)
- (when tramp-archive-enabled
- ;; We cannot use `tramp-compat-temporary-file-directory' here due
- ;; to autoload. When installing Tramp's GNU ELPA package, there
- ;; might be an older, incompatible version active. We try to
- ;; overload this.
- (let ((default-directory temporary-file-directory)
- (tramp-archive-autoload t))
- (apply #'tramp-autoload-file-name-handler operation args)))))
+ (let (;; We cannot use `tramp-compat-temporary-file-directory' here
+ ;; due to autoload. When installing Tramp's GNU ELPA package,
+ ;; there might be an older, incompatible version active. We
+ ;; try to overload this.
+ (default-directory temporary-file-directory)
+ (tramp-archive-autoload tramp-archive-enabled))
+ (apply #'tramp-autoload-file-name-handler operation args))))
(put #'tramp-archive-autoload-file-name-handler 'tramp-autoload t)
From 98abf01fd681931f8870569ff559b547579d7cef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20H=C3=B6tzel?=
Date: Fri, 4 Mar 2022 10:08:14 +0100
Subject: [PATCH 053/466] Use correct signal oldset in posix_spawn
implementation
posix_spawn was restoring the wrong signal set, which still had
SIGCHLD and SIGINT masked, causing problems with child processes that
spawned child processes. (Bug#54667)
See the thread ending at
https://lists.gnu.org/archive/html/emacs-devel/2022-03/msg00067.html
for more details.
* src/callproc.c (emacs_spawn): Pass oldset parameter.
(emacs_posix_spawn_init_attributes): Use correct oldset.
(emacs_posix_spawn_init): Remove intermediate function.
(cherry picked from commit 8103b060d89ac63a12c439087bd46c30da72cd97)
---
src/callproc.c | 35 +++++++++--------------------------
1 file changed, 9 insertions(+), 26 deletions(-)
diff --git a/src/callproc.c b/src/callproc.c
index 66a35d9f33bb..07eeadb3aa99 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1335,7 +1335,8 @@ emacs_posix_spawn_init_actions (posix_spawn_file_actions_t *actions,
}
static int
-emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
+emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes,
+ const sigset_t *oldset)
{
int error = posix_spawnattr_init (attributes);
if (error != 0)
@@ -1377,11 +1378,7 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
goto out;
/* Stop blocking SIGCHLD in the child. */
- sigset_t oldset;
- error = pthread_sigmask (SIG_SETMASK, NULL, &oldset);
- if (error != 0)
- goto out;
- error = posix_spawnattr_setsigmask (attributes, &oldset);
+ error = posix_spawnattr_setsigmask (attributes, oldset);
if (error != 0)
goto out;
@@ -1392,23 +1389,6 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
return error;
}
-static int
-emacs_posix_spawn_init (posix_spawn_file_actions_t *actions,
- posix_spawnattr_t *attributes, int std_in,
- int std_out, int std_err, const char *cwd)
-{
- int error = emacs_posix_spawn_init_actions (actions, std_in,
- std_out, std_err, cwd);
- if (error != 0)
- return error;
-
- error = emacs_posix_spawn_init_attributes (attributes);
- if (error != 0)
- return error;
-
- return 0;
-}
-
#endif
/* Start a new asynchronous subprocess. If successful, return zero
@@ -1443,9 +1423,12 @@ emacs_spawn (pid_t *newpid, int std_in, int std_out, int std_err,
if (use_posix_spawn)
{
/* Initialize optional attributes before blocking. */
- int error
- = emacs_posix_spawn_init (&actions, &attributes, std_in,
- std_out, std_err, cwd);
+ int error = emacs_posix_spawn_init_actions (&actions, std_in,
+ std_out, std_err, cwd);
+ if (error != 0)
+ return error;
+
+ error = emacs_posix_spawn_init_attributes (&attributes, oldset);
if (error != 0)
return error;
}
From 4f27588a16a8ce65db1aa5adfeca12bcbf44af3d Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 8 Apr 2022 09:48:15 +0300
Subject: [PATCH 054/466] Clarify "idleness" in the ELisp manual
* doc/lispref/os.texi (Idle Timers): Clarify that waiting for
input with timeout doesn't make Emacs idle. Suggested by Ignacio
. (Bug#54371)
---
doc/lispref/os.texi | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index b1c19e384be5..96cfff3f89b1 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -2284,7 +2284,8 @@ can use in calling @code{cancel-timer} (@pxref{Timers}).
@end deffn
@cindex idleness
- Emacs becomes @dfn{idle} when it starts waiting for user input, and
+ Emacs becomes @dfn{idle} when it starts waiting for user input
+(unless it waits for input with a timeout, @pxref{Reading One Event}), and
it remains idle until the user provides some input. If a timer is set
for five seconds of idleness, it runs approximately five seconds after
Emacs first becomes idle. Even if @var{repeat} is non-@code{nil},
From ff997ad7863c7c54a12d0cd07fa4c01766dfcce4 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Fri, 8 Apr 2022 13:12:03 +0200
Subject: [PATCH 055/466] Ensure local `default-directory' in Tramp when needed
* lisp/net/tramp.el (tramp-process-running-p): Ensure local
`default-directory' when calling `list-system-processes' and
`process-attributes'.
---
lisp/net/tramp.el | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index a24d83f876ae..8baf72464dc7 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -5666,14 +5666,15 @@ verbosity of 6."
"Return t if system process PROCESS-NAME is running for `user-login-name'."
(when (stringp process-name)
(catch 'result
- (dolist (pid (list-system-processes))
- (when-let ((attributes (process-attributes pid))
- (comm (cdr (assoc 'comm attributes))))
- (and (string-equal (cdr (assoc 'user attributes)) (user-login-name))
- ;; The returned command name could be truncated to 15
- ;; characters. Therefore, we cannot check for `string-equal'.
- (string-prefix-p comm process-name)
- (throw 'result t)))))))
+ (let ((default-directory temporary-file-directory))
+ (dolist (pid (list-system-processes))
+ (when-let ((attributes (process-attributes pid))
+ (comm (cdr (assoc 'comm attributes))))
+ (and (string-equal (cdr (assoc 'user attributes)) (user-login-name))
+ ;; The returned command name could be truncated to 15
+ ;; characters. Therefore, we cannot check for `string-equal'.
+ (string-prefix-p comm process-name)
+ (throw 'result t))))))))
;; When calling "emacs -Q", `auth-source-search' won't be called. If
;; you want to debug exactly this case, call "emacs -Q --eval '(setq
From 886339747b8d34fc09fd69a143cf548daf92dce6 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Fri, 8 Apr 2022 13:12:26 +0200
Subject: [PATCH 056/466] Extend tramp-archive-test45-auto-load
* test/lisp/net/tramp-archive-tests.el (tramp-archive-test45-auto-load):
Extend test.
---
test/lisp/net/tramp-archive-tests.el | 47 +++++++++++++++-------------
1 file changed, 25 insertions(+), 22 deletions(-)
diff --git a/test/lisp/net/tramp-archive-tests.el b/test/lisp/net/tramp-archive-tests.el
index 5bdae2a760a1..aaa41d0c584e 100644
--- a/test/lisp/net/tramp-archive-tests.el
+++ b/test/lisp/net/tramp-archive-tests.el
@@ -926,28 +926,31 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
(file-attributes %S \"/\")) \
(message \"tramp-archive loaded: %%s\" \
(featurep 'tramp-archive))))"))
- (dolist (default-directory
- `(,temporary-file-directory
- ;; Starting Emacs in a directory which has
- ;; `tramp-archive-file-name-regexp' syntax is
- ;; supported only with Emacs > 27.2 (sigh!).
- ;; (Bug#48476)
- ,(file-name-as-directory tramp-archive-test-directory)))
- (dolist (file `("/mock::foo" ,(concat tramp-archive-test-archive "foo")))
- (should
- (string-match
- (format
- "tramp-archive loaded: %s[[:ascii:]]+tramp-archive loaded: %s"
- (tramp-archive-file-name-p default-directory)
- (or (tramp-archive-file-name-p default-directory)
- (tramp-archive-file-name-p file)))
- (shell-command-to-string
- (format
- "%s -batch -Q -L %s --eval %s"
- (shell-quote-argument
- (expand-file-name invocation-name invocation-directory))
- (mapconcat #'shell-quote-argument load-path " -L ")
- (shell-quote-argument (format code file))))))))))
+ (dolist (enabled '(t nil))
+ (dolist (default-directory
+ `(,temporary-file-directory
+ ;; Starting Emacs in a directory which has
+ ;; `tramp-archive-file-name-regexp' syntax is
+ ;; supported only with Emacs > 27.2 (sigh!).
+ ;; (Bug#48476)
+ ,(file-name-as-directory tramp-archive-test-directory)))
+ (dolist (file `("/mock::foo" ,(concat tramp-archive-test-archive "foo")))
+ (should
+ (string-match
+ (format
+ "tramp-archive loaded: %s[[:ascii:]]+tramp-archive loaded: %s"
+ (tramp-archive-file-name-p default-directory)
+ (or (tramp-archive-file-name-p default-directory)
+ (and enabled (tramp-archive-file-name-p file))))
+ (shell-command-to-string
+ (format
+ "%s -batch -Q -L %s --eval %s --eval %s"
+ (shell-quote-argument
+ (expand-file-name invocation-name invocation-directory))
+ (mapconcat #'shell-quote-argument load-path " -L ")
+ (shell-quote-argument
+ (format "(setq tramp-archive-enabled %s)" enabled))
+ (shell-quote-argument (format code file)))))))))))
(ert-deftest tramp-archive-test45-delay-load ()
"Check that `tramp-archive' is loaded lazily, only when needed."
From 24a6c7c8c01a607c4cb60f72f762cfa9de3adc48 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 8 Apr 2022 21:11:16 +0300
Subject: [PATCH 057/466] Update and fix instructions and scripts for updating
the Web pages
* admin/admin.el (manual-html-fix-index-2): Support Texinfo 6.8
and later by not converting TOC menus into tables. (Bug#49719)
* admin/upload-manuals (New directory): Invoke "cvs add" in
$webdir, to pick up the correct CVSROOT.
* admin/make-tarball.txt: Update the section about the Emacs Web
pages.
* etc/refcards/Makefile (pl-refcard.dvi): If mex.fmt cannot be
found, invoke 'mex' instead of 'tex'.
---
admin/admin.el | 141 +++++++++++++++++++++--------------------
admin/make-tarball.txt | 75 ++++++++++++++++++----
admin/upload-manuals | 5 +-
etc/refcards/Makefile | 7 +-
4 files changed, 145 insertions(+), 83 deletions(-)
diff --git a/admin/admin.el b/admin/admin.el
index aa963be82085..a6cb33017ef5 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -591,76 +591,81 @@ style=\"text-align:left\">")
(forward-line 1)
(setq done t)))))
(let (done open-td tag desc)
- ;; Convert the list that Makeinfo made into a table.
- (or (search-forward "
" nil t)
- ;; FIXME? The following search seems dangerously lax.
- (search-forward "
lists
+ ;; for the TOC menu, and the "description" part of each menu
+ ;; item is not there anymore. So for HTML manuals produced by
+ ;; those newer versions of Texinfo we punt and leave the menu in
+ ;; its original form.
+ (when (or (search-forward "
" nil t)
+ ;; FIXME? The following search seems dangerously lax.
+ (search-forward "
"))
+ ;; Convert the list that Makeinfo made into a table.
+ (replace-match "
")
- ;; FIXME Fragile!
- ;; The Emacs and Elisp manual have some text at the
- ;; start of the detailed menu that is not part of the menu.
- ;; Other manuals do not.
- (if (looking-at "Here are some other nodes")
- (search-forward "
")
+ ;; FIXME Fragile!
+ ;; The Emacs and Elisp manual have some text at the
+ ;; start of the detailed menu that is not part of the menu.
+ ;; Other manuals do not.
+ (if (looking-at "Here are some other nodes")
+ (search-forward "
[ \t]*$")
+ (replace-match
+ (if open-td
+ " \n"
+ "") t t)
+ (setq done t))
+ (t
+ (if (eobp)
+ (error "Parse error in %s"
+ (file-name-nondirectory buffer-file-name)))
+ (unless open-td
+ (setq done t))))
+ (forward-line 1))))))
(defconst make-manuals-dist-output-variables
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index ec69302dae8e..17a4d9f807bb 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -315,17 +315,70 @@ looks like this:
-Regenerate the various manuals in manual/.
-The scripts admin/make-manuals and admin/upload-manuals summarize the process.
-
-If you have Texinfo installed locally, make-manuals might fail if it
-cannot find epsf.tex. In that case define in the environment
-
- TEXINPUTS=:/path/to/texinfo-tree/doc
-
-where /path/to/texinfo-tree is the absolute file name of the top-level
-directory where you have the Texinfo source tree. Then re-run
-make-manuals.
+Next, regenerate the various manuals in HTML, PDF, and PS formats:
+
+ Invoke ./admin/make-manuals from the top-level directory of the
+ Emacs source tree that contains the manuals for which you want to
+ produce HTML docs. This creates the 'manual' directory and
+ populates it with the necessary files.
+
+ If you have Texinfo installed locally, make-manuals might fail if it
+ cannot find epsf.tex. In that case define in the environment
+
+ TEXINPUTS=:/path/to/texinfo-tree/doc
+
+ where /path/to/texinfo-tree is the absolute file name of the
+ top-level directory where you have the Texinfo source tree. Then
+ re-run make-manuals.
+
+ make-manuals can also fail if the HTML manuals produced by Texinfo
+ violate some of the assumptions admin/admin.el makes about the
+ format of the produced HTML. Debug these problems and resolve them,
+ then re-run make-manuals. (Each time you run make-manuals, it
+ empties the manuals/ directory and regenerates the files there, but
+ if the files in manuals/ can be used without regeneration, i.e. if
+ the problem you solved doesn't affect the produced HTML, you can
+ invoke make-manuals with the -c switch, which will make the process
+ much faster.)
+
+Now change to the 'manual' directory and invoke upload-manuals:
+
+ ../admin/updload-manuals /path/to/webpages/cvs/checkout
+
+ where /path/to/webpages/cvs/checkout is the place where you have the
+ CVS checkout of the Emacs Web pages, with subdirectories 'manual'
+ and 'refcards'. This moves the produced manuals to directories in
+ the Web pages CVS checkout tree, and also invokes CVS commands to
+ commit changed files, add new files, and remove stale files that are
+ no longer part of the manuals.
+
+ If upload-manuals fails, resolve the problems and re-invoke it.
+ This requires running make-manuals again, since upload-manuals
+ destructively modifies the 'manual' directory where you invoke it.
+ Also, upload-manuals invokes "cvs commit -f", so if you run it
+ several times, some files will be committed more than once even
+ though they were not changed in-between. Suck it up.
+
+ All the added and removed files need to be committed, so next fire
+ up Emacs, type "C-x v d" to invoke vc-dir on the Web pages checkout,
+ and use "C-x v v" and other VC commands to commit all the files that
+ upload-manuals didn't automatically commit. (You can also do that
+ with manual CVS commands, of course, but this is not recommended.)
+
+ Next, make sure that manual/index.html file is consistent with the
+ info/dir file in the branch for which you are producing the manuals,
+ in that it mentions all the manuals. It could be outdated if
+ manuals were added or removed since the last release.
+
+ For each new manual, a file manual/MANUAL.html (where MANUAL is the
+ name of the manual) should be created from the template in
+ manual/eww.html, after editing the title and the Copyright years,
+ and the links in it changed to point to the appropriate files in the
+ manual/html_node/ and manual/html_mono/ subdirectories.
+
+ In addition, the file refcards/index.html should be audited to make
+ sure it includes the up-to-date list of refcards actually produced
+ and put under that subdirectory.
Browsing is one
way to check for any files that still need updating.
diff --git a/admin/upload-manuals b/admin/upload-manuals
index 1fa9865e6575..1b7950ede802 100755
--- a/admin/upload-manuals
+++ b/admin/upload-manuals
@@ -334,7 +334,10 @@ for d in html_node/*; do
[ -e $webdir/manual/$d ] || {
echo "New directory: $d"
mkdir $webdir/manual/$d
- $cvs add $webdir/manual/$d || die "add error"
+ (
+ cd $webdir/manual
+ $cvs add $d || die "add error"
+ )
}
new=
diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile
index 6f8913c5f01a..4c5daa9f44c5 100644
--- a/etc/refcards/Makefile
+++ b/etc/refcards/Makefile
@@ -233,10 +233,11 @@ pl-refcard.pdf: $(pl_refcard_deps)
fi
$(ENVADD) pdftex -output-format=pdf pl-refcard.tex
pl-refcard.dvi: $(pl_refcard_deps)
- if ! kpsewhich -format=fmt mex > /dev/null; then \
- echo "No mex format found."; false; \
+ if kpsewhich -format=fmt mex > /dev/null; then \
+ $(ENVADD) tex pl-refcard.tex; \
+ else \
+ $(ENVADD) mex pl-refcard.tex; \
fi
- $(ENVADD) tex pl-refcard.tex
pl-refcard.ps: pl-refcard.dvi
dvips -t a4 -o $@ pl-refcard.dvi
From 9dd44505b1dd3564deb8964372ab8a1d1021cb33 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 9 Apr 2022 12:17:49 +0300
Subject: [PATCH 058/466] ; * src/window.c (Fset_window_start): Clarify the
effect of NOFORCE.
---
src/window.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/window.c b/src/window.c
index 1e7c26b82e94..32e486f9f95a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1850,8 +1850,13 @@ Return POS. */)
DEFUN ("set-window-start", Fset_window_start, Sset_window_start, 2, 3, 0,
doc: /* Make display in WINDOW start at position POS in WINDOW's buffer.
WINDOW must be a live window and defaults to the selected one. Return
-POS. Optional third arg NOFORCE non-nil inhibits next redisplay from
-overriding motion of point in order to display at this exact start.
+POS.
+
+Optional third arg NOFORCE non-nil prevents next redisplay from
+moving point if displaying the window at POS makes point invisible;
+redisplay will then choose the WINDOW's start position by itself in
+that case, i.e. it will disregard POS if adhering to it will make
+point not visible in the window.
For reliable setting of WINDOW start position, make sure point is
at a position that will be visible when that start is in effect,
From 84a285772201d077274dfc932524bbdf0d56848a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 9 Apr 2022 16:30:23 +0300
Subject: [PATCH 059/466] Fix scrolling of the stack window in Calc
* lisp/calc/calc.el (calc-align-stack-window): Fix off-by-one
error in computing the window-start point. (Bug#54800)
---
lisp/calc/calc.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 81677d78e7aa..2f9afa02af8c 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1815,7 +1815,7 @@ See calc-keypad for details."
(if win
(progn
(calc-cursor-stack-index 0)
- (vertical-motion (- 2 (window-height win)))
+ (vertical-motion (- 3 (window-height win)))
(set-window-start win (point)))))
(calc-cursor-stack-index 0)
(if (looking-at " *\\.$")
From b385fd0b880059f74d5c1409a08a9e1292b86e70 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Sun, 10 Apr 2022 13:48:46 +0200
Subject: [PATCH 060/466] Revert "Make shell-resync-dirs handle whitespace in
directory names"
This reverts commit 90e65c826fab2092ad2099d7763538194c93e021.
This change led to hangs (bug#54776).
Do not merge to master; it has been fixed in a more encompassing way there.
---
lisp/shell.el | 54 ++++++++++++++++++---------------------------------
1 file changed, 19 insertions(+), 35 deletions(-)
diff --git a/lisp/shell.el b/lisp/shell.el
index c9def1bb3f34..f0115b90a504 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -1060,41 +1060,25 @@ command again."
(accept-process-output proc)
(goto-char pt)))
(goto-char pmark) (delete-char 1) ; remove the extra newline
- ;; That's the dirlist. Grab it & parse it.
- (let* ((dls (buffer-substring-no-properties
- (match-beginning 0) (1- (match-end 0))))
- (dlsl nil)
- (pos 0)
- (ds nil))
- ;; Split the dirlist into whitespace and non-whitespace chunks.
- ;; dlsl will be a reversed list of tokens.
- (while (string-match "\\(\\S-+\\|\\s-+\\)" dls pos)
- (push (match-string 1 dls) dlsl)
- (setq pos (match-end 1)))
-
- ;; Prepend trailing entries until they form an existing directory,
- ;; whitespace and all. Discard the next whitespace and repeat.
- (while dlsl
- (let ((newelt "")
- tem1 tem2)
- (while newelt
- ;; We need tem1 because we don't want to prepend
- ;; `comint-file-name-prefix' repeatedly into newelt via tem2.
- (setq tem1 (pop dlsl)
- tem2 (concat comint-file-name-prefix tem1 newelt))
- (cond ((file-directory-p tem2)
- (push tem2 ds)
- (when (string= " " (car dlsl))
- (pop dlsl))
- (setq newelt nil))
- (t
- (setq newelt (concat tem1 newelt)))))))
-
- (with-demoted-errors "Couldn't cd: %s"
- (shell-cd (car ds))
- (setq shell-dirstack (cdr ds)
- shell-last-dir (car shell-dirstack))
- (shell-dirstack-message))))
+ ;; That's the dirlist. grab it & parse it.
+ (let* ((dl (buffer-substring (match-beginning 2) (1- (match-end 2))))
+ (dl-len (length dl))
+ (ds '()) ; new dir stack
+ (i 0))
+ (while (< i dl-len)
+ ;; regexp = optional whitespace, (non-whitespace), optional whitespace
+ (string-match "\\s *\\(\\S +\\)\\s *" dl i) ; pick off next dir
+ (setq ds (cons (concat comint-file-name-prefix
+ (substring dl (match-beginning 1)
+ (match-end 1)))
+ ds))
+ (setq i (match-end 0)))
+ (let ((ds (nreverse ds)))
+ (with-demoted-errors "Couldn't cd: %s"
+ (shell-cd (car ds))
+ (setq shell-dirstack (cdr ds)
+ shell-last-dir (car shell-dirstack))
+ (shell-dirstack-message)))))
(if started-at-pmark (goto-char (marker-position pmark)))))
;; For your typing convenience:
From 338eda09d88d83d408c0bba1448b1c9eabad2d02 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Mart=C3=ADn?=
Date: Sun, 10 Apr 2022 14:31:36 +0200
Subject: [PATCH 061/466] Fix typo in next-error-find-buffer-function
* lisp/simple.el (next-error-find-buffer-function): Fix typo
(bug#54830).
---
lisp/simple.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/simple.el b/lisp/simple.el
index 1f606556b659..a8ca9600aff2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -222,7 +222,7 @@ rejected, and the function returns nil."
(defcustom next-error-find-buffer-function #'ignore
"Function called to find a `next-error' capable buffer.
-This functions takes the same three arguments as the function
+This function takes the same three arguments as the function
`next-error-find-buffer', and should return the buffer to be
used by the subsequent invocation of the command `next-error'
and `previous-error'.
From e8d2f40f41b09ec5e4b4eebe6441927e8d1dc434 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 10 Apr 2022 15:44:11 +0300
Subject: [PATCH 062/466] Clean up the MSDOS port
* src/msdos.h (tcdrain): Redirect to '_dos_commit'.
(openat, fchmodat, futimens, utimensat): Add prototypes.
* msdos/sed1v2.inp (MAKE_PDUMPER_FINGERPRINT): Fix indentation, so
that Make won't consider this line a command.
($(etc)/DOC): Chdir back to ../src, since "make-docfile -d" leaves
us in a wrong directory.
* msdos/sedlibmk.inp (GL_GNULIB_GETRANDOM, GL_GNULIB_MEMMEM)
(GL_GNULIB_SIGDESCR_NP): Define to 1, to get the prototypes from
Gnulib headers.
---
msdos/sed1v2.inp | 8 +++++++-
msdos/sedlibmk.inp | 3 +++
src/msdos.h | 9 +++++++++
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index e041e4e5b8da..a79bf2eb71c0 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -179,6 +179,8 @@ s/ *@LIBXPM@//
/^PAXCTL_dumped *=/s/=.*$/=/
/^PAXCTL_notdumped *=/s/=.*$/=/
/^DUMPING *=/s/@DUMPING@/unexec/
+/^[ \t]*MAKE_PDUMPER_FINGERPRINT = *$/c\
+MAKE_PDUMPER_FINGERPRINT =
/^lisp\.mk:/,/^$/c\
lisp.mk: $(lispsource)/loadup.el\
@rm -f $@\
@@ -190,6 +192,10 @@ lisp.mk: $(lispsource)/loadup.el\
/^ [ ]*\$(AM_V_at)\$(libsrc)\/make-docfile -d/s!make-docfile!make-docfile -o $(etc)/DOC!
/ > \$(etc)\/DOC *$/s/ >.*$//
+/^\$(etc)\/DOC/,/^$/{
+ /^$/i\
+ cd ../src
+}
/^ [ ]*\$(AM_V_GLOBALS)\$(libsrc)\/make-docfile.*>.*globals.tmp/s!make-docfile!make-docfile -o globals.tmp!
/^ [ ]*\$(AM_V_GLOBALS)\$(libsrc)\/make-doc/s!>.*$!!
/^\$(libsrc)\/make-docfile\$(EXEEXT): /i\
@@ -255,4 +261,4 @@ s| -I\$(top_srcdir)/lib||
s| -I\. -I\$(srcdir)| -I.|
/^ *test "X/d
/\$(CC) -o \$@.tmp/s/\$@.tmp/\$@/
-/mv \$@.tmp \$@/d
\ No newline at end of file
+/mv \$@.tmp \$@/d
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index 59ebec9e756a..e87cef5fff21 100644
--- a/msdos/sedlibmk.inp
+++ b/msdos/sedlibmk.inp
@@ -180,11 +180,14 @@ s/@PACKAGE@/emacs/
/^GL_GNULIB_ENVIRON *=/s/@GL_GNULIB_ENVIRON@/1/
/^GL_GNULIB_FDATASYNC *=/s/@GL_GNULIB_FDATASYNC@/1/
/^GL_GNULIB_GETLOADAVG *=/s/@GL_GNULIB_GETLOADAVG@/1/
+/^GL_GNULIB_GETRANDOM *=/s/@GL_GNULIB_GETRANDOM@/1/
/^GL_GNULIB_UNISTD_H_GETOPT *=/s/@GL_GNULIB_UNISTD_H_GETOPT@/1/
+/^GL_GNULIB_MEMMEM *=/s/@GL_GNULIB_MEMMEM@/1/
/^GL_GNULIB_MEMRCHR *=/s/@GL_GNULIB_MEMRCHR@/1/
/^GL_GNULIB_MEMPCPY *=/s/@GL_GNULIB_MEMPCPY@/1/
/^GL_GNULIB_MKOSTEMP *=/s/@GL_GNULIB_MKOSTEMP@/1/
/^GL_GNULIB_MKTIME *=/s/@GL_GNULIB_MKTIME@/1/
+/^GL_GNULIB_SIGDESCR_NP *=/s/@GL_GNULIB_SIGDESCR_NP@/1/
/^GL_GNULIB_TIME_R *=/s/@GL_GNULIB_TIME_R@/1/
/^GL_GNULIB_TIMEGM *=/s/@GL_GNULIB_TIMEGM@/1/
/^GL_GNULIB_TIME_RZ *=/s/@GL_GNULIB_TIME_RZ@/1/
diff --git a/src/msdos.h b/src/msdos.h
index 7e57c7c1102a..24697bcf24ba 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -22,6 +22,10 @@ along with GNU Emacs. If not, see . */
#include
#include "termhooks.h" /* struct terminal */
+struct terminal;
+
+extern unsigned int _dos_commit(int);
+#define tcdrain(f) _dos_commit(f)
int dos_ttraw (struct tty_display_info *);
int dos_ttcooked (void);
@@ -57,6 +61,11 @@ ssize_t readlinkat (int, const char *, char *, size_t);
int fstatat (int, char const *, struct stat *, int);
int unsetenv (const char *);
int faccessat (int, const char *, int, int);
+int openat (int, const char *, int, int);
+int fchmodat (int, const char *, mode_t, int);
+int futimens (int, const struct timespec[2]);
+int utimensat (int, const char *, const struct timespec[2], int);
+
void msdos_fatal_signal (int);
void syms_of_msdos (void);
int pthread_sigmask (int, const sigset_t *, sigset_t *);
From 33828e4818f28407e5425b021cd64ad505b25d91 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 10 Apr 2022 20:19:01 +0300
Subject: [PATCH 063/466] * doc/misc/eww.texi (Advanced): Correct outdated info
(bug#54839).
---
doc/misc/eww.texi | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index 248bd63e87f6..df1eb53c9d5b 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -310,9 +310,9 @@ state the directionality.
size or content. By customizing @code{shr-max-image-proportion} you
can set the maximal image proportion in relation to the window they
are displayed in. E.g., 0.7 means an image is allowed to take up 70%
-of the width and height. If Emacs supports image scaling (ImageMagick
-support required) then larger images are scaled down. You can block
-specific images completely by customizing @code{shr-blocked-images}.
+of the width and height. If Emacs supports image scaling, then larger
+images are scaled down. You can block specific images completely by
+customizing @code{shr-blocked-images}.
@vindex shr-inhibit-images
You can control image display by customizing
From cccaa9c31de363bba5920031ecdb9db4ad3207ee Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 11 Apr 2022 12:40:50 +0200
Subject: [PATCH 064/466] Fix a kill-append regression
* lisp/simple.el (kill-append): Fix a regression when
kill-ring-max is zero (bug#54842).
---
lisp/simple.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/simple.el b/lisp/simple.el
index a8ca9600aff2..b9cb957064df 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5183,7 +5183,7 @@ If `kill-append-merge-undo' is non-nil, remove the last undo
boundary in the current buffer."
(let ((cur (car kill-ring)))
(kill-new (if before-p (concat string cur) (concat cur string))
- (or (string= cur "")
+ (or (= (length cur) 0)
(null (get-text-property 0 'yank-handler cur)))))
(when (and kill-append-merge-undo (not buffer-read-only))
(let ((prev buffer-undo-list)
From e71c7a7c600bae3337de95d193dd106e9bfa2b4c Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 11 Apr 2022 14:31:04 +0300
Subject: [PATCH 065/466] Fix default-directory of buffers visiting files in
renamed directories
* lisp/dired-aux.el (dired-rename-file): Take note of whether FILE
is a directory before it is renamed, which makes it impossible to
determine if it was a directory.
(dired-rename-subdir, dired-rename-subdir-1): Revert to using
dired-in-this-tree-p instead of file-in-directory-p, for the
benefit of files that were renamed/removed, because
file-in-directory-p returns nil in those cases. (Bug#54838)
---
lisp/dired-aux.el | 37 +++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 15f95eb57994..57155ec26dc9 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1838,22 +1838,23 @@ rename them using `vc-rename-file'."
"Rename FILE to NEWNAME.
Signal a `file-already-exists' error if a file NEWNAME already exists
unless OK-IF-ALREADY-EXISTS is non-nil."
- (dired-handle-overwrite newname)
- (dired-maybe-create-dirs (file-name-directory newname))
- (if (and dired-vc-rename-file
- (vc-backend file)
- (ignore-errors (vc-responsible-backend newname)))
- (vc-rename-file file newname)
- ;; error is caught in -create-files
- (rename-file file newname ok-if-already-exists))
- ;; Silently rename the visited file of any buffer visiting this file.
- (and (get-file-buffer file)
- (with-current-buffer (get-file-buffer file)
- (set-visited-file-name newname nil t)))
- (dired-remove-file file)
- ;; See if it's an inserted subdir, and rename that, too.
- (when (file-directory-p file)
- (dired-rename-subdir file newname)))
+ (let ((file-is-dir-p (file-directory-p file)))
+ (dired-handle-overwrite newname)
+ (dired-maybe-create-dirs (file-name-directory newname))
+ (if (and dired-vc-rename-file
+ (vc-backend file)
+ (ignore-errors (vc-responsible-backend newname)))
+ (vc-rename-file file newname)
+ ;; error is caught in -create-files
+ (rename-file file newname ok-if-already-exists))
+ ;; Silently rename the visited file of any buffer visiting this file.
+ (and (get-file-buffer file)
+ (with-current-buffer (get-file-buffer file)
+ (set-visited-file-name newname nil t)))
+ (dired-remove-file file)
+ ;; See if it's an inserted subdir, and rename that, too.
+ (when file-is-dir-p
+ (dired-rename-subdir file newname))))
(defun dired-rename-subdir (from-dir to-dir)
(setq from-dir (file-name-as-directory from-dir)
@@ -1866,7 +1867,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
(while blist
(with-current-buffer (car blist)
(if (and buffer-file-name
- (file-in-directory-p buffer-file-name expanded-from-dir))
+ (dired-in-this-tree-p buffer-file-name expanded-from-dir))
(let ((modflag (buffer-modified-p))
(to-file (replace-regexp-in-string
(concat "^" (regexp-quote from-dir))
@@ -1885,7 +1886,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
(while alist
(setq elt (car alist)
alist (cdr alist))
- (if (file-in-directory-p (car elt) expanded-dir)
+ (if (dired-in-this-tree-p (car elt) expanded-dir)
;; ELT's subdir is affected by the rename
(dired-rename-subdir-2 elt dir to)))
(if (equal dir default-directory)
From 5e47d6284bf184cb21acb1fb142ddb6eeea9c8ec Mon Sep 17 00:00:00 2001
From: Stefan Monnier
Date: Mon, 11 Apr 2022 14:24:23 -0400
Subject: [PATCH 066/466] * lisp/gnus/mm-encode.el (mm-default-file-encoding):
Fix "when" arg
---
lisp/gnus/mm-encode.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el
index ead3bae219d5..39b1ad1f3b96 100644
--- a/lisp/gnus/mm-encode.el
+++ b/lisp/gnus/mm-encode.el
@@ -99,7 +99,7 @@ This variable should never be set directly, but bound before a call to
;;;###autoload
(define-obsolete-function-alias 'mm-default-file-encoding
- #'mm-default-file-type "future") ;Old bad name.
+ #'mm-default-file-type "28.1") ;Old bad name.
;;;###autoload
(defun mm-default-file-type (file)
"Return a default content type for FILE."
From 78e1640ad52a58ec53ddacf73a3e3a292d7833f1 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 12 Apr 2022 17:05:15 +0300
Subject: [PATCH 067/466] Fix 'window-text-pixel-width' when starting from
display property
* src/xdisp.c (Fwindow_text_pixel_size): Handle the case where
there's a display property at START, and move_it_to overshoots.
Do not merge to master. (Bug#54862)
---
src/xdisp.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 44f2536880b8..15bb5eefb56e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -10788,11 +10788,51 @@ include the height of any of these, if present, in the return value. */)
non-zero X coordinate. */
reseat_at_previous_visible_line_start (&it);
it.current_x = it.hpos = 0;
+
+ int start_x;
if (IT_CHARPOS (it) != start)
- move_it_to (&it, start, -1, -1, -1, MOVE_TO_POS);
+ {
+ void *it1data = NULL;
+ struct it it1;
+
+ SAVE_IT (it1, it, it1data);
+ move_it_to (&it, start, -1, -1, -1, MOVE_TO_POS);
+ /* We could have a display property at START, in which case
+ asking move_it_to to stop at START will overshoot and stop at
+ position after START. So we try again, stopping before
+ START, and account for the width of the last buffer position
+ manually. */
+ if (IT_CHARPOS (it) > start && start > BEGV)
+ {
+ ptrdiff_t it1pos = IT_CHARPOS (it1);
+ int it1_x = it1.current_x;
+
+ RESTORE_IT (&it, &it1, it1data);
+ /* If START - 1 is the beginning of screen line, move_it_to
+ will not move, so we need to use a lower-level
+ move_it_in_display_line subroutine, and tell it to move
+ just 1 pixel, so it stops at the next display element. */
+ if (start - 1 > it1pos)
+ move_it_to (&it, start - 1, -1, -1, -1, MOVE_TO_POS);
+ else
+ move_it_in_display_line (&it, start, it1_x + 1,
+ MOVE_TO_POS | MOVE_TO_X);
+ start_x = it.current_x;
+ /* If we didn't change our buffer position, the pixel width
+ of what's here was not yet accounted for; do it manually. */
+ if (IT_CHARPOS (it) == start - 1)
+ start_x += it.pixel_width;
+ }
+ else
+ {
+ start_x = it.current_x;
+ bidi_unshelve_cache (it1data, true);
+ }
+ }
+ else
+ start_x = it.current_x;
/* Now move to TO. */
- int start_x = it.current_x;
int move_op = MOVE_TO_POS | MOVE_TO_Y;
int to_x = -1;
it.current_y = start_y;
From ab2b822b9bbac321ec061de349cf0166cc406fe7 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Wed, 13 Apr 2022 06:07:32 +0200
Subject: [PATCH 068/466] Revert "Make cl-concatenate an alias of
seq-concatenate"
This reverts commit 78f76fe16e2737b40694f82af28d17a90a21ed7b.
The commit made calls to cl-concatenate bug out, since
autoloading defalises doesn't work very well (bug#54901).
---
lisp/emacs-lisp/cl-extra.el | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index ed9b1b7d836c..fd94554ca193 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -554,9 +554,10 @@ too large if positive or too small if negative)."
(seq-subseq seq start end))
;;;###autoload
-(defalias 'cl-concatenate #'seq-concatenate
+(defun cl-concatenate (type &rest sequences)
"Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
-\n(fn TYPE SEQUENCE...)")
+\n(fn TYPE SEQUENCE...)"
+ (apply #'seq-concatenate type sequences))
;;; List functions.
From 5ee959aa8783689627a1553c678fd4d3720236c8 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Wed, 13 Apr 2022 06:11:43 +0200
Subject: [PATCH 069/466] Add a comment about cl-concatenate
* lisp/emacs-lisp/cl-extra.el (cl-concatenate): Add a comment.
---
lisp/emacs-lisp/cl-extra.el | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index fd94554ca193..8e38df43c876 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -553,6 +553,9 @@ too large if positive or too small if negative)."
,new)))))
(seq-subseq seq start end))
+;;; This isn't a defalias because autoloading defalises doesn't work
+;;; very well.
+
;;;###autoload
(defun cl-concatenate (type &rest sequences)
"Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
From 880f2734c95cec7ee6a9eec596e86543508415cd Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Wed, 13 Apr 2022 16:07:40 +0300
Subject: [PATCH 070/466] A better fix for bug#54800
* lisp/calc/calc.el (calc-align-stack-window): Improve scrolling
when windows have non-integral dimensions.
---
lisp/calc/calc.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 2f9afa02af8c..171f77113247 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1815,7 +1815,7 @@ See calc-keypad for details."
(if win
(progn
(calc-cursor-stack-index 0)
- (vertical-motion (- 3 (window-height win)))
+ (vertical-motion (- 3 (window-height win 'floor)))
(set-window-start win (point)))))
(calc-cursor-stack-index 0)
(if (looking-at " *\\.$")
From b201823f631082d4f386304ee9ec24b0d85f5def Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 14 Apr 2022 09:17:01 +0300
Subject: [PATCH 071/466] Describe problems with invoking Python on MS-Windows
* etc/PROBLEMS: Describe problems with running an inferior Python
interpreter due to the MS-Windows "App Execution Aliases" feature.
(Bug#54860)
---
etc/PROBLEMS | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index e48ce5a8b0cd..5e88f289c26c 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -651,6 +651,46 @@ And then rename the system's readline so that it won't be loaded:
See for more details on
installation.
+*** On MS-Windows, invoking "M-x run-python" signals an error.
+
+If the error says something like this:
+
+ Python was not found; run with arguments to install
+ from the Microsoft Store, or disable this shortcut
+ from Settings > Manage App Execution Aliases.
+
+ Process Python exited abnormally with code 49
+
+then this is due to the MS-Windows "feature" that is intended to
+encourage you to install the latest available Python version. It
+works by placing "fake" python.exe and python3.exe executables in a
+special directory, and having that directory on your Path _before_ the
+directory where the real Python executable is installed. That "fake"
+Python then decides whether to redirect you to the Microsoft Store or
+invoke the actual Python. The directory where Windows keeps those
+"fake" executables is under your Windows user's 'AppData' directory,
+typically 'C:\Users\\AppData\Local\Microsoft\WindowsApps', where
+"" is the user name of your Windows user.
+
+To solve this, you have several alternatives:
+
+ . Go to "Settings > Manage App Execution Aliases" and turn OFF the
+ aliases for python.exe and/or python3.exe. This will affect only
+ Python, and may require you to manage upgrades to your Python
+ installation manually, instead of being automatically prompted by
+ MS-Windows.
+ . Move the directory with the "fake" executables to the end of Path,
+ or at least after the directory where the real Python is
+ installed. Depending on the position in Path where you move it,
+ it will affect Python and/or other programs which Windows monitors
+ via the "App Execution Aliases" feature.
+ . Manually remove python.exe and/or python3.exe from the above
+ directory. Again, this affects only your Python installation.
+
+Whatever you do, you will need to restart Emacs to refresh its notion
+of the directory where python.exe/python3.exe lives, because that is
+recorded when Python mode is started.
+
*** Visiting files in some auto-mounted directories causes Emacs to print
'Error reading dir-locals: (file-error "Read error" "is a directory" ...'
From bc636515884530f0cab6fa53b8cbce0aacbc5287 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Sun, 14 Nov 2021 02:38:48 +0100
Subject: [PATCH 072/466] Make all vc-*-responsible-p functions return a string
* lisp/vc/vc-sccs.el (vc-sccs-responsible-p):
* lisp/vc/vc-rcs.el (vc-rcs-responsible-p):
* lisp/vc/vc-dav.el (vc-dav-responsible-p):
* lisp/vc/vc-cvs.el (vc-cvs-responsible-p): Return a file name
instead of t when we get a match (which is what
vc-backend-for-registration expects) (bug#51800).
This fixes the regression reported in bug#54935.
Do not merge to master.
---
lisp/vc/vc-cvs.el | 9 +++++----
lisp/vc/vc-dav.el | 4 ++--
lisp/vc/vc-rcs.el | 9 +++++----
lisp/vc/vc-sccs.el | 10 +++++++---
4 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index 559bb25d0912..e4524db951bd 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -309,10 +309,11 @@ to the CVS command."
(defun vc-cvs-responsible-p (file)
"Return non-nil if CVS thinks it is responsible for FILE."
- (file-directory-p (expand-file-name "CVS"
- (if (file-directory-p file)
- file
- (file-name-directory file)))))
+ (let ((dir (if (file-directory-p file)
+ file
+ (file-name-directory file))))
+ (and (file-directory-p (expand-file-name "CVS" dir))
+ dir)))
(defun vc-cvs-could-register (file)
"Return non-nil if FILE could be registered in CVS.
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 1cc447fe0f99..61e2cd239007 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -136,10 +136,10 @@ It should return a status of either 0 (no differences found), or
"Find the version control state of all files in DIR in a fast way."
)
-(defun vc-dav-responsible-p (_url)
+(defun vc-dav-responsible-p (url)
"Return non-nil if DAV considers itself `responsible' for URL."
;; Check for DAV support on the web server.
- t)
+ (and t url))
;;; Unimplemented functions
;;
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 4137ece8d611..dc6f3c891592 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -290,10 +290,11 @@ to the RCS command."
(defun vc-rcs-responsible-p (file)
"Return non-nil if RCS thinks it would be responsible for registering FILE."
;; TODO: check for all the patterns in vc-rcs-master-templates
- (file-directory-p (expand-file-name "RCS"
- (if (file-directory-p file)
- file
- (file-name-directory file)))))
+ (let ((dir (if (file-directory-p file)
+ file
+ (file-name-directory file))))
+ (and (file-directory-p (expand-file-name "RCS" dir))
+ dir)))
(defun vc-rcs-receive-file (file rev)
"Implementation of receive-file for RCS."
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 2ca848dae163..ef64cd9d580f 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -214,9 +214,13 @@ to the SCCS command."
(defun vc-sccs-responsible-p (file)
"Return non-nil if SCCS thinks it would be responsible for registering FILE."
;; TODO: check for all the patterns in vc-sccs-master-templates
- (or (file-directory-p (expand-file-name "SCCS" (file-name-directory file)))
- (stringp (vc-sccs-search-project-dir (or (file-name-directory file) "")
- (file-name-nondirectory file)))))
+ (or (and (file-directory-p
+ (expand-file-name "SCCS" (file-name-directory file)))
+ file)
+ (let ((dir (vc-sccs-search-project-dir (or (file-name-directory file) "")
+ (file-name-nondirectory file))))
+ (and (stringp dir)
+ dir))))
(defun vc-sccs-checkin (files comment &optional rev)
"SCCS-specific version of `vc-backend-checkin'."
From 803ac857eef1ab25488d0bf0c9460dd2d89bd5d1 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 15 Apr 2022 12:03:36 +0300
Subject: [PATCH 073/466] Fix cursor motion under truncate-lines with Flymake
fringe indicator
* src/indent.c (Fvertical_motion): Don't consider fringe bitmaps
as "images" for the purpose of vertical-motion logic dealing with
overshooting buffer positions. (Bug#54946)
---
src/indent.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/indent.c b/src/indent.c
index 9f1a448a73a2..f5a2a078b980 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2197,7 +2197,10 @@ whether or not it is currently displayed in some window. */)
}
else
it_overshoot_count =
- !(it.method == GET_FROM_IMAGE || it.method == GET_FROM_STRETCH);
+ /* If image_id is negative, it's a fringe bitmap, which by
+ definition doesn't affect display in the text area. */
+ !((it.method == GET_FROM_IMAGE && it.image_id >= 0)
+ || it.method == GET_FROM_STRETCH);
if (start_x_given)
{
From 3f166bdf44f7a3c06ade0643995a870cfcc28677 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 15 Apr 2022 15:38:06 +0300
Subject: [PATCH 074/466] ; * etc/PROBLEMS: Describe MS-Windows issues with
fonts. (Bug#54685)
---
etc/PROBLEMS | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 5e88f289c26c..2a26dfaec4d2 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1062,6 +1062,21 @@ modern fonts are used, such as Noto Emoji or Ebrima.
The solution is to switch to a configuration that uses HarfBuzz as its
shaping engine, where these problems don't exist.
+** On MS-Windows, selecting some fonts as the default font doesn't work.
+
+This can happen if you select font variants such as "Light" or "Thin"
+or "Semibold" or "Heavy", and some others. The APIs used by Emacs on
+Windows to enumerate fonts in a font family consider only 4 font
+variants to belong to the same family: Regular, Italic, Bold, and
+Bold-Italic. All the other variants aren't returned by those APIs
+when we request to list all the fonts in a family, and thus aren't
+considered by Emacs to belong to the family. So any font variant that
+is not one of those 4 will likely not work as expected; in most cases
+Emacs will select some other font instead.
+
+The only workaround is not to choose such font variants as the default
+font when running Emacs on MS-Windows.
+
* Internationalization problems
** M-{ does not work on a Spanish PC keyboard.
From a8bb12ab054e063718687c0d8565ff9e7276585a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 15 Apr 2022 23:03:15 +0300
Subject: [PATCH 075/466] Improve discoverability of 'insert-directory-program'
* lisp/files.el (insert-directory-program): Mention 'dired' in the
doc string.
* lisp/dired.el (dired): Mention 'insert-directory-program' in the
doc string. (Bug#54962)
---
lisp/dired.el | 7 +++++--
lisp/files.el | 4 +++-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/lisp/dired.el b/lisp/dired.el
index a3768d224b4c..f5ddd7aa39fe 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -994,8 +994,11 @@ If a directory or nothing is found at point, return nil."
;;;###autoload
(defun dired (dirname &optional switches)
"\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.
-Optional second argument SWITCHES specifies the `ls' options used.
-\(Interactively, use a prefix argument to be able to specify SWITCHES.)
+Optional second argument SWITCHES specifies the options to be used
+when invoking `insert-directory-program', usually `ls', which produces
+the listing of the directory files and their attributes.
+Interactively, a prefix argument will cause the command to prompt
+for SWITCHES.
If DIRNAME is a string, Dired displays a list of files in DIRNAME (which
may also have shell wildcards appended to select certain files).
diff --git a/lisp/files.el b/lisp/files.el
index 5fa38e46af0e..d8e7989672ad 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -7236,7 +7236,9 @@ need to be passed verbatim to shell commands."
(defvar insert-directory-program (purecopy "ls")
- "Absolute or relative name of the `ls' program used by `insert-directory'.")
+ "Absolute or relative name of the `ls'-like program.
+This is used by `insert-directory' and `dired-insert-directory'
+\(thus, also by `dired').")
(defcustom directory-free-space-program (purecopy "df")
"Program to get the amount of free space on a file system.
From 9da744e45021648a37f175967b536b151fd18750 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 16 Apr 2022 10:56:01 +0300
Subject: [PATCH 076/466] Fix documentation of Outline minor mode options
* lisp/outline.el (outline-minor-mode-cycle-filter)
(outline-minor-mode-cycle, outline-minor-mode-highlight)
(outline-cycle, outline-cycle-buffer): Doc fixes. (Bug#54967)
---
lisp/outline.el | 73 +++++++++++++++++++++++++++++++++----------------
1 file changed, 49 insertions(+), 24 deletions(-)
diff --git a/lisp/outline.el b/lisp/outline.el
index ac51b53de3da..00a557ca4e88 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -176,13 +176,22 @@ in the file it applies to.")
map))
(defcustom outline-minor-mode-cycle-filter nil
- "Filter out positions on the heading available for cycling."
+ "Control where on a heading the visibility-cycling commands are bound to keys.
+This option controls, in Outline minor mode, where on a heading typing
+the key sequences bound to visibility-cycling commands like `outline-cycle'
+and `outline-cycle-buffer' will invoke those commands. By default, you can
+invoke these commands by typing `TAB' and `S-TAB' anywhere on a heading line,
+but customizing this option can make those bindings be in effect only at
+specific positions on the heading, like only at the line's beginning or
+line's end. This allows these keys to be bound to their usual commands,
+as determined by the major mode, elsewhere on the heading lines.
+This option is only in effect when `outline-minor-mode-cycle' is non-nil."
:type '(choice (const :tag "Everywhere" nil)
(const :tag "At line beginning" bolp)
(const :tag "Not at line beginning"
(lambda () (not (bolp))))
(const :tag "At line end" eolp)
- (function :tag "Custom filter"))
+ (function :tag "Custom filter function"))
:version "28.1")
(defun outline-minor-mode-cycle--bind (map key binding &optional filter)
@@ -349,28 +358,33 @@ After that, changing the prefix key requires manipulating keymaps."
(set-default sym val)))
(defcustom outline-minor-mode-cycle nil
- "Enable cycling of headings in `outline-minor-mode'.
-When enabled, it puts a keymap with cycling keys on heading lines.
-When point is on a heading line, then typing `TAB' cycles between `hide all',
-`headings only' and `show all' (`outline-cycle'). Typing `S-TAB' on
-a heading line cycles the whole buffer (`outline-cycle-buffer').
-Typing these keys anywhere outside heading lines uses their default bindings."
+ "Enable visibility-cycling commands on headings in `outline-minor-mode'.
+If enabled, typing `TAB' on a heading line cycles the visibility
+state of that heading's body between `hide all', `headings only'
+and `show all' (`outline-cycle'), and typing `S-TAB' on a heading
+line likewise cycles the visibility state of the whole buffer
+\(`outline-cycle-buffer').
+Typing these keys anywhere outside heading lines invokes their default
+bindings, per the current major mode."
:type 'boolean
:version "28.1")
;;;###autoload(put 'outline-minor-mode-cycle 'safe-local-variable 'booleanp)
(defcustom outline-minor-mode-highlight nil
- "Highlight headings in `outline-minor-mode' using font-lock keywords.
-Non-nil value works well only when outline font-lock keywords
-don't conflict with the major mode's font-lock keywords.
-When t, it puts outline faces only if there are no major mode's faces
-on headings. When `override', it completely overwrites major mode's
-faces with outline faces. When `append', it tries to append outline
-faces to major mode's faces."
- :type '(choice (const :tag "No highlighting" nil)
- (const :tag "Overwrite major mode faces" override)
- (const :tag "Append outline faces to major mode faces" append)
- (const :tag "Highlight separately from major mode faces" t))
+ "Whether to highlight headings in `outline-minor-mode' using font-lock keywords.
+This option controles whether `outline-minor-mode' will use its font-lock
+keywords to highlight headings, which could potentially conflict with
+font-lock faces defined by the major mode. Thus, a non-nil value will
+work well only when there's no such conflict.
+If the value is t, use outline faces only if there are no major mode's
+font-lock faces on headings. When `override', completely overwrite major
+mode's font-lock faces with outline faces. When `append', try to append
+outline font-lock faces to those of major mode."
+ :type '(choice (const :tag "Do not use outline font-lock highlighting" nil)
+ (const :tag "Overwrite major mode font-lock faces" override)
+ (const :tag "Append outline font-lock faces to major mode's"
+ append)
+ (const :tag "Highlight with outline font-lock faces only if major mode doesn't" t))
:version "28.1")
;;;###autoload(put 'outline-minor-mode-highlight 'safe-local-variable 'symbolp)
@@ -1244,11 +1258,14 @@ Return either 'hide-all, 'headings-only, or 'show-all."
(save-excursion (outline-end-of-subtree) (point)))))
(defun outline-cycle ()
- "Cycle between `hide all', `headings only' and `show all'.
+ "Cycle visibility state of the current heading line's body.
-`Hide all' means hide all subheadings and their bodies.
-`Headings only' means show sub headings but not their bodies.
-`Show all' means show all subheadings and their bodies."
+This cycles the visibility of the current heading line's subheadings
+and body between `hide all', `headings only' and `show all'.
+
+`Hide all' means hide all the subheadings and their bodies.
+`Headings only' means show the subheadings, but not their bodies.
+`Show all' means show all the subheadings and their bodies."
(interactive)
(condition-case nil
(pcase (outline--cycle-state)
@@ -1270,7 +1287,15 @@ Return either 'hide-all, 'headings-only, or 'show-all."
"Internal variable used for tracking buffer cycle state.")
(defun outline-cycle-buffer ()
- "Cycle the whole buffer like in `outline-cycle'."
+ "Cycle visibility state of the body lines of the whole buffer.
+
+This cycles the visibility of all the subheadings and bodies of all
+the heading lines in the buffer. It cycles them between `hide all',
+`headings only' and `show all'.
+
+`Hide all' means hide all the buffer's subheadings and their bodies.
+`Headings only' means show all the subheadings, but not their bodies.
+`Show all' means show all the buffer's subheadings and their bodies."
(interactive)
(let (has-top-level)
(save-excursion
From 855e15dbf10a6aac42b860fdb28711f979e2bf22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?=
Date: Sat, 16 Apr 2022 11:33:14 +0200
Subject: [PATCH 077/466] Fix builds on older versions of macOS
This adds back macOS-specific code replaced earlier (bug#48548),
specifically to fix build errors on macOS 10.7.5. See discussion at
https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg00779.html .
* src/sysdep.c (HAVE_RUSAGE_INFO_CURRENT, HAVE_PROC_PIDINFO): New.
(system_process_attributes): Use alternative code or exclude features
when building on older macOS versions.
---
src/sysdep.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/sysdep.c b/src/sysdep.c
index 1e630835add3..f6d7d3920bda 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -4027,6 +4027,9 @@ system_process_attributes (Lisp_Object pid)
#elif defined DARWIN_OS
+#define HAVE_RUSAGE_INFO_CURRENT (MAC_OS_X_VERSION_MIN_REQUIRED >= 101000)
+#define HAVE_PROC_PIDINFO (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050)
+
Lisp_Object
system_process_attributes (Lisp_Object pid)
{
@@ -4130,6 +4133,7 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Qtpgid, INT_TO_INTEGER (proc.kp_eproc.e_tpgid)),
attrs);
+#if HAVE_RUSAGE_INFO_CURRENT
rusage_info_current ri;
if (proc_pid_rusage(proc_id, RUSAGE_INFO_CURRENT, (rusage_info_t *) &ri) == 0)
{
@@ -4143,6 +4147,24 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Qmajflt, INT_TO_INTEGER (ri.ri_pageins)), attrs);
}
+#else /* !HAVE_RUSAGE_INFO_CURRENT */
+ struct rusage *rusage = proc.kp_proc.p_ru;
+ if (rusage)
+ {
+ attrs = Fcons (Fcons (Qminflt, INT_TO_INTEGER (rusage->ru_minflt)),
+ attrs);
+ attrs = Fcons (Fcons (Qmajflt, INT_TO_INTEGER (rusage->ru_majflt)),
+ attrs);
+
+ attrs = Fcons (Fcons (Qutime, make_lisp_timeval (rusage->ru_utime)),
+ attrs);
+ attrs = Fcons (Fcons (Qstime, make_lisp_timeval (rusage->ru_stime)),
+ attrs);
+ struct timespec t = timespec_add (timeval_to_timespec (rusage->ru_utime),
+ timeval_to_timespec (rusage->ru_stime));
+ attrs = Fcons (Fcons (Qtime, make_lisp_time (t)), attrs);
+ }
+#endif /* !HAVE_RUSAGE_INFO_CURRENT */
starttime = proc.kp_proc.p_starttime;
attrs = Fcons (Fcons (Qnice, make_fixnum (proc.kp_proc.p_nice)), attrs);
@@ -4152,6 +4174,7 @@ system_process_attributes (Lisp_Object pid)
t = timespec_sub (now, timeval_to_timespec (starttime));
attrs = Fcons (Fcons (Qetime, make_lisp_time (t)), attrs);
+#if HAVE_PROC_PIDINFO
struct proc_taskinfo taskinfo;
if (proc_pidinfo (proc_id, PROC_PIDTASKINFO, 0, &taskinfo, sizeof (taskinfo)) > 0)
{
@@ -4159,6 +4182,7 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Qrss, make_fixnum (taskinfo.pti_resident_size / 1024)), attrs);
attrs = Fcons (Fcons (Qthcount, make_fixnum (taskinfo.pti_threadnum)), attrs);
}
+#endif /* HAVE_PROC_PIDINFO */
#ifdef KERN_PROCARGS2
char args[ARG_MAX];
From dc3d1628ecd7c0090c07480606e921a1f8f348a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?=
Date: Sat, 16 Apr 2022 12:16:45 +0200
Subject: [PATCH 078/466] ; * src/sysdep.c: Fix mistake in previous commit
---
src/sysdep.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/sysdep.c b/src/sysdep.c
index f6d7d3920bda..72be25f66104 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -4027,8 +4027,8 @@ system_process_attributes (Lisp_Object pid)
#elif defined DARWIN_OS
-#define HAVE_RUSAGE_INFO_CURRENT (MAC_OS_X_VERSION_MIN_REQUIRED >= 101000)
-#define HAVE_PROC_PIDINFO (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050)
+#define HAVE_RUSAGE_INFO_CURRENT (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101000)
+#define HAVE_PROC_PIDINFO (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1050)
Lisp_Object
system_process_attributes (Lisp_Object pid)
From d53c999b4ad7bc1f730875ae3d1af9d11895807c Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Thu, 14 Apr 2022 16:51:39 +0200
Subject: [PATCH 079/466] Further vcs-cvs/rcs-responsible-p updates from master
* lisp/vc/vc-bzr.el (vc-bzr-responsible-p):
* lisp/vc/vc-sccs.el (vc-sccs-responsible-p):
* lisp/vc/vc-dav.el (vc-dav-responsible-p): Update doc string.
* lisp/vc/vc-rcs.el (vc-rcs-responsible-p):
* lisp/vc/vc-cvs.el (vc-cvs-responsible-p): Further fixes from
master.
* lisp/vc/vc-src.el (vc-src-responsible-p): Return the directory.
* lisp/vc/vc.el: Update comments.
---
lisp/vc/vc-bzr.el | 2 +-
lisp/vc/vc-cvs.el | 4 ++--
lisp/vc/vc-dav.el | 4 ++--
lisp/vc/vc-rcs.el | 4 ++--
lisp/vc/vc-sccs.el | 2 +-
lisp/vc/vc-src.el | 12 +++++++-----
lisp/vc/vc.el | 2 +-
7 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 836630acb5de..ee394a93af46 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -640,7 +640,7 @@ Returns nil if unable to find this information."
;; Could run `bzr status' in the directory and see if it succeeds, but
;; that's relatively expensive.
(defalias 'vc-bzr-responsible-p #'vc-bzr-root
- "Return non-nil if FILE is (potentially) controlled by bzr.
+ "Return the directory if FILE is (potentially) controlled by bzr.
The criterion is that there is a `.bzr' directory in the same
or a superior directory.")
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index e4524db951bd..8f06d5a847a3 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -308,12 +308,12 @@ to the CVS command."
(vc-switches 'CVS 'register)))
(defun vc-cvs-responsible-p (file)
- "Return non-nil if CVS thinks it is responsible for FILE."
+ "Return the directory if CVS thinks it is responsible for FILE."
(let ((dir (if (file-directory-p file)
file
(file-name-directory file))))
(and (file-directory-p (expand-file-name "CVS" dir))
- dir)))
+ (file-name-directory (expand-file-name "CVS" dir)))))
(defun vc-cvs-could-register (file)
"Return non-nil if FILE could be registered in CVS.
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 61e2cd239007..94621599e4ab 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -137,9 +137,9 @@ It should return a status of either 0 (no differences found), or
)
(defun vc-dav-responsible-p (url)
- "Return non-nil if DAV considers itself `responsible' for URL."
+ "Return the URL if DAV considers itself `responsible' for URL."
;; Check for DAV support on the web server.
- (and t url))
+ url)
;;; Unimplemented functions
;;
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index dc6f3c891592..fb57b2bbc6ef 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -288,13 +288,13 @@ to the RCS command."
(match-string 1))))))
(defun vc-rcs-responsible-p (file)
- "Return non-nil if RCS thinks it would be responsible for registering FILE."
+ "Return the directory if RCS thinks it would be responsible for FILE."
;; TODO: check for all the patterns in vc-rcs-master-templates
(let ((dir (if (file-directory-p file)
file
(file-name-directory file))))
(and (file-directory-p (expand-file-name "RCS" dir))
- dir)))
+ (file-name-directory (expand-file-name "RCS" dir)))))
(defun vc-rcs-receive-file (file rev)
"Implementation of receive-file for RCS."
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index ef64cd9d580f..0df70c8f2328 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -212,7 +212,7 @@ to the SCCS command."
(vc-sccs-do-command nil 0 "get" (vc-master-name file)))))
(defun vc-sccs-responsible-p (file)
- "Return non-nil if SCCS thinks it would be responsible for registering FILE."
+ "Return the directory if SCCS thinks it would be responsible for FILE."
;; TODO: check for all the patterns in vc-sccs-master-templates
(or (and (file-directory-p
(expand-file-name "SCCS" (file-name-directory file)))
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index 1c1a7b5d1398..5a252c55cb28 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -242,11 +242,13 @@ This function differs from vc-do-command in that it invokes `vc-src-program'."
(vc-src-command nil files "add"))
(defun vc-src-responsible-p (file)
- "Return non-nil if SRC thinks it would be responsible for registering FILE."
- (file-directory-p (expand-file-name ".src"
- (if (file-directory-p file)
- file
- (file-name-directory file)))))
+ "Return the directory if SRC thinks it would be responsible for FILE."
+ (let ((dir (expand-file-name ".src"
+ (if (file-directory-p file)
+ file
+ (file-name-directory file)))))
+ (and (file-directory-p dir)
+ dir)))
(defun vc-src-checkin (files comment &optional _rev)
"SRC-specific version of `vc-backend-checkin'.
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 45c09ae1c6a2..bebd0946deef 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -220,7 +220,7 @@
;;
;; - responsible-p (file)
;;
-;; Return non-nil if this backend considers itself "responsible" for
+;; Return the directory if this backend considers itself "responsible" for
;; FILE, which can also be a directory. This function is used to find
;; out what backend to use for registration of new files and for things
;; like change log generation. The default implementation always
From 1c495aff71fc798b7b9663c3a35055badafded97 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Sat, 16 Apr 2022 16:24:39 +0200
Subject: [PATCH 080/466] Clarify when mode tagging is used
* etc/NEWS: Clarify when mode tagging is used (bug#54964).
---
etc/NEWS | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 7fb8e8dce8ef..49960291990d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3240,12 +3240,13 @@ completing on commands from buffers in major modes derived from
MODE..., or, if it's a minor mode, when that minor mode is enabled in
the current buffer.
-Note that these forms will only have their effect if the
+Note that these forms will only have their effect for 'M-x' if the
'read-extended-command-predicate' user option is customized to call
'command-completion-default-include-p' or a similar function. The
default value of 'read-extended-command-predicate' is nil, which means
no commands that match what you have typed are excluded from being
-completion candidates.
+completion candidates. The forms will, however, be used by 'M-S-x' by
+default.
** 'define-minor-mode' now takes an ':interactive' argument.
This can be used for specifying which modes this minor mode is meant
From 4641bc1c550a81c71798c0176a6bfc34c8947c74 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Sun, 17 Apr 2022 01:06:46 -0700
Subject: [PATCH 081/466] Fix GC bug in filelock.c
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix a bug where if GC occurred at the wrong moment when locking a
file, the lock file’s name was trashed so file locking did not work.
This bug was introduced in Emacs 28.1. The bug sometimes caused
filelock-tests-detect-external-change test failures on Fedora 35
x86-64 in an en_US.utf8 locale.
* src/filelock.c (lock_file_1, current_lock_owner, lock_if_free)
(lock_file, unlock_file, Ffile_locked_p):
Use Lisp_Object, not char *, for string, so that GC doesn’t trash
string contents.
(make_lock_file_name): Return the encoded name, not the original.
All callers changed.
---
src/filelock.c | 48 +++++++++++++++++++++++-------------------------
1 file changed, 23 insertions(+), 25 deletions(-)
diff --git a/src/filelock.c b/src/filelock.c
index e1e2cc1b23e7..25b35feb02bd 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -413,14 +413,13 @@ create_lock_file (char *lfname, char *lock_info_str, bool force)
Return 0 if successful, an error number on failure. */
static int
-lock_file_1 (char *lfname, bool force)
+lock_file_1 (Lisp_Object lfname, bool force)
{
- /* Call this first because it can GC. */
intmax_t boot = get_boot_time ();
-
Lisp_Object luser_name = Fuser_login_name (Qnil);
- char const *user_name = STRINGP (luser_name) ? SSDATA (luser_name) : "";
Lisp_Object lhost_name = Fsystem_name ();
+
+ char const *user_name = STRINGP (luser_name) ? SSDATA (luser_name) : "";
char const *host_name = STRINGP (lhost_name) ? SSDATA (lhost_name) : "";
char lock_info_str[MAX_LFINFO + 1];
intmax_t pid = getpid ();
@@ -439,7 +438,7 @@ lock_file_1 (char *lfname, bool force)
user_name, host_name, pid))
return ENAMETOOLONG;
- return create_lock_file (lfname, lock_info_str, force);
+ return create_lock_file (SSDATA (lfname), lock_info_str, force);
}
/* Return true if times A and B are no more than one second apart. */
@@ -496,7 +495,7 @@ read_lock_data (char *lfname, char lfinfo[MAX_LFINFO + 1])
or an errno value if something is wrong with the locking mechanism. */
static int
-current_lock_owner (lock_info_type *owner, char *lfname)
+current_lock_owner (lock_info_type *owner, Lisp_Object lfname)
{
int ret;
lock_info_type local_owner;
@@ -510,7 +509,7 @@ current_lock_owner (lock_info_type *owner, char *lfname)
owner = &local_owner;
/* If nonexistent lock file, all is well; otherwise, got strange error. */
- lfinfolen = read_lock_data (lfname, owner->user);
+ lfinfolen = read_lock_data (SSDATA (lfname), owner->user);
if (lfinfolen < 0)
return errno == ENOENT || errno == ENOTDIR ? 0 : errno;
if (MAX_LFINFO < lfinfolen)
@@ -581,7 +580,7 @@ current_lock_owner (lock_info_type *owner, char *lfname)
/* The owner process is dead or has a strange pid, so try to
zap the lockfile. */
else
- return unlink (lfname) < 0 ? errno : 0;
+ return unlink (SSDATA (lfname)) < 0 ? errno : 0;
}
else
{ /* If we wanted to support the check for stale locks on remote machines,
@@ -600,7 +599,7 @@ current_lock_owner (lock_info_type *owner, char *lfname)
Return positive errno value if cannot lock for any other reason. */
static int
-lock_if_free (lock_info_type *clasher, char *lfname)
+lock_if_free (lock_info_type *clasher, Lisp_Object lfname)
{
int err;
while ((err = lock_file_1 (lfname, 0)) == EEXIST)
@@ -619,10 +618,14 @@ lock_if_free (lock_info_type *clasher, char *lfname)
return err;
}
+/* Return the encoded name of the lock file for FN, or nil if none. */
+
static Lisp_Object
make_lock_file_name (Lisp_Object fn)
{
- return call1 (Qmake_lock_file_name, Fexpand_file_name (fn, Qnil));
+ Lisp_Object lock_file_name = call1 (Qmake_lock_file_name,
+ Fexpand_file_name (fn, Qnil));
+ return !NILP (lock_file_name) ? ENCODE_FILE (lock_file_name) : Qnil;
}
/* lock_file locks file FN,
@@ -646,7 +649,6 @@ make_lock_file_name (Lisp_Object fn)
static Lisp_Object
lock_file (Lisp_Object fn)
{
- char *lfname = NULL;
lock_info_type lock_info;
/* Don't do locking while dumping Emacs.
@@ -655,13 +657,13 @@ lock_file (Lisp_Object fn)
if (will_dump_p ())
return Qnil;
+ Lisp_Object lfname = Qnil;
if (create_lockfiles)
{
/* Create the name of the lock-file for file fn */
- Lisp_Object lock_filename = make_lock_file_name (fn);
- if (NILP (lock_filename))
+ lfname = make_lock_file_name (fn);
+ if (NILP (lfname))
return Qnil;
- lfname = SSDATA (ENCODE_FILE (lock_filename));
}
/* See if this file is visited and has changed on disk since it was
@@ -670,11 +672,11 @@ lock_file (Lisp_Object fn)
if (!NILP (subject_buf)
&& NILP (Fverify_visited_file_modtime (subject_buf))
&& !NILP (Ffile_exists_p (fn))
- && !(lfname && current_lock_owner (NULL, lfname) == -2))
+ && !(!NILP (lfname) && current_lock_owner (NULL, lfname) == -2))
call1 (intern ("userlock--ask-user-about-supersession-threat"), fn);
/* Don't do locking if the user has opted out. */
- if (lfname)
+ if (!NILP (lfname))
{
/* Try to lock the lock. FIXME: This ignores errors when
lock_if_free returns a positive errno value. */
@@ -702,15 +704,12 @@ lock_file (Lisp_Object fn)
static Lisp_Object
unlock_file (Lisp_Object fn)
{
- char *lfname;
-
- Lisp_Object lock_filename = make_lock_file_name (fn);
- if (NILP (lock_filename))
+ Lisp_Object lfname = make_lock_file_name (fn);
+ if (NILP (lfname))
return Qnil;
- lfname = SSDATA (ENCODE_FILE (lock_filename));
int err = current_lock_owner (0, lfname);
- if (err == -2 && unlink (lfname) != 0 && errno != ENOENT)
+ if (err == -2 && unlink (SSDATA (lfname)) != 0 && errno != ENOENT)
err = errno;
if (0 < err)
report_file_errno ("Unlocking file", fn, err);
@@ -854,10 +853,9 @@ t if it is locked by you, else a string saying which user has locked it. */)
return call2 (handler, Qfile_locked_p, filename);
}
- Lisp_Object lock_filename = make_lock_file_name (filename);
- if (NILP (lock_filename))
+ Lisp_Object lfname = make_lock_file_name (filename);
+ if (NILP (lfname))
return Qnil;
- char *lfname = SSDATA (ENCODE_FILE (lock_filename));
owner = current_lock_owner (&locker, lfname);
switch (owner)
From 3cccf0a9107d585173e527550bbc45253624ca2e Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Sun, 17 Apr 2022 10:41:17 -0700
Subject: [PATCH 082/466] =?UTF-8?q?Don=E2=80=99t=20assume=20openat?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Use openat only on platforms with O_PATH.
This ports to OS X 10.9 and earlier.
Problem reported by Keith David Bershatsky in:
https://lists.gnu.org/r/emacs-devel/2022-04/msg00805.html
* lib-src/emacsclient.c (local_sockname): Use open, not openat.
* src/sysdep.c (sys_openat): New static function,
which uses openat only if O_PATH is defined.
(emacs_openat): Use it instead of openat.
(emacs_openat_noquit): Remove.
(emacs_open_noquit): Reimplement as per the old emacs_openat_noquit,
but use plain 'open'.
---
lib-src/emacsclient.c | 3 +--
src/sysdep.c | 29 ++++++++++++++++++-----------
2 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 57a5eff3bf62..217a38bc07f0 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -1412,8 +1412,7 @@ local_sockname (int s, char sockname[socknamesize], int tmpdirlen,
char *emacsdirend = sockname + tmpdirlen + suffixlen -
strlen(server_name) - 1;
*emacsdirend = '\0';
- int dir = openat (AT_FDCWD, sockname,
- O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
+ int dir = open (sockname, O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
*emacsdirend = '/';
if (dir < 0)
return errno;
diff --git a/src/sysdep.c b/src/sysdep.c
index 72be25f66104..f6d139421af7 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2302,6 +2302,20 @@ emacs_fstatat (int dirfd, char const *filename, void *st, int flags)
return r;
}
+static int
+sys_openat (int dirfd, char const *file, int oflags, int mode)
+{
+#ifdef O_PATH
+ return openat (dirfd, file, oflags, mode);
+#else
+ /* On platforms without O_PATH, emacs_openat's callers arrange for
+ DIRFD to be AT_FDCWD, so it should be safe to just call 'open'.
+ This ports to old platforms like OS X 10.9 that lack openat. */
+ eassert (dirfd == AT_FDCWD);
+ return open (file, oflags, mode);
+#endif
+}
+
/* Assuming the directory DIRFD, open FILE for Emacs use,
using open flags OFLAGS and mode MODE.
Use binary I/O on systems that care about text vs binary I/O.
@@ -2317,7 +2331,7 @@ emacs_openat (int dirfd, char const *file, int oflags, int mode)
if (! (oflags & O_TEXT))
oflags |= O_BINARY;
oflags |= O_CLOEXEC;
- while ((fd = openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
+ while ((fd = sys_openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
maybe_quit ();
return fd;
}
@@ -2330,26 +2344,19 @@ emacs_open (char const *file, int oflags, int mode)
/* Same as above, but doesn't allow the user to quit. */
-static int
-emacs_openat_noquit (int dirfd, const char *file, int oflags,
- int mode)
+int
+emacs_open_noquit (char const *file, int oflags, int mode)
{
int fd;
if (! (oflags & O_TEXT))
oflags |= O_BINARY;
oflags |= O_CLOEXEC;
do
- fd = openat (dirfd, file, oflags, mode);
+ fd = open (file, oflags, mode);
while (fd < 0 && errno == EINTR);
return fd;
}
-int
-emacs_open_noquit (char const *file, int oflags, int mode)
-{
- return emacs_openat_noquit (AT_FDCWD, file, oflags, mode);
-}
-
/* Open FILE as a stream for Emacs use, with mode MODE.
Act like emacs_open with respect to threads, signals, and quits. */
From c2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 17 Apr 2022 22:03:52 +0300
Subject: [PATCH 083/466] =?UTF-8?q?Revert=20"Don=E2=80=99t=20assume=20open?=
=?UTF-8?q?at"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 3cccf0a9107d585173e527550bbc45253624ca2e.
This is a change with far-reaching effects on MS-Windows at the least,
where file-related APIs are shadowed to support transparent support
for UTF-8 encoded file names. Making such changes on a stable branch
for the benefit of a proprietary platform with a 13-year old OS is a
tail wagging the dog. Please don't do that without discussing first.
---
lib-src/emacsclient.c | 3 ++-
src/sysdep.c | 29 +++++++++++------------------
2 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 217a38bc07f0..57a5eff3bf62 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -1412,7 +1412,8 @@ local_sockname (int s, char sockname[socknamesize], int tmpdirlen,
char *emacsdirend = sockname + tmpdirlen + suffixlen -
strlen(server_name) - 1;
*emacsdirend = '\0';
- int dir = open (sockname, O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
+ int dir = openat (AT_FDCWD, sockname,
+ O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
*emacsdirend = '/';
if (dir < 0)
return errno;
diff --git a/src/sysdep.c b/src/sysdep.c
index f6d139421af7..72be25f66104 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2302,20 +2302,6 @@ emacs_fstatat (int dirfd, char const *filename, void *st, int flags)
return r;
}
-static int
-sys_openat (int dirfd, char const *file, int oflags, int mode)
-{
-#ifdef O_PATH
- return openat (dirfd, file, oflags, mode);
-#else
- /* On platforms without O_PATH, emacs_openat's callers arrange for
- DIRFD to be AT_FDCWD, so it should be safe to just call 'open'.
- This ports to old platforms like OS X 10.9 that lack openat. */
- eassert (dirfd == AT_FDCWD);
- return open (file, oflags, mode);
-#endif
-}
-
/* Assuming the directory DIRFD, open FILE for Emacs use,
using open flags OFLAGS and mode MODE.
Use binary I/O on systems that care about text vs binary I/O.
@@ -2331,7 +2317,7 @@ emacs_openat (int dirfd, char const *file, int oflags, int mode)
if (! (oflags & O_TEXT))
oflags |= O_BINARY;
oflags |= O_CLOEXEC;
- while ((fd = sys_openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
+ while ((fd = openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
maybe_quit ();
return fd;
}
@@ -2344,19 +2330,26 @@ emacs_open (char const *file, int oflags, int mode)
/* Same as above, but doesn't allow the user to quit. */
-int
-emacs_open_noquit (char const *file, int oflags, int mode)
+static int
+emacs_openat_noquit (int dirfd, const char *file, int oflags,
+ int mode)
{
int fd;
if (! (oflags & O_TEXT))
oflags |= O_BINARY;
oflags |= O_CLOEXEC;
do
- fd = open (file, oflags, mode);
+ fd = openat (dirfd, file, oflags, mode);
while (fd < 0 && errno == EINTR);
return fd;
}
+int
+emacs_open_noquit (char const *file, int oflags, int mode)
+{
+ return emacs_openat_noquit (AT_FDCWD, file, oflags, mode);
+}
+
/* Open FILE as a stream for Emacs use, with mode MODE.
Act like emacs_open with respect to threads, signals, and quits. */
From 65c04e7115f329a083a16a364a8400e1685def61 Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 17 Apr 2022 15:30:39 -0400
Subject: [PATCH 084/466] Update to Org 9.5.2-38-g682ccd
---
doc/misc/org.org | 2 +-
lisp/org/oc-basic.el | 42 ++++++++++++++++++++++++++---------------
lisp/org/oc-biblatex.el | 7 +------
lisp/org/org-agenda.el | 17 +++++++++--------
lisp/org/org-compat.el | 29 ++++++++++++++++++++++++++++
lisp/org/org-table.el | 4 ++--
lisp/org/org-version.el | 2 +-
lisp/org/org.el | 10 ++++++++--
lisp/org/ox-html.el | 2 +-
9 files changed, 79 insertions(+), 36 deletions(-)
diff --git a/doc/misc/org.org b/doc/misc/org.org
index 60af81ea2cfa..3dce83c936bb 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -6405,7 +6405,7 @@ special repeaters =++= and =.+=. For example:
Marking this DONE shifts the date to one month after today.
,** TODO Wash my hands
- DEADLINE: <2019-04-05 08:00 Sun .+1h>
+ DEADLINE: <2019-04-05 08:00 Fri .+1h>
Marking this DONE shifts the date to exactly one hour from now.
#+end_example
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index 81b7e4471fd3..775690f17679 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/oc-basic.el
@@ -233,6 +233,8 @@ Return a hash table with citation references as keys and fields alist as values.
entries)))
entries))
+(defvar org-cite-basic--file-id-cache nil
+ "Hash table linking files to their hash.")
(defun org-cite-basic--parse-bibliography (&optional info)
"List all entries available in the buffer.
@@ -245,14 +247,19 @@ table where keys are references and values are association lists between fields,
as symbols, and values as strings or nil.
Optional argument INFO is the export state, as a property list."
+ (unless (hash-table-p org-cite-basic--file-id-cache)
+ (setq org-cite-basic--file-id-cache (make-hash-table :test #'equal)))
(if (plist-member info :cite-basic/bibliography)
(plist-get info :cite-basic/bibliography)
(let ((results nil))
(dolist (file (org-cite-list-bibliography-files))
(when (file-readable-p file)
(with-temp-buffer
- (insert-file-contents file)
- (let* ((file-id (cons file (org-buffer-hash)))
+ (when (or (org-file-has-changed-p file)
+ (not (gethash file org-cite-basic--file-id-cache)))
+ (insert-file-contents file)
+ (puthash file (org-buffer-hash) org-cite-basic--file-id-cache))
+ (let* ((file-id (cons file (gethash file org-cite-basic--file-id-cache)))
(entries
(or (cdr (assoc file-id org-cite-basic--bibliography-cache))
(let ((table
@@ -727,19 +734,24 @@ Return nil if there are no bibliography files or no entries."
(t
(clrhash org-cite-basic--completion-cache)
(dolist (key (org-cite-basic--all-keys))
- (let ((completion
- (concat
- (let ((author (org-cite-basic--get-field 'author key nil t)))
- (if author
- (truncate-string-to-width
- (replace-regexp-in-string " and " "; " author)
- org-cite-basic-author-column-end nil ?\s)
- (make-string org-cite-basic-author-column-end ?\s)))
- org-cite-basic-column-separator
- (let ((date (org-cite-basic--get-year key nil 'no-suffix)))
- (format "%4s" (or date "")))
- org-cite-basic-column-separator
- (org-cite-basic--get-field 'title key nil t))))
+ (let* ((entry (org-cite-basic--get-entry
+ key
+ ;; Supply pre-calculated bibliography to avoid
+ ;; performance degradation.
+ (list :cite-basic/bibliography entries)))
+ (completion
+ (concat
+ (let ((author (org-cite-basic--get-field 'author entry nil 'raw)))
+ (if author
+ (truncate-string-to-width
+ (replace-regexp-in-string " and " "; " author)
+ org-cite-basic-author-column-end nil ?\s)
+ (make-string org-cite-basic-author-column-end ?\s)))
+ org-cite-basic-column-separator
+ (let ((date (org-cite-basic--get-year entry nil 'no-suffix)))
+ (format "%4s" (or date "")))
+ org-cite-basic-column-separator
+ (org-cite-basic--get-field 'title entry nil t))))
(puthash completion key org-cite-basic--completion-cache)))
(unless (map-empty-p org-cite-basic--completion-cache) ;no key
(puthash entries t org-cite-basic--completion-cache)
diff --git a/lisp/org/oc-biblatex.el b/lisp/org/oc-biblatex.el
index 3cc157ec9379..174725b42447 100644
--- a/lisp/org/oc-biblatex.el
+++ b/lisp/org/oc-biblatex.el
@@ -164,12 +164,7 @@ INFO is the export state, as a property list."
(mapconcat (lambda (r)
(org-cite-biblatex--atomic-arguments (list r) info))
(org-cite-get-references citation)
- "")
- ;; According to BibLaTeX manual, left braces or brackets
- ;; following a multicite command could be parsed as other
- ;; arguments. So we stop any further parsing by inserting
- ;; a \relax unconditionally.
- "\\relax")))
+ ""))))
(defun org-cite-biblatex--command (citation info base &optional multi no-opt)
"Return biblatex command using BASE name for CITATION object.
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index ae0058e037ef..71aac271f7b5 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -4859,7 +4859,7 @@ Press `\\[org-agenda-manipulate-query-add]', \
;;;###autoload
(defun org-todo-list (&optional arg)
- "Show all (not done) TODO entries from all agenda file in a single list.
+ "Show all (not done) TODO entries from all agenda files in a single list.
The prefix arg can be used to select a specific TODO keyword and limit
the list to these. When using `\\[universal-argument]', you will be prompted
for a keyword. A numeric prefix directly selects the Nth keyword in
@@ -5732,7 +5732,7 @@ displayed in agenda view."
(org-before-first-heading-p)
(and org-agenda-include-inactive-timestamps
(org-at-clock-log-p))
- (not (eq 'timestamp (org-element-type (org-element-context)))))
+ (not (org-at-timestamp-p 'agenda)))
(throw :skip nil))
(org-agenda-skip))
(let* ((pos (match-beginning 0))
@@ -7180,12 +7180,13 @@ The optional argument TYPE tells the agenda type."
(concat
(substring x 0 (match-end 1))
(unless (string= org-agenda-todo-keyword-format "")
- (format org-agenda-todo-keyword-format
- (match-string 2 x)))
- ;; Remove `display' property as the icon could leak
- ;; on the white space.
- (org-add-props " " (org-plist-delete (text-properties-at 0 x)
- 'display))
+ (format org-agenda-todo-keyword-format
+ (match-string 2 x)))
+ (unless (string= org-agenda-todo-keyword-format "")
+ ;; Remove `display' property as the icon could leak
+ ;; on the white space.
+ (org-add-props " " (org-plist-delete (text-properties-at 0 x)
+ 'display)))
(substring x (match-end 3)))))))
x)))
diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index 4ad87c84d03b..c26eb6f10ab1 100644
--- a/lisp/org/org-compat.el
+++ b/lisp/org/org-compat.el
@@ -71,6 +71,35 @@
(defvar org-table-tab-recognizes-table.el)
(defvar org-table1-hline-regexp)
+
+;;; Emacs < 29 compatibility
+
+(defvar org-file-has-changed-p--hash-table (make-hash-table :test #'equal)
+ "Internal variable used by `org-file-has-changed-p'.")
+
+(if (fboundp 'file-has-changed-p)
+ (defalias 'org-file-has-changed-p #'file-has-changed-p)
+ (defun org-file-has-changed-p (file &optional tag)
+ "Return non-nil if FILE has changed.
+The size and modification time of FILE are compared to the size
+and modification time of the same FILE during a previous
+invocation of `org-file-has-changed-p'. Thus, the first invocation
+of `org-file-has-changed-p' always returns non-nil when FILE exists.
+The optional argument TAG, which must be a symbol, can be used to
+limit the comparison to invocations with identical tags; it can be
+the symbol of the calling function, for example."
+ (let* ((file (directory-file-name (expand-file-name file)))
+ (remote-file-name-inhibit-cache t)
+ (fileattr (file-attributes file 'integer))
+ (attr (and fileattr
+ (cons (file-attribute-size fileattr)
+ (file-attribute-modification-time fileattr))))
+ (sym (concat (symbol-name tag) "@" file))
+ (cachedattr (gethash sym org-file-has-changed-p--hash-table)))
+ (when (not (equal attr cachedattr))
+ (puthash sym attr org-file-has-changed-p--hash-table)))))
+
+
;;; Emacs < 28.1 compatibility
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index c4daed166565..860fd6e56086 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -462,14 +462,14 @@ This may be useful when columns have been shrunk."
(when pos (goto-char pos))
(goto-char (line-beginning-position))
(let ((end (line-end-position)) str)
- (backward-char)
+ (goto-char (1- pos))
(while (progn (forward-char 1) (< (point) end))
(let ((ov (car (overlays-at (point)))))
(if (not ov)
(push (char-to-string (char-after)) str)
(push (overlay-get ov 'display) str)
(goto-char (1- (overlay-end ov))))))
- (format "%s" (mapconcat #'identity (reverse str) "")))))
+ (format "|%s" (mapconcat #'identity (reverse str) "")))))
(defvar-local org-table-header-overlay nil)
(defun org-table-header-set-header ()
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index e82dbbf398c9..5cc98e380663 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.2-25-gaf6f12"))
+ (let ((org-git-version "release_9.5.2-38-g682ccd"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index d656a51591e6..4524812c55f1 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -199,6 +199,7 @@ Stars are put in group 1 and the trimmed body in group 2.")
(declare-function org-update-radio-target-regexp "ol" ())
(defvar org-element-paragraph-separate)
+(defvar org-element--timestamp-regexp)
(defvar org-indent-indentation-per-level)
(defvar org-radio-target-regexp)
(defvar org-target-link-regexp)
@@ -15020,7 +15021,11 @@ When matching, the match groups are the following:
group 4: day name
group 5: hours, if any
group 6: minutes, if any"
- (let* ((regexp (if extended org-ts-regexp3 org-ts-regexp2))
+ (let* ((regexp (if extended
+ (if (eq extended 'agenda)
+ org-element--timestamp-regexp
+ org-ts-regexp3)
+ org-ts-regexp2))
(pos (point))
(match?
(let ((boundaries (org-in-regexp regexp)))
@@ -15051,7 +15056,8 @@ When matching, the match groups are the following:
((org-pos-in-match-range pos 8) 'minute)
((or (org-pos-in-match-range pos 4)
(org-pos-in-match-range pos 5)) 'day)
- ((and (> pos (or (match-end 8) (match-end 5)))
+ ((and (or (match-end 8) (match-end 5))
+ (> pos (or (match-end 8) (match-end 5)))
(< pos (match-end 0)))
(- pos (or (match-end 8) (match-end 5))))
(t 'day))))
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el
index 5de0b5d675cb..81ef002a0522 100644
--- a/lisp/org/ox-html.el
+++ b/lisp/org/ox-html.el
@@ -442,7 +442,7 @@ property on the headline itself.")
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
- .org-svg { width: 90%; }
+ .org-svg { }
"
"The default style specification for exported HTML files.
You can use `org-html-head' and `org-html-head-extra' to add to
From 4684b8e62f882b2a0f29d89a49bd5da8fad1218f Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 18 Apr 2022 10:37:14 +0200
Subject: [PATCH 085/466] Fix major-mode setting regression when there's a
mode: cookie
* lisp/files.el (hack-local-variables): Fix regression in setting
the major mode when there are mode: cookies in the file (bug#54993).
Do not merge to master.
---
lisp/files.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/files.el b/lisp/files.el
index d8e7989672ad..30e8da4da37c 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3887,7 +3887,7 @@ inhibited."
(with-demoted-errors "Directory-local variables error: %s"
;; Note this is a no-op if enable-local-variables is nil.
(hack-dir-local-variables))
- (let ((result (append (hack-local-variables--find-variables)
+ (let ((result (append (hack-local-variables--find-variables handle-mode)
(hack-local-variables-prop-line))))
(if (and enable-local-variables
(not (inhibit-local-variables-p)))
From 1b7736277114bf91012b817a4e2557625b7340a5 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 18 Apr 2022 13:17:32 +0200
Subject: [PATCH 086/466] Avoid hangs in python-mode with debug-on-error set
* lisp/progmodes/python.el (python-nav-end-of-statement): Avoid
using cl-assert here, because this is called from the font-lock
machinery, and if debug-on-error is set here, we'll hang Emacs
(bug#54996).
Do not merge to master.
---
lisp/progmodes/python.el | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index e6e8a37ad57b..70828cb223a2 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1620,23 +1620,20 @@ of the statement."
;; are somehow out of whack. This has been
;; observed when using `syntax-ppss' during
;; narrowing.
- (cl-assert (>= string-start last-string-end)
- :show-args
- "\
-Overlapping strings detected (start=%d, last-end=%d)")
- (goto-char string-start)
- (if (python-syntax-context 'paren)
- ;; Ended up inside a paren, roll again.
- (python-nav-end-of-statement t)
- ;; This is not inside a paren, move to the
- ;; end of this string.
- (goto-char (+ (point)
- (python-syntax-count-quotes
- (char-after (point)) (point))))
- (setq last-string-end
- (or (re-search-forward
- (rx (syntax string-delimiter)) nil t)
- (goto-char (point-max))))))
+ (when (>= string-start last-string-end)
+ (goto-char string-start)
+ (if (python-syntax-context 'paren)
+ ;; Ended up inside a paren, roll again.
+ (python-nav-end-of-statement t)
+ ;; This is not inside a paren, move to the
+ ;; end of this string.
+ (goto-char (+ (point)
+ (python-syntax-count-quotes
+ (char-after (point)) (point))))
+ (setq last-string-end
+ (or (re-search-forward
+ (rx (syntax string-delimiter)) nil t)
+ (goto-char (point-max)))))))
((python-syntax-context 'paren)
;; The statement won't end before we've escaped
;; at least one level of parenthesis.
From 1030cc18979453605e4f76ed46d1e93d6c71c68f Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Tue, 19 Apr 2022 18:08:20 +0200
Subject: [PATCH 087/466] Fix regression with multiple mode: entries in the
prop line
* lisp/files.el (hack-local-variables): Fix regression with multiple
mode: entries in the prop line.
Do not merge to master.
---
lisp/files.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/files.el b/lisp/files.el
index 30e8da4da37c..b187c0b3a0a5 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3888,7 +3888,7 @@ inhibited."
;; Note this is a no-op if enable-local-variables is nil.
(hack-dir-local-variables))
(let ((result (append (hack-local-variables--find-variables handle-mode)
- (hack-local-variables-prop-line))))
+ (hack-local-variables-prop-line handle-mode))))
(if (and enable-local-variables
(not (inhibit-local-variables-p)))
(progn
From 91d4898d5cceddd80456b6ce57ce2c5392aa1281 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Tue, 19 Apr 2022 13:48:06 +0200
Subject: [PATCH 088/466] Revert prompting changes in viper-cmd
* lisp/emulation/viper-cmd.el (viper-quote-region)
(viper-read-string-with-history, viper-query-replace): Revert
prompting changes done in 50512e3 -- the way viper prompts in
command mode is special (bug#55007).
Do not merge to master.
---
lisp/emulation/viper-cmd.el | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 2740a5b3e508..1f2f3ecfc384 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1786,7 +1786,7 @@ Undo previous insertion and inserts new."
(do-not-change-default t))
(setq quote-str
(viper-read-string-with-history
- "Quote string"
+ "Quote string: "
nil
'viper-quote-region-history
;; FIXME: Use comment-region.
@@ -1995,17 +1995,24 @@ problems."
#'viper-minibuffer-standard-hook
(if (or (not (listp old)) (eq (car old) 'lambda))
(list old) old))))
- (val ""))
+ (val "")
+ (padding "")
+ temp-msg)
(setq keymap (or keymap minibuffer-local-map)
initial (or initial "")
- viper-initial initial)
+ viper-initial initial
+ temp-msg (if default
+ (format "(default %s) " default)
+ ""))
(setq viper-incomplete-ex-cmd nil)
- (setq val (read-from-minibuffer (format-prompt prompt default)
- nil
- keymap nil history-var default))
- (setq minibuffer-setup-hook nil)
+ (setq val (read-from-minibuffer prompt
+ (concat temp-msg initial val padding)
+ keymap nil history-var))
+ (setq minibuffer-setup-hook nil
+ padding (viper-array-to-string (this-command-keys))
+ temp-msg "")
;; the following tries to be smart about what to put in history
(if (not (string= val (car (symbol-value history-var))))
(push val (symbol-value history-var)))
@@ -3819,7 +3826,7 @@ Null string will repeat previous search."
(let (buffer buffer-name)
(setq buffer-name
(funcall viper-read-buffer-function
- (format-prompt "Kill buffer"
+ (format "Kill buffer (%s): "
(buffer-name (current-buffer)))))
(setq buffer
(if (null buffer-name)
@@ -4165,8 +4172,8 @@ and regexp replace."
(interactive)
(let (str)
(setq str (viper-read-string-with-history
- (if viper-re-query-replace "Query replace regexp"
- "Query replace")
+ (if viper-re-query-replace "Query replace regexp: "
+ "Query replace: ")
nil ; no initial
'viper-replace1-history
(car viper-replace1-history) ; default
@@ -4181,7 +4188,7 @@ and regexp replace."
(query-replace-regexp
str
(viper-read-string-with-history
- (format-message "Query replace regexp `%s' with" str)
+ (format-message "Query replace regexp `%s' with: " str)
nil ; no initial
'viper-replace1-history
(car viper-replace1-history) ; default
@@ -4189,7 +4196,7 @@ and regexp replace."
(query-replace
str
(viper-read-string-with-history
- (format-message "Query replace `%s' with" str)
+ (format-message "Query replace `%s' with: " str)
nil ; no initial
'viper-replace1-history
(car viper-replace1-history) ; default
From e6c2a2497d8cc8c38c816507681d5d529cfdbf2e Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Tue, 19 Apr 2022 19:16:29 -0700
Subject: [PATCH 089/466] Update from gnulib
(cherry picked from commit 992cf3cb675e074079341cc54c3b16d37a8b9ca8)
This is a partial backport from master: it only includes the changes below.
* lib/mini-gmp.c (gmp_assert_nocarry): Avoid many Clang
unused-variable warnings when building with optimisation.
* lib/verify.h (_GL_HAVE__STATIC_ASSERT): Modify condition for using
_Static_assert to cope with older Apple builds of Clang exposing
misleading compiler version numbers. See discussion starting at
https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg00779.html
---
lib/mini-gmp.c | 1 +
lib/verify.h | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/mini-gmp.c b/lib/mini-gmp.c
index 8577b59ef6d0..14cabd12311a 100644
--- a/lib/mini-gmp.c
+++ b/lib/mini-gmp.c
@@ -90,6 +90,7 @@ see https://www.gnu.org/licenses/. */
#define gmp_assert_nocarry(x) do { \
mp_limb_t __cy = (x); \
assert (__cy == 0); \
+ (void) (__cy); \
} while (0)
#define gmp_clz(count, x) do { \
diff --git a/lib/verify.h b/lib/verify.h
index 07b2f4866f29..c2d2a5667065 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -34,7 +34,7 @@
#ifndef __cplusplus
# if (201112L <= __STDC_VERSION__ \
|| (!defined __STRICT_ANSI__ \
- && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 4 <= __clang_major__)))
+ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__)))
# define _GL_HAVE__STATIC_ASSERT 1
# endif
# if (202000L <= __STDC_VERSION__ \
From dbb2dd6939867abe50c0894be9ba4e09c96f6759 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Wed, 20 Apr 2022 20:00:15 +0300
Subject: [PATCH 090/466] ; Fix wording of "File Notifications" in the ELisp
manual
* doc/lispref/os.texi (File Notifications): Fix typos,
punctuation, and wording.
---
doc/lispref/os.texi | 57 ++++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 96cfff3f89b1..e7ce40b1f25f 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -3088,21 +3088,21 @@ This function removes the tray notification given by its unique
@cindex watch, for filesystem events
Several operating systems support watching of filesystems for changes
-of files. If configured properly, Emacs links a respective library
-like @file{inotify}, @file{kqueue}, @file{gfilenotify}, or
-@file{w32notify} statically. These libraries enable watching of
-filesystems on the local machine.
+to files or their attributes. If configured properly, Emacs links a
+respective library like @file{inotify}, @file{kqueue},
+@file{gfilenotify}, or @file{w32notify} statically. These libraries
+enable watching of filesystems on the local machine.
It is also possible to watch filesystems on remote machines,
-@pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}
+@pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}.
This does not depend on one of the libraries linked to Emacs.
-Since all these libraries emit different events on notified file
-changes, there is the Emacs library @code{filenotify} which provides a
-unified interface. Lisp programs that want to receive file
-notifications should always use this library in preference to the
-native ones.
-
+Since all these libraries emit different events upon notified file
+changes, Emacs provides a special library @code{filenotify} which
+presents a unified interface to applications. Lisp programs that want
+to receive file notifications should always use this library in
+preference to the native ones. This section documents the
+@code{filenotify} library functions and variables.
@defun file-notify-add-watch file flags callback
Add a watch for filesystem events pertaining to @var{file}. This
@@ -3110,31 +3110,33 @@ arranges for filesystem events pertaining to @var{file} to be reported
to Emacs.
The returned value is a descriptor for the added watch. Its type
-depends on the underlying library, it cannot be assumed to be an
-integer as in the example below. It should be used for comparison by
-@code{equal} only.
+depends on the underlying library, and in general cannot be assumed to
+be an integer as in the example below. It should be used for
+comparison by @code{equal} only.
If the @var{file} cannot be watched for some reason, this function
signals a @code{file-notify-error} error.
Sometimes, mounted filesystems cannot be watched for file changes.
-This is not detected by this function, a non-@code{nil} return value
-does not guarantee that changes on @var{file} will be notified.
+This is not detected by this function, and so a non-@code{nil} return
+value does not guarantee that changes on @var{file} will be actually
+notified.
@var{flags} is a list of conditions to set what will be watched for.
It can include the following symbols:
@table @code
@item change
-watch for file changes
+watch for changes in file's contents
@item attribute-change
-watch for file attribute changes, like permissions or modification
+watch for changes in file attributes, like permissions or modification
time
@end table
If @var{file} is a directory, @code{change} watches for file creation
-or deletion in that directory. Some of the file notification backends
-report also file changes. This does not work recursively.
+and deletion in that directory. Some of the native file notification
+libraries also report file changes in that case. This does not work
+recursively.
When any event happens, Emacs will call the @var{callback} function
passing it a single argument @var{event}, which is of the form
@@ -3160,19 +3162,20 @@ reports attribute changes as well
@item attribute-changed
a @var{file} attribute was changed
@item stopped
-watching @var{file} has been stopped
+watching @var{file} has stopped
@end table
Note that the @file{w32notify} library does not report
@code{attribute-changed} events. When some file's attribute, like
permissions or modification time, has changed, this library reports a
@code{changed} event. Likewise, the @file{kqueue} library does not
-report reliably file attribute changes when watching a directory.
+reliably report file attribute changes when watching a directory.
-The @code{stopped} event reports, that watching the file has been
-stopped. This could be because @code{file-notify-rm-watch} was called
-(see below), or because the file being watched was deleted, or due to
-another error reported from the underlying library.
+The @code{stopped} event means that watching the file has been
+discontinued. This could be because @code{file-notify-rm-watch} was
+called (see below), or because the file being watched was deleted, or
+due to another error reported from the underlying library which makes
+further watching impossible.
@var{file} and @var{file1} are the name of the file(s) whose event is
being reported. For example:
@@ -3216,7 +3219,7 @@ being reported. For example:
@end group
@end example
-Whether the action @code{renamed} is returned, depends on the used
+Whether the action @code{renamed} is returned depends on the used
watch library. Otherwise, the actions @code{deleted} and
@code{created} could be returned in a random order.
From 4d4f5640ef0f1501bab174ae8d1b3759ba2b6ccc Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 21 Apr 2022 09:06:09 +0300
Subject: [PATCH 091/466] Fix customization-group of
'python-forward-sexp-function'
* lisp/progmodes/python.el (python-forward-sexp-function): Make it
be part of both 'python' and 'python-flymake' groups. (Bug#55027)
Do not merge to master.
---
lisp/progmodes/python.el | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 70828cb223a2..f7f1784b1724 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -5569,6 +5569,8 @@ By default messages are considered errors."
(defcustom python-forward-sexp-function #'python-nav-forward-sexp
"Function to use when navigating between expressions."
:version "28.1"
+ :group 'python
+ :group 'python-flymake
:type '(choice (const :tag "Python blocks" python-nav-forward-sexp)
(const :tag "CC-mode like" nil)
function))
From 16d1ab02af3335db38e596cfe8ff9c3d1db157ed Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 21 Apr 2022 14:54:45 +0300
Subject: [PATCH 092/466] Add minimum instructions to 'query-replace' commands
* lisp/vc/vc-dir.el (vc-dir-query-replace-regexp):
* lisp/textmodes/reftex-global.el (reftex-query-replace-document):
* lisp/progmodes/project.el (project-query-replace-regexp):
* lisp/progmodes/etags.el (tags-query-replace):
* lisp/progmodes/ebrowse.el (ebrowse-tags-query-replace):
* lisp/isearch.el (isearch-query-replace, isearch-occur):
* lisp/emulation/viper-cmd.el (viper-query-replace):
* lisp/dired-aux.el (dired-do-query-replace-regexp)
(dired-do-find-regexp-and-replace):
* lisp/progmodes/xref.el (xref-query-replace-in-results):
* lisp/replace.el (query-replace, query-replace-regexp)
(query-replace-regexp-eval, map-query-replace-regexp): Add minimal
instructions for dealing with matches, with a link to the command
that shows the full instructions. (Bug#55050)
---
lisp/dired-aux.el | 14 ++++++++++++--
lisp/emulation/viper-cmd.el | 7 ++++++-
lisp/isearch.el | 14 ++++++++++++--
lisp/progmodes/ebrowse.el | 7 ++++++-
lisp/progmodes/etags.el | 8 +++++++-
lisp/progmodes/project.el | 4 ++++
lisp/progmodes/xref.el | 8 +++++++-
lisp/replace.el | 17 ++++++++++++++---
lisp/textmodes/reftex-global.el | 6 ++++++
lisp/vc/vc-dir.el | 6 ++++++
10 files changed, 80 insertions(+), 11 deletions(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 57155ec26dc9..f16568f91901 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -3171,9 +3171,14 @@ To continue searching for next match, use command \\[fileloop-continue]."
;;;###autoload
(defun dired-do-query-replace-regexp (from to &optional delimited)
"Do `query-replace-regexp' of FROM with TO, on all marked files.
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue]."
+If you exit the query-replace loop (\\[keyboard-quit], RET or q), you can
+resume the query replace with the command \\[tags-loop-continue]."
(interactive
(let ((common
(query-replace-read-args
@@ -3240,6 +3245,11 @@ REGEXP should use constructs supported by your local `grep' command."
(defun dired-do-find-regexp-and-replace (from to)
"Replace matches of FROM with TO, in all marked files.
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
If no files are marked, use the file under point.
For any marked directory, matches in all of its files are replaced,
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 1f2f3ecfc384..e08d19c61158 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -4168,7 +4168,12 @@ cursor move past the beginning of line."
"Query replace.
If a null string is supplied as the string to be replaced,
the query replace mode will toggle between string replace
-and regexp replace."
+and regexp replace.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time."
(interactive)
(let (str)
(setq str (viper-read-string-with-history
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 34e3b694754c..d829744c3a47 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2324,7 +2324,12 @@ arg means replace backward. Note that using the prefix arg
is possible only when `isearch-allow-scroll' is non-nil or
`isearch-allow-prefix' is non-nil, and it doesn't always provide the
correct matches for `query-replace', so the preferred way to run word
-replacements from Isearch is `M-s w ... M-%'."
+replacements from Isearch is `M-s w ... M-%'.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time."
(interactive
(list current-prefix-arg))
(barf-if-buffer-read-only)
@@ -2393,7 +2398,12 @@ the search words, ignoring punctuation. If the last search
command was a regular expression search, REGEXP is the regular
expression used in that search. If the last search command searched
for a literal string, REGEXP is constructed by quoting all the special
-characters in that string."
+characters in that string.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time."
(interactive
(let* ((perform-collect (consp current-prefix-arg))
(regexp (cond
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 047d43a922b9..dacb2a5f0114 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -3633,7 +3633,12 @@ If regular expression is nil, repeat last search."
;;;###autoload
(defun ebrowse-tags-query-replace (from to)
"Query replace FROM with TO in all files of a class tree.
-With prefix arg, process files of marked classes only."
+With prefix arg, process files of marked classes only.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time."
(interactive
"sTree query replace (regexp): \nsTree query replace %s by: ")
(setq ebrowse-tags-loop-call
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 3826c1888d86..124817ffda4e 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -1836,7 +1836,13 @@ Also see the documentation of the `tags-file-name' variable."
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
with the command \\[fileloop-continue].
-For non-interactive use, superseded by `fileloop-initialize-replace'."
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
+For non-interactive use, this is superseded by `fileloop-initialize-replace'."
(declare (advertised-calling-convention (from to &optional delimited) "27.1"))
(interactive (query-replace-read-args "Tags query replace (regexp)" t t))
(fileloop-initialize-replace
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 1000e8c87f44..07093d61474f 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1040,6 +1040,10 @@ command \\[fileloop-continue]."
(defun project-query-replace-regexp (from to)
"Query-replace REGEXP in all the files of the project.
Stops when a match is found and prompts for whether to replace it.
+At that prompt, the user must type a character saying what to do
+with the match. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
If you exit the `query-replace', you can later continue the
`query-replace' loop using the command \\[fileloop-continue]."
(interactive
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 2fd5e192376a..c4b439f587cb 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -701,7 +701,13 @@ quit the *xref* buffer."
"Perform interactive replacement of FROM with TO in all displayed xrefs.
This command interactively replaces FROM with TO in the names of the
-references displayed in the current *xref* buffer."
+references displayed in the current *xref* buffer.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+"
(interactive
(let ((fr (read-regexp "Xref query-replace (regexp)" ".*")))
(list fr
diff --git a/lisp/replace.el b/lisp/replace.el
index b1cfd7e3f424..dd1bdae4c54b 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -357,7 +357,9 @@ should a regexp."
(defun query-replace (from-string to-string &optional delimited start end backward region-noncontiguous-p)
"Replace some occurrences of FROM-STRING with TO-STRING.
As each match is found, the user must type a character saying
-what to do with it. For directions, type \\[help-command] at that time.
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
In Transient Mark mode, if the mark is active, operate on the contents
of the region. Otherwise, operate from point to the end of the buffer's
@@ -427,7 +429,9 @@ To customize possible responses, change the bindings in `query-replace-map'."
(defun query-replace-regexp (regexp to-string &optional delimited start end backward region-noncontiguous-p)
"Replace some things after point matching REGEXP with TO-STRING.
As each match is found, the user must type a character saying
-what to do with it. For directions, type \\[help-command] at that time.
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
In Transient Mark mode, if the mark is active, operate on the contents
of the region. Otherwise, operate from point to the end of the buffer's
@@ -524,7 +528,9 @@ Interactive use of this function is deprecated in favor of the
using `search-forward-regexp' and `replace-match' is preferred.
As each match is found, the user must type a character saying
-what to do with it. For directions, type \\[help-command] at that time.
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
TO-EXPR is a Lisp expression evaluated to compute each replacement. It may
reference `replace-count' to get the number of replacements already made.
@@ -610,6 +616,11 @@ Use \\\\[next-history-element] \
to pull the last incremental search regexp to the minibuffer
that reads REGEXP.
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
A prefix argument N says to use each replacement string N times
before rotating to the next.
Fourth and fifth arg START and END specify the region to operate on.
diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el
index a1aa368f6096..c7e34b4b90a1 100644
--- a/lisp/textmodes/reftex-global.el
+++ b/lisp/textmodes/reftex-global.el
@@ -88,6 +88,12 @@ No active TAGS table is required."
(defun reftex-query-replace-document (&optional from to delimited)
"Do `query-replace-regexp' of FROM with TO over the entire document.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
with the command \\[tags-loop-continue].
No active TAGS table is required."
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index b7315cfed543..18f5b07a7f40 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -933,6 +933,12 @@ To continue searching for next match, use command \\[tags-loop-continue]."
"Do `query-replace-regexp' of FROM with TO, on all marked files.
If a directory is marked, then use the files displayed for that directory.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
with the command \\[tags-loop-continue]."
;; FIXME: this is almost a copy of `dired-do-query-replace-regexp'. This
From e93e31c8952bf8a7acf898e4ff4d6541c897e12c Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 21 Apr 2022 21:56:09 +0300
Subject: [PATCH 093/466] ; Fix last change in isearch.el
* lisp/isearch.el (isearch-occur): Move the recent addition
to doc string from here...
(isearch-query-replace-regexp): ...to here.
---
lisp/isearch.el | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index d829744c3a47..a68c3a4748c5 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2383,7 +2383,12 @@ type \\[help-command] at that time."
(defun isearch-query-replace-regexp (&optional arg)
"Start `query-replace-regexp' with string to replace from last search string.
-See `isearch-query-replace' for more information."
+See `isearch-query-replace' for more information.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time."
(interactive
(list current-prefix-arg))
(isearch-query-replace arg t))
@@ -2398,12 +2403,7 @@ the search words, ignoring punctuation. If the last search
command was a regular expression search, REGEXP is the regular
expression used in that search. If the last search command searched
for a literal string, REGEXP is constructed by quoting all the special
-characters in that string.
-
-As each match is found, the user must type a character saying
-what to do with it. Type SPC or `y' to replace the match,
-DEL or `n' to skip and go to the next match. For more directions,
-type \\[help-command] at that time."
+characters in that string."
(interactive
(let* ((perform-collect (consp current-prefix-arg))
(regexp (cond
From 5fe7e4d1ae24047858d8633e22036d288e5f0c06 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 21 Apr 2022 23:18:42 +0300
Subject: [PATCH 094/466] Avoid a redisplay loop when 'overlay-arrow-string' is
non-ASCII
* src/xdisp.c (get_overlay_arrow_glyph_row): Don't assume every
character in 'overlay-arrow-string' is one byte long. Reported by
Yuri D'Elia .
---
src/xdisp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 15bb5eefb56e..71de3592227c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -21653,7 +21653,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
struct buffer *buffer = XBUFFER (w->contents);
struct buffer *old = current_buffer;
const unsigned char *arrow_string = SDATA (overlay_arrow_string);
- ptrdiff_t arrow_len = SCHARS (overlay_arrow_string);
+ ptrdiff_t arrow_len = SCHARS (overlay_arrow_string), nchars = 0;
const unsigned char *arrow_end = arrow_string + arrow_len;
const unsigned char *p;
struct it it;
@@ -21684,7 +21684,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
p += it.len;
/* Get its face. */
- ilisp = make_fixnum (p - arrow_string);
+ ilisp = make_fixnum (nchars++);
face = Fget_text_property (ilisp, Qface, overlay_arrow_string);
it.face_id = compute_char_face (f, it.char_to_display, face);
From bf771e31bc93d5d48e0661b875cc785c792d214f Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 21 Apr 2022 23:25:49 +0300
Subject: [PATCH 095/466] ; * src/xdisp.c (get_overlay_arrow_glyph_row): Better
var name.
---
src/xdisp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 71de3592227c..42c3e81e5c3a 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -21653,7 +21653,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
struct buffer *buffer = XBUFFER (w->contents);
struct buffer *old = current_buffer;
const unsigned char *arrow_string = SDATA (overlay_arrow_string);
- ptrdiff_t arrow_len = SCHARS (overlay_arrow_string), nchars = 0;
+ ptrdiff_t arrow_len = SCHARS (overlay_arrow_string), char_num = 0;
const unsigned char *arrow_end = arrow_string + arrow_len;
const unsigned char *p;
struct it it;
@@ -21684,7 +21684,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
p += it.len;
/* Get its face. */
- ilisp = make_fixnum (nchars++);
+ ilisp = make_fixnum (char_num++);
face = Fget_text_property (ilisp, Qface, overlay_arrow_string);
it.face_id = compute_char_face (f, it.char_to_display, face);
From d5728f129fb2c20e9c0ff44651a538a40f3088af Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 22 Apr 2022 09:05:57 +0300
Subject: [PATCH 096/466] Another fix for non-ASCII 'overlay-arrow-string'
* src/xdisp.c (get_overlay_arrow_glyph_row): Fix yet another place
that assumed each character is a single byte.
---
src/xdisp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 42c3e81e5c3a..6963935666b2 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -774,7 +774,7 @@ static bool message_buf_print;
static bool message_cleared_p;
/* A scratch glyph row with contents used for generating truncation
- glyphs. Also used in direct_output_for_insert. */
+ glyphs and overlay-arrow glyphs. */
#define MAX_SCRATCH_GLYPHS 100
static struct glyph_row scratch_glyph_row;
@@ -21653,7 +21653,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
struct buffer *buffer = XBUFFER (w->contents);
struct buffer *old = current_buffer;
const unsigned char *arrow_string = SDATA (overlay_arrow_string);
- ptrdiff_t arrow_len = SCHARS (overlay_arrow_string), char_num = 0;
+ ptrdiff_t arrow_len = SBYTES (overlay_arrow_string), char_num = 0;
const unsigned char *arrow_end = arrow_string + arrow_len;
const unsigned char *p;
struct it it;
From 43ed7b1e0f182a5f4d82f6542ebf4308d0f78fc5 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 22 Apr 2022 09:26:10 +0300
Subject: [PATCH 097/466] ; Update instructions about ChangeLog.N file
generation
* admin/make-tarball.txt: Add instructions about rotating and
regenerating the versioned ChangeLog.N file.
---
admin/make-tarball.txt | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 17a4d9f807bb..436a0957c00e 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -54,12 +54,31 @@ General steps (for each step, check for possible errors):
section at the beginning of that file, and commit etc/NEWS if it
was modified.
-2. Regenerate the etc/AUTHORS file:
+2. Regenerate the versioned ChangeLog.N and etc/AUTHORS files.
+
+ The "M-x authors" command below will first update the current
+ versioned ChangeLog.N file. For this to work correctly, make sure
+ the top-level Makefile says
+
+ PREFERRED_BRANCH = emacs-NN
+
+ where NN is the version on the release branch from which you are
+ producing the tarball. If NN is incorrect, update Makefile.in and
+ re-run 'configure' to update Makefile.
+
+ If the versioned ChangeLog.N file is too large, start a new one
+ by bumping N, and also update the line in top-level Makefile.in
+ which says
+
+ CHANGELOG_HISTORY_INDEX_MAX = N
+
+ by incrementing the value of N by 1; then regenerate Makefile.
+
+ Now:
+
M-: (require 'authors) RET
M-x authors RET
- (This first updates the current versioned ChangeLog.N)
-
If this says "Problem updating ChangeLog", find the reason for the
failure of the command it runs, viz.:
From a7dde05cb3a06cc1ec807a2dcbe55f6f11f29b99 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Sat, 23 Apr 2022 08:50:33 +0200
Subject: [PATCH 098/466] Fix problem with Solaris ls in Tramp
* lisp/net/tramp-sh.el (tramp-sunos-unames): Move up.
(tramp-sh--quoting-style-options): Handle erroneous Solaris ls.
---
lisp/net/tramp-sh.el | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 54fb539a564d..67f5519bbfee 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1189,12 +1189,18 @@ component is used as the target of the symlink."
;; The scripts could fail, for example with huge file size.
(tramp-do-file-attributes-with-ls v localname id-format))))))))
+(defconst tramp-sunos-unames (regexp-opt '("SunOS 5.10" "SunOS 5.11"))
+ "Regexp to determine remote SunOS.")
+
(defun tramp-sh--quoting-style-options (vec)
"Quoting style options to be used for VEC."
(or
(tramp-get-ls-command-with
vec "--quoting-style=literal --show-control-chars")
- (tramp-get-ls-command-with vec "-w")
+ ;; ls on Solaris does not return an error in that case. We've got
+ ;; reports for "SunOS 5.11" so far.
+ (unless (tramp-check-remote-uname vec tramp-sunos-unames)
+ (tramp-get-ls-command-with vec "-w"))
""))
(defun tramp-do-file-attributes-with-ls (vec localname &optional id-format)
@@ -3990,9 +3996,6 @@ Returns the exit code of the `test' program."
switch
(tramp-shell-quote-argument localname)))))
-(defconst tramp-sunos-unames (regexp-opt '("SunOS 5.10" "SunOS 5.11"))
- "Regexp to determine remote SunOS.")
-
(defun tramp-find-executable
(vec progname dirlist &optional ignore-tilde ignore-path)
"Search for PROGNAME in $PATH and all directories mentioned in DIRLIST.
From b5e05f09f557af854f8ca4e45ca4a4e66f4d3aa1 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 23 Apr 2022 21:51:57 +0300
Subject: [PATCH 099/466] ; Update WEB PAGES part of make-tarball.txt
* admin/make-tarball.txt (WEB PAGES): Add instructions for
download.html.
---
admin/make-tarball.txt | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 436a0957c00e..c8ee3349cdb2 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -334,6 +334,10 @@ looks like this:
+The file download.html may need to be updated, for example if the
+MS-Windows binaries will be signed by a different person/key than
+those mentioned there.
+
Next, regenerate the various manuals in HTML, PDF, and PS formats:
Invoke ./admin/make-manuals from the top-level directory of the
From 1e9b9f403af73a281ee488da42a20c34dd8c05b9 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 24 Apr 2022 09:56:22 +0300
Subject: [PATCH 100/466] Improve documentation of 'set-fontset-font'
* doc/lispref/display.texi (Fontsets):
* src/fontset.c (Fset_fontset_font): Improve and clarify the
documentation of 'set-fontset-font'. Rename the arguments to be
more self-explanatory. (Bug#55086)
---
doc/lispref/display.texi | 59 +++++++++++++-----------
src/fontset.c | 97 +++++++++++++++++++++-------------------
2 files changed, 83 insertions(+), 73 deletions(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index c82523132e92..b68d3d1c0c97 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -3669,57 +3669,62 @@ Then, the font specifications for all but Chinese GB2312 characters have
Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
field.
-@defun set-fontset-font name character font-spec &optional frame add
-This function modifies the existing fontset @var{name} to use the font
-matching with @var{font-spec} for the specified @var{character}.
+@defun set-fontset-font fontset characters font-spec &optional frame add
+This function modifies the existing @var{fontset} to use the font
+specified by @var{font-spec} for displaying the specified
+@var{characters}.
-If @var{name} is @code{nil}, this function modifies the fontset of the
-selected frame or that of @var{frame} if @var{frame} is not
+If @var{fontset} is @code{nil}, this function modifies the fontset of
+the selected frame or that of @var{frame} if @var{frame} is not
@code{nil}.
-If @var{name} is @code{t}, this function modifies the default
-fontset, whose short name is @samp{fontset-default}.
+If @var{fontset} is @code{t}, this function modifies the default
+fontset, whose short name as a string is @samp{fontset-default}.
-In addition to specifying a single codepoint, @var{character} may be a
-cons @code{(@var{from} . @var{to})}, where @var{from} and @var{to} are
-character codepoints. In that case, use @var{font-spec} for all the
-characters in the range @var{from} and @var{to} (inclusive).
+The @var{characters} argument can be a single character which should
+be displayed using @var{font-spec}. It can also be a cons cell
+@w{@code{(@var{from} . @var{to})}}, where @var{from} and @var{to} are
+characters. In that case, use @var{font-spec} for all the characters
+in the range @var{from} and @var{to} (inclusive).
-@var{character} may be a charset (@pxref{Character Sets}). In that
-case, use @var{font-spec} for all the characters in the charset.
+@var{characters} may be a charset symbol (@pxref{Character Sets}). In
+that case, use @var{font-spec} for all the characters in the charset.
-@var{character} may be a script name (@pxref{Character Properties,
+@var{characters} may be a script symbol (@pxref{Character Properties,
char-script-table}). In that case, use @var{font-spec} for all the
characters belonging to the script.
-@var{character} may be @code{nil}, which means to use @var{font-spec}
-for any character which no font-spec is specified.
+@var{characters} may be @code{nil}, which means to use @var{font-spec}
+for any character in @var{fontset} for which no font-spec is
+specified.
@var{font-spec} may be a font-spec object created by the function
@code{font-spec} (@pxref{Low-Level Font}).
-@var{font-spec} may be a cons; @code{(@var{family} . @var{registry})},
-where @var{family} is a family name of a font (possibly including a
-foundry name at the head), @var{registry} is a registry name of a font
-(possibly including an encoding name at the tail).
+@var{font-spec} may be a cons cell @w{@code{(@var{family}
+. @var{registry})}}, where @var{family} is a family name of a font
+(possibly including a foundry name at the head), and @var{registry} is
+a registry name of a font (possibly including an encoding name at the
+tail).
@var{font-spec} may be a font name, a string.
@var{font-spec} may be @code{nil}, which explicitly specifies that
-there's no font for the specified @var{character}. This is useful,
+there's no font for the specified @var{characters}. This is useful,
for example, to avoid expensive system-wide search for fonts for
characters that have no glyphs, like those from the Unicode Private
Use Area (PUA).
The optional argument @var{add}, if non-@code{nil}, specifies how to
-add @var{font-spec} to the font specifications previously set. If it
-is @code{prepend}, @var{font-spec} is prepended. If it is
-@code{append}, @var{font-spec} is appended. By default,
-@var{font-spec} overrides the previous settings.
+add @var{font-spec} to the font specifications previously set for
+@var{characters}. If it is @code{prepend}, @var{font-spec} is
+prepended to the existing specs. If it is @code{append},
+@var{font-spec} is appended. By default, @var{font-spec} overwrites
+the previously set font specs.
-For instance, this changes the default fontset to use a font of which
+For instance, this changes the default fontset to use a font whose
family name is @samp{Kochi Gothic} for all characters belonging to
-the charset @code{japanese-jisx0208}.
+the charset @code{japanese-jisx0208}:
@smallexample
(set-fontset-font t 'japanese-jisx0208
diff --git a/src/fontset.c b/src/fontset.c
index eb563a69e2b7..1793715450ec 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1450,28 +1450,30 @@ static void update_auto_fontset_alist (Lisp_Object, Lisp_Object);
DEFUN ("set-fontset-font", Fset_fontset_font, Sset_fontset_font, 3, 5, 0,
doc: /*
-Modify fontset NAME to use FONT-SPEC for TARGET characters.
+Modify FONTSET to use font specification in FONT-SPEC for displaying CHARACTERS.
-NAME is a fontset name (a string), nil for the fontset of FRAME,
-or t for the default fontset.
+FONTSET should be a fontset name (a string); or nil, meaning the
+fontset of FRAME; or t, meaning the default fontset.
-TARGET may be a single character to use FONT-SPEC for.
+CHARACTERS may be a single character to use FONT-SPEC for.
-TARGET may be a cons (FROM . TO), where FROM and TO are characters.
+CHARACTERS may be a cons (FROM . TO), where FROM and TO are characters.
In that case, use FONT-SPEC for all the characters in the range
between FROM and TO (inclusive).
-TARGET may be a script symbol. In that case, use FONT-SPEC for
+CHARACTERS may be a script symbol. In that case, use FONT-SPEC for
all the characters that belong to the script. See the variable
-`script-representative-chars' for the list of known scripts.
+`script-representative-chars' for the list of known scripts, and
+see the variable `char-script-table' for the script of any specific
+character.
-TARGET may be a charset. In that case, use FONT-SPEC for all
-the characters in the charset. See `list-character-sets' and
+CHARACTERS may be a charset symbol. In that case, use FONT-SPEC for
+all the characters in the charset. See `list-character-sets' and
`list-charset-chars' for the list of character sets and their
characters.
-TARGET may be nil. In that case, use FONT-SPEC for any character for
-which no font-spec is specified.
+CHARACTERS may be nil. In that case, use FONT-SPEC for any
+character for which no font-spec is specified in FONTSET.
FONT-SPEC may one of these:
* A font-spec object made by the function `font-spec' (which see).
@@ -1479,25 +1481,28 @@ FONT-SPEC may one of these:
REGISTRY is a font registry name. FAMILY may contain foundry
name, and REGISTRY may contain encoding name.
* A font name string.
- * nil, which explicitly specifies that there's no font for TARGET.
+ * nil, which explicitly specifies that there's no font for CHARACTERS.
-Optional 4th argument FRAME is a frame, or nil for the selected frame,
-to be considered in the case that NAME is nil.
+Optional 4th argument FRAME is a frame whose fontset should be modified;
+it is used if FONTSET is nil. If FONTSET is nil and FRAME is omitted
+or nil, that stands for the fontset of the selected frame.
Optional 5th argument ADD, if non-nil, specifies how to add FONT-SPEC
-to the previously set font specifications for TARGET. If it is
-`prepend', FONT-SPEC is prepended. If it is `append', FONT-SPEC is
-appended. By default, FONT-SPEC overrides the previous settings. */)
- (Lisp_Object name, Lisp_Object target, Lisp_Object font_spec, Lisp_Object frame, Lisp_Object add)
+to the previously set font specifications for CHARACTERS. If it is
+`prepend', FONT-SPEC is prepended to the existing font specifications.
+If it is `append', FONT-SPEC is appended. By default, FONT-SPEC
+overwrites the previous settings. */)
+ (Lisp_Object fontset, Lisp_Object characters, Lisp_Object font_spec,
+ Lisp_Object frame, Lisp_Object add)
{
- Lisp_Object fontset;
+ Lisp_Object fontset_obj;
Lisp_Object font_def, registry, family;
Lisp_Object range_list;
struct charset *charset = NULL;
Lisp_Object fontname;
bool ascii_changed = 0;
- fontset = check_fontset_name (name, &frame);
+ fontset_obj = check_fontset_name (fontset, &frame);
fontname = Qnil;
if (CONSP (font_spec))
@@ -1555,18 +1560,18 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
else
font_def = Qnil;
- if (CHARACTERP (target))
+ if (CHARACTERP (characters))
{
- if (XFIXNAT (target) < 0x80)
+ if (XFIXNAT (characters) < 0x80)
error ("Can't set a font for partial ASCII range");
- range_list = list1 (Fcons (target, target));
+ range_list = list1 (Fcons (characters, characters));
}
- else if (CONSP (target))
+ else if (CONSP (characters))
{
Lisp_Object from, to;
- from = Fcar (target);
- to = Fcdr (target);
+ from = Fcar (characters);
+ to = Fcdr (characters);
CHECK_CHARACTER (from);
CHECK_CHARACTER (to);
if (XFIXNAT (from) < 0x80)
@@ -1575,38 +1580,38 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
error ("Can't set a font for partial ASCII range");
ascii_changed = 1;
}
- range_list = list1 (target);
+ range_list = list1 (characters);
}
- else if (SYMBOLP (target) && !NILP (target))
+ else if (SYMBOLP (characters) && !NILP (characters))
{
Lisp_Object script_list;
Lisp_Object val;
range_list = Qnil;
script_list = XCHAR_TABLE (Vchar_script_table)->extras[0];
- if (! NILP (Fmemq (target, script_list)))
+ if (! NILP (Fmemq (characters, script_list)))
{
- if (EQ (target, Qlatin))
+ if (EQ (characters, Qlatin))
ascii_changed = 1;
- val = list1 (target);
+ val = list1 (characters);
map_char_table (accumulate_script_ranges, Qnil, Vchar_script_table,
val);
range_list = Fnreverse (XCDR (val));
}
- if (CHARSETP (target))
+ if (CHARSETP (characters))
{
- CHECK_CHARSET_GET_CHARSET (target, charset);
+ CHECK_CHARSET_GET_CHARSET (characters, charset);
if (charset->ascii_compatible_p)
ascii_changed = 1;
}
else if (NILP (range_list))
error ("Invalid script or charset name: %s",
- SDATA (SYMBOL_NAME (target)));
+ SDATA (SYMBOL_NAME (characters)));
}
- else if (NILP (target))
+ else if (NILP (characters))
range_list = list1 (Qnil);
else
- error ("Invalid target for setting a font");
+ error ("Invalid second argument for setting a font in a fontset");
if (ascii_changed)
{
@@ -1614,7 +1619,7 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
if (NILP (font_spec))
error ("Can't set ASCII font to nil");
- val = CHAR_TABLE_REF (fontset, 0);
+ val = CHAR_TABLE_REF (fontset_obj, 0);
if (! NILP (val) && EQ (add, Qappend))
/* We are going to change just an additional font for ASCII. */
ascii_changed = 0;
@@ -1622,7 +1627,7 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
if (charset)
{
- Lisp_Object arg = CALLN (Fvector, fontset, font_def, add,
+ Lisp_Object arg = CALLN (Fvector, fontset_obj, font_def, add,
ascii_changed ? Qt : Qnil, range_list);
map_charset_chars (set_fontset_font, Qnil, arg, charset,
@@ -1631,15 +1636,15 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
range_list = AREF (arg, 4);
}
for (; CONSP (range_list); range_list = XCDR (range_list))
- FONTSET_ADD (fontset, XCAR (range_list), font_def, add);
+ FONTSET_ADD (fontset_obj, XCAR (range_list), font_def, add);
if (ascii_changed)
{
Lisp_Object tail, fr;
- int fontset_id = XFIXNUM (FONTSET_ID (fontset));
+ int fontset_id = XFIXNUM (FONTSET_ID (fontset_obj));
- set_fontset_ascii (fontset, fontname);
- name = FONTSET_NAME (fontset);
+ set_fontset_ascii (fontset_obj, fontname);
+ fontset = FONTSET_NAME (fontset_obj);
FOR_EACH_FRAME (tail, fr)
{
struct frame *f = XFRAME (fr);
@@ -1657,17 +1662,17 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
font_object = font_open_by_spec (f, font_spec);
if (! NILP (font_object))
{
- update_auto_fontset_alist (font_object, fontset);
- AUTO_FRAME_ARG (arg, Qfont, Fcons (name, font_object));
+ update_auto_fontset_alist (font_object, fontset_obj);
+ AUTO_FRAME_ARG (arg, Qfont, Fcons (fontset, font_object));
Fmodify_frame_parameters (fr, arg);
}
}
}
- /* Free all realized fontsets whose base is FONTSET. This way, the
+ /* Free all realized fontsets whose base is FONTSET_OBJ. This way, the
specified character(s) are surely redisplayed by a correct
font. */
- free_realized_fontsets (fontset);
+ free_realized_fontsets (fontset_obj);
return Qnil;
}
From 9a78b235e99322f93c66f067fc2178370b31a2ad Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 24 Apr 2022 22:37:09 +0300
Subject: [PATCH 101/466] Improve indexing in "Programmed Completion"
* doc/lispref/minibuf.texi (Programmed Completion): Improve
indexing. (Bug#55095)
---
doc/lispref/minibuf.texi | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index f05f087ba705..bc2f14883cb0 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -1936,6 +1936,7 @@ completion function is trying to complete. If the symbol matches one
of the keys in @code{completion-category-overrides}, the usual
completion behavior is overridden. @xref{Completion Variables}.
+@cindex @code{annotation-function}, in completion
@item annotation-function
The value should be a function for @dfn{annotating} completions. The
function should take one argument, @var{string}, which is a possible
@@ -1945,6 +1946,7 @@ Unless this function puts own face on the annotation suffix string,
the @code{completions-annotations} face is added by default to
that string.
+@cindex @code{affixation-function}, in completion
@item affixation-function
The value should be a function for adding prefixes and suffixes to
completions. The function should take one argument,
@@ -1955,6 +1957,7 @@ the completion string in the @file{*Completions*} buffer, and
a suffix displayed after the completion string. This function
takes priority over @code{annotation-function}.
+@cindex @code{group-function}, in completion
@item group-function
The value should be a function for grouping the completion candidates.
The function must take two arguments, @var{completion}, which is a
@@ -1965,12 +1968,14 @@ can also be @code{nil}. Otherwise the function must return the
transformed candidate. The transformation can for example remove a
redundant prefix, which is displayed in the group title.
+@cindex @code{display-sort-function}, in completion
@item display-sort-function
The value should be a function for sorting completions. The function
should take one argument, a list of completion strings, and return a
sorted list of completion strings. It is allowed to alter the input
list destructively.
+@cindex @code{cycle-sort-function}, in completion
@item cycle-sort-function
The value should be a function for sorting completions, when
@code{completion-cycle-threshold} is non-@code{nil} and the user is
From 7c1fc2348918a1ad8c61c7519a51042d48d7aa8d Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 24 Apr 2022 21:07:40 -0400
Subject: [PATCH 102/466] Update to Org 9.5.3-3-gd54104
---
etc/ORG-NEWS | 6 +-----
etc/refcards/orgcard.tex | 2 +-
lisp/org/org-faces.el | 20 ++++++++------------
lisp/org/org-version.el | 4 ++--
lisp/org/org.el | 26 +++++++++++++++-----------
5 files changed, 27 insertions(+), 31 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index e4bb706e08c8..37a39131d930 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -451,10 +451,6 @@ you can now configure them.
(the default) or use the attachment directory of the current node, if
it is correctly configured as a Git repository.
-*** Some faces now use fixed-pitch
-
-See [[msg:875z8njaol.fsf@protesilaos.com][this thread]].
-
*** New option ~org-attach-sync-delete-empty-dir~
~org-attach-sync-delete-empty-dir~ controls the deletion of an empty
@@ -509,7 +505,7 @@ heading, except return nil.
In the past, faces of todo keywords, emphasised text, tags, and
priority cookies inherited =default= face. The resulting headline
-fontification was not always consistent, as discussed in [[https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00331.html][this bug
+fontification was not always consistent, as discussed in [[msg::87h7sawubl.fsf@protesilaos.com][this bug
report]]. Now, the relevant faces adapt to face used to fontify the
current headline level.
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index dec4d174c434..2b4718805a6f 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
% Reference Card for Org Mode
-\def\orgversionnumber{9.5.2}
+\def\orgversionnumber{9.5.3}
\def\versionyear{2021} % latest update
\input emacsver.tex
diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el
index 1db36bc72ba7..d96898372f92 100644
--- a/lisp/org/org-faces.el
+++ b/lisp/org/org-faces.el
@@ -38,8 +38,7 @@
:group 'org-faces)
(defface org-hide
- '((default :inherit fixed-pitch)
- (((background light)) (:foreground "white"))
+ '((((background light)) (:foreground "white"))
(((background dark)) (:foreground "black")))
"Face used to hide leading stars in headlines.
The foreground color of this face should be equal to the background
@@ -202,8 +201,7 @@ set the properties in the `org-column' face. For example, set
:group 'org-faces)
(defface org-date
- '((default :inherit fixed-pitch)
- (((class color) (background light)) (:foreground "Purple" :underline t))
+ '((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:underline t)))
"Face for date/time stamps."
@@ -379,8 +377,7 @@ changes."
(sexp :tag "Face")))))
(defface org-table ;Copied from `font-lock-function-name-face'
- '((default :inherit fixed-pitch)
- (((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
+ '((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
(((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 16) (background light)) (:foreground "Blue"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
@@ -396,8 +393,7 @@ changes."
:group 'org-faces)
(defface org-formula
- '((default :inherit fixed-pitch)
- (((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
+ '((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
(((class color) (min-colors 8) (background dark)) (:foreground "red"))
@@ -405,12 +401,12 @@ changes."
"Face for formulas."
:group 'org-faces)
-(defface org-code '((t :inherit (fixed-pitch shadow)))
+(defface org-code '((t :inherit shadow))
"Face for fixed-width text like code snippets."
:group 'org-faces
:version "22.1")
-(defface org-meta-line '((t :inherit (fixed-pitch font-lock-comment-face)))
+(defface org-meta-line '((t :inherit font-lock-comment-face))
"Face for meta lines starting with \"#+\"."
:group 'org-faces
:version "22.1")
@@ -437,7 +433,7 @@ This face applies to the #+TITLE:, #+SUBTITLE:, #+AUTHOR:,
#+EMAIL: and #+DATE: keywords."
:group 'org-faces)
-(defface org-block `((t :inherit (fixed-pitch shadow)
+(defface org-block `((t :inherit shadow
,@(and (>= emacs-major-version 27) '(:extend t))))
"Face used for text inside various blocks.
@@ -459,7 +455,7 @@ verse and quote blocks are fontified using the `org-verse' and
"Face used for the line delimiting the end of source blocks."
:group 'org-faces)
-(defface org-verbatim '((t (:inherit (fixed-pitch shadow))))
+(defface org-verbatim '((t (:inherit shadow)))
"Face for fixed-with text like code snippets."
:group 'org-faces
:version "22.1")
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 5cc98e380663..dc689662b7db 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
- (let ((org-release "9.5.2"))
+ (let ((org-release "9.5.3"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.2-38-g682ccd"))
+ (let ((org-git-version "release_9.5.3-3-gd54104"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 4524812c55f1..1fc4251a340b 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
;; Homepage: https://orgmode.org
;; Package-Requires: ((emacs "25.1"))
-;; Version: 9.5.2
+;; Version: 9.5.3
;; This file is part of GNU Emacs.
;;
@@ -15012,20 +15012,24 @@ value is equivalent to `inactive'.
When at a timestamp, return the position of the point as a symbol
among `bracket', `after', `year', `month', `hour', `minute',
`day' or a number of character from the last know part of the
-time stamp.
+time stamp. If diary sexp timestamps, any point inside the timestamp
+is considered `day' (i.e. only `bracket', `day', and `after' return
+values are possible).
When matching, the match groups are the following:
- group 1: year
- group 2: month
- group 3: day number
- group 4: day name
+ group 1: year, if any
+ group 2: month, if any
+ group 3: day number, if any
+ group 4: day name, if any
group 5: hours, if any
group 6: minutes, if any"
- (let* ((regexp (if extended
- (if (eq extended 'agenda)
- org-element--timestamp-regexp
- org-ts-regexp3)
- org-ts-regexp2))
+ (let* ((regexp
+ (if extended
+ (if (eq extended 'agenda)
+ (rx (or (regexp org-ts-regexp3)
+ (regexp org-element--timestamp-regexp)))
+ org-ts-regexp3)
+ org-ts-regexp2))
(pos (point))
(match?
(let ((boundaries (org-in-regexp regexp)))
From 37234157437228174a626fa10353f377179dc46e Mon Sep 17 00:00:00 2001
From: Arash Esbati
Date: Wed, 27 Apr 2022 12:32:38 +0200
Subject: [PATCH 103/466] ; * doc/lispref/syntax.texi (Position Parse): Fix a
typo. (Bug#55143)
---
doc/lispref/syntax.texi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi
index 9120e6372749..e84b901eaa99 100644
--- a/doc/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -770,7 +770,7 @@ This function returns the parser state that the parser would reach at
position @var{pos} starting from the beginning of the visible portion
of the buffer.
@iftex
-See the next section for
+See the next section
@end iftex
@ifnottex
@xref{Parser State},
From 3b6338c8c351cce721f2f1aa115cadc401179d5c Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 28 Apr 2022 17:53:36 +0300
Subject: [PATCH 104/466] Improve documentation of font- and face-related
attribute functions
* lisp/faces.el (face-attribute):
* src/xfaces.c (Fx_family_fonts):
* src/font.c (Ffont_get, Ffont_put): Improve and clarify the doc
strings.
* doc/lispref/display.texi (Low-Level Font): Document the :type
attribute of a font. Improve documentation of 'font-get' and
'font-put'.
(Attribute Functions): Add cross-reference to the description of
face attributes.
---
doc/lispref/display.texi | 38 +++++++++++++++++++++++++++++++++-----
lisp/faces.el | 4 ++++
src/font.c | 37 +++++++++++++++++++++++--------------
src/xfaces.c | 28 +++++++++++++++++-----------
4 files changed, 77 insertions(+), 30 deletions(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index b68d3d1c0c97..d9e93160ea30 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -2818,7 +2818,8 @@ modifying the attributes of a named face.
@defun face-attribute face attribute &optional frame inherit
This function returns the value of the @var{attribute} attribute for
-@var{face} on @var{frame}.
+@var{face} on @var{frame}. @xref{Face Attributes}, for the supported
+attributes.
If @var{frame} is omitted or @code{nil}, that means the selected frame
(@pxref{Input Focus}). If @var{frame} is @code{t}, this function
@@ -2901,7 +2902,8 @@ for all frames. This function is mostly intended for internal usage.
@defun set-face-attribute face frame &rest arguments
This function sets one or more attributes of @var{face} for
@var{frame}. The attributes specified in this way override the face
-spec(s) belonging to @var{face}.
+spec(s) belonging to @var{face}. @xref{Face Attributes}, for the
+supported attributes.
The extra arguments @var{arguments} specify the attributes to set, and
the values for them. They should consist of alternating attribute
@@ -3865,12 +3867,22 @@ symbols, or @code{nil} if none is required. If @code{gsub} or
@code{gpos} is a list, a @code{nil} element in that list means that
the font must not match any of the remaining tag symbols. The
@code{gpos} element may be omitted.
+
+@item :type
+@cindex font backend
+The symbol that specifies the @dfn{font backend} used to draw the
+characters. The possible values depend on the platform and on how
+Emacs was configured at build time. Typical values include
+@code{ftcrhb} and @code{xfthb} on X, @code{harfbuzz} on MS-Windows,
+@code{ns} on GNUstep, etc. It can also be @code{nil} if left
+unspecified, typically in a font-spec.
@end table
@end defun
@defun font-put font-spec property value
Set the font property @var{property} in the font-spec @var{font-spec}
-to @var{value}.
+to @var{value}. The @var{property} can any of the ones described
+above.
@end defun
@cindex font entity
@@ -3914,12 +3926,28 @@ object, a font entity, or a font spec.
@defun font-get font property
This function returns the value of the font property @var{property}
-for @var{font}.
+for @var{font}. The @var{property} can any of the ones that
+@code{font-spec} supports.
If @var{font} is a font spec and the font spec does not specify
@var{property}, the return value is @code{nil}. If @var{font} is a
font object or font entity, the value for the @var{:script} property
-may be a list of scripts supported by the font.
+may be a list of scripts supported by the font, and the value of the
+@code{:otf} property is a cons of the form @w{@code{(@var{gsub}
+. @var{gpos})}}, where @var{gsub} and @var{gpos} are lists
+representing OpenType features supported by the font, of the form
+
+@smallexample
+((@var{script-tag} (@var{langsys-tag} @var{feature}@dots{}) @dots{}) @dots{})
+@end smallexample
+
+@noindent where @var{script-tag}, @var{langsys-tag}, and @var{feature}
+are symbols representing OpenType layout tags.
+
+If @var{font} is a font object, the special property
+@code{:combining-capability} is non-@code{nil} if the font backend of
+@var{font} supports rendering of combining characters for non-OpenType
+fonts.
@end defun
@defun font-face-attributes font &optional frame
diff --git a/lisp/faces.el b/lisp/faces.el
index 1d21a2162241..3bd1e5db6f8b 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -448,6 +448,10 @@ of FACE on FRAME."
(defun face-attribute (face attribute &optional frame inherit)
"Return the value of FACE's ATTRIBUTE on FRAME.
+
+See `set-face-attribute' for the list of supported attributes
+and their meanings and allowed values.
+
If the optional argument FRAME is given, report on face FACE in that frame.
If FRAME is t, report on the defaults for face FACE (for new frames).
If FRAME is omitted or nil, use the selected frame.
diff --git a/src/font.c b/src/font.c
index 56a921da9448..dcbcbc46be68 100644
--- a/src/font.c
+++ b/src/font.c
@@ -4199,26 +4199,33 @@ merge_font_spec (Lisp_Object from, Lisp_Object to)
DEFUN ("font-get", Ffont_get, Sfont_get, 2, 2, 0,
doc: /* Return the value of FONT's property KEY.
FONT is a font-spec, a font-entity, or a font-object.
-KEY is any symbol, but these are reserved for specific meanings:
- :family, :weight, :slant, :width, :foundry, :adstyle, :registry,
- :size, :name, :script, :otf
+KEY can be any symbol, but these are reserved for specific meanings:
+ :foundry, :family, :adstyle, :registry, :weight, :slant, :width,
+ :size, :dpi, :spacing, :avgwidth, :script, :lang, :otf
See the documentation of `font-spec' for their meanings.
-In addition, if FONT is a font-entity or a font-object, values of
-:script and :otf are different from those of a font-spec as below:
-The value of :script may be a list of scripts that are supported by the font.
+If FONT is a font-entity or a font-object, then values of
+:script and :otf properties are different from those of a font-spec
+as below:
-The value of :otf is a cons (GSUB . GPOS) where GSUB and GPOS are lists
-representing the OpenType features supported by the font by this form:
- ((SCRIPT (LANGSYS FEATURE ...) ...) ...)
-SCRIPT, LANGSYS, and FEATURE are all symbols representing OpenType
-Layout tags.
+ The value of :script may be a list of scripts that are supported by
+ the font.
+
+ The value of :otf is a cons (GSUB . GPOS) where GSUB and GPOS are
+ lists representing the OpenType features supported by the font, of
+ this form: ((SCRIPT (LANGSYS FEATURE ...) ...) ...), where
+ SCRIPT, LANGSYS, and FEATURE are all symbols representing OpenType
+ Layout tags. See `otf-script-alist' for the OpenType script tags.
In addition to the keys listed above, the following keys are reserved
for the specific meanings as below:
-The value of :combining-capability is non-nil if the font-backend of
-FONT supports rendering of combining characters for non-OTF fonts. */)
+ The value of :type is a symbol that identifies the font backend to be
+ used, such as `ftcrhb' or `xfthb' on X , `harfbuzz' or `uniscribe' on
+ MS-Windows, `ns' on Cocoa/GNUstep, etc.
+
+ The value of :combining-capability is non-nil if the font-backend of
+ FONT supports rendering of combining characters for non-OTF fonts. */)
(Lisp_Object font, Lisp_Object key)
{
int idx;
@@ -4346,7 +4353,9 @@ accepted by the function `font-spec' (which see), VAL must be what
allowed in `font-spec'.
If FONT is a font-entity or a font-object, KEY must not be the one
-accepted by `font-spec'. */)
+accepted by `font-spec'.
+
+See also `font-get' for KEYs that have special meanings. */)
(Lisp_Object font, Lisp_Object prop, Lisp_Object val)
{
int idx;
diff --git a/src/xfaces.c b/src/xfaces.c
index f7ee19195f4e..22bd5a81b5be 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1463,9 +1463,9 @@ enum xlfd_swidth
};
/* Order by which font selection chooses fonts. The default values
- mean `first, find a best match for the font width, then for the
- font height, then for weight, then for slant.' This variable can be
- set via set-face-font-sort-order. */
+ mean "first, find a best match for the font width, then for the
+ font height, then for weight, then for slant." This variable can be
+ set via 'internal-set-font-selection-order'. */
static int font_sort_order[4];
@@ -1516,16 +1516,22 @@ If FAMILY is omitted or nil, list all families.
Otherwise, FAMILY must be a string, possibly containing wildcards
`?' and `*'.
If FRAME is omitted or nil, use the selected frame.
+
Each element of the result is a vector [FAMILY WIDTH POINT-SIZE WEIGHT
SLANT FIXED-P FULL REGISTRY-AND-ENCODING].
-FAMILY is the font family name. POINT-SIZE is the size of the
-font in 1/10 pt. WIDTH, WEIGHT, and SLANT are symbols describing the
-width, weight and slant of the font. These symbols are the same as for
-face attributes. FIXED-P is non-nil if the font is fixed-pitch.
-FULL is the full name of the font, and REGISTRY-AND-ENCODING is a string
-giving the registry and encoding of the font.
-The result list is sorted according to the current setting of
-the face font sort order. */)
+
+FAMILY is the font family name.
+POINT-SIZE is the size of the font in 1/10 pt.
+WIDTH, WEIGHT, and SLANT are symbols describing the width, weight
+ and slant of the font. These symbols are the same as for face
+ attributes, see `set-face-attribute'.
+FIXED-P is non-nil if the font is fixed-pitch.
+FULL is the full name of the font.
+REGISTRY-AND-ENCODING is a string giving the registry and encoding of
+ the font.
+
+The resulting list is sorted according to the current setting of
+the face font sort order, see `face-font-selection-order'. */)
(Lisp_Object family, Lisp_Object frame)
{
Lisp_Object font_spec, list, *drivers, vec;
From 3b9e60ba2fad4330682e6fdd15899f0f227a40d7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 5 May 2022 08:57:49 +0300
Subject: [PATCH 105/466] ; * src/window.c (Fset_window_start): Mention the
effect on vscroll.
---
src/window.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/window.c b/src/window.c
index 32e486f9f95a..cbb2a9e0e1c5 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1861,7 +1861,13 @@ point not visible in the window.
For reliable setting of WINDOW start position, make sure point is
at a position that will be visible when that start is in effect,
otherwise there's a chance POS will be disregarded, e.g., if point
-winds up in a partially-visible line. */)
+winds up in a partially-visible line.
+
+The setting of the WINDOW's start position takes effect during the
+next redisplay cycle, not immediately. If NOFORCE is nil or
+omitted, forcing the display of WINDOW to start at POS cancels
+any setting of WINDOW's vertical scroll (\"vscroll\") amount
+set by `set-window-vscroll' and by scrolling functions. */)
(Lisp_Object window, Lisp_Object pos, Lisp_Object noforce)
{
register struct window *w = decode_live_window (window);
From 69c56cbe6ed56024440203181dda2d6fee6dc9f4 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 5 May 2022 10:38:40 +0300
Subject: [PATCH 106/466] ; * src/w32notify.c: Fix a typo in a comment.
---
src/w32notify.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/w32notify.c b/src/w32notify.c
index e7d2f0f076bf..ccefecb6596b 100644
--- a/src/w32notify.c
+++ b/src/w32notify.c
@@ -40,8 +40,8 @@ along with GNU Emacs. If not, see . */
and returns. That causes the WaitForSingleObjectEx function call
inside watch_worker to return, but the thread won't terminate until
the event telling to do so will be signaled. The completion
- routine issued another call to ReadDirectoryChangesW as quickly as
- possible. (Except when it does not, see below.)
+ routine then issues another call to ReadDirectoryChangesW as quickly
+ as possible. (Except when it does not, see below.)
In a GUI session, the WM_EMACS_FILENOTIFY message posted to the
message queue gets dispatched to the main Emacs window procedure,
From 936009cfe53623c2e9fdb8f25b859600ac4dca67 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Thu, 5 May 2022 13:22:33 +0200
Subject: [PATCH 107/466] Be more resilient towards errors during error
handling
* src/print.c (print_error_message): Avoid infinite recursion if
`substitute-command-keys' bugs out (bug#55269).
(cherry picked from commit 8364f058b821eba31f84dcded175cca403a965a5)
---
src/print.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/print.c b/src/print.c
index 3a26e5665e5f..43ec0934ba15 100644
--- a/src/print.c
+++ b/src/print.c
@@ -944,7 +944,14 @@ print_error_message (Lisp_Object data, Lisp_Object stream, const char *context,
errmsg = Fget (errname, Qerror_message);
/* During loadup 'substitute-command-keys' might not be available. */
if (!NILP (Ffboundp (Qsubstitute_command_keys)))
- errmsg = call1 (Qsubstitute_command_keys, errmsg);
+ {
+ /* `substitute-command-keys' may bug out, which would lead
+ to infinite recursion when we're called from
+ skip_debugger, so ignore errors. */
+ Lisp_Object subs = safe_call1 (Qsubstitute_command_keys, errmsg);
+ if (!NILP (subs))
+ errmsg = subs;
+ }
file_error = Fmemq (Qfile_error, error_conditions);
}
From 5bfac7c7747895c9d743d2a0edd25cb4317ea629 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 6 May 2022 10:27:20 +0300
Subject: [PATCH 108/466] Provide reference for OTF tags in the ELisp manual
* doc/lispref/display.texi (Low-Level Font): Provide the canonical
reference URL for OTF tags.
---
doc/lispref/display.texi | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index d9e93160ea30..61aca5b88a67 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -3866,7 +3866,10 @@ required; and @code{gpos} is a list of OpenType GPOS feature tag
symbols, or @code{nil} if none is required. If @code{gsub} or
@code{gpos} is a list, a @code{nil} element in that list means that
the font must not match any of the remaining tag symbols. The
-@code{gpos} element may be omitted.
+@code{gpos} element may be omitted. For the list of OpenType script,
+language, and feature tags, see
+@uref{https://docs.microsoft.com/en-us/typography/opentype/spec/ttoreg,
+the list of registered OTF tags}.
@item :type
@cindex font backend
From afdf72eeb2afb5cf96a2f0168c94b97448026666 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Fri, 6 May 2022 17:33:41 +0200
Subject: [PATCH 109/466] Fix bug#55274
* lisp/dired-aux.el (dired-do-compress-to): Use `file-local-name'
for shell out-file. (Bug#55274)
---
lisp/dired-aux.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index f16568f91901..e00910cfe8d4 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1242,7 +1242,8 @@ and `dired-compress-files-alist'."
(when (zerop
(dired-shell-command
(format-spec (cdr rule)
- `((?o . ,(shell-quote-argument out-file))
+ `((?o . ,(shell-quote-argument
+ (file-local-name out-file)))
(?i . ,(mapconcat
(lambda (in-file)
(shell-quote-argument
From e683b08b3fbbc1692e0053699c5cf2b7cbc803f6 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Sun, 8 May 2022 11:43:19 +0200
Subject: [PATCH 110/466] Handle changed scp protocol in Tramp, don't merge
* lisp/net/tramp-sh.el (tramp-scp-force-scp-protocol): New defvar.
(tramp-scp-force-scp-protocol): New defun.
(tramp-do-copy-or-rename-file-out-of-band): Use it.
(tramp-methods) : Use "%y".
* lisp/net/tramp.el (tramp-methods): Adapt docstring.
---
lisp/net/tramp-sh.el | 43 ++++++++++++++++++++++++++++++++++++++++---
lisp/net/tramp.el | 2 ++
2 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 67f5519bbfee..c4fbe4673b97 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -134,6 +134,15 @@ be auto-detected by Tramp.
The string is used in `tramp-methods'.")
+(defvar tramp-scp-force-scp-protocol nil
+ "Force scp protocol.
+
+It is the string \"-O\" if supported by the local scp (since
+release 8.6), otherwise the string \"\". If it is nil, it will
+be auto-detected by Tramp.
+
+The string is used in `tramp-methods'.")
+
;; Initialize `tramp-methods' with the supported methods.
;;;###tramp-autoload
(tramp--with-startup
@@ -170,7 +179,7 @@ The string is used in `tramp-methods'.")
(tramp-remote-shell-args ("-c"))
(tramp-copy-program "scp")
(tramp-copy-args (("-P" "%p") ("-p" "%k")
- ("%x") ("-q") ("-r") ("%c")))
+ ("%x") ("%y") ("-q") ("-r") ("%c")))
(tramp-copy-keep-date t)
(tramp-copy-recursive t)))
(add-to-list 'tramp-methods
@@ -186,7 +195,7 @@ The string is used in `tramp-methods'.")
(tramp-remote-shell-args ("-c"))
(tramp-copy-program "scp")
(tramp-copy-args (("-P" "%p") ("-p" "%k")
- ("%x") ("-q") ("-r") ("%c")))
+ ("%x") ("%y") ("-q") ("-r") ("%c")))
(tramp-copy-keep-date t)
(tramp-copy-recursive t)))
(add-to-list 'tramp-methods
@@ -2311,7 +2320,8 @@ The method used must be an out-of-band method."
?h (or host "") ?u (or user "") ?p (or port "")
?r listener ?c options ?k (if keep-date " " "")
?n (concat "2>" (tramp-get-remote-null-device v))
- ?x (tramp-scp-strict-file-name-checking v))
+ ?x (tramp-scp-strict-file-name-checking v)
+ ?y (tramp-scp-force-scp-protocol v))
copy-program (tramp-get-method-parameter v 'tramp-copy-program)
copy-keep-date (tramp-get-method-parameter
v 'tramp-copy-keep-date)
@@ -4818,6 +4828,33 @@ Goes through the list `tramp-inline-compress-commands'."
(setq tramp-scp-strict-file-name-checking "-T")))))))
tramp-scp-strict-file-name-checking)))
+(defun tramp-scp-force-scp-protocol (vec)
+ "Return the force scp protocol argument of the local scp."
+ (cond
+ ;; No options to be computed.
+ ((null (assoc "%y" (tramp-get-method-parameter vec 'tramp-copy-args)))
+ "")
+
+ ;; There is already a value to be used.
+ ((stringp tramp-scp-force-scp-protocol)
+ tramp-scp-force-scp-protocol)
+
+ ;; Determine the options.
+ (t (setq tramp-scp-force-scp-protocol "")
+ (let ((case-fold-search t))
+ (ignore-errors
+ (when (executable-find "scp")
+ (with-tramp-progress-reporter
+ vec 4 "Computing force scp protocol argument"
+ (with-temp-buffer
+ (tramp-call-process vec "scp" nil t nil "-O")
+ (goto-char (point-min))
+ (unless
+ (search-forward-regexp
+ "\\(illegal\\|unknown\\) option -- O" nil t)
+ (setq tramp-scp-force-scp-protocol "-O")))))))
+ tramp-scp-force-scp-protocol)))
+
(defun tramp-timeout-session (vec)
"Close the connection VEC after a session timeout.
If there is just some editing, retry it after 5 seconds."
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 8baf72464dc7..63ea8a283c6d 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -255,6 +255,8 @@ pair of the form (KEY VALUE). The following KEYs are defined:
- \"%n\" expands to \"2>/dev/null\".
- \"%x\" is replaced by the `tramp-scp-strict-file-name-checking'
argument if it is supported.
+ - \"%y\" is replaced by the `tramp-scp-force-scp-protocol'
+ argument if it is supported.
The existence of `tramp-login-args', combined with the
absence of `tramp-copy-args', is an indication that the
From 1d012e0a621f9cf99048f57130144275b9025d1c Mon Sep 17 00:00:00 2001
From: Alan Mackenzie
Date: Sun, 8 May 2022 11:39:45 +0000
Subject: [PATCH 111/466] Linux console: don't translate ESC TAB to `backtab'
in input-decode-map.
This translation happened after the terminfo entry for TAB in the linux
section was changed to kcbt=\E^I in ncurses version 6.3.
* lisp/term/linux.el (terminal-init-linux): Add a define-key form to remove
the entry for "\e\t" from input-decode-map.
* etc/PROBLEMS: Add a new section under "character terminals" about S-TAB
wrongly doing the same thing as M-TAB, giving tips about amending the Linux
keyboard layout.
---
etc/PROBLEMS | 27 +++++++++++++++++++++++++++
lisp/term/linux.el | 4 ++++
2 files changed, 31 insertions(+)
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 2a26dfaec4d2..8a260c3177ce 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1736,6 +1736,33 @@ this, you can remove the X resource or put this in your init file:
(xterm-remove-modify-other-keys)
+** The shift TAB key combination works as meta TAB on a Linux console.
+
+This happens because on your keyboard layout, S-TAB produces the same
+keycodes as typing ESC TAB individually. The best way to solve this
+is to modify your keyboard layout to produce different codes, and tell
+Emacs what these new codes mean.
+
+The current keyboard layout will probably be a .map.gz file somewhere
+under /usr/share/keymaps. Identify this file, possibly from a system
+initialization file such as /etc/conf.d/keymaps. Run gunzip on it to
+decompress it, and amend the entries for keycode 15 to look something
+like this:
+
+keycode 15 = Tab
+ alt keycode 15 = Meta_Tab
+ shift keycode 15 = F219
+string F219 = "\033[4}\011" # Shift+
+
+After possibly saving this file under a different name, compress it
+again using gzip. Amend /etc/conf.d/keyamps, etc., if needed.
+Further details can be found in the man page for loadkeys.
+
+Then add the following line near the start of your site-start.el or
+.emacs or init.el file:
+
+(define-key input-decode-map "\e[4}\t" 'backtab)
+
** Emacs spontaneously displays "I-search: " at the bottom of the screen.
This means that Control-S/Control-Q (XON/XOFF) "flow control" is being
diff --git a/lisp/term/linux.el b/lisp/term/linux.el
index 6d43e477ac91..ab5a6d8698fb 100644
--- a/lisp/term/linux.el
+++ b/lisp/term/linux.el
@@ -17,6 +17,10 @@
(ignore-errors (when gpm-mouse-mode (require 't-mouse) (gpm-mouse-enable)))
+ ;; Don't translate ESC TAB to backtab as directed
+ ;; by ncurses-6.3.
+ (define-key input-decode-map "\e\t" nil)
+
;; Make Latin-1 input characters work, too.
;; Meta will continue to work, because the kernel
;; turns that into Escape.
From d24ea263e2193016c353d20e6388ef91597cf082 Mon Sep 17 00:00:00 2001
From: Visuwesh
Date: Sun, 8 May 2022 13:17:34 +0200
Subject: [PATCH 112/466] dired-do-query-replace-regexp doc string fix
* lisp/dired-aux.el (dired-do-query-replace-regexp): Refer
'fileloop-continue' instead of the obsolete command
'tags-loop-continue'. (Bug#55311)
(cherry picked from commit 4c505203f9171886f47638779326e257a95a1d79)
---
lisp/dired-aux.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index e00910cfe8d4..d47bcf042798 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -3179,7 +3179,7 @@ type \\[help-command] at that time.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
If you exit the query-replace loop (\\[keyboard-quit], RET or q), you can
-resume the query replace with the command \\[tags-loop-continue]."
+resume the query replace with the command \\[fileloop-continue]."
(interactive
(let ((common
(query-replace-read-args
From 74cc3b525ff9bd939875ce26c95b7a058426f5e7 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 9 May 2022 11:46:56 +0200
Subject: [PATCH 113/466] Fix doc string references to tags-loop-continue
* lisp/vc/vc-dir.el (vc-dir-search, vc-dir-query-replace-regexp):
Fix reference to obsolete tags-loop-continue (bug#55311).
---
lisp/vc/vc-dir.el | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 18f5b07a7f40..9cf6422de002 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -924,7 +924,7 @@ system."
"Search through all marked files for a match for REGEXP.
For marked directories, use the files displayed from those directories.
Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue]."
+To continue searching for next match, use command \\[fileloop-continue]."
(interactive "sSearch marked files (regexp): ")
(tags-search regexp
(mapcar #'car (vc-dir-marked-only-files-and-states))))
@@ -940,7 +940,7 @@ DEL or `n' to skip and go to the next match. For more directions,
type \\[help-command] at that time.
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue]."
+with the command \\[fileloop-continue]."
;; FIXME: this is almost a copy of `dired-do-query-replace-regexp'. This
;; should probably be made generic and used in both places instead of
;; duplicating it here.
From 177718bc6df79ee93656e20c5b25b94923040dab Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 9 May 2022 11:57:46 +0200
Subject: [PATCH 114/466] Update string-to-number documentation to bignum Emacs
* doc/lispref/strings.texi (String Conversion): string-to-number
no longer converts integers to floating point numbers (bug#55334).
---
doc/lispref/strings.texi | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 6a6b756fbe5c..2810f686eb7e 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -853,9 +853,7 @@ between 2 and 16 (inclusive), and integers are converted in that base.
If @var{base} is @code{nil}, then base ten is used. Floating-point
conversion only works in base ten; we have not implemented other
radices for floating-point numbers, because that would be much more
-work and does not seem useful. If @var{string} looks like an integer
-but its value is too large to fit into a Lisp integer,
-@code{string-to-number} returns a floating-point result.
+work and does not seem useful.
The parsing skips spaces and tabs at the beginning of @var{string},
then reads as much of @var{string} as it can interpret as a number in
From d2a5631552cbe036c46111101c0570135e81fc56 Mon Sep 17 00:00:00 2001
From: Arash Esbati
Date: Mon, 9 May 2022 12:10:10 +0200
Subject: [PATCH 115/466] Update AUCTeX FAQ entry
* doc/misc/efaq-w32.texi (AUCTeX): AUCTeX project isn't providing
pre-compiled versions for Windows anymore (bug#55330).
---
doc/misc/efaq-w32.texi | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 20dcb07ed766..3b48fb1453da 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -1754,10 +1754,9 @@ A number of implementations are listed on the
AUCTeX is an Emacs package for writing LaTeX files, which also
includes preview-latex, an Emacs mode for previewing the formatted
-contents of LaTeX documents. Pre-compiled versions for Windows are
-available from
-@uref{https://www.gnu.org/software/auctex/download-for-windows.html, the
-AUCTeX site}.
+contents of LaTeX documents. AUCTeX is available from
+@uref{https://elpa.gnu.org, GNU ELPA} and can be installed with the
+command @kbd{M-x list-packages}.
@node Spell check
@section How do I perform spell checks?
From 7b4bdf7b9b0f4c72dbd1b15f5d134d3176e53a8a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 9 May 2022 16:37:49 +0300
Subject: [PATCH 116/466] Remove the AUCTeX subsection from MS-Windows FAQ
* doc/misc/efaq-w32.texi (AUCTeX): Remove the subsection, it is no
longer useful. (Bug#55330)
---
doc/misc/efaq-w32.texi | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 3b48fb1453da..3a49f0a5da23 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -1742,22 +1742,6 @@ You will need an implementation of TeX for Windows.
A number of implementations are listed on the
@uref{http://www.tug.org/interest.html#free, TeX Users Group} website.
-@menu
-* AUCTeX::
-@end menu
-
-@node AUCTeX
-@subsection AUCTeX
-@cindex auctex, precompiled for Windows
-@cindex latex
-@cindex preview-latex
-
-AUCTeX is an Emacs package for writing LaTeX files, which also
-includes preview-latex, an Emacs mode for previewing the formatted
-contents of LaTeX documents. AUCTeX is available from
-@uref{https://elpa.gnu.org, GNU ELPA} and can be installed with the
-command @kbd{M-x list-packages}.
-
@node Spell check
@section How do I perform spell checks?
@cindex spell checking
From f03c5d81bd4a7af1364558b406e2b87a78b3af73 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 12 May 2022 15:46:20 +0200
Subject: [PATCH 117/466] Fix ControlPath quoting in Tramp
* lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
Adapt docstring. Do not quote ControlPath. Reported by Daniel
Kessler .
---
lisp/net/tramp-sh.el | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index c4fbe4673b97..b0e98a31e114 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -115,7 +115,7 @@ configuration."
"Which ssh Control* arguments to use.
If it is a string, it should have the form
-\"-o ControlMaster=auto -o ControlPath=\\='tramp.%%r@%%h:%%p\\='
+\"-o ControlMaster=auto -o ControlPath=tramp.%%C
-o ControlPersist=no\". Percent characters in the ControlPath
spec must be doubled, because the string is used as format string.
@@ -4785,13 +4785,13 @@ Goes through the list `tramp-inline-compress-commands'."
(if (zerop
(tramp-call-process
vec "ssh" nil nil nil
- "-G" "-o" "ControlPath='tramp.%C'" "0.0.0.1"))
+ "-G" "-o" "ControlPath=tramp.%C" "0.0.0.1"))
(setq tramp-ssh-controlmaster-options
(concat tramp-ssh-controlmaster-options
- " -o ControlPath='tramp.%%C'"))
+ " -o ControlPath=tramp.%%C"))
(setq tramp-ssh-controlmaster-options
(concat tramp-ssh-controlmaster-options
- " -o ControlPath='tramp.%%r@%%h:%%p'")))
+ " -o ControlPath=tramp.%%r@%%h:%%p")))
(when (zerop
(tramp-call-process
vec "ssh" nil nil nil
From a769cbfcfb6e9603bcd15e90f387207f8c061bf1 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 13 May 2022 15:00:21 +0300
Subject: [PATCH 118/466] Fix lexical-binding fallout in vhdl-mode.el
* lisp/progmodes/vhdl-mode.el (arch-alist, pack-alist)
(file-alist, unit-alist, rule-alist): Defvar them, since vhdl-aput
expects them to be dynamically bound. (Bug#55389)
(vhdl-speedbar-insert-hierarchy): Rename the PACK-ALIST argument
to PACKAGE-ALIST, to avoid shadowing the global variable.
---
lisp/progmodes/vhdl-mode.el | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index e562a463e152..4e5f5df8142d 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -153,7 +153,11 @@
(defvar lazy-lock-defer-on-scrolling)
(defvar lazy-lock-defer-on-the-fly)
(defvar speedbar-attached-frame)
-
+(defvar arch-alist)
+(defvar pack-alist)
+(defvar file-alist)
+(defvar unit-alist)
+(defvar rule-alist)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Variables
@@ -14948,10 +14952,10 @@ otherwise use cached data."
(vhdl-speedbar-expand-units directory)
(vhdl-aput 'vhdl-directory-alist directory (list (list directory))))
-(defun vhdl-speedbar-insert-hierarchy ( ent-alist-arg conf-alist-arg pack-alist
- ent-inst-list depth)
- "Insert hierarchy of ENT-ALIST, CONF-ALIST, and PACK-ALIST."
- (if (not (or ent-alist conf-alist pack-alist))
+(defun vhdl-speedbar-insert-hierarchy ( ent-alist-arg conf-alist-arg
+ package-alist ent-inst-list depth)
+ "Insert hierarchy of ENT-ALIST, CONF-ALIST, and PACKAGE-ALIST."
+ (if (not (or ent-alist conf-alist package-alist))
(vhdl-speedbar-make-title-line "No VHDL design units!" depth)
(let ((ent-alist ent-alist-arg)
(conf-alist conf-alist-arg)
@@ -14981,15 +14985,15 @@ otherwise use cached data."
'vhdl-speedbar-configuration-face depth)
(setq conf-alist (cdr conf-alist)))
;; insert packages
- (when pack-alist (vhdl-speedbar-make-title-line "Packages:" depth))
- (while pack-alist
- (setq pack-entry (car pack-alist))
+ (when package-alist (vhdl-speedbar-make-title-line "Packages:" depth))
+ (while package-alist
+ (setq pack-entry (car package-alist))
(vhdl-speedbar-make-pack-line
(nth 0 pack-entry) (nth 1 pack-entry)
(cons (nth 2 pack-entry) (nth 3 pack-entry))
(cons (nth 7 pack-entry) (nth 8 pack-entry))
depth)
- (setq pack-alist (cdr pack-alist))))))
+ (setq package-alist (cdr package-alist))))))
(declare-function speedbar-line-directory "speedbar" (&optional depth))
@@ -17208,6 +17212,7 @@ specified by a target."
(unless (or (assoc directory vhdl-file-alist)
(vhdl-load-cache directory))
(vhdl-scan-directory-contents directory))))
+ (defvar rule-alist) ; we need it to be dynamically bound
(let* ((directory (abbreviate-file-name (vhdl-default-directory)))
(project (vhdl-project-p))
(ent-alist (vhdl-aget vhdl-entity-alist (or project directory)))
From f044da7704edfc7e6cf32606328d0735b77e60d9 Mon Sep 17 00:00:00 2001
From: Po Lu
Date: Fri, 13 May 2022 20:57:24 +0800
Subject: [PATCH 119/466] Fix tooltip face overwriting dragged text strings
during mouse DND
* lisp/mouse.el (mouse-drag-and-drop-region): Copy
`text-tooltip' before showing it. Do not merge to master.
---
lisp/mouse.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 1b9542b9b82f..e5ea5475f43b 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -3049,7 +3049,7 @@ is copied instead of being cut."
;; Show a tooltip.
(if mouse-drag-and-drop-region-show-tooltip
- (tooltip-show text-tooltip)
+ (tooltip-show (copy-sequence text-tooltip))
(tooltip-hide))
;; Show cursor and highlight the original region.
From 8370caa835372ba7841e3822b0f929398c074e1a Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 14 May 2022 17:48:22 +0300
Subject: [PATCH 120/466] ; * lisp/electric.el (electric-indent-mode): Clarify
doc (bug#22564).
---
lisp/electric.el | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/lisp/electric.el b/lisp/electric.el
index 042fc90ccbec..4a35c1a2a144 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -310,10 +310,16 @@ column specified by the function `current-left-margin'."
;;;###autoload
(define-minor-mode electric-indent-mode
- "Toggle on-the-fly reindentation (Electric Indent mode).
+ "Toggle on-the-fly reindentation of text lines (Electric Indent mode).
When enabled, this reindents whenever the hook `electric-indent-functions'
-returns non-nil, or if you insert a character from `electric-indent-chars'.
+returns non-nil, or if you insert one of the \"electric characters\".
+The electric characters normally include the newline, but can
+also include other characters as needed by the major mode; see
+`electric-indent-chars' for the actual list.
+
+By \"reindent\" we mean remove any existing indentation, and then
+indent the line accordiung to context and rules of the major mode.
This is a global minor mode. To toggle the mode in a single buffer,
use `electric-indent-local-mode'."
From 48201ce8defa617af0ddf65f3b2ae79e6cf01df6 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 15 May 2022 09:21:36 +0300
Subject: [PATCH 121/466] ; * lisp/electric.el (electric-indent-mode): Fix a
typo.
---
lisp/electric.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/electric.el b/lisp/electric.el
index 4a35c1a2a144..57cdff38ed45 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -319,7 +319,7 @@ also include other characters as needed by the major mode; see
`electric-indent-chars' for the actual list.
By \"reindent\" we mean remove any existing indentation, and then
-indent the line accordiung to context and rules of the major mode.
+indent the line according to context and rules of the major mode.
This is a global minor mode. To toggle the mode in a single buffer,
use `electric-indent-local-mode'."
From 950dab21e3408788cb2443e2f2c6518a32adfd15 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Sun, 15 May 2022 09:02:42 +0200
Subject: [PATCH 122/466] * test/lisp/net/tramp-tests.el (tramp-test27-load):
Adapt test. Don't merge
---
test/lisp/net/tramp-tests.el | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 8b999a6e3465..7a377e7fbf1d 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -4425,7 +4425,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(let ((tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
- (load tmp-name 'noerror 'nomessage)
+ ;; Ange-FTP does not tolerate a missing file, even with `noerror'.
+ (unless (tramp--test-ange-ftp-p)
+ (load tmp-name 'noerror 'nomessage))
(should-not (featurep 'tramp-test-load))
(write-region "(provide 'tramp-test-load)" nil tmp-name)
;; `load' in lread.c does not pass `must-suffix'. Why?
From 5dbaddc729519b399e31eae13a8f71d8caaade34 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Sun, 15 May 2022 11:05:36 +0200
Subject: [PATCH 123/466] ; Fix some typos
---
ChangeLog.3 | 2 +-
doc/misc/transient.texi | 2 +-
src/emacs.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/ChangeLog.3 b/ChangeLog.3
index 52c6300f1f93..ecd966fb6914 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1293,7 +1293,7 @@
Don't bug out on certain empty elements with ids
- * lisp/net/shr.el (shr-descend): Fix empty-element #id targetting
+ * lisp/net/shr.el (shr-descend): Fix empty-element #id targeting
(bug#52391).
2021-12-09 Paul Eggert
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index 191fe8cd853e..d634ad5197a5 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -2025,7 +2025,7 @@ They are defined here anyway to allow sharing certain methods.
@code{value} The value. Should not be accessed directly.
@item
-@code{init-value} Function that is responsable for setting the object's
+@code{init-value} Function that is responsible for setting the object's
value. If bound, then this is called with the object as the only
argument. Usually this is not bound, in which case the object's
primary @code{transient-init-value} method is called instead.
diff --git a/src/emacs.c b/src/emacs.c
index 0f96716fb386..ccc0dd269f4a 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1365,7 +1365,7 @@ main (int argc, char **argv)
related to the GUI system, like -font, -geometry, and -title, and
then processes the rest of arguments whose priority is below
those that are related to the GUI system. The arguments
- porcessed by 'command-line' are removed from 'command-line-args';
+ processed by 'command-line' are removed from 'command-line-args';
the arguments processed by 'command-line-1' aren't, they are only
removed from 'command-line-args-left'.
From 007bf9a34c52334434e5ee29928773f051e0f19e Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Sun, 15 May 2022 15:09:26 +0200
Subject: [PATCH 124/466] Hide temporary FUSE files in Tramp
* lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defsubst.
(tramp-fuse-handle-directory-files)
(tramp-fuse-handle-file-name-all-completions): Use it.
---
lisp/net/tramp-fuse.el | 38 +++++++++++++++++++++++---------------
1 file changed, 23 insertions(+), 15 deletions(-)
diff --git a/lisp/net/tramp-fuse.el b/lisp/net/tramp-fuse.el
index 17d419f853bc..54e7999e7a37 100644
--- a/lisp/net/tramp-fuse.el
+++ b/lisp/net/tramp-fuse.el
@@ -44,6 +44,12 @@
(delete-file (tramp-fuse-local-file-name filename) trash)
(tramp-flush-file-properties v localname)))
+(defsubst tramp-fuse-remove-hidden-files (files)
+ "Remove hidden files from FILES."
+ (cl-remove-if
+ (lambda (x) (and (stringp x) (string-match-p "\\.fuse_hidden" x)))
+ files))
+
(defun tramp-fuse-handle-directory-files
(directory &optional full match nosort count)
"Like `directory-files' for Tramp files."
@@ -75,7 +81,8 @@
result)))
(setq result (cons item result))))
;; Return result.
- (if nosort result (sort result #'string<))))))
+ (tramp-fuse-remove-hidden-files
+ (if nosort result (sort result #'string<)))))))
(defun tramp-fuse-handle-file-attributes (filename &optional id-format)
"Like `file-attributes' for Tramp files."
@@ -92,20 +99,21 @@
(defun tramp-fuse-handle-file-name-all-completions (filename directory)
"Like `file-name-all-completions' for Tramp files."
- (all-completions
- filename
- (delete-dups
- (append
- (file-name-all-completions
- filename (tramp-fuse-local-file-name directory))
- ;; Some storage systems do not return "." and "..".
- (let (result)
- (dolist (item '(".." ".") result)
- (when (string-prefix-p filename item)
- (catch 'match
- (dolist (elt completion-regexp-list)
- (unless (string-match-p elt item) (throw 'match nil)))
- (setq result (cons (concat item "/") result))))))))))
+ (tramp-fuse-remove-hidden-files
+ (all-completions
+ filename
+ (delete-dups
+ (append
+ (file-name-all-completions
+ filename (tramp-fuse-local-file-name directory))
+ ;; Some storage systems do not return "." and "..".
+ (let (result)
+ (dolist (item '(".." ".") result)
+ (when (string-prefix-p filename item)
+ (catch 'match
+ (dolist (elt completion-regexp-list)
+ (unless (string-match-p elt item) (throw 'match nil)))
+ (setq result (cons (concat item "/") result)))))))))))
(defun tramp-fuse-handle-file-readable-p (filename)
"Like `file-readable-p' for Tramp files."
From f928330fa86e1493d2862180b132a99022458c96 Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 15 May 2022 17:49:17 -0400
Subject: [PATCH 125/466] Update to Org 9.5.3-6-gef41f3
---
lisp/org/org-version.el | 2 +-
lisp/org/org.el | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index dc689662b7db..6bafb6fc3788 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.3-3-gd54104"))
+ (let ((org-git-version "release_9.5.3-6-gef41f3"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 1fc4251a340b..6842bfe9b10b 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -247,7 +247,7 @@ byte-compiled before it is loaded."
(if compile
(progn
(byte-compile-file tangled-file)
- (load tangled-file)
+ (load-file (byte-compile-dest-file tangled-file))
(message "Compiled and loaded %s" tangled-file))
(load-file tangled-file)
(message "Loaded %s" tangled-file))))
@@ -15026,8 +15026,9 @@ When matching, the match groups are the following:
(let* ((regexp
(if extended
(if (eq extended 'agenda)
- (rx (or (regexp org-ts-regexp3)
- (regexp org-element--timestamp-regexp)))
+ (rx-to-string
+ `(or (regexp ,org-ts-regexp3)
+ (regexp ,org-element--timestamp-regexp)))
org-ts-regexp3)
org-ts-regexp2))
(pos (point))
From f836ed098fe8c649e3c30cf55696b3a750f1bbf0 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Tue, 17 May 2022 09:13:34 +0200
Subject: [PATCH 126/466] Some minor Tramp fixes
* lisp/net/tramp-cmds.el (tramp-list-tramp-buffers)
(tramp-list-remote-buffers): Add ;;;###tramp-autoload cookie.
* lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defvar.
(tramp-fuse-remove-hidden-files): Use it.
* lisp/net/tramp-gvfs.el (tramp-gvfs-handler-askquestion):
Keep regression tests running.
---
lisp/net/tramp-cmds.el | 2 ++
lisp/net/tramp-fuse.el | 11 ++++++++---
lisp/net/tramp-gvfs.el | 36 ++++++++++++++++++++----------------
3 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 43aed6255501..8e359c382bff 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -51,6 +51,7 @@ SYNTAX can be one of the symbols `default' (default),
(when syntax
(customize-set-variable 'tramp-syntax syntax)))
+;;;###tramp-autoload
(defun tramp-list-tramp-buffers ()
"Return a list of all Tramp connection buffers."
(append
@@ -61,6 +62,7 @@ SYNTAX can be one of the symbols `default' (default),
(all-completions
"*trace tramp" (mapcar #'list (mapcar #'buffer-name (buffer-list))))))
+;;;###tramp-autoload
(defun tramp-list-remote-buffers ()
"Return a list of all buffers with remote `default-directory'."
(delq
diff --git a/lisp/net/tramp-fuse.el b/lisp/net/tramp-fuse.el
index 54e7999e7a37..7344c3c730a9 100644
--- a/lisp/net/tramp-fuse.el
+++ b/lisp/net/tramp-fuse.el
@@ -44,11 +44,16 @@
(delete-file (tramp-fuse-local-file-name filename) trash)
(tramp-flush-file-properties v localname)))
+(defvar tramp-fuse-remove-hidden-files nil
+ "Remove hidden files from directory listings.")
+
(defsubst tramp-fuse-remove-hidden-files (files)
"Remove hidden files from FILES."
- (cl-remove-if
- (lambda (x) (and (stringp x) (string-match-p "\\.fuse_hidden" x)))
- files))
+ (if tramp-fuse-remove-hidden-files
+ (cl-remove-if
+ (lambda (x) (and (stringp x) (string-match-p "\\.fuse_hidden" x)))
+ files)
+ files))
(defun tramp-fuse-handle-directory-files
(directory &optional full match nosort count)
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index c09c016e6475..3a5041c49180 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1774,22 +1774,26 @@ a downcased host name only."
(list
t ;; handled.
nil ;; no abort of D-Bus.
- (with-tramp-connection-property (tramp-get-process v) message
- ;; In theory, there can be several choices.
- ;; Until now, there is only the question whether
- ;; to accept an unknown host signature or certificate.
- (with-temp-buffer
- ;; Preserve message for `progress-reporter'.
- (with-temp-message ""
- (insert message)
- (goto-char (point-max))
- (if noninteractive
- (message "%s" message)
- (pop-to-buffer (current-buffer)))
- (if (yes-or-no-p
- (buffer-substring
- (line-beginning-position) (point)))
- 0 1)))))
+ ;; Preserve message for `progress-reporter'.
+ (with-temp-message ""
+ (if noninteractive
+ ;; Keep regression tests running.
+ (progn
+ (message "%s" message)
+ 0)
+ (with-tramp-connection-property (tramp-get-process v) message
+ ;; In theory, there can be several choices.
+ ;; Until now, there is only the question
+ ;; whether to accept an unknown host
+ ;; signature or certificate.
+ (with-temp-buffer
+ (insert message)
+ (goto-char (point-max))
+ (pop-to-buffer (current-buffer))
+ (if (yes-or-no-p
+ (buffer-substring
+ (line-beginning-position) (point)))
+ 0 1))))))
;; When QUIT is raised, we shall return this
;; information to D-Bus.
From fa6a0962c5315cceb3632fa6a701eac986940810 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Tue, 17 May 2022 09:14:36 +0200
Subject: [PATCH 127/466] Fix Tramp sshfs tests (don't merge)
* test/lisp/net/tramp-tests.el (tramp-fuse-remove-hidden-files): Declare.
(tramp-test16-directory-files)
(tramp-test16-file-expand-wildcards)
(tramp-test26-file-name-completion, tramp--test-check-files): Use it.
(tramp--test-check-files): Delete directory recursively.
---
test/lisp/net/tramp-tests.el | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 7a377e7fbf1d..dbf62dbc1cf7 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -68,6 +68,7 @@
(defvar tramp-connection-properties)
(defvar tramp-copy-size-limit)
(defvar tramp-display-escape-sequence-regexp)
+(defvar tramp-fuse-remove-hidden-files)
(defvar tramp-fuse-unmount-on-cleanup)
(defvar tramp-inline-compress-start-size)
(defvar tramp-persistency-file-name)
@@ -2997,7 +2998,8 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
- (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
+ (let* ((tramp-fuse-remove-hidden-files t)
+ (tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "bla" tmp-name1))
(tmp-name3 (expand-file-name "foo" tmp-name1)))
(unwind-protect
@@ -3041,7 +3043,8 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
(dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
- (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
+ (let* ((tramp-fuse-remove-hidden-files t)
+ (tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (expand-file-name "foo" tmp-name1))
(tmp-name3 (expand-file-name "bar" tmp-name1))
(tmp-name4 (expand-file-name "baz" tmp-name1))
@@ -4303,7 +4306,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Method and host name in completion mode. This kind of completion
;; does not work on MS Windows.
(when (not (memq system-type '(cygwin windows-nt)))
- (let ((method (file-remote-p tramp-test-temporary-file-directory 'method))
+ (let ((tramp-fuse-remove-hidden-files t)
+ (method (file-remote-p tramp-test-temporary-file-directory 'method))
(host (file-remote-p tramp-test-temporary-file-directory 'host))
(orig-syntax tramp-syntax))
(when (and (stringp host) (string-match tramp-host-with-port-regexp host))
@@ -4355,7 +4359,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(dolist (non-essential '(nil t))
(dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
- (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
+ (let ((tramp-fuse-remove-hidden-files t)
+ (tmp-name (tramp--test-make-temp-name nil quoted)))
(unwind-protect
(progn
@@ -6463,6 +6468,7 @@ This requires restrictions of file name syntax."
;; would let the test fail.
(let* ((tramp-test-temporary-file-directory
(file-truename tramp-test-temporary-file-directory))
+ (tramp-fuse-remove-hidden-files t)
(tmp-name1 (tramp--test-make-temp-name nil quoted))
(tmp-name2 (tramp--test-make-temp-name 'local quoted))
(files
@@ -6636,7 +6642,7 @@ This requires restrictions of file name syntax."
(delete-file file2)
(should-not (file-exists-p file2))
- (delete-directory file1)
+ (delete-directory file1 'recursive)
(should-not (file-exists-p file1))))
;; Check, that environment variables are set correctly.
From af1c05a3c4a71f57317837d72f38b2ee703eea71 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 17 May 2022 15:59:59 +0300
Subject: [PATCH 128/466] Fix the name of a kmacro command.
* lisp/kmacro.el (kmacro-redisplay): Rename from
'kdb-macro-redisplay' (which was wrong and included a typo).
* etc/NEWS: Announce the change. (Bug#55471)
---
etc/NEWS | 5 +++++
lisp/kmacro.el | 6 +++---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 49960291990d..a8b5cd08ba53 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -24,12 +24,17 @@ with a prefix argument or by typing 'C-u C-h C-n'.
* Changes in Emacs 28.2
+This is a bug-fix release with no new features.
+
* Editing Changes in Emacs 28.2
* Changes in Specialized Modes and Packages in Emacs 28.2
+** The command 'kdb-macro-redisplay' was renamed to 'kmacro-redisplay'.
+This is to fix an embarrassing typo in the original name.
+
* New Modes and Packages in Emacs 28.2
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 9bbaaa666dac..6e35a6120b16 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -1344,12 +1344,12 @@ To customize possible responses, change the \"bindings\" in
(kmacro-push-ring)
(setq last-kbd-macro kmacro-step-edit-new-macro))))
-(defun kdb-macro-redisplay ()
- "Force redisplay during kbd macro execution."
+(defun kmacro-redisplay ()
+ "Force redisplay during keyboard macro execution."
(interactive)
(or executing-kbd-macro
defining-kbd-macro
- (user-error "Not defining or executing kbd macro"))
+ (user-error "Not defining or executing keyboard macro"))
(when executing-kbd-macro
(let ((executing-kbd-macro nil))
(redisplay))))
From 4f0fd54bc476dc776d15f35a827e437716663030 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Tue, 17 May 2022 19:56:43 +0200
Subject: [PATCH 129/466] Add glossary entries for "interactively"
* doc/emacs/glossary.texi (Glossary): Mention "interactively" and
how it relates to the "command" concept (bug#55461).
---
doc/emacs/glossary.texi | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index 7e0c84d72371..a78a2c9e2d76 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -229,9 +229,11 @@ from a variety of coding systems when reading or writing it.
@item Command
A command is a Lisp function specially defined to be able to serve as
a key binding in Emacs or to be invoked by its name
-(@pxref{Glossary---Command Name}). When you type a key sequence
-(q.v.), its binding (q.v.@:) is looked up in the relevant keymaps
-(q.v.@:) to find the command to run. @xref{Commands}.
+(@pxref{Glossary---Command Name}). (Another term for @dfn{command} is
+@dfn{interactive function}---they are used interchangeably.) When you
+type a key sequence (q.v.), its binding (q.v.@:) is looked up in the
+relevant keymaps (q.v.@:) to find the command to run.
+@xref{Commands}.
@item Command History
@xref{Glossary---Minibuffer History}.
@@ -775,6 +777,14 @@ typing sequences of @acronym{ASCII} characters (q.v.). @xref{Input Methods}.
Insertion means adding text into the buffer, either from the keyboard
or from some other place in Emacs.
+@item Interactive Function
+A different term for @dfn{command} (q.v.).
+
+@item Interactive Invocation
+A function can be called from Lisp code, or called as a user level
+command (via @kbd{M-x}, a key binding or a menu). In the latter case,
+the function is said to be @dfn{called interactively}.
+
@item Interlocking
@xref{Glossary---File Locking}.
From 7dc026f9ea1452ed0ca135c6b9062f778c76e6ba Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Tue, 17 May 2022 20:02:59 +0200
Subject: [PATCH 130/466] Fix kmacro-keymap binding after previous change
* lisp/kmacro.el (kmacro-keymap): Fix binding after
kmacro-redisplay command name change.
---
lisp/kmacro.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 6e35a6120b16..7478e97134f8 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -172,7 +172,7 @@ macro to be executed before appending to it."
(define-key map "\C-k" #'kmacro-end-or-call-macro-repeat)
(define-key map "r" #'apply-macro-to-region-lines)
(define-key map "q" #'kbd-macro-query) ;; Like C-x q
- (define-key map "d" #'kdb-macro-redisplay)
+ (define-key map "d" #'kmacro-redisplay)
;; macro ring
(define-key map "\C-n" #'kmacro-cycle-ring-next)
From 3ffa3d340339eb90e619051711e910d73f84b3a8 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 20 May 2022 10:12:04 +0300
Subject: [PATCH 131/466] ; Minor addition to make-tarball.txt
* admin/make-tarball.txt (WEB PAGES): Mention the need to update
th copyright years of emacs.html. (Bug#55530)
---
admin/make-tarball.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index c8ee3349cdb2..02b4f318e26c 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -334,6 +334,9 @@ looks like this:
+Also, make sure the copyright years at the bottom of emacs.html are
+up-to-date.
+
The file download.html may need to be updated, for example if the
MS-Windows binaries will be signed by a different person/key than
those mentioned there.
From de35e9728f3d821e280b5c97c66f1ba8991cd700 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 20 May 2022 17:08:34 +0300
Subject: [PATCH 132/466] Advise against settings in the MS-Windows system
registry
* doc/emacs/cmdargs.texi (MS-Windows Registry): Advise against
setting environment variables in the system registry. (Bug#16429)
---
doc/emacs/cmdargs.texi | 54 +++++++++++++++++++++++++++---------------
1 file changed, 35 insertions(+), 19 deletions(-)
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 797b3eaa4b19..ffab2b2213b3 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -771,29 +771,45 @@ changing any environment or registry settings.
@pindex addpm, MS-Windows installation program
@cindex registry, setting environment variables (MS-Windows)
-On MS-Windows, the installation program @command{addpm.exe} adds
-values for @env{emacs_dir}, @env{EMACSLOADPATH}, @env{EMACSDATA},
-@env{EMACSPATH}, @env{EMACSDOC}, @env{SHELL} and @env{TERM} to the
-@file{HKEY_LOCAL_MACHINE} section of the system registry, under
-@file{/Software/GNU/Emacs}. It does this because there is no standard
-place to set environment variables across different versions of
-Windows. Running @command{addpm.exe} is no longer strictly necessary
-in recent versions of Emacs, but if you are upgrading from an older
-version, running @command{addpm.exe} ensures that you do not have
-older registry entries from a previous installation, which may not be
-compatible with the latest version of Emacs.
-
-When Emacs starts, as well as checking the environment, it also checks
-the System Registry for those variables and for @env{HOME}, @env{LANG}
-and @env{PRELOAD_WINSOCK}.
+On MS-Windows, the environment variables @env{emacs_dir},
+@env{EMACSLOADPATH}, @env{EMACSDATA}, @env{EMACSPATH}, @env{EMACSDOC},
+@env{SHELL}, @env{TERM}, @env{HOME}, @env{LANG}, and
+@env{PRELOAD_WINSOCK} can also be set in the @file{HKEY_CURRENT_USER}
+or the @file{HKEY_LOCAL_MACHINE} section of the system registry, under
+the @file{/Software/GNU/Emacs} key. When Emacs starts, as well as
+checking the environment, it also checks the system registry for those
+variables.
To determine the value of those variables, Emacs goes through the
-following procedure. First, the environment is checked. If the
-variable is not found there, Emacs looks for registry keys by that
-name under @file{/Software/GNU/Emacs}; first in the
+following procedure. First, it checks the environment. If the
+variable is not found there, Emacs looks for a registry key by the
+name of the variable under @file{/Software/GNU/Emacs}; first in the
@file{HKEY_CURRENT_USER} section of the registry, and if not found
there, in the @file{HKEY_LOCAL_MACHINE} section. Finally, if Emacs
-still cannot determine the values, compiled-in defaults are used.
+still cannot determine the values, it uses the compiled-in defaults.
+
+Note that the registry settings have global system-wide effect: they
+will affect all Emacs sessions run on the system. Thus, if you run
+different Emacs versions, or use both installed and un-installed Emacs
+executables, or build newer versions of Emacs, the settings in the
+registry will cause all of them to use the same directories, which is
+probably not what you want. For this reason, @emph{we recommend
+against setting these variables in the registry}. If you have such
+settings in the registry, we recommend that you remove them.
+
+If you run the Emacs MS-Windows installation program
+@command{addpm.exe}, it will update any existing registry settings of
+the @env{emacs_dir}, @env{EMACSLOADPATH}, @env{EMACSDATA},
+@env{EMACSPATH}, @env{EMACSDOC}, @env{SHELL}, and @env{TERM} variables
+to have the values suitable for the installed Emacs version with which
+@command{addpm.exe} came. Note that @command{addpm.exe} will
+@emph{not} create any registry setting that didn't exist, it will only
+update existing settings, which are most probably inherited from an
+old Emacs installation, so that they are compatible with the newly
+installed Emacs version. Running @command{addpm.exe} is no longer
+necessary when installing recent versions of Emacs, so we only
+recommend doing that if you are upgrading from an older version, and
+cannot remove these settings from the registry for some reason.
In addition to the environment variables above, you can also add
settings to the @file{/Software/GNU/Emacs} registry key to specify X
From dfa3e6f424b20fe27d9041b2ce7d69811df5d8cd Mon Sep 17 00:00:00 2001
From: Alan Mackenzie
Date: Fri, 20 May 2022 20:18:38 +0000
Subject: [PATCH 133/466] Restore the Fselect_window call in
gui_consider_frame_title.
This fixes bug #55412. The call to Fselect_window was removed on 2021-03-21
in the commit "Prevent open minibuffers getting lost when their frame gets
deleted". This call is actually needed to determine current elements of the
pertinent window and frame when these are used in the frame title.
* src/frame.c (do_switch_frame): When the selected window in the target frame
is the mini-window, switch away from this window unless there is a valid
minibuffer there.
* src/frame.h (struct frame): Add an incidental comment about the element
selected_window.
* src/minibuf.c (move_minibuffers_onto_frame): No longer set the selected
window of the source frame. This action is now performed later, on returning
to that frame, in do_switch_frame when needed (see above).
* src/xdisp.c (gui_consider_frame_title): Replace the Fselect_window call and
associated ancillary settings.
---
src/frame.c | 7 +++++++
src/frame.h | 1 +
src/minibuf.c | 10 +---------
src/xdisp.c | 3 ++-
4 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/frame.c b/src/frame.c
index ccac18d23c2b..dc8045f41e64 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1564,6 +1564,13 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
if (! FRAME_MINIBUF_ONLY_P (XFRAME (selected_frame)))
last_nonminibuf_frame = XFRAME (selected_frame);
+ /* If the selected window in the target frame is its mini-window, we move
+ to a different window, the most recently used one, unless there is a
+ valid active minibuffer in the mini-window. */
+ if (EQ (f->selected_window, f->minibuffer_window)
+ && NILP (Fminibufferp (XWINDOW (f->minibuffer_window)->contents, Qt)))
+ Fset_frame_selected_window (frame, call1 (Qget_mru_window, frame), Qnil);
+
Fselect_window (f->selected_window, norecord);
/* We want to make sure that the next event generates a frame-switch
diff --git a/src/frame.h b/src/frame.h
index 0b8cdf62dede..cc0dae8f5abc 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -123,6 +123,7 @@ struct frame
/* This frame's selected window.
Each frame has its own window hierarchy
and one of the windows in it is selected within the frame.
+ This window may be the mini-window of the frame, if any.
The selected window of the selected frame is Emacs's selected window. */
Lisp_Object selected_window;
diff --git a/src/minibuf.c b/src/minibuf.c
index 847e7be5ad47..0fc7f2caa155 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -197,20 +197,12 @@ move_minibuffers_onto_frame (struct frame *of, bool for_deletion)
return;
if (FRAME_LIVE_P (f)
&& !EQ (f->minibuffer_window, of->minibuffer_window)
- && WINDOW_LIVE_P (f->minibuffer_window) /* F not a tootip frame */
+ && WINDOW_LIVE_P (f->minibuffer_window) /* F not a tooltip frame */
&& WINDOW_LIVE_P (of->minibuffer_window))
{
zip_minibuffer_stacks (f->minibuffer_window, of->minibuffer_window);
if (for_deletion && XFRAME (MB_frame) != of)
MB_frame = selected_frame;
- if (!for_deletion
- && MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (of))))
- {
- Lisp_Object old_frame;
- XSETFRAME (old_frame, of);
- Fset_frame_selected_window (old_frame,
- Fframe_first_window (old_frame), Qnil);
- }
}
}
diff --git a/src/xdisp.c b/src/xdisp.c
index 6963935666b2..9740e6b590e1 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12796,8 +12796,9 @@ gui_consider_frame_title (Lisp_Object frame)
mode_line_noprop_buf; then display the title. */
record_unwind_protect (unwind_format_mode_line,
format_mode_line_unwind_data
- (NULL, current_buffer, Qnil, false));
+ (f, current_buffer, selected_window, false));
+ Fselect_window (f->selected_window, Qt);
set_buffer_internal_1
(XBUFFER (XWINDOW (f->selected_window)->contents));
fmt = FRAME_ICONIFIED_P (f) ? Vicon_title_format : Vframe_title_format;
From 90aae0bca2a4d082ec6e452ca8399b75c6c1d633 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 21 May 2022 10:20:41 +0300
Subject: [PATCH 134/466] Improve documentation strings and prompts in
abbrev.el
* lisp/abbrev.el (abbrev-file-name, only-global-abbrevs)
(copy-abbrev-table, insert-abbrevs, list-abbrevs)
(abbrev-table-name, edit-abbrevs, define-abbrevs)
(read-abbrev-file, quietly-read-abbrev-file, write-abbrev-file)
(abbrev-edit-save-to-file, abbrev-edit-save-buffer)
(add-mode-abbrev, add-global-abbrev, inverse-add-mode-abbrev)
(inverse-add-global-abbrev, abbrev-prefix-mark)
(expand-region-abbrevs, abbrev-table-get, abbrev-table-put)
(abbrev-get, abbrev-minor-mode-table-alist, abbrevs-changed)
(abbrev-all-caps, last-abbrev-text, last-abbrev-location)
(clear-abbrev-table, define-abbrev, define-global-abbrev)
(define-mode-abbrev, abbrev--active-tables, abbrev--symbol)
(abbrev-symbol, abbrev-expansion, abbrev-insert)
(abbrev-expand-function, abbrev--suggest-above-threshold)
(abbrev--suggest-saved-recommendations)
(abbrev--suggest-shortest-abbrev, abbrev--suggest-get-totals)
(insert-abbrev-table-description, define-abbrev-table)
(abbrev-table-menu): Fix doc strings: wording, punctuation,
clarity.
(add-abbrev, inverse-add-abbrev): Improve the prompt text.
(Bug#55527)
---
lisp/abbrev.el | 249 ++++++++++++++++++++++++++-----------------------
1 file changed, 134 insertions(+), 115 deletions(-)
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index de971eb2bd5f..fd8cb754d178 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -42,12 +42,12 @@
(defcustom abbrev-file-name
(locate-user-emacs-file "abbrev_defs" ".abbrev_defs")
- "Default name of file from which to read abbrevs."
+ "Default name of file from which to read and where to save abbrevs."
:initialize 'custom-initialize-delay
:type 'file)
(defcustom only-global-abbrevs nil
- "Non-nil means user plans to use global abbrevs only.
+ "Non-nil means user plans to use only global abbrevs.
This makes the commands that normally define mode-specific abbrevs
define global abbrevs instead."
:type 'boolean
@@ -59,7 +59,8 @@ define global abbrevs instead."
In Abbrev mode, inserting an abbreviation causes it to expand and
be replaced by its expansion."
- ;; It's defined in C, this stops the d-m-m macro defining it again.
+ ;; It's defined in C, this stops the 'define-minor-mode' macro from
+ ;; defining it again.
:variable abbrev-mode)
(put 'abbrev-mode 'safe-local-variable 'booleanp)
@@ -83,7 +84,8 @@ be replaced by its expansion."
(defun copy-abbrev-table (table)
"Make a new abbrev-table with the same abbrevs as TABLE.
-Does not copy property lists."
+This function does not copy property lists of the abbrevs.
+See `define-abbrev' for the documentation of abbrev properties."
(let ((new-table (make-abbrev-table)))
(obarray-map
(lambda (symbol)
@@ -95,8 +97,8 @@ Does not copy property lists."
new-table))
(defun insert-abbrevs ()
- "Insert after point a description of all defined abbrevs.
-Mark is set after the inserted text."
+ "Insert the description of all defined abbrevs after point.
+Set mark after the inserted text."
(interactive)
(push-mark
(save-excursion
@@ -105,15 +107,15 @@ Mark is set after the inserted text."
(point))))
(defun list-abbrevs (&optional local)
- "Display a list of defined abbrevs.
-If LOCAL is non-nil, interactively when invoked with a
-prefix arg, display only local, i.e. mode-specific, abbrevs.
-Otherwise display all abbrevs."
+ "Display a list of the defined abbrevs.
+If LOCAL is non-nil (interactively, when invoked with a
+prefix arg), display only local, i.e. mode-specific, abbrevs.
+Otherwise display all the abbrevs."
(interactive "P")
(display-buffer (prepare-abbrev-list-buffer local)))
(defun abbrev-table-name (table)
- "Value is the name of abbrev table TABLE."
+ "Return the name of the specified abbrev TABLE."
(let ((tables abbrev-table-name-list)
found)
(while (and (not found) tables)
@@ -137,33 +139,33 @@ Otherwise display all abbrevs."
(dolist (table (nreverse empty-tables))
(insert-abbrev-table-description table t)))
;; Note: `list-abbrevs' can display only local abbrevs, in
- ;; which case editing could lose abbrevs of other tables. Thus
- ;; enter `edit-abbrevs-mode' only if LOCAL is nil.
+ ;; which case editing could lose abbrevs of other tables.
+ ;; Thus enter `edit-abbrevs-mode' only if LOCAL is nil.
(edit-abbrevs-mode))
(goto-char (point-min))
(set-buffer-modified-p nil)
(current-buffer))))
(defun edit-abbrevs ()
- "Alter abbrev definitions by editing a list of them.
-Selects a buffer containing a list of abbrev definitions with
-point located in the abbrev table for the current buffer, and
-turns on `edit-abbrevs-mode' in that buffer.
+ "Alter abbrev definitions by editing the list of abbrevs.
+This selects a buffer containing the list of abbrev definitions
+with point located in the abbrev table for the current buffer, and
+turns on `edit-abbrevs-mode' in the buffer with the list of abbrevs.
-You can edit them and type \\\\[edit-abbrevs-redefine] \
+You can edit the abbrevs and type \\\\[edit-abbrevs-redefine] \
to redefine abbrevs
according to your editing.
The abbrevs editing buffer contains a header line for each
abbrev table, which is the abbrev table name in parentheses.
-This is followed by one line per abbrev in that table:
+The header line is followed by one line per abbrev in that table:
NAME USECOUNT EXPANSION HOOK
where NAME and EXPANSION are strings with quotes,
USECOUNT is an integer, and HOOK is any valid function
-or may be omitted (it is usually omitted)."
+that may be omitted (it is usually omitted)."
(interactive)
(let ((table-name (abbrev-table-name local-abbrev-table)))
(switch-to-buffer (prepare-abbrev-list-buffer))
@@ -184,8 +186,9 @@ or may be omitted (it is usually omitted)."
"Define abbrevs according to current visible buffer contents.
See documentation of `edit-abbrevs' for info on the format of the
text you must have in the buffer.
-With argument, eliminate all abbrev definitions except
-the ones defined from the buffer now."
+If ARG is non-nil (interactively, when invoked with a prefix
+argument), eliminate all abbrev definitions except the ones
+defined by the current buffer contents."
(interactive "P")
(if arg (kill-all-abbrevs))
(save-excursion
@@ -216,7 +219,8 @@ the ones defined from the buffer now."
"Read abbrev definitions from file written with `write-abbrev-file'.
Optional argument FILE is the name of the file to read;
it defaults to the value of `abbrev-file-name'.
-Optional second argument QUIETLY non-nil means don't display a message."
+Optional second argument QUIETLY non-nil means don't display a message
+about loading the abbrevs."
(interactive
(list
(read-file-name (format-prompt "Read abbrev file" abbrev-file-name)
@@ -225,22 +229,22 @@ Optional second argument QUIETLY non-nil means don't display a message."
(setq abbrevs-changed nil))
(defun quietly-read-abbrev-file (&optional file)
- "Read abbrev definitions from file written with `write-abbrev-file'.
+ "Quietly read abbrev definitions from file written with `write-abbrev-file'.
Optional argument FILE is the name of the file to read;
it defaults to the value of `abbrev-file-name'.
-Does not display any message."
+Do not display any messages about loading the abbrevs."
;(interactive "fRead abbrev file: ")
(read-abbrev-file file t))
(defun write-abbrev-file (&optional file verbose)
"Write all user-level abbrev definitions to a file of Lisp code.
This does not include system abbrevs; it includes only the abbrev tables
-listed in listed in `abbrev-table-name-list'.
+listed in `abbrev-table-name-list'.
The file written can be loaded in another session to define the same abbrevs.
-The argument FILE is the file name to write. If omitted or nil, the file
-specified in `abbrev-file-name' is used.
-If VERBOSE is non-nil, display a message indicating where abbrevs
-have been saved."
+The argument FILE is the file name to write. If omitted or nil, it defaults
+to the value of `abbrev-file-name'.
+If VERBOSE is non-nil, display a message indicating the file where the
+abbrevs have been saved."
(interactive
(list
(read-file-name "Write abbrev file: "
@@ -253,10 +257,10 @@ have been saved."
(dolist (table
;; We sort the table in order to ease the automatic
;; merging of different versions of the user's abbrevs
- ;; file. This is useful, for example, for when the
+ ;; file. This is useful, for example, when the
;; user keeps their home directory in a revision
- ;; control system, and is therefore keeping multiple
- ;; slightly-differing copies loosely synchronized.
+ ;; control system, and therefore keeps multiple
+ ;; slightly-differing loosely synchronized copies.
(sort (copy-sequence abbrev-table-name-list)
(lambda (s1 s2)
(string< (symbol-name s1)
@@ -270,7 +274,7 @@ have been saved."
(write-region nil nil file nil (and (not verbose) 0)))))
(defun abbrev-edit-save-to-file (file)
- "Save all user-level abbrev definitions in current buffer to FILE."
+ "Save to FILE all the user-level abbrev definitions in current buffer."
(interactive
(list (read-file-name "Save abbrevs to file: "
(file-name-directory
@@ -280,7 +284,7 @@ have been saved."
(write-abbrev-file file t))
(defun abbrev-edit-save-buffer ()
- "Save all user-level abbrev definitions in current buffer.
+ "Save all the user-level abbrev definitions in current buffer.
The saved abbrevs are written to the file specified by
`abbrev-file-name'."
(interactive)
@@ -288,15 +292,16 @@ The saved abbrevs are written to the file specified by
(defun add-mode-abbrev (arg)
- "Define mode-specific abbrev for last word(s) before point.
-Argument is how many words before point form the expansion;
-or zero means the region is the expansion.
-A negative argument means to undefine the specified abbrev.
-Reads the abbreviation in the minibuffer.
+ "Define a mode-specific abbrev whose expansion is the last word before point.
+Prefix argument ARG says how many words before point to use for the expansion;
+zero means the entire region is the expansion.
+A negative ARG means to undefine the specified abbrev.
+
+This command reads the abbreviation from the minibuffer.
See also `inverse-add-mode-abbrev', which performs the opposite task:
-if the abbrev text is already in the buffer, use this command to
-define an abbrev by specifying the expansion in the minibuffer.
+if the abbreviation is already in the buffer, use that command to define
+a mode-specific abbrev by specifying its expansion in the minibuffer.
Don't use this function in a Lisp program; use `define-abbrev' instead."
(interactive "p")
@@ -308,15 +313,16 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
"Mode" arg))
(defun add-global-abbrev (arg)
- "Define global (all modes) abbrev for last word(s) before point.
-The prefix argument specifies the number of words before point that form the
-expansion; or zero means the region is the expansion.
-A negative argument means to undefine the specified abbrev.
-This command uses the minibuffer to read the abbreviation.
+ "Define a global (all modes) abbrev whose expansion is last word before point.
+Prefix argument ARG says how many words before point to use for the expansion;
+zero means the entire region is the expansion.
+A negative ARG means to undefine the specified abbrev.
+
+This command reads the abbreviation from the minibuffer.
See also `inverse-add-global-abbrev', which performs the opposite task:
-if the abbrev text is already in the buffer, use this command to
-define an abbrev by specifying the expansion in the minibuffer.
+if the abbreviation is already in the buffer, use that command to define
+a global abbrev by specifying its expansion in the minibuffer.
Don't use this function in a Lisp program; use `define-abbrev' instead."
(interactive "p")
@@ -330,25 +336,30 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
(save-excursion (forward-word (- arg)) (point))))))
name)
(setq name
- (read-string (format (if exp "%s abbrev for \"%s\": "
+ (read-string (format (if exp "%s abbrev that expands into \"%s\": "
"Undefine %s abbrev: ")
type exp)))
(set-text-properties 0 (length name) nil name)
(if (or (null exp)
(not (abbrev-expansion name table))
- (y-or-n-p (format "%s expands to \"%s\"; redefine? "
+ (y-or-n-p (format "%s expands into \"%s\"; redefine? "
name (abbrev-expansion name table))))
(define-abbrev table (downcase name) exp))))
(defun inverse-add-mode-abbrev (n)
- "Define last word before point as a mode-specific abbrev.
-With prefix argument N, defines the Nth word before point.
-This command uses the minibuffer to read the expansion.
-Expands the abbreviation after defining it.
+ "Define the word before point as a mode-specific abbreviation.
+With prefix argument N, define the Nth word before point as the
+abbreviation.
+
+If `only-global-abbrevs' is non-nil, this command defines a
+global (mode-independent) abbrev instead of a mode-specific one.
+
+This command reads the expansion from the minibuffer, defines the
+abbrev, and then expands the abbreviation in the current buffer.
See also `add-mode-abbrev', which performs the opposite task:
-if the expansion is already in the buffer, use this command
-to define an abbrev by specifying the abbrev in the minibuffer."
+if the expansion is already in the buffer, use that command
+to define an abbrev by specifying the abbreviation in the minibuffer."
(interactive "p")
(inverse-add-abbrev
(if only-global-abbrevs
@@ -358,14 +369,16 @@ to define an abbrev by specifying the abbrev in the minibuffer."
"Mode" n))
(defun inverse-add-global-abbrev (n)
- "Define last word before point as a global (mode-independent) abbrev.
-With prefix argument N, defines the Nth word before point.
-This command uses the minibuffer to read the expansion.
-Expands the abbreviation after defining it.
+ "Define the word before point as a global (mode-independent) abbreviation.
+With prefix argument N, define the Nth word before point as the
+abbreviation.
+
+This command reads the expansion from the minibuffer, defines the
+abbrev, and then expands the abbreviation in the current buffer.
See also `add-global-abbrev', which performs the opposite task:
-if the expansion is already in the buffer, use this command
-to define an abbrev by specifying the abbrev in the minibuffer."
+if the expansion is already in the buffer, use that command
+to define an abbrev by specifying the abbreviation in the minibuffer."
(interactive "p")
(inverse-add-abbrev global-abbrev-table "Global" n))
@@ -379,10 +392,10 @@ to define an abbrev by specifying the abbrev in the minibuffer."
(setq start (point)
name (buffer-substring-no-properties start end)))
- (setq exp (read-string (format "%s expansion for \"%s\": " type name)
+ (setq exp (read-string (format "Expansion for %s abbrev \"%s\": " type name)
nil nil nil t))
(when (or (not (abbrev-expansion name table))
- (y-or-n-p (format "%s expands to \"%s\"; redefine? "
+ (y-or-n-p (format "%s expands into \"%s\"; redefine? "
name (abbrev-expansion name table))))
(define-abbrev table (downcase name) exp)
(save-excursion
@@ -390,10 +403,11 @@ to define an abbrev by specifying the abbrev in the minibuffer."
(expand-abbrev)))))
(defun abbrev-prefix-mark (&optional arg)
- "Mark current point as the beginning of an abbrev.
-The abbrev to be expanded starts here rather than at beginning of
-word. This way, you can expand an abbrev with a prefix: insert
-the prefix, use this command, then insert the abbrev.
+ "Mark point as the beginning of an abbreviation.
+The abbrev to be expanded starts at point rather than at the
+beginning of a word. This way, you can expand an abbrev with
+a prefix: insert the prefix, use this command, then insert the
+abbrev.
This command inserts a hyphen after the prefix, and if the abbrev
is subsequently expanded, this hyphen will be removed.
@@ -408,8 +422,8 @@ argument."
(insert "-"))
(defun expand-region-abbrevs (start end &optional noquery)
- "For abbrev occurrence in the region, offer to expand it.
-The user is asked to type `y' or `n' for each occurrence.
+ "For each abbrev occurrence in the region, offer to expand it.
+Ask the user to type `y' or `n' for each occurrence.
A prefix argument means don't query; expand all abbrevs."
(interactive "r\nP")
(save-excursion
@@ -430,18 +444,19 @@ A prefix argument means don't query; expand all abbrevs."
;;; Abbrev properties.
(defun abbrev-table-get (table prop)
- "Get the PROP property of abbrev table TABLE."
+ "Get the property PROP of abbrev table TABLE."
(let ((sym (obarray-get table "")))
(if sym (get sym prop))))
(defun abbrev-table-put (table prop val)
- "Set the PROP property of abbrev table TABLE to VAL."
+ "Set the property PROP of abbrev table TABLE to VAL."
(let ((sym (obarray-put table "")))
(set sym nil) ; Make sure it won't be confused for an abbrev.
(put sym prop val)))
(defalias 'abbrev-get 'get
"Get the property PROP of abbrev ABBREV
+See `define-abbrev' for the effect of some special properties.
\(fn ABBREV PROP)")
@@ -500,7 +515,8 @@ for any particular abbrev defined in both.")
(defvar abbrev-minor-mode-table-alist nil
"Alist of abbrev tables to use for minor modes.
Each element looks like (VARIABLE . ABBREV-TABLE);
-ABBREV-TABLE is active whenever VARIABLE's value is non-nil.
+ABBREV-TABLE is active whenever VARIABLE's value is non-nil;
+VARIABLE is supposed to be a minor-mode variable.
ABBREV-TABLE can also be a list of abbrev tables.")
(defvar fundamental-mode-abbrev-table
@@ -511,11 +527,11 @@ ABBREV-TABLE can also be a list of abbrev tables.")
"The abbrev table of mode-specific abbrevs for Fundamental Mode.")
(defvar abbrevs-changed nil
- "Set non-nil by defining or altering any word abbrevs.
+ "Non-nil if any word abbrevs were defined or altered.
This causes `save-some-buffers' to offer to save the abbrevs.")
(defcustom abbrev-all-caps nil
- "Non-nil means expand multi-word abbrevs all caps if abbrev was so."
+ "Non-nil means expand multi-word abbrevs in all caps if the abbrev was so."
:type 'boolean
:group 'abbrev-mode)
@@ -532,17 +548,17 @@ Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.")
"The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'.")
(defvar last-abbrev-text nil
- "The exact text of the last abbrev expanded.
+ "The exact text of the last abbrev that was expanded.
It is nil if the abbrev has already been unexpanded.")
(defvar last-abbrev-location 0
- "The location of the start of the last abbrev expanded.")
+ "The location of the start of the last abbrev that was expanded.")
;; (defvar-local local-abbrev-table fundamental-mode-abbrev-table
;; "Local (mode-specific) abbrev table of current buffer.")
(defun clear-abbrev-table (table)
- "Undefine all abbrevs in abbrev table TABLE, leaving it empty."
+ "Undefine all abbrevs in abbrev table TABLE, leaving TABLE empty."
(setq abbrevs-changed t)
(let* ((sym (obarray-get table "")))
(dotimes (i (length table))
@@ -557,9 +573,9 @@ It is nil if the abbrev has already been unexpanded.")
;; For backward compatibility, always return nil.
nil)
-(defun define-abbrev (table name expansion &optional hook &rest props)
- "Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
-NAME must be a string, and should be lower-case.
+(defun define-abbrev (table abbrev expansion &optional hook &rest props)
+ "Define ABBREV in TABLE, to expand into EXPANSION and optionally call HOOK.
+ABBREV must be a string, and should be lower-case.
EXPANSION should usually be a string.
To undefine an abbrev, define it with EXPANSION = nil.
If HOOK is non-nil, it should be a function of no arguments;
@@ -583,12 +599,12 @@ PROPS is a property list. The following properties are special:
overwrite a non-system abbreviation of the same name.
- `:case-fixed': non-nil means that abbreviations are looked up without
case-folding, and the expansion is not capitalized/upcased.
-- `:enable-function': a function of no argument which returns non-nil if the
- abbrev should be used for a particular call of `expand-abbrev'.
+- `:enable-function': a function of no arguments which returns non-nil
+ if the abbrev should be used for a particular call of `expand-abbrev'.
An obsolete but still supported calling form is:
-\(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT SYSTEM)."
+\(define-abbrev TABLE ABBREV EXPANSION &optional HOOK COUNT SYSTEM)."
(when (and (consp props) (or (null (car props)) (numberp (car props))))
;; Old-style calling convention.
(setq props `(:count ,(car props)
@@ -598,7 +614,7 @@ An obsolete but still supported calling form is:
(setq props (plist-put props :abbrev-table-modiff
(abbrev-table-get table :abbrev-table-modiff)))
(let ((system-flag (plist-get props :system))
- (sym (obarray-put table name)))
+ (sym (obarray-put table abbrev)))
;; Don't override a prior user-defined abbrev with a system abbrev,
;; unless system-flag is `force'.
(unless (and (not (memq system-flag '(nil force)))
@@ -618,7 +634,7 @@ An obsolete but still supported calling form is:
(if (eq 'force system-flag) (plist-put props :system t) props))
(abbrev-table-put table :abbrev-table-modiff
(1+ (abbrev-table-get table :abbrev-table-modiff))))
- name))
+ abbrev))
(defun abbrev--check-chars (abbrev global)
"Check if the characters in ABBREV have word syntax in either the
@@ -638,7 +654,7 @@ current (if global is nil) or standard syntax table."
(if global "in the standard syntax" "in this mode"))))))
(defun define-global-abbrev (abbrev expansion)
- "Define ABBREV as a global abbreviation for EXPANSION.
+ "Define ABBREV as a global abbreviation that expands into EXPANSION.
The characters in ABBREV must all be word constituents in the standard
syntax table."
(interactive "sDefine global abbrev: \nsExpansion for %s: ")
@@ -646,7 +662,7 @@ syntax table."
(define-abbrev global-abbrev-table (downcase abbrev) expansion))
(defun define-mode-abbrev (abbrev expansion)
- "Define ABBREV as a mode-specific abbreviation for EXPANSION.
+ "Define ABBREV as a mode-specific abbreviation that expands into EXPANSION.
The characters in ABBREV must all be word-constituents in the current mode."
(interactive "sDefine mode abbrev: \nsExpansion for %s: ")
(unless local-abbrev-table
@@ -655,8 +671,8 @@ The characters in ABBREV must all be word-constituents in the current mode."
(define-abbrev local-abbrev-table (downcase abbrev) expansion))
(defun abbrev--active-tables (&optional tables)
- "Return the list of abbrev tables currently active.
-TABLES if non-nil overrides the usual rules. It can hold
+ "Return the list of abbrev tables that are currently active.
+TABLES, if non-nil, overrides the usual rules. It can hold
either a single abbrev table or a list of abbrev tables."
;; We could just remove the `tables' arg and let callers use
;; (or table (abbrev--active-tables)) but then they'd have to be careful
@@ -682,7 +698,7 @@ either a single abbrev table or a list of abbrev tables."
"Return the symbol representing abbrev named ABBREV in TABLE.
This symbol's name is ABBREV, but it is not the canonical symbol of that name;
it is interned in the abbrev-table TABLE rather than the normal obarray.
-The value is nil if that abbrev is not defined."
+The value is nil if such an abbrev is not defined."
(let* ((case-fold (not (abbrev-table-get table :case-fixed)))
;; In case the table doesn't set :case-fixed but some of the
;; abbrevs do, we have to be careful.
@@ -699,11 +715,11 @@ The value is nil if that abbrev is not defined."
sym)))
(defun abbrev-symbol (abbrev &optional table)
- "Return the symbol representing abbrev named ABBREV.
+ "Return the symbol representing the abbrev named ABBREV in TABLE.
This symbol's name is ABBREV, but it is not the canonical symbol of that name;
it is interned in an abbrev-table rather than the normal obarray.
-The value is nil if that abbrev is not defined.
-Optional second arg TABLE is abbrev table to look it up in.
+The value is nil if such an abbrev is not defined.
+Optional second arg TABLE is the abbrev table to look it up in.
The default is to try buffer's mode-specific abbrev table, then global table."
(let ((tables (abbrev--active-tables table))
sym)
@@ -716,7 +732,7 @@ The default is to try buffer's mode-specific abbrev table, then global table."
(defun abbrev-expansion (abbrev &optional table)
"Return the string that ABBREV expands into in the current buffer.
-Optionally specify an abbrev table as second arg;
+Optionally specify an abbrev TABLE as second arg;
then ABBREV is looked up in that table only."
(symbol-value (abbrev-symbol abbrev table)))
@@ -780,9 +796,9 @@ then ABBREV is looked up in that table only."
(defun abbrev-insert (abbrev &optional name wordstart wordend)
"Insert abbrev ABBREV at point.
If non-nil, NAME is the name by which this abbrev was found.
-If non-nil, WORDSTART is the place where to insert the abbrev.
-If WORDEND is non-nil, the abbrev replaces the previous text between
-WORDSTART and WORDEND.
+If non-nil, WORDSTART is the buffer position where to insert the abbrev.
+If WORDEND is non-nil, it is a buffer position; the abbrev replaces the
+previous text between WORDSTART and WORDEND.
Return ABBREV if the expansion should be considered as having taken place.
The return value can be influenced by a `no-self-insert' property;
see `define-abbrev' for details."
@@ -847,7 +863,8 @@ see `define-abbrev' for details."
(defvar abbrev-expand-function #'abbrev--default-expand
"Function that `expand-abbrev' uses to perform abbrev expansion.
-Takes no argument and should return the abbrev symbol if expansion took place.")
+Takes no arguments, and should return the abbrev symbol if expansion
+took place.")
(defcustom abbrev-suggest nil
"Non-nil means suggest using abbrevs to save typing.
@@ -906,15 +923,17 @@ Expansion is a string of one or more words."
(defun abbrev--suggest-above-threshold (expansion)
"Return non-nil if the abbrev in EXPANSION provides significant savings.
-A significant saving, here, is the difference in length between
-the abbrev and the abbrev expansion. EXPANSION is a cons cell
-where the car is the expansion and the cdr is the abbrev."
+A significant saving, here, means the difference in length between
+the abbrev and its expansion is not below the threshold specified
+by the value of `abbrev-suggest-hint-threshold'.
+EXPANSION is a cons cell where the car is the expansion and the cdr is
+the abbrev."
(>= (- (length (car expansion))
(length (cdr expansion)))
abbrev-suggest-hint-threshold))
(defvar abbrev--suggest-saved-recommendations nil
- "Keeps a list of expansions that have abbrevs defined.
+ "Keeps the list of expansions that have abbrevs defined.
The user can show this list by calling
`abbrev-suggest-show-report'.")
@@ -930,7 +949,7 @@ EXPANSION is a cons cell where the `car' is the expansion and the
(push expansion abbrev--suggest-saved-recommendations))
(defun abbrev--suggest-shortest-abbrev (new current)
- "Return the shortest abbrev of NEW and CURRENT.
+ "Return the shortest of the two abbrevs given by NEW and CURRENT.
NEW and CURRENT are cons cells where the `car' is the expansion
and the `cdr' is the abbrev."
(if (not current)
@@ -959,8 +978,8 @@ informed about the existing abbrev."
(defun abbrev--suggest-get-totals ()
"Return a list of all expansions and how many times they were used.
-Each expansion is a cons cell where the `car' is the expansion
-and the `cdr' is the number of times the expansion has been
+Each expansion in the returned list is a cons cell where the `car' is the
+expansion text and the `cdr' is the number of times the expansion has been
typed."
(let (total cell)
(dolist (expansion abbrev--suggest-saved-recommendations)
@@ -1088,11 +1107,11 @@ Presumes that `standard-output' points to `current-buffer'."
(defun insert-abbrev-table-description (name &optional readable)
"Insert before point a full description of abbrev table named NAME.
NAME is a symbol whose value is an abbrev table.
-If optional 2nd arg READABLE is non-nil, a human-readable description
-is inserted.
+If optional 2nd arg READABLE is non-nil, insert a human-readable
+description.
-If READABLE is nil, an expression is inserted. The expression is
-a call to `define-abbrev-table' that when evaluated will define
+If READABLE is nil, insert an expression. The expression is
+a call to `define-abbrev-table' that, when evaluated, will define
the abbrev table NAME exactly as it is currently defined.
Abbrevs marked as \"system abbrevs\" are ignored."
(let ((symbols (abbrev--table-symbols name readable)))
@@ -1139,10 +1158,10 @@ Properties with special meaning:
case-folding, and the expansion is not capitalized/upcased.
- `:regexp' is a regular expression that specifies how to extract the
name of the abbrev before point. The submatch 1 is treated
- as the potential name of an abbrev. If :regexp is nil, the default
+ as the potential name of an abbrev. If `:regexp' is nil, the default
behavior uses `backward-word' and `forward-word' to extract the name
- of the abbrev, which can therefore only be a single word.
-- `:enable-function' can be set to a function of no argument which returns
+ of the abbrev, which can therefore by default only be a single word.
+- `:enable-function' can be set to a function of no arguments which returns
non-nil if and only if the abbrevs in this table should be used for this
instance of `expand-abbrev'."
(declare (doc-string 3))
@@ -1171,7 +1190,7 @@ Properties with special meaning:
(defun abbrev-table-menu (table &optional prompt sortfun)
"Return a menu that shows all abbrevs in TABLE.
-Selecting an entry runs `abbrev-insert'.
+Selecting an entry runs `abbrev-insert' for that entry's abbrev.
PROMPT is the prompt to use for the keymap.
SORTFUN is passed to `sort' to change the default ordering."
(unless sortfun (setq sortfun 'string-lessp))
From 9e7c0cf57d522b50423880f3a846c52c5509fef9 Mon Sep 17 00:00:00 2001
From: Arash Esbati
Date: Sat, 21 May 2022 13:32:33 +0200
Subject: [PATCH 135/466] Remove mention of removed nnimap-nov-is-evil variable
* doc/misc/gnus.texi (Slow/Expensive Connection): Remove mention
of removed nnimap-nov-is-evil variable (bug#55556).
---
doc/misc/gnus.texi | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 628815df5d08..d5a550836aab 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -29671,10 +29671,9 @@ Gnus not to use @acronym{NOV}.
As the variables for the other back ends, there are
@code{nndiary-nov-is-evil}, @code{nndir-nov-is-evil},
-@code{nnfolder-nov-is-evil}, @code{nnimap-nov-is-evil},
-@code{nnml-nov-is-evil}, and @code{nnspool-nov-is-evil}. Note that a
-non-@code{nil} value for @code{gnus-nov-is-evil} overrides all those
-variables.
+@code{nnfolder-nov-is-evil}, @code{nnml-nov-is-evil}, and
+@code{nnspool-nov-is-evil}. Note that a non-@code{nil} value for
+@code{gnus-nov-is-evil} overrides all those variables.
@end table
From d80dea6036701916c710fde77d1c491dcb804264 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Sat, 21 May 2022 14:46:47 +0200
Subject: [PATCH 136/466] Add note about Tramp completion to completion-styles
doc string
* lisp/minibuffer.el (completion-styles): Add note about Tramp
completion (bug#37954).
---
lisp/minibuffer.el | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 2724b5a3e6d4..0ef846ccd78b 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -985,7 +985,11 @@ and DOC describes the way this style of completion works.")
The available styles are listed in `completion-styles-alist'.
Note that `completion-category-overrides' may override these
-styles for specific categories, such as files, buffers, etc."
+styles for specific categories, such as files, buffers, etc.
+
+Note that Tramp host name completion (e.g., \"/ssh:ho\")
+currently doesn't work if this list doesn't contain at least one
+of `basic', `emacs22' or `emacs21'."
:type completion--styles-type
:version "23.1")
From 139bfa1a0884dbd2600fc1bd11d11f41d3f9ef94 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 21 May 2022 21:04:40 +0300
Subject: [PATCH 137/466] More fixes in abbrev.el doc strings
* lisp/abbrev.el (inverse-add-global-abbrev, inverse-add-mode-abbrev):
Document the effect of negative ARG. (Bug#55527)
---
lisp/abbrev.el | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index fd8cb754d178..b7216f5d6335 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -349,7 +349,7 @@ Don't use this function in a Lisp program; use `define-abbrev' instead."
(defun inverse-add-mode-abbrev (n)
"Define the word before point as a mode-specific abbreviation.
With prefix argument N, define the Nth word before point as the
-abbreviation.
+abbreviation. Negative N means use the Nth word after point.
If `only-global-abbrevs' is non-nil, this command defines a
global (mode-independent) abbrev instead of a mode-specific one.
@@ -371,7 +371,7 @@ to define an abbrev by specifying the abbreviation in the minibuffer."
(defun inverse-add-global-abbrev (n)
"Define the word before point as a global (mode-independent) abbreviation.
With prefix argument N, define the Nth word before point as the
-abbreviation.
+abbreviation. Negative N means use the Nth word after point.
This command reads the expansion from the minibuffer, defines the
abbrev, and then expands the abbreviation in the current buffer.
From b05d1e9b98673796acaf7defcf7581c1780e996f Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 22 May 2022 08:28:16 +0300
Subject: [PATCH 138/466] ; * lisp/desktop.el: Update the commentary.
(Bug#55560)
---
lisp/desktop.el | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/lisp/desktop.el b/lisp/desktop.el
index 51c56faebb55..041dbcf7c115 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -44,10 +44,11 @@
;; (info "(emacs)Saving Emacs Sessions") in the GNU Emacs Manual.
;; When the desktop module is loaded, the function `desktop-kill' is
-;; added to the `kill-emacs-hook'. This function is responsible for
-;; saving the desktop when Emacs is killed. Furthermore an anonymous
-;; function is added to the `after-init-hook'. This function is
-;; responsible for loading the desktop when Emacs is started.
+;; added to the `kill-emacs-query-functions'. This function is
+;; responsible for saving the desktop and deleting the desktop lock
+;; file when Emacs is killed. In addition, an anonymous function is
+;; added to the `after-init-hook'. This function is responsible for
+;; loading the desktop when Emacs is started.
;; Special handling.
;; -----------------
From f1c1fd718478823b760020ed136345d94f379801 Mon Sep 17 00:00:00 2001
From: Damien Cassou
Date: Sun, 22 May 2022 08:09:38 +0200
Subject: [PATCH 139/466] Improve documentation of mail-user-agent.
* doc/emacs/sending.texi (Mail Methods):
* lisp/simple.el (mail-user-agent): Mention additional options
of non-bundled MUA. (Bug#5569)
---
doc/emacs/sending.texi | 4 +++-
lisp/simple.el | 7 ++++---
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index ea87e0a77b6b..acdae8a2639d 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -667,7 +667,9 @@ the bug reporter (@pxref{Bugs}). To specify a mail user agent,
customize the variable @code{mail-user-agent}. Currently, legitimate
values include @code{message-user-agent} (Message mode)
@code{sendmail-user-agent} (Mail mode), @code{gnus-user-agent}, and
-@code{mh-e-user-agent}.
+@code{mh-e-user-agent}. Additional options may be available; check
+in the manual of your mail user agent package for details. You may
+also define another mail user agent using `define-mail-user-agent'.
If you select a different mail-composition method, the information
in this chapter about the mail buffer and Message mode does not apply;
diff --git a/lisp/simple.el b/lisp/simple.el
index b9cb957064df..d235eb9745a5 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -8735,9 +8735,10 @@ Valid values include:
paraphernalia if Gnus is running, particularly
the Gcc: header for archiving.
-Additional valid symbols may be available; check with the author of
-your package for details. The function should return non-nil if it
-succeeds.
+Additional valid symbols may be available; check in the manual of
+your mail user agent package for details. You may also define
+your own symbol to be used as value for this variable using
+`define-mail-user-agent'.
See also `read-mail-command' concerning reading mail."
:type '(radio (function-item :tag "Message package"
From d5ccf2621aa11130d4cf47efc2b8bcde6f6f8be1 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 22 May 2022 11:17:23 +0300
Subject: [PATCH 140/466] ; Fix last change
* doc/emacs/sending.texi (Mail Methods): Fix indexing and markup.
(Bug#55569)
---
doc/emacs/sending.texi | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index acdae8a2639d..cc54224200a7 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -659,6 +659,7 @@ such as MIME support. Another available mode is MH-E
(@pxref{Top,,MH-E,mh-e, The Emacs Interface to MH}).
@vindex mail-user-agent
+@findex define-mail-user-agent
You can choose any of these @dfn{mail user agents} as your preferred
method for editing and sending mail. The commands @kbd{C-x m},
@kbd{C-x 4 m} and @kbd{C-x 5 m} use whichever agent you have
@@ -669,7 +670,8 @@ values include @code{message-user-agent} (Message mode)
@code{sendmail-user-agent} (Mail mode), @code{gnus-user-agent}, and
@code{mh-e-user-agent}. Additional options may be available; check
in the manual of your mail user agent package for details. You may
-also define another mail user agent using `define-mail-user-agent'.
+also define another mail user agent using
+@code{define-mail-user-agent}.
If you select a different mail-composition method, the information
in this chapter about the mail buffer and Message mode does not apply;
From 86b49d58652a8f59a3489bf15b367ec224e17ae7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 23 May 2022 14:58:13 +0300
Subject: [PATCH 141/466] ; * etc/NEWS: Announce changes in 'desktop-kill'.
(Bug#55574)
---
etc/NEWS | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index a8b5cd08ba53..770c96b07ba0 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -35,6 +35,18 @@ This is a bug-fix release with no new features.
** The command 'kdb-macro-redisplay' was renamed to 'kmacro-redisplay'.
This is to fix an embarrassing typo in the original name.
+** 'desktop-save-mode' now saves the desktop in 'save-buffers-kill-emacs'.
+Previously, the desktop was saved in 'kill-emacs' via
+'kill-emacs-hook'. However, that violated the convention that
+functions in 'kill-emacs-hook' cannot interact with the user, and in
+particular didn't play well with ending daemon sessions of Emacs. So
+we moved the saving of the desktop to 'save-buffers-kill-emacs', via
+'kill-emacs-query-functions'. To make sure the desktop is saved,
+terminate Emacs with 'save-buffers-kill-emacs', not with 'kill-emacs'.
+
+(This change was done in Emacs 28.1, but we didn't announce it in NEWS
+back then.)
+
* New Modes and Packages in Emacs 28.2
From a9f17ccce336ad5d384a6271f205a84141980019 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20N=C4=9Bmec?=
Date: Fri, 28 May 2021 11:38:59 +0200
Subject: [PATCH 142/466] ; Fix some doc typos and minor language issues
---
doc/emacs/display.texi | 2 +-
etc/tutorials/TUTORIAL.it | 2 +-
lisp/emacs-lisp/ert-x.el | 2 +-
lisp/gnus/mm-uu.el | 2 +-
lisp/mail/footnote.el | 6 +++---
lisp/progmodes/sh-script.el | 2 +-
lisp/textmodes/dns-mode.el | 2 +-
7 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 29902c1d979f..6897ef525a2d 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1908,7 +1908,7 @@ The command @kbd{M-x display-line-numbers-mode} provides a
convenient way to turn on display of line numbers. This mode has a globalized
variant, @code{global-display-line-numbers-mode}. The user option
@code{display-line-numbers-type} controls which sub-mode of
-line-number display, described above, will these modes activate.
+line-number display, described above, these modes will activate.
@noindent
Note that line numbers are not displayed in the minibuffer and in the
diff --git a/etc/tutorials/TUTORIAL.it b/etc/tutorials/TUTORIAL.it
index 32fe7105628b..c908e36e05f2 100644
--- a/etc/tutorials/TUTORIAL.it
+++ b/etc/tutorials/TUTORIAL.it
@@ -1110,7 +1110,7 @@ mentre fai riferimento al testo di aiuto e poi usare un C-x 1.
Ecco altre utili opzioni di C-h:
- C-h x Descrive un comando. Inserisci il nome della comando.
+ C-h x Descrive un comando. Inserisci il nome del comando.
>> Prova con C-h x previous-line .
Questo mostrerà tutte le informazioni che Emacs possiede sulla
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 17967ae2bfc9..12534c7c4ce4 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -96,7 +96,7 @@ ERT--THUNK with that buffer as current."
To be used in ERT tests. If BODY finishes successfully, the test
buffer is killed; if there is an error, the test buffer is kept
-around on error for further inspection. Its name is derived from
+around for further inspection. Its name is derived from
the name of the test and the result of NAME-FORM."
(declare (debug ((":name" form) def-body))
(indent 1))
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 9fe41f678664..8646998deb90 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -214,7 +214,7 @@ This can be either \"inline\" or \"attachment\".")
"$"
,#'mm-uu-org-src-code-block-extract))
"A list of specifications for non-MIME attachments.
-Each element consist of a `mm-uu-entry'.
+Each element consists of a `mm-uu-entry'.
The functions in the last 3 slots of this type can make use of the following
dynamically-scoped variables:
`file-name', `start-point', and `end-point'.
diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el
index 638382dbab5f..626fc1982d54 100644
--- a/lisp/mail/footnote.el
+++ b/lisp/mail/footnote.el
@@ -41,11 +41,11 @@
;; + The key sequence 'C-c ! a C-y C-c ! b' should auto-fill the
;; footnote in adaptive fill mode. This does not seem to be a bug in
;; `adaptive-fill' because it behaves that way on all point movements
-;; + Handle footmode mode elegantly in all modes, even if that means refuses to
+;; + Handle footnote mode elegantly in all modes, even if that means refusing to
;; accept the burden. For example, in a programming language mode, footnotes
;; should be commented.
-;; + Manually autofilling the a first footnote should not cause it to
-;; wrap into the footnote section tag
+;; + Manually autofilling the first footnote should not cause it to
+;; wrap into the footnote section tag.
;; + Current solution adds a second newline after the section tag, so it is
;; clearly a separate paragraph. There may be stylistic objections to this.
;; + Footnotes with multiple paragraphs should not have their first
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 03313033ddec..966357c09703 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -1412,7 +1412,7 @@ If FORCE is non-nil and no process found, create one."
(pop-to-buffer (process-buffer (sh-shell-process t))))
(defun sh-send-text (text)
- "Send the text to the `sh-shell-process'."
+ "Send TEXT to `sh-shell-process'."
(comint-send-string (sh-shell-process t) (concat text "\n")))
(defun sh-cd-here ()
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index dc26a3c1b7fc..d4acbe24ebb1 100644
--- a/lisp/textmodes/dns-mode.el
+++ b/lisp/textmodes/dns-mode.el
@@ -165,7 +165,7 @@ manually with \\[dns-mode-soa-increment-serial]."
;;;###autoload
(define-derived-mode dns-mode text-mode "DNS"
"Major mode for viewing and editing DNS master files.
-This mode is inherited from text mode. It add syntax
+This mode is derived from text mode. It adds syntax
highlighting, and some commands for handling DNS master files.
Its keymap inherits from `text-mode' and it has the same
variables for customizing indentation. It has its own abbrev
From 9283508fb282cbd51b9376f17b5347246daf74f2 Mon Sep 17 00:00:00 2001
From: Hayden Shenk
Date: Thu, 26 May 2022 18:09:56 +0200
Subject: [PATCH 143/466] Fix format specifiers in tramp-adb.el
* lisp/net/tramp-adb.el (tramp-adb-get-device): Fix format
specifiers for port. (Bug#55651)
Copyright-paperwork-exempt: yes
---
lisp/net/tramp-adb.el | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index aa0f558a2b62..1fe10a560b11 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -1112,9 +1112,9 @@ E.g. a host name \"192.168.1.1#5555\" returns \"192.168.1.1:5555\"
tramp-prefix-port-format ":"
(cond ((member host devices) host)
;; This is the case when the host is connected to the default port.
- ((member (format "%s%s%d" host tramp-prefix-port-format port)
+ ((member (format "%s%s%s" host tramp-prefix-port-format port)
devices)
- (format "%s:%d" host port))
+ (format "%s:%s" host port))
;; An empty host name shall be mapped as well, when there
;; is exactly one entry in `devices'.
((and (zerop (length host)) (= (length devices) 1))
From bd5c95a90d85cb2ec48c53e654fa233c13abd7ac Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 27 May 2022 09:21:31 +0300
Subject: [PATCH 144/466] Mention "unspecified-fg" and "unspecified-bg" in some
doc strings
* lisp/faces.el (face-foreground, face-background)
(foreground-color-at-point, background-color-at-point):
* lisp/color.el (color-name-to-rgb): Mention "unspecified-fg" and
"unspecified-bg" pseudo-colors on TTY frames. (Bug#55623)
---
lisp/color.el | 4 ++++
lisp/faces.el | 16 ++++++++++++++--
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/lisp/color.el b/lisp/color.el
index 0fe663d97a79..ef3a2f583625 100644
--- a/lisp/color.el
+++ b/lisp/color.el
@@ -39,6 +39,10 @@
COLOR should be a color name (e.g. \"white\") or an RGB triplet
string (e.g. \"#ffff1122eecc\").
+COLOR can also be the symbol `unspecified' or one of the strings
+\"unspecified-fg\" or \"unspecified-bg\", in which case the
+return value is nil.
+
Normally the return value is a list of three floating-point
numbers, (RED GREEN BLUE), each between 0.0 and 1.0 inclusive.
diff --git a/lisp/faces.el b/lisp/faces.el
index 3bd1e5db6f8b..e93d8c7af85a 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -515,6 +515,9 @@ FACES may be either a single face or a list of faces.
(defun face-foreground (face &optional frame inherit)
"Return the foreground color name of FACE, or nil if unspecified.
+On TTY frames, the returned color name can be \"unspecified-fg\",
+which stands for the unknown default foreground color of the display
+where the frame is displayed.
If the optional argument FRAME is given, report on face FACE in that frame.
If FRAME is t, report on the defaults for face FACE (for new frames).
If FRAME is omitted or nil, use the selected frame.
@@ -536,6 +539,9 @@ merging with the `default' face (which is always completely specified)."
(defun face-background (face &optional frame inherit)
"Return the background color name of FACE, or nil if unspecified.
+On TTY frames, the returned color name can be \"unspecified-bg\",
+which stands for the unknown default background color of the display
+where the frame is displayed.
If the optional argument FRAME is given, report on face FACE in that frame.
If FRAME is t, report on the defaults for face FACE (for new frames).
If FRAME is omitted or nil, use the selected frame.
@@ -2061,11 +2067,17 @@ unnamed faces (e.g, `foreground-color')."
(face-attribute 'default attribute))))
(defun foreground-color-at-point ()
- "Return the foreground color of the character after point."
+ "Return the foreground color of the character after point.
+On TTY frames, the returned color name can be \"unspecified-fg\",
+which stands for the unknown default foreground color of the
+display where the frame is displayed."
(faces--attribute-at-point :foreground 'foreground-color))
(defun background-color-at-point ()
- "Return the background color of the character after point."
+ "Return the background color of the character after point.
+On TTY frames, the returned color name can be \"unspecified-bg\",
+which stands for the unknown default background color of the
+display where the frame is displayed."
(faces--attribute-at-point :background 'background-color))
From d3cde28b03b429c15405a452119e636c371a9c25 Mon Sep 17 00:00:00 2001
From: Juri Linkov
Date: Fri, 27 May 2022 10:32:56 +0300
Subject: [PATCH 145/466] Fix more occurrences of renamed kmacro-keymap command
* doc/emacs/kmacro.texi (Basic Keyboard Macro): Fix documentation
after recent kmacro-redisplay command name change.
---
doc/emacs/kmacro.texi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index fbbceb7d5eda..5205c0b7167e 100644
--- a/doc/emacs/kmacro.texi
+++ b/doc/emacs/kmacro.texi
@@ -179,7 +179,7 @@ itself counts as the first repetition, since it is executed as you
define it, so @kbd{C-u 4 C-x )} executes the macro immediately 3
additional times.
-@findex kdb-macro-redisplay
+@findex kmacro-redisplay
@kindex C-x C-k d
While executing a long-running keyboard macro, it can sometimes be
useful to trigger a redisplay (to show how far we've gotten). The
From ebea3415b0720e900867356c334e201e531401b5 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 28 May 2022 10:55:01 +0300
Subject: [PATCH 146/466] Fix documentation of 'string-pad'
* doc/lispref/strings.texi (Creating Strings): Fix description of
'string-pad'. (Bug#55688)
---
doc/lispref/strings.texi | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 2810f686eb7e..3d8db985e9cf 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -440,12 +440,12 @@ Split @var{string} into a list of strings on newline boundaries. If
@end defun
@defun string-pad string length &optional padding start
-Pad @var{string} to the be of @var{length} using @var{padding} as the
-padding character (defaulting to the space character). If
-@var{string} is shorter than @var{length}, no padding is done. If
-@var{start} is @code{nil} (or not present), the padding is done to the
-end of the string, and if it's non-@code{nil}, to the start of the
-string.
+Pad @var{string} to be of the given @var{length} using @var{padding}
+as the padding character. @var{padding} defaults to the space
+character. If @var{string} is longer than @var{length}, no padding is
+done. If @var{start} is @code{nil} or omitted, the padding is
+appended to the characters of @var{string}, and if it's
+non-@code{nil}, the padding is prepended to @var{string}'s characters.
@end defun
@defun string-chop-newline string
From fff770fb97e8a251b4138ea0ce06f153f8a936ad Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 28 May 2022 11:51:15 +0300
Subject: [PATCH 147/466] Fix a bad cross-reference in elisp.pdf
* doc/lispref/control.texi (pcase Macro): Fix a conditional
cross-reference (bug#55689).
---
doc/lispref/control.texi | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 92cd67c1260c..ecf616fc2be1 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -629,7 +629,10 @@ Attempts to match @var{pattern1}, @var{pattern2}, @dots{}, in order,
until one of them succeeds. In that case, @code{or} likewise matches,
and the rest of the sub-patterns are not tested.
-To present a consistent environment (@pxref{Intro Eval})
+To present a consistent environment
+@ifnottex
+(@pxref{Intro Eval})
+@end ifnottex
to @var{body-forms} (thus avoiding an evaluation error on match),
the set of variables bound by the pattern is the union of the
variables bound by each sub-pattern. If a variable is not bound by
From 908e2e09d08c8058f40295096aec9251944875ca Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 28 May 2022 14:57:55 +0300
Subject: [PATCH 148/466] Fix commands used to produce on-line HTML docs
* admin/admin.el (manual-meta-string): Only include the first
line, and move the rest...
(manual-links-string): ...to this new string.
(manual-html-fix-headers): Don't remove the ',
see gnu.org ticket #1840138.
---
admin/admin.el | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/admin/admin.el b/admin/admin.el
index a6cb33017ef5..57d5afb23b77 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -340,11 +340,13 @@ Optional argument TYPE is type of output (nil means all)."
\"https://www.w3.org/TR/html4/loose.dtd\">\n\n")
(defconst manual-meta-string
- "
-
+ "\n")
+
+(defconst manual-links-string
+ "
-\n\n")
+\n")
(defconst manual-style-string "\n")
@@ -475,6 +477,12 @@ the @import directive."
(delete-region opoint (point))
(search-forward "\n")
+ (delete-region opoint (point))
+ (search-forward "")
(goto-char (match-beginning 0))
(delete-region opoint (point))
From f9ee83bfb9f09a32ca8c15385f0cd3ec12ebde8c Mon Sep 17 00:00:00 2001
From: Alan Mackenzie
Date: Sat, 28 May 2022 12:55:32 +0000
Subject: [PATCH 149/466] do_switch_frame: before leaving mini-window, check
other (mru) window is live
This fixes bug#55684. There, with a minibuffer-only frame at start up,
Emacs tried to switch to this frame, whose selected window was the
mini-window. There is no other active window in this frame, so the
attempt to swith to another window failed.
* src/frame.c (do_switch_frame): On switching to a frame whose selected
window is as above, before selecting the most recently used window, check
this ostensible window is an actual live window. Otherwise leave the
mini-window selected.
---
src/frame.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/frame.c b/src/frame.c
index dc8045f41e64..0c278259a79c 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1568,8 +1568,14 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
to a different window, the most recently used one, unless there is a
valid active minibuffer in the mini-window. */
if (EQ (f->selected_window, f->minibuffer_window)
+ /* The following test might fail if the mini-window contains a
+ non-active minibuffer. */
&& NILP (Fminibufferp (XWINDOW (f->minibuffer_window)->contents, Qt)))
- Fset_frame_selected_window (frame, call1 (Qget_mru_window, frame), Qnil);
+ {
+ Lisp_Object w = call1 (Qget_mru_window, frame);
+ if (WINDOW_LIVE_P (w)) /* W can be nil in minibuffer-only frames. */
+ Fset_frame_selected_window (frame, w, Qnil);
+ }
Fselect_window (f->selected_window, norecord);
From 1b7b69e764370288583aeeda38069a3c8f9ec912 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Sun, 29 May 2022 13:31:32 +0200
Subject: [PATCH 150/466] Some Tramp cleanup on MS Windows
* lisp/net/tramp.el (tramp-restricted-shell-hosts-alist): Do not add
localhost when `tramp-encoding-shell' is a POSIX shell.
* test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
Skip on MS Windows.
---
lisp/net/tramp.el | 3 ++-
test/lisp/net/tramp-tests.el | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 63ea8a283c6d..3ee116913959 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -497,7 +497,8 @@ interpreted as a regular expression which always matches."
;; either lower case or upper case letters. See
;; .
(defcustom tramp-restricted-shell-hosts-alist
- (when (eq system-type 'windows-nt)
+ (when (and (eq system-type 'windows-nt)
+ (not (string-match-p "sh$" tramp-encoding-shell)))
(list (format "\\`\\(%s\\|%s\\)\\'"
(regexp-quote (downcase tramp-system-name))
(regexp-quote (upcase tramp-system-name)))))
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index dbf62dbc1cf7..61fa6a5ae4ee 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -5019,6 +5019,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
'(:unstable)))
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
+ (skip-unless (not (tramp--test-windows-nt-p)))
(skip-unless (not (tramp--test-crypt-p)))
;; Since Emacs 26.1.
(skip-unless (boundp 'interrupt-process-functions))
From edb48646f273735534796c09d1943a2fc61750e5 Mon Sep 17 00:00:00 2001
From: Ikumi Keita
Date: Tue, 31 May 2022 13:19:48 +0200
Subject: [PATCH 151/466] Fix Display Property manual example
* doc/lispref/display.texi (Display Property): Fix syntax of
example (bug#55736).
Copyright-paperwork-exempt: yes
---
doc/lispref/display.texi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 61aca5b88a67..1147ba112a64 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -4869,7 +4869,7 @@ which are evaluated at display time. This could be unsafe in certain
situations, e.g., when the display specification was generated by some
external program/agent. Wrapping a display specification in a list
that begins with the special symbol @code{disable-eval}, as in
-@w{@code{('disable-eval @var{spec})}}, will disable evaluation of any
+@w{@code{(disable-eval @var{spec})}}, will disable evaluation of any
Lisp in @var{spec}, while still supporting all the other display
property features.
From 5c74c2512378e1903ddc569987e2462108cc0acf Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 31 May 2022 20:20:07 +0300
Subject: [PATCH 152/466] Remove from FAQ the MS-Windows info about BDF fonts
* doc/misc/efaq.texi (How to add fonts): Remove the MS-Windows
specific steps, as BDF fonts are no longer supported on
MS-Windows. (Bug#55740)
---
doc/misc/efaq.texi | 70 ----------------------------------------------
1 file changed, 70 deletions(-)
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index c1fd002bcb59..373efe9ad5f6 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -4337,75 +4337,6 @@ add the following line to your @file{~/.emacs}:
(setq ps-multibyte-buffer 'bdf-font-except-latin)
@end lisp
-A few additional steps are necessary for MS-Windows; they are listed
-below.
-
-First, make sure @emph{all} the directories with BDF font files are
-mentioned in @code{bdf-directory-list}. On Unix and GNU/Linux
-systems, one normally runs @kbd{make install} to install the BDF fonts
-in the same directory. By contrast, Windows users typically don't run
-the Intlfonts installation command, but unpack the distribution in
-some directory, which leaves the BDF fonts in its subdirectories. For
-example, assume that you unpacked Intlfonts in @file{C:/Intlfonts};
-then you should set @code{bdf-directory-list} as follows:
-
-@lisp
- (setq bdf-directory-list
- '("C:/Intlfonts/Asian"
- "C:/Intlfonts/Chinese" "C:/Intlfonts/Chinese.X"
- "C:/Intlfonts/Chinese.BIG" "C:/Intlfonts/Ethiopic"
- "C:/Intlfonts/European" "C:/Intlfonts/European.BIG"
- "C:/Intlfonts/Japanese" "C:/Intlfonts/Japanese.X"
- "C:/Intlfonts/Japanese.BIG" "C:/Intlfonts/Korean.X"
- "C:/Intlfonts/Misc"))
-@end lisp
-
-@cindex @code{w32-bdf-filename-alist}
-@cindex @code{w32-find-bdf-fonts}
-Next, you need to set up the variable @code{w32-bdf-filename-alist} to
-an alist of the BDF fonts and their corresponding file names.
-Assuming you have set @code{bdf-directory-list} to name all the
-directories with the BDF font files, the following Lisp snippet will
-set up @code{w32-bdf-filename-alist}:
-
-@lisp
- (setq w32-bdf-filename-alist
- (w32-find-bdf-fonts bdf-directory-list))
-@end lisp
-
-Now, create fontsets for the BDF fonts:
-
-@smallexample
- (create-fontset-from-fontset-spec
- "-*-fixed-medium-r-normal-*-16-*-*-*-c-*-fontset-bdf,
- japanese-jisx0208:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1983-*,
- katakana-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
- latin-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
- japanese-jisx0208-1978:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1978-*,
- thai-tis620:-misc-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1,
- lao:-misc-fixed-medium-r-normal--16-160-72-72-m-80-MuleLao-1,
- tibetan-1-column:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-80-MuleTibetan-1,
- ethiopic:-Admas-Ethiomx16f-Medium-R-Normal--16-150-100-100-M-160-Ethiopic-Unicode,
- tibetan:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-160-MuleTibetan-0")
-@end smallexample
-
-Many of the international bdf fonts from Intlfonts are type 0, and
-therefore need to be added to font-encoding-alist:
-
-@lisp
- (setq font-encoding-alist
- (append '(("MuleTibetan-0" (tibetan . 0))
- ("GB2312" (chinese-gb2312 . 0))
- ("JISX0208" (japanese-jisx0208 . 0))
- ("JISX0212" (japanese-jisx0212 . 0))
- ("VISCII" (vietnamese-viscii-lower . 0))
- ("KSC5601" (korean-ksc5601 . 0))
- ("MuleArabic-0" (arabic-digit . 0))
- ("MuleArabic-1" (arabic-1-column . 0))
- ("MuleArabic-2" (arabic-2-column . 0)))
- font-encoding-alist))
-@end lisp
-
You can now use the Emacs font menu to select the @samp{bdf: 16-dot medium}
fontset, or you can select it by setting the default font in your
@file{~/.emacs}:
@@ -4414,7 +4345,6 @@ fontset, or you can select it by setting the default font in your
(set-frame-font "fontset-bdf")
@end lisp
-
@c ------------------------------------------------------------
@node Mail and news
@chapter Mail and news
From a95d46e00febf3ef4a7fd016e06d5c426e81f1e2 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Wed, 1 Jun 2022 17:56:45 +0200
Subject: [PATCH 153/466] Make it explicit that a couple of _s in lispref are
underscores
* doc/lispref/strings.texi (Custom Format Strings):
* doc/lispref/control.texi (pcase Macro): Make it explicit that
it's an underscore (bug#55742).
---
doc/lispref/control.texi | 2 +-
doc/lispref/strings.texi | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index ecf616fc2be1..34653d70565d 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -525,7 +525,7 @@ core pattern can have the following forms:
@table @code
-@item _
+@item _@r{ (underscore)}
Matches any @var{expval}.
This is also known as @dfn{don't care} or @dfn{wildcard}.
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 3d8db985e9cf..742ab76244d1 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -1345,7 +1345,7 @@ given width, if specified.
This flag converts the substituted text to upper case (@pxref{Case
Conversion}).
-@item _
+@item _@r{ (underscore)}
This flag converts the substituted text to lower case (@pxref{Case
Conversion}).
@end table
From bfa647972f39e709c7a51981be3761224f0c1d48 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Wed, 1 Jun 2022 22:30:59 +0300
Subject: [PATCH 154/466] ; Fix doc string of
'delete-selection-repeat-replace-region'
* lisp/delsel.el (delete-selection-repeat-replace-region): Doc
fix. (Bug#55755)
---
lisp/delsel.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lisp/delsel.el b/lisp/delsel.el
index f5fe7cf7939f..554b1e7249a2 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -108,7 +108,8 @@ the active region is killed instead of deleted."
"Repeat replacing text of highlighted region with typed text.
Search for the next stretch of text identical to the region last replaced
by typing text over it and replaces it with the same stretch of text.
-With ARG, repeat that many times. `\\[universal-argument]' means until end of buffer."
+With ARG (interactively, prefix numeric argument), repeat that many times.
+Just `\\[universal-argument]' means repeat until the end of the buffer's accessible portion."
(interactive "P")
(let ((old-text (and delete-selection-save-to-register
(get-register delete-selection-save-to-register)))
From ef5651cc77b9a57bd6af5f9914c26528355c80be Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 2 Jun 2022 13:41:59 +0300
Subject: [PATCH 155/466] Fix segfaults when starting on 80x26 TTY frames
* src/dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Make
sure we have valid frame glyph matrices for the interactive
session. (Bug#55760)
(adjust_frame_glyphs): Add assertions for when we fail to allocate
valid frame glyph matrices for a TTY frame.
---
src/dispnew.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/src/dispnew.c b/src/dispnew.c
index 332ba54ee74d..39e5469db055 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -1837,7 +1837,18 @@ adjust_frame_glyphs (struct frame *f)
if (FRAME_WINDOW_P (f))
adjust_frame_glyphs_for_window_redisplay (f);
else
- adjust_frame_glyphs_for_frame_redisplay (f);
+ {
+ adjust_frame_glyphs_for_frame_redisplay (f);
+ eassert (FRAME_INITIAL_P (f)
+ || noninteractive
+ || !initialized
+ || (f->current_matrix
+ && f->current_matrix->nrows > 0
+ && f->current_matrix->rows
+ && f->desired_matrix
+ && f->desired_matrix->nrows > 0
+ && f->desired_matrix->rows));
+ }
/* Don't forget the buffer for decode_mode_spec. */
adjust_decode_mode_spec_buffer (f);
@@ -2119,6 +2130,19 @@ adjust_frame_glyphs_for_frame_redisplay (struct frame *f)
SET_FRAME_GARBAGED (f);
}
}
+ else if (!FRAME_INITIAL_P (f) && !noninteractive && initialized)
+ {
+ if (!f->desired_matrix->nrows || !f->desired_matrix->rows)
+ {
+ adjust_glyph_matrix (NULL, f->desired_matrix, 0, 0, matrix_dim);
+ SET_FRAME_GARBAGED (f);
+ }
+ if (!f->current_matrix->nrows || !f->current_matrix->rows)
+ {
+ adjust_glyph_matrix (NULL, f->current_matrix, 0, 0, matrix_dim);
+ SET_FRAME_GARBAGED (f);
+ }
+ }
}
From 672f9f787fb34919b35d6fdb30f56083b8b7fb79 Mon Sep 17 00:00:00 2001
From: Ikumi Keita
Date: Thu, 2 Jun 2022 14:29:38 +0200
Subject: [PATCH 156/466] Improve keystrokes in doc strings in some find-file
functions
* lisp/files.el (find-file):
(find-file-other-window):
(find-file-other-frame): Include the correct keymap so that
keystrokes are displayed better (bug#55761).
Copyright-paperwork-exempt: yes
---
lisp/files.el | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lisp/files.el b/lisp/files.el
index b187c0b3a0a5..5e9dce555ffc 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1706,7 +1706,7 @@ rather than FUN itself, to `minibuffer-setup-hook'."
(defun find-file (filename &optional wildcards)
"Edit file FILENAME.
-Switch to a buffer visiting file FILENAME,
+\\Switch to a buffer visiting file FILENAME,
creating one if none already exists.
Interactively, the default if you just type RET is the current directory,
but the visited file name is available through the minibuffer history:
@@ -1731,7 +1731,7 @@ Interactively, or if WILDCARDS is non-nil in a call from Lisp,
expand wildcards (if any) and visit multiple files. You can
suppress wildcard expansion by setting `find-file-wildcards' to nil.
-To visit a file without any kind of conversion and without
+\\To visit a file without any kind of conversion and without
automatically choosing a major mode, use \\[find-file-literally]."
(interactive
(find-file-read-args "Find file: "
@@ -1747,6 +1747,7 @@ automatically choosing a major mode, use \\[find-file-literally]."
Like \\[find-file] (which see), but creates a new window or reuses
an existing one. See the function `display-buffer'.
+\\\
Interactively, the default if you just type RET is the current directory,
but the visited file name is available through the minibuffer history:
type \\[next-history-element] to pull it into the minibuffer.
@@ -1779,6 +1780,7 @@ expand wildcards (if any) and visit multiple files."
Like \\[find-file] (which see), but creates a new frame or reuses
an existing one. See the function `display-buffer'.
+\\\
Interactively, the default if you just type RET is the current directory,
but the visited file name is available through the minibuffer history:
type \\[next-history-element] to pull it into the minibuffer.
From 284851265423e875d6de963922f3deb536aa2882 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Thu, 2 Jun 2022 16:04:38 +0300
Subject: [PATCH 157/466] ; * lisp/files.el (find-file): Avoid too short lines
in doc string.
---
lisp/files.el | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/lisp/files.el b/lisp/files.el
index 5e9dce555ffc..292c05b58e46 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1706,19 +1706,18 @@ rather than FUN itself, to `minibuffer-setup-hook'."
(defun find-file (filename &optional wildcards)
"Edit file FILENAME.
-\\Switch to a buffer visiting file FILENAME,
-creating one if none already exists.
+\\Switch to a buffer visiting file FILENAME, creating one if none
+already exists.
Interactively, the default if you just type RET is the current directory,
but the visited file name is available through the minibuffer history:
type \\[next-history-element] to pull it into the minibuffer.
-The first time \\[next-history-element] is used after Emacs prompts for
-the file name, the result is affected by `file-name-at-point-functions',
-which by default try to guess the file name by looking at point in the
-current buffer. Customize the value of `file-name-at-point-functions'
-or set it to nil, if you want only the visited file name and the
-current directory to be available on first \\[next-history-element]
-request.
+The first time \\[next-history-element] is used after Emacs prompts for the file name,
+the result is affected by `file-name-at-point-functions', which by
+default try to guess the file name by looking at point in the current
+buffer. Customize the value of `file-name-at-point-functions' or set
+it to nil, if you want only the visited file name and the current
+directory to be available on first \\[next-history-element] request.
You can visit files on remote machines by specifying something
like /ssh:SOME_REMOTE_MACHINE:FILE for the file name. You can
From 92c5faafd7aac9b2382939fefd2cdf54f386a8e3 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 4 Jun 2022 10:06:43 +0300
Subject: [PATCH 158/466] Clarify documentation of 'string-to-unibyte'
* doc/lispref/nonascii.texi (Converting Representations): Clarify
what 'string-to-unibyte' does. Reported by Richard Hansen
. (Bug#55777)
---
doc/lispref/nonascii.texi | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index d7d25dc36afe..6dc23637a79d 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -280,11 +280,12 @@ to the codepoints @code{#x3FFF80} through @code{#x3FFFFF}, inclusive
@defun string-to-unibyte string
This function returns a unibyte string containing the same sequence of
-characters as @var{string}. It signals an error if @var{string}
-contains a non-@acronym{ASCII} character. If @var{string} is a
-unibyte string, it is returned unchanged. Use this function for
-@var{string} arguments that contain only @acronym{ASCII} and eight-bit
-characters.
+characters as @var{string}. If @var{string} is a unibyte string, it
+is returned unchanged. Otherwise, @acronym{ASCII} characters and
+characters in the @code{eight-bit} charset are converted to their
+corresponding byte values. Use this function for @var{string}
+arguments that contain only @acronym{ASCII} and eight-bit characters;
+the function signals an error if any other characters are encountered.
@end defun
@defun byte-to-string byte
From 1b8719835a200a2be17da226e82030f691caba80 Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sat, 4 Jun 2022 16:21:06 -0400
Subject: [PATCH 159/466] Update to Org 9.5.4
---
etc/refcards/orgcard.tex | 2 +-
lisp/org/org-clock.el | 4 ++--
lisp/org/org-version.el | 4 ++--
lisp/org/org.el | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index 2b4718805a6f..bb4bc5b25df9 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
% Reference Card for Org Mode
-\def\orgversionnumber{9.5.3}
+\def\orgversionnumber{9.5.4}
\def\versionyear{2021} % latest update
\input emacsver.tex
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index 895d124e1465..081a61783450 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -1106,7 +1106,7 @@ to be CLOCKED OUT."))))
60))
(keep
(or (and (memq ch '(?k ?K))
- (read-number "Keep how many minutes? " default))
+ (read-number "Keep how many minutes: " default))
(and (memq ch '(?t ?T))
(floor
(/ (float-time
@@ -1114,7 +1114,7 @@ to be CLOCKED OUT."))))
60)))))
(gotback
(and (memq ch '(?g ?G))
- (read-number "Got back how many minutes ago? " default)))
+ (read-number "Got back how many minutes ago: " default)))
(subtractp (memq ch '(?s ?S)))
(barely-started-p (org-time-less-p
(org-time-subtract last-valid (cdr clock))
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 6bafb6fc3788..6bdcb0afff51 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
- (let ((org-release "9.5.3"))
+ (let ((org-release "9.5.4"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.3-6-gef41f3"))
+ (let ((org-git-version "release_9.5.4"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 6842bfe9b10b..06af12339ec6 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
;; Homepage: https://orgmode.org
;; Package-Requires: ((emacs "25.1"))
-;; Version: 9.5.3
+;; Version: 9.5.4
;; This file is part of GNU Emacs.
;;
From 3ea9357d109e303fece9d49e1fdad8a2e42cc858 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 5 Jun 2022 11:28:10 +0300
Subject: [PATCH 160/466] Update documentation of 'aset' and 'store-substring'
* doc/lispref/strings.texi (Modifying Strings): Adjust to
implementation changes: it is possible for the modified string to
have fewer or more bytes than the original. Add recommendations
regarding unibyte vs multibyte strings and characters. (Bug#55801)
---
doc/lispref/strings.texi | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 742ab76244d1..c9612e598a30 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -461,23 +461,29 @@ Remove the final newline, if any, from @var{string}.
described in this section. @xref{Mutability}.
The most basic way to alter the contents of an existing string is with
-@code{aset} (@pxref{Array Functions}). @code{(aset @var{string}
-@var{idx} @var{char})} stores @var{char} into @var{string} at index
-@var{idx}. Each character occupies one or more bytes, and if @var{char}
-needs a different number of bytes from the character already present at
-that index, @code{aset} signals an error.
+@code{aset} (@pxref{Array Functions}). @w{@code{(aset @var{string}
+@var{idx} @var{char})}} stores @var{char} into @var{string} at character
+index @var{idx}. It will automatically convert a pure-@acronym{ASCII}
+@var{string} to a multibyte string (@pxref{Text Representations}) if
+needed, but we recommend to always make sure @var{string} is multibyte
+(e.g., by using @code{string-to-multibyte}, @pxref{Converting
+Representations}), if @var{char} is a non-@acronym{ASCII} character, not
+a raw byte.
A more powerful function is @code{store-substring}:
@defun store-substring string idx obj
-This function alters part of the contents of the string @var{string}, by
-storing @var{obj} starting at index @var{idx}. The argument @var{obj}
-may be either a character or a (smaller) string.
-
-Since it is impossible to change the length of an existing string, it is
-an error if @var{obj} doesn't fit within @var{string}'s actual length,
-or if any new character requires a different number of bytes from the
-character currently present at that point in @var{string}.
+This function alters part of the contents of the specified @var{string},
+by storing @var{obj} starting at character index @var{idx}. The
+argument @var{obj} may be either a character (in which case the function
+behaves exactly as @code{aset}) or a (smaller) string. If @var{obj}
+is a multibyte string, we recommend to make sure @var{string} is also
+multibyte, even if it's pure-@acronym{ASCII}.
+
+Since it is impossible to change the number of characters in an
+existing string, it is en error if @var{obj} consists of more
+characters than would fit in @var{string} starting at character index
+@var{idx}.
@end defun
To clear out a string that contained a password, use
From 25e53e93910f19ff66aa8f13271f119218acdc6f Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sun, 5 Jun 2022 16:40:22 +0300
Subject: [PATCH 161/466] ; * lisp/files.el (file-expand-wildcards): Doc fix.
---
lisp/files.el | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lisp/files.el b/lisp/files.el
index 292c05b58e46..ea57f02ac032 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -7109,15 +7109,15 @@ by `sh' are supported."
:group 'dired)
(defun file-expand-wildcards (pattern &optional full)
- "Expand wildcard pattern PATTERN.
-This returns a list of file names that match the pattern.
-Files are sorted in `string<' order.
+ "Expand (a.k.a. \"glob\") file-name wildcard pattern PATTERN.
+This returns a list of file names that match PATTERN.
+The returned list of file names is sorted in the `string<' order.
If PATTERN is written as an absolute file name,
-the values are absolute also.
+the expansions in the returned list are also absolute.
If PATTERN is written as a relative file name, it is interpreted
-relative to the current default directory, `default-directory'.
+relative to the current `default-directory'.
The file names returned are normally also relative to the current
default directory. However, if FULL is non-nil, they are absolute."
(save-match-data
From 7f778c6943f66bd1112bd41be19e223b64300509 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Tue, 7 Jun 2022 16:01:04 +0300
Subject: [PATCH 162/466] Fix debugging with GDB when a breakpoint has multiple
locations
* lisp/progmodes/gdb-mi.el (gdb-breakpoints--add-breakpoint-row):
New function, extracted from 'gdb-breakpoints-list-handler-custom'.
Don't print "in " for header-rows of breakpoints with
multiple locations that don't have a function name attached.
(gdb-breakpoints-list-handler-custom): Add to the breakpoint table
also any locations in multiple-location breakpoints, which are
supported since GDB 6.8.
---
lisp/progmodes/gdb-mi.el | 78 ++++++++++++++++++++++++----------------
1 file changed, 47 insertions(+), 31 deletions(-)
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 66fc4b1a4ce5..a1385b0dea88 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -3076,6 +3076,45 @@ See `def-gdb-auto-update-handler'."
'gdb-breakpoints-mode
'gdb-invalidate-breakpoints)
+(defun gdb-breakpoints--add-breakpoint-row (tbl bkpt)
+ (let ((at (gdb-mi--field bkpt 'at))
+ (pending (gdb-mi--field bkpt 'pending))
+ (addr (gdb-mi--field bkpt 'addr))
+ (func (gdb-mi--field bkpt 'func))
+ (type (gdb-mi--field bkpt 'type)))
+ (if (and (not func) (string-equal addr ""))
+ (setq func ""))
+ (gdb-table-add-row tbl
+ (list
+ (gdb-mi--field bkpt 'number)
+ (or type "")
+ (or (gdb-mi--field bkpt 'disp) "")
+ (let ((flag (gdb-mi--field bkpt 'enabled)))
+ (if (string-equal flag "y")
+ (eval-when-compile
+ (propertize "y" 'font-lock-face
+ font-lock-warning-face))
+ (eval-when-compile
+ (propertize "n" 'font-lock-face
+ font-lock-comment-face))))
+ addr
+ (or (gdb-mi--field bkpt 'times) "")
+ (if (and type (string-match ".*watchpoint" type))
+ (gdb-mi--field bkpt 'what)
+ (or (and (equal func "") "")
+ pending at
+ (concat "in "
+ (propertize (or func "unknown")
+ 'font-lock-face
+ font-lock-function-name-face)
+ (gdb-frame-location bkpt)))))
+ ;; Add clickable properties only for
+ ;; breakpoints with file:line information
+ (append (list 'gdb-breakpoint bkpt)
+ (when func
+ '(help-echo "mouse-2, RET: visit breakpoint"
+ mouse-face highlight))))))
+
(defun gdb-breakpoints-list-handler-custom ()
(let ((breakpoints-list (gdb-mi--field
(gdb-mi--field (gdb-mi--partial-output 'bkpt)
@@ -3088,37 +3127,14 @@ See `def-gdb-auto-update-handler'."
(add-to-list 'gdb-breakpoints-list
(cons (gdb-mi--field breakpoint 'number)
breakpoint))
- (let ((at (gdb-mi--field breakpoint 'at))
- (pending (gdb-mi--field breakpoint 'pending))
- (func (gdb-mi--field breakpoint 'func))
- (type (gdb-mi--field breakpoint 'type)))
- (gdb-table-add-row table
- (list
- (gdb-mi--field breakpoint 'number)
- (or type "")
- (or (gdb-mi--field breakpoint 'disp) "")
- (let ((flag (gdb-mi--field breakpoint 'enabled)))
- (if (string-equal flag "y")
- (eval-when-compile
- (propertize "y" 'font-lock-face
- font-lock-warning-face))
- (eval-when-compile
- (propertize "n" 'font-lock-face
- font-lock-comment-face))))
- (gdb-mi--field breakpoint 'addr)
- (or (gdb-mi--field breakpoint 'times) "")
- (if (and type (string-match ".*watchpoint" type))
- (gdb-mi--field breakpoint 'what)
- (or pending at
- (concat "in "
- (propertize (or func "unknown")
- 'font-lock-face font-lock-function-name-face)
- (gdb-frame-location breakpoint)))))
- ;; Add clickable properties only for breakpoints with file:line
- ;; information
- (append (list 'gdb-breakpoint breakpoint)
- (when func '(help-echo "mouse-2, RET: visit breakpoint"
- mouse-face highlight))))))
+ ;; Add the breakpoint/header row to the table.
+ (gdb-breakpoints--add-breakpoint-row table breakpoint)
+ ;; If this breakpoint has multiple locations, add them as well.
+ (when-let ((locations (gdb-mi--field breakpoint 'locations)))
+ (dolist (loc locations)
+ (add-to-list 'gdb-breakpoints-list
+ (cons (gdb-mi--field loc 'number) loc))
+ (gdb-breakpoints--add-breakpoint-row table loc))))
(insert (gdb-table-string table " "))
(gdb-place-breakpoints)))
From 768ed1476ae849777457b1eb666a2b0db9eb7374 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Wed, 8 Jun 2022 12:42:10 +0200
Subject: [PATCH 163/466] Make Tramp version check more robust
* lisp/net/trampver.el (tramp-repository-branch)
(tramp-repository-version): Check for "git" executable.
---
lisp/net/trampver.el | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 9c04abc82890..5863beb29560 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -58,6 +58,7 @@
;; `emacs-repository-get-branch' has been introduced with Emacs 27.1.
(with-no-warnings
(and (stringp dir) (file-directory-p dir)
+ (executable-find "git")
(emacs-repository-get-branch dir)))))
"The repository branch of the Tramp sources.")
@@ -70,6 +71,7 @@
(dir (or (locate-dominating-file (locate-library "tramp") ".git")
source-directory)))
(and (stringp dir) (file-directory-p dir)
+ (executable-find "git")
(emacs-repository-get-version dir))))
"The repository revision of the Tramp sources.")
From 9a4862a9738c2abab8fb4fb2e4e57b69dea679d7 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Wed, 8 Jun 2022 13:16:32 +0200
Subject: [PATCH 164/466] * doc/misc/org.org: Remove spurious markup.
---
doc/misc/org.org | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/misc/org.org b/doc/misc/org.org
index 3dce83c936bb..baab2efedaf0 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -12442,7 +12442,7 @@ should in principle be exportable as a Beamer presentation.
When =ignoreheading= is set, Org export ignores the entry's headline
but not its content. This is useful for inserting content between
frames. It is also useful for properly closing a =column=
- environment. @end itemize
+ environment.
#+cindex: @samp{BEAMER_ACT}, property
#+cindex: @samp{BEAMER_OPT}, property
From d02c94090c4dd7c90da9ccd3268a9e02cadf0a45 Mon Sep 17 00:00:00 2001
From: Ken Brown
Date: Wed, 8 Jun 2022 13:09:21 -0400
Subject: [PATCH 165/466] Fix error reporting in process-async-https-with-delay
* test/src/process-tests.el (process-async-https-with-delay): Use
'plist-get' instead of 'assq' in testing for a connection error.
The 'status' variable is a plist, not an alist. (Bug#55849)
---
test/src/process-tests.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 14092187e0be..725da084e726 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -939,7 +939,7 @@ Return nil if FILENAME doesn't exist."
(< (float-time) (+ t0 limit)))
(sit-for 0.1)))
(should status)
- (should-not (assq :error status))
+ (should-not (plist-get status ':error))
(should buf)
(should (> (buffer-size buf) 0))
)
From 8436e0bee9cf7aa8162036a1d00b385c850069ae Mon Sep 17 00:00:00 2001
From: Jeff Walsh
Date: Thu, 9 Jun 2022 10:02:01 +1000
Subject: [PATCH 166/466] Update error message to reflect variable rename
* src/comp.c (Fcomp_el_to_eln_filename): Update error message. (Bug#55861)
---
src/comp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/comp.c b/src/comp.c
index 188dc6ea005e..dc0359acdae8 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -4193,7 +4193,7 @@ the latter is supposed to be used by the Emacs build procedure. */)
}
if (NILP (base_dir))
error ("Cannot find suitable directory for output in "
- "`comp-native-load-path'.");
+ "`native-comp-eln-load-path'.");
}
if (!file_name_absolute_p (SSDATA (base_dir)))
From 3fd08543782d0d417eaa2dda0727ea16b3271710 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 9 Jun 2022 14:44:00 +0200
Subject: [PATCH 167/466] Fix file name quoting in tramp-smb.el (do not merge)
* lisp/net/tramp-smb.el (tramp-smb-handle-write-region): Quote tmpfile.
(tramp-smb-get-localname): Remove superfluous test. (Bug#55855)
* test/lisp/net/tramp-tests.el (tramp-test03-file-name-method-rules):
Remove superfluous checks.
---
lisp/net/tramp-smb.el | 7 +++----
test/lisp/net/tramp-tests.el | 12 +-----------
2 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 2aaa6e8ab3f4..dfcb7162c800 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1631,7 +1631,7 @@ errors for shares like \"C$/\", which are common in Microsoft Windows."
v 3 (format "Moving tmp file %s to %s" tmpfile filename)
(unwind-protect
(unless (tramp-smb-send-command
- v (format "put %s \"%s\""
+ v (format "put \"%s\" \"%s\""
tmpfile (tramp-smb-get-localname v)))
(tramp-error v 'file-error "Cannot write `%s'" filename))
(delete-file tmpfile)))
@@ -1695,9 +1695,8 @@ If VEC has no cifs capabilities, exchange \"/\" by \"\\\\\"."
(when (string-match "\\(\\$\\$\\)\\(/\\|$\\)" localname)
(setq localname (replace-match "$" nil nil localname 1)))
- ;; A period followed by a space, or trailing periods and spaces,
- ;; are not supported.
- (when (string-match-p "\\. \\|\\.$\\| $" localname)
+ ;; A trailing space is not supported.
+ (when (string-match-p " $" localname)
(tramp-error
vec 'file-error
"Invalid file name %s" (tramp-make-tramp-file-name vec localname)))
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 61fa6a5ae4ee..9071beedf2e4 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -2028,17 +2028,7 @@ Also see `ignore'."
:type 'user-error)
(should-error
(expand-file-name "/method:user1@host1|ssh:user2@host2:/path/to/file")
- :type 'user-error))
-
- ;; Samba does not support file names with periods followed by
- ;; spaces, and trailing periods or spaces.
- (when (tramp--test-smb-p)
- (dolist (file '("foo." "foo. bar" "foo "))
- (should-error
- (tramp-smb-get-localname
- (tramp-dissect-file-name
- (expand-file-name file tramp-test-temporary-file-directory)))
- :type 'file-error))))
+ :type 'user-error)))
(ert-deftest tramp-test04-substitute-in-file-name ()
"Check `substitute-in-file-name'."
From 22a832ad82ed7d099e6ee3a947a5841d84e475c4 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Thu, 9 Jun 2022 15:22:11 +0200
Subject: [PATCH 168/466] Mention the #f syntax from cl-prin1
* doc/lispref/objects.texi (Special Read Syntax): Mention #f,
which is in cl-prin1 output (bug#55853).
---
doc/lispref/objects.texi | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index b8e2dc5ab959..a715b45a6c25 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -178,6 +178,12 @@ files.
Skip the next @samp{N} characters (@pxref{Comments}). This is used in
byte-compiled files, and is not meant to be used in Emacs Lisp source
files.
+
+@item #f
+Indicates that the following form isn't readable by the Emacs Lisp
+reader. This is only in text for display purposes (when that would
+look prettier than alternative ways of indicating an unreadable form)
+and will never appear in any Lisp file.
@end table
From 0705705ebf7d19e30b97b0fab508ffc7ec1bec69 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Fri, 10 Jun 2022 10:06:06 +0300
Subject: [PATCH 169/466] Improve documentation of "etags -I"
* doc/man/etags.1:
* doc/emacs/maintaining.texi (Create Tags Table): Elaborate on the
importance of the '-I' option to 'etags'. (Bug#45246)
---
doc/emacs/maintaining.texi | 7 +++++++
doc/man/etags.1 | 4 +++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 0a813a85d4fa..c23907ddfbd3 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2802,6 +2802,13 @@ place of a file name on the command line. @command{etags} will read from
standard input and mark the produced tags as belonging to the file
@var{file}.
+ For C and C++, if the source files don't observe the GNU Coding
+Standards' convention if having braces (@samp{@{} and @samp{@}}) in
+column zero only for top-level definitions, like functions and
+@code{struct} definitions, we advise that you use the
+@samp{--ignore-indentation} option, to prevent @command{etags} from
+incorrectly interpreting closing braces in column zero.
+
@samp{etags --help} outputs the list of the languages @command{etags}
knows, and the file name rules for guessing the language. It also prints
a list of all the available @command{etags} options, together with a short
diff --git a/doc/man/etags.1 b/doc/man/etags.1
index d345b8bd73f2..96781569fc22 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -122,7 +122,9 @@ current file. Only \fBetags\fP accepts this option.
.B \-I, \-\-ignore\-indentation
Don't rely on indentation as much as we normally do. Currently, this
means not to assume that a closing brace in the first column is the
-final brace of a function or structure definition in C and C++.
+final brace of a function or structure definition in C and C++. This
+is important for code that doesn't observe the GNU Coding conventions
+of placing only top-level braces in column zero.
.TP
\fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP
Parse the following files according to the given language. More than
From 52ad2b53cba25e3f9194d26ec5817e8fc3b7d4f5 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 11 Jun 2022 13:30:07 +0300
Subject: [PATCH 170/466] Fix doc strings in whitespace.el
* lisp/whitespace.el (whitespace-style, whitespace-action):
Untabify the doc strings. (Bug#55904)
---
lisp/whitespace.el | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 13917206cae8..7889a802af18 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -880,27 +880,27 @@ C++ modes only."
It's a list containing some or all of the following values:
- nil no action is taken.
+ nil no action is taken.
- cleanup cleanup any bogus whitespace always when local
- whitespace is turned on.
- See `whitespace-cleanup' and
- `whitespace-cleanup-region'.
+ cleanup cleanup any bogus whitespace always when local
+ whitespace is turned on.
+ See `whitespace-cleanup' and
+ `whitespace-cleanup-region'.
- report-on-bogus report if there is any bogus whitespace always
- when local whitespace is turned on.
+ report-on-bogus report if there is any bogus whitespace always
+ when local whitespace is turned on.
- auto-cleanup cleanup any bogus whitespace when buffer is
- written.
- See `whitespace-cleanup' and
- `whitespace-cleanup-region'.
+ auto-cleanup cleanup any bogus whitespace when buffer is
+ written.
+ See `whitespace-cleanup' and
+ `whitespace-cleanup-region'.
- abort-on-bogus abort if there is any bogus whitespace and the
- buffer is written.
+ abort-on-bogus abort if there is any bogus whitespace and the
+ buffer is written.
- warn-if-read-only give a warning if `cleanup' or `auto-cleanup'
- is included in `whitespace-action' and the
- buffer is read-only.
+ warn-if-read-only give a warning if `cleanup' or `auto-cleanup'
+ is included in `whitespace-action' and the
+ buffer is read-only.
Any other value is treated as nil."
:type '(choice :tag "Actions"
From cbd2c87a5de572583bb1394d35bc9cde8300e1ca Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Sat, 11 Jun 2022 14:02:29 +0300
Subject: [PATCH 171/466] ; Fix last change in whitespace.el.
---
lisp/whitespace.el | 234 ++++++++++++++++++++++-----------------------
1 file changed, 117 insertions(+), 117 deletions(-)
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 7889a802af18..e2c8eecf897f 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -276,116 +276,116 @@
It's a list containing some or all of the following values:
- face enable all visualization via faces (see below).
-
- trailing trailing blanks are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- tabs TABs are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- spaces SPACEs and HARD SPACEs are visualized via
- faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- lines lines which have columns beyond
- `whitespace-line-column' are highlighted via
- faces.
- Whole line is highlighted.
- It has precedence over `lines-tail' (see
- below).
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- lines-tail lines which have columns beyond
- `whitespace-line-column' are highlighted via
- faces.
- But only the part of line which goes
- beyond `whitespace-line-column' column.
- It has effect only if `lines' (see above)
- is not present in `whitespace-style'
- and if `face' (see above) is present in
- `whitespace-style'.
-
- newline NEWLINEs are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
+ face enable all visualization via faces (see below).
+
+ trailing trailing blanks are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ tabs TABs are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ spaces SPACEs and HARD SPACEs are visualized via
+ faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ lines lines which have columns beyond
+ `whitespace-line-column' are highlighted via
+ faces.
+ Whole line is highlighted.
+ It has precedence over `lines-tail' (see
+ below).
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ lines-tail lines which have columns beyond
+ `whitespace-line-column' are highlighted via
+ faces.
+ But only the part of line which goes
+ beyond `whitespace-line-column' column.
+ It has effect only if `lines' (see above)
+ is not present in `whitespace-style'
+ and if `face' (see above) is present in
+ `whitespace-style'.
+
+ newline NEWLINEs are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
missing-newline-at-eof Missing newline at the end of the file is
visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- empty empty lines at beginning and/or end of buffer
- are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- indentation::tab `tab-width' or more SPACEs at beginning of line
- are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- indentation::space TABs at beginning of line are visualized via
- faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- indentation `tab-width' or more SPACEs at beginning of line
- are visualized, if `indent-tabs-mode' (which
- see) is non-nil; otherwise, TABs at beginning
- of line are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- big-indent Big indentations are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-after-tab::tab `tab-width' or more SPACEs after a TAB
- are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-after-tab::space TABs are visualized when `tab-width' or
- more SPACEs occur after a TAB, via
- faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-after-tab `tab-width' or more SPACEs after a TAB
- are visualized, if `indent-tabs-mode'
- (which see) is non-nil; otherwise,
- the TABs are visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-before-tab::tab SPACEs before TAB are visualized via
- faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-before-tab::space TABs are visualized when SPACEs occur
- before TAB, via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-before-tab SPACEs before TAB are visualized, if
- `indent-tabs-mode' (which see) is
- non-nil; otherwise, the TABs are
- visualized via faces.
- It has effect only if `face' (see above)
- is present in `whitespace-style'.
-
- space-mark SPACEs and HARD SPACEs are visualized via
- display table.
-
- tab-mark TABs are visualized via display table.
-
- newline-mark NEWLINEs are visualized via display table.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ empty empty lines at beginning and/or end of buffer
+ are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ indentation::tab `tab-width' or more SPACEs at beginning of line
+ are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ indentation::space TABs at beginning of line are visualized via
+ faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ indentation `tab-width' or more SPACEs at beginning of line
+ are visualized, if `indent-tabs-mode' (which
+ see) is non-nil; otherwise, TABs at beginning
+ of line are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ big-indent Big indentations are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-after-tab::tab `tab-width' or more SPACEs after a TAB
+ are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-after-tab::space TABs are visualized when `tab-width' or
+ more SPACEs occur after a TAB, via
+ faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-after-tab `tab-width' or more SPACEs after a TAB
+ are visualized, if `indent-tabs-mode'
+ (which see) is non-nil; otherwise,
+ the TABs are visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-before-tab::tab SPACEs before TAB are visualized via
+ faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-before-tab::space TABs are visualized when SPACEs occur
+ before TAB, via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-before-tab SPACEs before TAB are visualized, if
+ `indent-tabs-mode' (which see) is
+ non-nil; otherwise, the TABs are
+ visualized via faces.
+ It has effect only if `face' (see above)
+ is present in `whitespace-style'.
+
+ space-mark SPACEs and HARD SPACEs are visualized via
+ display table.
+
+ tab-mark TABs are visualized via display table.
+
+ newline-mark NEWLINEs are visualized via display table.
Any other value is ignored.
@@ -808,21 +808,21 @@ Each element has the following form:
Where:
-KIND is the kind of character.
- It can be one of the following symbols:
+KIND is the kind of character.
+ It can be one of the following symbols:
- tab-mark for TAB character
+ tab-mark for TAB character
- space-mark for SPACE or HARD SPACE character
+ space-mark for SPACE or HARD SPACE character
- newline-mark for NEWLINE character
+ newline-mark for NEWLINE character
-CHAR is the character to be mapped.
+CHAR is the character to be mapped.
-VECTOR is a vector of characters to be displayed in place of CHAR.
- The first display vector that can be displayed is used;
- if no display vector for a mapping can be displayed, then
- that character is displayed unmodified.
+VECTOR is a vector of characters to be displayed in place of CHAR.
+ The first display vector that can be displayed is used;
+ if no display vector for a mapping can be displayed, then
+ that character is displayed unmodified.
The NEWLINE character is displayed using the face given by
`whitespace-newline' variable.
From d6f080d3de716fbaf790774aa1ceee1d00bff798 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Sun, 12 Jun 2022 12:41:15 +0200
Subject: [PATCH 172/466] ; * doc/man/etags.1: Bump man page date.
---
doc/man/etags.1 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/man/etags.1 b/doc/man/etags.1
index 96781569fc22..4681a9dadbff 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -1,5 +1,5 @@
.\" See section COPYING for copyright and redistribution information.
-.TH ETAGS 1 "2021-03-30" "GNU Tools" "GNU"
+.TH ETAGS 1 "2022-06-10" "GNU Tools" "GNU"
.de BP
.sp
.ti -.2i
From 73400e4002ce8fca060093548e6791b3a784eeaa Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Mon, 13 Jun 2022 17:14:08 +0200
Subject: [PATCH 173/466] Clarify what a Calc registeri in in
calc-insert-register
* lisp/calc/calc-yank.el (calc-insert-register): Note that these
aren't normal registers (bug#55943).
---
lisp/calc/calc-yank.el | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index 8c6d3f51e5d5..189ee0a24447 100644
--- a/lisp/calc/calc-yank.el
+++ b/lisp/calc/calc-yank.el
@@ -301,7 +301,10 @@ Interactively, reads the register using `register-read-with-preview'."
(defun calc-insert-register (register)
"Insert the contents of register REGISTER.
-Interactively, reads the register using `register-read-with-preview'."
+Interactively, reads the register using `register-read-with-preview'.
+
+Note that this command only works with Calc registers, and they
+have nothing to do with the Emacs-wide register mechanism."
(interactive (list (register-read-with-preview "Insert register: ")))
(if (eq major-mode 'calc-mode)
(let ((val (calc-get-register register)))
From 850050ca5c4873be9acafce7c9950c10d04d381d Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Tue, 14 Jun 2022 13:56:07 +0200
Subject: [PATCH 174/466] Revert "Clarify what a Calc registeri in in
calc-insert-register"
This reverts commit 73400e4002ce8fca060093548e6791b3a784eeaa.
This has been fixed in Emacs 29 by making it possible to use regular registers in calc.
---
lisp/calc/calc-yank.el | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index 189ee0a24447..8c6d3f51e5d5 100644
--- a/lisp/calc/calc-yank.el
+++ b/lisp/calc/calc-yank.el
@@ -301,10 +301,7 @@ Interactively, reads the register using `register-read-with-preview'."
(defun calc-insert-register (register)
"Insert the contents of register REGISTER.
-Interactively, reads the register using `register-read-with-preview'.
-
-Note that this command only works with Calc registers, and they
-have nothing to do with the Emacs-wide register mechanism."
+Interactively, reads the register using `register-read-with-preview'."
(interactive (list (register-read-with-preview "Insert register: ")))
(if (eq major-mode 'calc-mode)
(let ((val (calc-get-register register)))
From 32cff740e2a618583094a408890f3dcdf0aa01a1 Mon Sep 17 00:00:00 2001
From: Robert Pluim
Date: Wed, 15 Jun 2022 14:25:17 +0200
Subject: [PATCH 175/466] Describe 'set-file-modes' argument prompting
* src/fileio.c (Fset_file_modes): Document that FILENAME is prompted
for. (Bug#55984)
---
src/fileio.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/fileio.c b/src/fileio.c
index 7d392e0de73c..a240216dea21 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3510,8 +3510,9 @@ DEFUN ("set-file-modes", Fset_file_modes, Sset_file_modes, 2, 3,
Only the 12 low bits of MODE are used. If optional FLAG is `nofollow',
do not follow FILENAME if it is a symbolic link.
-Interactively, mode bits are read by `read-file-modes', which accepts
-symbolic notation, like the `chmod' command from GNU Coreutils. */)
+Interactively, prompts for FILENAME, and reads MODE with
+`read-file-modes', which accepts symbolic notation, like the `chmod'
+command from GNU Coreutils. */)
(Lisp_Object filename, Lisp_Object mode, Lisp_Object flag)
{
CHECK_FIXNUM (mode);
From 4d7a936ac2a682087d0b4e91c12b2ad87363631f Mon Sep 17 00:00:00 2001
From: Robert Pluim
Date: Wed, 15 Jun 2022 15:16:47 +0200
Subject: [PATCH 176/466] ; * src/fileio.c (Fset_file_modes): Improve previous
change
---
src/fileio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/fileio.c b/src/fileio.c
index a240216dea21..481001b423bd 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3510,7 +3510,7 @@ DEFUN ("set-file-modes", Fset_file_modes, Sset_file_modes, 2, 3,
Only the 12 low bits of MODE are used. If optional FLAG is `nofollow',
do not follow FILENAME if it is a symbolic link.
-Interactively, prompts for FILENAME, and reads MODE with
+Interactively, prompt for FILENAME, and read MODE with
`read-file-modes', which accepts symbolic notation, like the `chmod'
command from GNU Coreutils. */)
(Lisp_Object filename, Lisp_Object mode, Lisp_Object flag)
From b0c5accb996ce8ed4c3a6ca8a7acc555a7397f76 Mon Sep 17 00:00:00 2001
From: Arash Esbati
Date: Wed, 15 Jun 2022 21:35:47 +0200
Subject: [PATCH 177/466] Update MS Windows FAQ for MinGW64-w64/MSYS2
* doc/misc/efaq-w32.texi (Compiling, Debugging): Mention
MinGW64-w64/MSYS2 as the preferred way for building Emacs on
capable systems.
(Attachments with Gnus): Catch up with emacs-mime.texi in the
example given.
(Spell check): Add the availability of GNU Aspell and Hunspell
in MSYS2 distribution.
(Other useful ports): Add an entry for MinGW64-w64/MSYS2.
Fix link for MinGW homepage.
Remove entry for defunct UWIN project. (Bug#55930)
---
doc/misc/efaq-w32.texi | 111 +++++++++++++++++++++++------------------
1 file changed, 63 insertions(+), 48 deletions(-)
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 3a49f0a5da23..d18a045b339e 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -130,10 +130,8 @@ from Windows 98 onward, and all versions of the NT family starting
from NT 4.0; this includes all the modern versions from Windows XP and
on. The Windows port is built using the Win32 API and supports most
features of the X version, including variable width fonts, images and
-tooltips.
-
-Emacs on Windows can be compiled as either a 32-bit or a 64-bit
-executable, using the MinGW GCC compiler and development tools.
+tooltips. Emacs on Windows can be compiled as either a 64-bit or a
+32-bit executable.
@node Other versions of Emacs
@section What other versions of Emacs run on Windows?
@@ -177,8 +175,8 @@ best-effort basis in the @file{windows} subdirectory of the above ftp
site (as zip files digitally signed by the person who built them).
See the @file{README} file in that directory for more information.
Building Emacs from source yourself should be straightforward,
-following the instructions in @file{nt/INSTALL}, so we encourage you
-to give it a try. @xref{Compiling}.
+following the instructions in the @file{nt} directory, so we
+encourage you to give it a try. @xref{Compiling}.
@cindex latest development version of Emacs
@cindex Emacs Development
@@ -190,21 +188,27 @@ development site.
@section How can I compile Emacs myself?
@cindex compiling Emacs
-To compile Emacs on Windows, you will need the MinGW port of GCC and
-Binutils, the MinGW runtime and development environment, and the MSYS
-suite of tools. For the details, see the file @file{nt/INSTALL} in
-the Emacs source distribution.
+To compile Emacs on a 64-bit version of Windows 7 or newer, we
+recommend to use the MinGW-w64 port of GCC and Binutils with the MSYS2
+suite of tools. For the details, see the file @file{nt/INSTALL.W64}
+in the Emacs source distribution.
+
+If you need to build or run Emacs on MS Windows before Windows 7, you
+have to use the MinGW port of GCC and the MSYS suite of tools. The
+file @file{nt/INSTALL} in Emacs source distribution contains the
+details.
Support for displaying images, as well as XML/HTML rendering and TLS
networking requires external libraries, the headers and import
libraries for which will need to be installed where your compiler can
find them. Again, the details, including URLs of sites where you can
-download these libraries are in @file{nt/INSTALL}. @xref{Other useful
-ports}, for auxiliary tools you may wish to install and use in
-conjunction with Emacs.
+download these libraries are in @file{nt/INSTALL.W64} or
+@file{nt/INSTALL}. @xref{Other useful ports}, for auxiliary tools you
+may wish to install and use in conjunction with Emacs.
After unpacking the source, or checking out of the repository, be sure
-to read the instructions in @file{nt/README} and @file{nt/INSTALL}.
+to read the instructions in @file{nt/README} and the respective
+install file.
@node Debugging
@section How do I use a debugger on Emacs?
@@ -222,18 +226,18 @@ specific notes about debugging Emacs.
@cindex debugging Emacs with GDB
GDB is the GNU debugger, which can be used to debug Emacs when it has
-been compiled with MinGW GCC@. The best results will be obtained if
-you start gdb from the @file{src} directory as @kbd{gdb ./emacs.exe}.
+been compiled with GCC@. The best results will be obtained if you
+start gdb from the @file{src} directory as @kbd{gdb ./emacs.exe}.
This will load the init file @file{.gdbinit}@footnote{
Latest versions of GDB might refuse to load the init file for security
reasons, unless you customize GDB; alternatively, use an explicit
@kbd{source ./gdbinit} command after entering GDB.
} in that directory, to define some extra commands for working with
-lisp while debugging, and set up breakpoints to catch abnormal
-aborts.
+lisp while debugging, and set up breakpoints to catch abnormal aborts.
-A Windows port of GDB can be found on MinGW download sites and on some
-others.
+A Windows port of GDB is installed with MinGW64-w64 and MSYS2
+(@samp{mingw-w64--toolchain} group) or can be found on MinGW
+download sites and on some others.
@c ------------------------------------------------------------
@node Installing Emacs
@@ -307,8 +311,8 @@ bsdtar -xf emacs-@value{EMACSVER}.tar.xz
Expect @command{bsdtar} to unpack the whole distribution without any
complaints.
-Once you unpack the source distribution, look in @file{nt/INSTALL}
-file for build instructions.
+Once you unpack the source distribution, look in the @file{nt}
+directory for build instructions.
@node Installing binaries
@section How do I install Emacs after unpacking the binary zip?
@@ -1645,8 +1649,8 @@ obtained the packages from if you want to use them.
In your @env{HOME} directory create a file called @file{.mailcap},
with contents like the following:
@example
-application/zip "C:/Program Files/7-Zip/7zFM.exe"
-video/* "C:/Program Files/VideoLAN/VLC/vlc.exe"
+application/zip; "C:/Program Files/7-Zip/7zFM.exe"
+video/*; "C:/Program Files/VideoLAN/VLC/vlc.exe"
@end example
@strong{Warning:} Associating MIME types with @command{start} or other
@@ -1754,11 +1758,13 @@ A number of implementations are listed on the
Emacs has support for spell checking on demand (@code{ispell}) and as
your type (@code{flyspell}). Both packages depend on a copy of
@command{ispell} 3.2 or a compatible spell-checking program.
-GNU Aspell is a popular choice these days, Windows installers are
-available from the @uref{http://aspell.net/win32/, official site}.
+GNU Aspell is a popular choice these days, outdated Windows installers
+are available from the @uref{http://aspell.net/win32/, official site}.
Another possibility is Hunspell, which is available from
@uref{https://sourceforge.net/projects/ezwinports/files/?source=navbar,
-the ezwinports site}.
+the ezwinports site}. If you're using the MSYS2 distribution, you can
+install a recent version of either GNU Aspell or Hunspell through the
+package manager Pacman. @xref{Other useful ports}.
Once installed, you will need to configure @code{ispell-program-name}
to tell ispell and flyspell to use @command{aspell} or
@@ -2098,7 +2104,7 @@ suggestions} for improving the interaction of perldb and Emacs.
* Cygwin::
* MinGW::
* EZWinPorts::
-* UWIN::
+* MinGW-w64::
* GnuWin32::
* GTK::
* Read man pages::
@@ -2133,22 +2139,25 @@ Cygwin on your system @env{PATH} for this reason. Instead you can
make the Cygwin tools available within Emacs by setting @code{exec-path}
in your init file.
-@node MinGW
-@section MinGW and MSYS
-@cindex mingw tools
-@cindex msys environment
-@cindex subprocesses, mingw and msys
+@node MinGW-w64
+@section MinGW-w64 and MSYS2
+@cindex mingw-w64 tools
+@cindex msys2 environment
+@cindex subprocesses, mingw-w64 and msys2
-@uref{http://www.mingw.org/}
+@uref{https://www.msys2.org/}
-MinGW is a set of development tools that produce native Windows
+MinGW-w64 is a set of development tools that produce native Windows
executables, not dependent on Cygwin's POSIX emulation DLLs.
+MinGW-w64 has forked the original MinGW in 2007 in order to provide
+support for 64 bits and new APIs.
-MSYS is a POSIX shell and minimal set of tools that are commonly used in
-configure scripts. Like Cygwin, this environment uses a non-native
-filesystem mapping to appear more POSIX like to the scripts that it
-runs. This is intended to complement the MinGW tools to make it easier
-to port software to Windows.
+MSYS2 is software distribution and a building platform for Windows.
+MSYS2 is an independent rewrite of MSYS, based on modern Cygwin and
+MinGW-w64 with the aim of better interoperability with native Windows
+software. It plays the same role MSYS does in MinGW. Being a
+distribution, MSYS2 provides tools to build software as well as more
+than 2.600 precompiled packages ready for use.
@node EZWinPorts
@section EZWinPorts
@@ -2161,16 +2170,22 @@ software. This includes all the optional libraries used by Emacs
@command{man} command, Grep, xz, bzip2, bsdtar, ID Utils, Findutils,
Hunspell, Gawk, GNU Make, Groff, GDB.
-@node UWIN
-@section UWIN
-@cindex uwin environment
-@cindex subprocesses, uwin
+@node MinGW
+@section MinGW and MSYS
+@cindex mingw tools
+@cindex msys environment
+@cindex subprocesses, mingw and msys
+
+@uref{https://osdn.net/projects/mingw/}
-@uref{http://www.research.att.com/sw/tools/uwin/}
+MinGW is another set of development tools that produce native Windows
+executables, not dependent on Cygwin's POSIX emulation DLLs.
-UWIN is another POSIX emulation environment, like Cygwin and MSYS,
-that provides a large number of ported tools. The shell used by UWIN
-is @command{ksh}, the Korn shell.
+MSYS is a POSIX shell and minimal set of tools that are commonly used in
+configure scripts. Like Cygwin, this environment uses a non-native
+filesystem mapping to appear more POSIX like to the scripts that it
+runs. This is intended to complement the MinGW tools to make it easier
+to port software to Windows.
@node GnuWin32
@section GnuWin32
From 5ddd0f1a3573ce3155b06850398dbc656539c669 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Thu, 16 Jun 2022 10:45:15 +0200
Subject: [PATCH 178/466] * lisp/net/tramp.el (tramp-methods): Fix quoting in
docstring.
---
lisp/net/tramp.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 3ee116913959..88715e3230ba 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -238,7 +238,7 @@ pair of the form (KEY VALUE). The following KEYs are defined:
unchanged after expansion (i.e. no host, no user or no port
were specified), that sublist is not used. For e.g.
- '((\"-a\" \"-b\") (\"-l\" \"%u\"))
+ \\='((\"-a\" \"-b\") (\"-l\" \"%u\"))
that means that (\"-l\" \"%u\") is used only if the user was
specified, and it is thus effectively optional.
From f419de6eca4ca6a6d03db1eec4b9086a3d1e5b86 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Thu, 16 Jun 2022 09:48:05 +0200
Subject: [PATCH 179/466] * lisp/textmodes/artist.el: Minor doc fixes.
---
lisp/textmodes/artist.el | 60 ++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index 18e03b49049b..e6fddd216d70 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -46,8 +46,8 @@
;;
;; * Rubber-banding: When drawing lines you can interactively see the
;; result while holding the mouse button down and moving the mouse. If
-;; your machine is not fast enough (a 386 is a bit to slow, but a
-;; pentium is well enough), you can turn this feature off. You will
+;; your machine is not fast enough (a 386 is a bit too slow, but a
+;; Pentium is good enough), you can turn this feature off. You will
;; then see 1's and 2's which mark the 1st and 2nd endpoint of the line
;; you are drawing.
;;
@@ -75,10 +75,10 @@
;; * Flood-filling: You can fill any area with a certain character by
;; flood-filling.
;;
-;; * Cut copy and paste: You can cut, copy and paste rectangular
+;; * Cut, copy and paste: You can cut, copy and paste rectangular
;; regions. Artist also interfaces with the rect package (this can be
;; turned off if it causes you any trouble) so anything you cut in
-;; artist can be yanked with C-x r y and vice versa.
+;; artist can be yanked with `C-x r y' and vice versa.
;;
;; * Drawing with keys: Everything you can do with the mouse, you can
;; also do without the mouse.
@@ -86,7 +86,7 @@
;; * Arrows: After having drawn a (straight) line or a (straight)
;; poly-line, you can set arrows on the line-ends by typing < or >.
;;
-;; * Aspect-ratio: You can set the variable artist-aspect-ratio to
+;; * Aspect-ratio: You can set the user option `artist-aspect-ratio' to
;; reflect the height-width ratio for the font you are using. Squares
;; and circles are then drawn square/round. Note, that once your
;; ascii-file is shown with font with a different height-width ratio,
@@ -95,7 +95,7 @@
;; * Picture mode compatibility: Artist is picture mode compatible (this
;; can be turned off).
;;
-;; See the documentation for the function artist-mode for a detailed
+;; See the documentation for the function `artist-mode' for a detailed
;; description on how to use artist.
;;
;;
@@ -119,8 +119,8 @@
;;; Known bugs:
;; It is not possible to change between shifted and unshifted operation
-;; while drawing with the mouse. (See the comment in the function
-;; artist-shift-has-changed for further details.)
+;; while drawing with the mouse. (See the comment in the function
+;; `artist-shift-has-changed' for further details.)
;;; ChangeLog:
@@ -149,9 +149,9 @@
;;
;; 1.2.1 15-Nov-2000
;; New: Documentation fixes.
-;; Bugfix: Sets next-line-add-newlines to t while in artist-mode.
+;; Bugfix: Set `next-line-add-newlines' to t while in `artist-mode'.
;; Drawing with keys was confusing without this fix, if
-;; next-line-add-newlines was set to nil.
+;; `next-line-add-newlines' was set to nil.
;; Thanks to Tatsuo Furukawa for this.
;;
;; 1.2 22-Oct-2000
@@ -462,7 +462,7 @@ This variable is initialized by the `artist-make-prev-next-op-alist' function.")
(if artist-picture-compatibility
(require 'picture))
-;; Variables that are made local in artist-mode-init
+;; Variables that are made local in `artist-mode-init'
(defvar artist-key-is-drawing nil)
(defvar artist-key-endpoint1 nil)
(defvar artist-key-poly-point-list nil)
@@ -1334,25 +1334,25 @@ Variables
This is a brief overview of the different variables. For more info,
see the documentation for the variables (type \\[describe-variable] RET).
- artist-rubber-banding Interactively do rubber-banding or not
- artist-first-char What to set at first/second point...
- artist-second-char ...when not rubber-banding
- artist-interface-with-rect If cut/copy/paste should interface with rect
- artist-arrows The arrows to use when drawing arrows
- artist-aspect-ratio Character height-to-width for squares
- artist-trim-line-endings Trimming of line endings
- artist-flood-fill-right-border Right border when flood-filling
- artist-flood-fill-show-incrementally Update display while filling
- artist-pointer-shape Pointer shape to use while drawing
- artist-ellipse-left-char Character to use for narrow ellipses
- artist-ellipse-right-char Character to use for narrow ellipses
- artist-borderless-shapes If shapes should have borders
- artist-picture-compatibility Whether or not to be picture mode compatible
- artist-vaporize-fuzziness Tolerance when recognizing lines
- artist-spray-interval Seconds between repeated sprayings
- artist-spray-radius Size of the spray-area
- artist-spray-chars The spray-\"color\"
- artist-spray-new-chars Initial spray-\"color\"
+ `artist-rubber-banding' Interactively do rubber-banding or not
+ `artist-first-char' What to set at first/second point...
+ `artist-second-char' ...when not rubber-banding
+ `artist-interface-with-rect' Should cut/copy/paste interface with rect
+ `artist-arrows' The arrows to use when drawing arrows
+ `artist-aspect-ratio' Character height-to-width for squares
+ `artist-trim-line-endings' Trimming of line endings
+ `artist-flood-fill-right-border' Right border when flood-filling
+ `artist-flood-fill-show-incrementally' Update display while filling
+ `artist-pointer-shape' Pointer shape to use while drawing
+ `artist-ellipse-left-char' Character to use for narrow ellipses
+ `artist-ellipse-right-char' Character to use for narrow ellipses
+ `artist-borderless-shapes' If shapes should have borders
+ `artist-picture-compatibility' Picture mode compatibility on or off
+ `artist-vaporize-fuzziness' Tolerance when recognizing lines
+ `artist-spray-interval' Seconds between repeated sprayings
+ `artist-spray-radius' Size of the spray-area
+ `artist-spray-chars' The spray-\"color\"
+ `artist-spray-new-char' Initial spray-\"color\"
Hooks
From ad74677cf3a0b15b14bf8003ae77c5da12505b60 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Fri, 17 Jun 2022 12:04:48 +0200
Subject: [PATCH 180/466] Delete reference to obsolete library complete.el
* doc/misc/tramp.texi (Frequently Asked Questions): Delete reference
to obsolete library complete.el.
---
doc/misc/tramp.texi | 8 --------
1 file changed, 8 deletions(-)
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index a8079a0fa4ff..b8279c410a23 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -4986,14 +4986,6 @@ minibuffer:
(expand-abbrev))
@end group
-@group
-;; If you use partial-completion-mode
-(defadvice PC-do-completion
- (before my-PC-do-completion activate)
- (expand-abbrev))
-@end group
-@end lisp
-
The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
The minibuffer expands for further editing.
From e0bac17bbc51fc53d3555011b540b775942961d9 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 17 Jun 2022 14:17:51 +0200
Subject: [PATCH 181/466] Mention face quirks after the final line in the
lispref manual
* doc/lispref/display.texi (Face Attributes): Mention the quirks
about point after the final line (bug#56011).
---
doc/lispref/display.texi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 1147ba112a64..404cf1b247a7 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -2593,6 +2593,13 @@ doesn't specify an explicit value for a face, the value from the
original face definition by @code{defface} is inherited
(@pxref{Defining Faces}).
+Some modes, like @code{hl-line-mode}, use a face with an
+@code{:extend} property to mark the entire current line. Note,
+however, that Emacs will always allow you to move point after the
+final character in a buffer, and if the buffer ends with a newline
+character, point can be placed on what is seemingly a line at the end
+of the buffer---but Emacs can't highlight that ``line'', because it
+doesn't really exist.
@end table
@defun font-family-list &optional frame
From 017bdb161141c0b5f3981a124bdeadc17a20a558 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 17 Jun 2022 14:20:05 +0200
Subject: [PATCH 182/466] Fix a tagging problem in tramp.texi
* doc/misc/tramp.texi (Frequently Asked Questions): Restore an
@end lisp removed by accident.
---
doc/misc/tramp.texi | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index b8279c410a23..745046f8fed8 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -4985,6 +4985,7 @@ minibuffer:
(before my-minibuffer-complete activate)
(expand-abbrev))
@end group
+@end lisp
The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
From d671cd57c488ec792997fd4051440187dec3434f Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 17 Jun 2022 16:48:02 +0200
Subject: [PATCH 183/466] Update cl-struct-sequence-type doc string
* lisp/emacs-lisp/cl-macs.el (cl-struct-sequence-type): Fix doc
string to reflect what it does (bug#46523).
---
lisp/emacs-lisp/cl-macs.el | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index c27a43f3baf9..85ebcaade719 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -3288,8 +3288,9 @@ the form NAME which is a shorthand for (NAME NAME)."
(defun cl-struct-sequence-type (struct-type)
"Return the sequence used to build STRUCT-TYPE.
-STRUCT-TYPE is a symbol naming a struct type. Return `record',
-`vector', or `list' if STRUCT-TYPE is a struct type, nil otherwise."
+STRUCT-TYPE is a symbol naming a struct type. Return values are
+either `vector', `list' or nil (and the latter indicates a
+`record' struct type."
(declare (side-effect-free t) (pure t))
(cl--struct-class-type (cl--struct-get-class struct-type)))
From c1f4cca7f013772c217e9ca0ad4f7f49c2d1eb4e Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 17 Jun 2022 16:59:18 +0200
Subject: [PATCH 184/466] Fix efaq-w32.texi build warning
* doc/misc/efaq-w32.texi (Other useful ports): Fix ordering to
match nodes (or should the nodes be moved instead?).
Do not merge to master.
---
doc/misc/efaq-w32.texi | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index d18a045b339e..35ff01a336cb 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -2102,9 +2102,9 @@ suggestions} for improving the interaction of perldb and Emacs.
@menu
* Cygwin::
-* MinGW::
-* EZWinPorts::
* MinGW-w64::
+* EZWinPorts::
+* MinGW::
* GnuWin32::
* GTK::
* Read man pages::
From 024bbcb35ebe70ab9ad4c79265c4e83fc1d3b732 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen
Date: Fri, 17 Jun 2022 21:38:30 +0200
Subject: [PATCH 185/466] Prune the Gnus FAQ of some outdated data
* doc/misc/gnus-faq.texi (FAQ 9-2): Remove some outdated advice
(bug#56042).
---
doc/misc/gnus-faq.texi | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 14a8c4c12d69..fd961be2f52f 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -2193,18 +2193,9 @@ How to speed up the process of entering a group?
A speed killer is setting the variable
gnus-fetch-old-headers to anything different from @code{nil},
-so don't do this if speed is an issue. To speed up
-building of summary say
+so don't do this if speed is an issue.
-@example
-(gnus-compile)
-@end example
-@noindent
-
-at the bottom of your @file{~/.gnus.el}, this will make gnus
-byte-compile things like
-gnus-summary-line-format.
-then you could increase the value of gc-cons-threshold
+You could increase the value of gc-cons-threshold
by saying something like
@example
@@ -2212,21 +2203,7 @@ by saying something like
@end example
@noindent
-in ~/.emacs. If you don't care about width of CJK
-characters or use Gnus 5.10 or younger together with a
-recent GNU Emacs, you should say
-
-@example
-(setq gnus-use-correct-string-widths nil)
-@end example
-@noindent
-
-in @file{~/.gnus.el} (thanks to Jesper harder for the last
-two suggestions). Finally if you are still using 5.8.8
-or 5.9 and experience speed problems with summary
-buffer generation, you definitely should update to
-5.10 since there quite some work on improving it has
-been done.
+in ~/.emacs.
@node FAQ 9-3
@subsubheading Question 9.3
From 422f958030f1c105c8f62f670b82875559b38e69 Mon Sep 17 00:00:00 2001
From: Richard Hansen
Date: Sat, 18 Jun 2022 14:11:01 +0200
Subject: [PATCH 186/466] Fix invalid defcustom :group when :predicate is used
* lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
invalid `:group' argument for the `-modes' defcustom that is created
when `:predicate' is used (bug#56049).
---
lisp/emacs-lisp/easy-mmode.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 1d93fe480141..df3790350387 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -555,7 +555,7 @@ and nil means \"don't use\". There's an implicit nil at the end of the
list."
mode)
:type '(repeat sexp)
- :group ,group))
+ ,@group))
;; Autoloading define-globalized-minor-mode autoloads everything
;; up-to-here.
From cf4c204df8c4b01b1745452492164deca82bfcca Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Mon, 20 Jun 2022 11:08:08 +0200
Subject: [PATCH 187/466] * doc/misc/eww.texi (Overview, Basics): Fix typos.
---
doc/misc/eww.texi | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index df1eb53c9d5b..b3ec52f7ab8f 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -69,7 +69,7 @@ Indices
@chapter Overview
@dfn{EWW}, the Emacs Web Wowser, is a web browser for GNU Emacs. It
can load, parse, and display various web pages using @dfn{shr.el}.
-However a GNU Emacs with @code{libxml2} support is required.
+However, a GNU Emacs with @code{libxml2} support is required.
@node Basics
@chapter Basic Usage
@@ -213,7 +213,7 @@ switch EWW buffers through a minibuffer prompt, press @kbd{s}
@cindex External Browser
Although EWW and shr.el do their best to render webpages in GNU
Emacs some websites use features which can not be properly represented
-or are not implemented (E.g., JavaScript). If you have trouble
+or are not implemented (e.g., JavaScript). If you have trouble
viewing a website with EWW then hit @kbd{&}
(@code{eww-browse-with-external-browser}) inside the EWW buffer to
open the website in the external browser specified by
From 2eb738f2b8a3948b590ac7a6640f317a5cb12918 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 20 Jun 2022 19:04:06 +0300
Subject: [PATCH 188/466] Support builds configured with a separate --bindir
* src/emacs.c (load_pdump): Don't overwrite the leading
directories of the Emacs executable just because the pdumper file
was not found in the expected directory relative to the binary.
This is needed to support builds with a separate --bindir
configure-time option and native-compilation. (Bug#55741)
---
src/emacs.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/src/emacs.c b/src/emacs.c
index ccc0dd269f4a..0a90b0913be2 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -940,20 +940,24 @@ load_pdump (int argc, char **argv)
sprintf (dump_file, "%s%c%s%s",
path_exec, DIRECTORY_SEP, argv0_base, suffix);
#if !defined (NS_SELF_CONTAINED)
- /* Assume the Emacs binary lives in a sibling directory as set up by
- the default installation configuration. */
- const char *go_up = "../../../../bin/";
- needed += (strip_suffix ? strlen (strip_suffix) : 0)
- - strlen (suffix) + strlen (go_up);
- if (exec_bufsize < needed)
- {
- xfree (emacs_executable);
- emacs_executable = xpalloc (NULL, &exec_bufsize, needed - exec_bufsize,
- -1, 1);
- }
- sprintf (emacs_executable, "%s%c%s%s%s",
- path_exec, DIRECTORY_SEP, go_up, argv0_base,
- strip_suffix ? strip_suffix : "");
+ if (!(emacs_executable && *emacs_executable))
+ {
+ /* If we didn't find the Emacs binary, assume that it lives in a
+ sibling directory as set up by the default installation
+ configuration. */
+ const char *go_up = "../../../../bin/";
+ needed += (strip_suffix ? strlen (strip_suffix) : 0)
+ - strlen (suffix) + strlen (go_up);
+ if (exec_bufsize < needed)
+ {
+ xfree (emacs_executable);
+ emacs_executable = xpalloc (NULL, &exec_bufsize,
+ needed - exec_bufsize, -1, 1);
+ }
+ sprintf (emacs_executable, "%s%c%s%s%s",
+ path_exec, DIRECTORY_SEP, go_up, argv0_base,
+ strip_suffix ? strip_suffix : "");
+ }
#endif
result = pdumper_load (dump_file, emacs_executable);
From 137539c1250a62dd9952a3fd5451d00d76ab42a9 Mon Sep 17 00:00:00 2001
From: Earl Hyatt
Date: Tue, 21 Jun 2022 12:52:28 +0200
Subject: [PATCH 189/466] Clarify autotype.texi text slightly
* doc/misc/autotype.texi (Autoinserting): Make text slightly
clearer (bug#56118).
---
doc/misc/autotype.texi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index a3b0f16df9cf..a880642ac379 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -276,7 +276,7 @@ empty file is visited. This is accomplished by putting
What gets inserted, if anything, is determined by the variable
@code{auto-insert-alist}. The @sc{car}s of this list are each either
a mode name, making an element applicable when a buffer is in that
-mode. Or they can be a string, which is a regexp matched against the
+mode, or they can be a string, which is a regexp matched against the
buffer's file name. In that way different kinds of files that have
the same mode in Emacs can be distinguished. The @sc{car}s may also
be cons cells consisting of mode name or regexp as above and an
From 3f66e2a90392933e110a1a04f271c86b6eb179d5 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Tue, 21 Jun 2022 13:56:58 +0200
Subject: [PATCH 190/466] * lisp/repeat.el (repeat-mode): Fix message format.
---
lisp/repeat.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/repeat.el b/lisp/repeat.el
index 040ce818a24a..4d04f5ae9518 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -418,7 +418,7 @@ See `describe-repeat-maps' for a list of all repeatable commands."
(and (commandp s)
(get s 'repeat-map)
(push (get s 'repeat-map) keymaps))))))
- (message "Repeat mode is enabled for %d commands and %d keymaps; see `describe-repeat-maps'."
+ (message "Repeat mode is enabled for %d commands and %d keymaps; see `describe-repeat-maps'"
(length commands)
(length (delete-dups keymaps))))))
From 5082d74cfd512cf9c707ee22b85db3e94569fcd4 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Tue, 21 Jun 2022 14:20:22 +0200
Subject: [PATCH 191/466] ; * lisp/recentf.el: Fix typo.
---
lisp/recentf.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/recentf.el b/lisp/recentf.el
index 2ee9717f4dc1..7a4b589e4577 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -29,7 +29,7 @@
;; automatically saved across Emacs sessions.
;; You can customize the number of recent files displayed, the
-;; location of the menu and others options. Type:
+;; location of the menu and other options. Type:
;;
;; M-x customize-group RET recentf RET
From f3acc09377f98ae18653eb01c11c57b6449c83af Mon Sep 17 00:00:00 2001
From: Tassilo Horn
Date: Tue, 21 Jun 2022 21:21:12 +0200
Subject: [PATCH 192/466] ; Revert "Use file-in-directory-p instead of obsolete
dired-in-this-tree-p"
Fixes bug#56126.
This reverts commit b425966b072792b7b22b845b5f2e39ff4f60b5ab.
---
lisp/dired-aux.el | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index d47bcf042798..b62e94fa77a8 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1868,7 +1868,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
(while blist
(with-current-buffer (car blist)
(if (and buffer-file-name
- (dired-in-this-tree-p buffer-file-name expanded-from-dir))
+ (dired-in-this-tree-p buffer-file-name expanded-from-dir))
(let ((modflag (buffer-modified-p))
(to-file (replace-regexp-in-string
(concat "^" (regexp-quote from-dir))
@@ -2727,7 +2727,7 @@ This function takes some pains to conform to `ls -lR' output."
(setq switches (string-replace "R" "" switches))
(dolist (cur-ass dired-subdir-alist)
(let ((cur-dir (car cur-ass)))
- (and (file-in-directory-p cur-dir dirname)
+ (and (dired-in-this-tree-p cur-dir dirname)
(let ((cur-cons (assoc-string cur-dir dired-switches-alist)))
(if cur-cons
(setcdr cur-cons switches)
@@ -2739,7 +2739,7 @@ This function takes some pains to conform to `ls -lR' output."
(defun dired-insert-subdir-validate (dirname &optional switches)
;; Check that it is valid to insert DIRNAME with SWITCHES.
;; Signal an error if invalid (e.g. user typed `i' on `..').
- (or (file-in-directory-p dirname (expand-file-name default-directory))
+ (or (dired-in-this-tree-p dirname (expand-file-name default-directory))
(error "%s: Not in this directory tree" dirname))
(let ((real-switches (or switches dired-subdir-switches)))
(when real-switches
From a3f294b37f81ae3d5438ff32173726bddaa79496 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Wed, 22 Jun 2022 16:46:25 +0300
Subject: [PATCH 193/466] Improve last change in autotype.texi
* doc/misc/autotype.texi (Autoinserting): Fix wording. Suggested
by Richard Stallman .
---
doc/misc/autotype.texi | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index a880642ac379..b005c9c34f76 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -274,13 +274,13 @@ empty file is visited. This is accomplished by putting
@vindex auto-insert-alist
What gets inserted, if anything, is determined by the variable
-@code{auto-insert-alist}. The @sc{car}s of this list are each either
-a mode name, making an element applicable when a buffer is in that
-mode, or they can be a string, which is a regexp matched against the
-buffer's file name. In that way different kinds of files that have
-the same mode in Emacs can be distinguished. The @sc{car}s may also
-be cons cells consisting of mode name or regexp as above and an
-additional descriptive string.
+@code{auto-insert-alist}. The @sc{car} of each element of this list
+is either a mode name, making the element applicable when a buffer is
+in that mode, or a string, which is a regexp matched against a
+buffer's file name (the latter allows to distinguish between different
+kinds of files that have the same mode in Emacs). The @sc{car} of an
+element may also be a cons cell, consisting of mode name or regexp, as
+above, and an additional descriptive string.
When a matching element is found, the @sc{cdr} says what to do. It may
be a string, which is a file name, whose contents are to be inserted, if
From a772c0b85272bc20858a35af5f619983cfcb0084 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Thu, 23 Jun 2022 22:03:50 +0200
Subject: [PATCH 194/466] ; Fix typos: prefer US spelling.
---
doc/misc/modus-themes.org | 6 +--
doc/misc/texinfo.tex | 2 +-
etc/themes/modus-themes.el | 2 +-
lisp/icomplete.el | 2 +-
lisp/net/rcirc.el | 2 +-
lisp/progmodes/elisp-mode.el | 2 +-
lisp/progmodes/hideif.el | 2 +-
lisp/so-long.el | 52 ++++++++++++------------
test/lisp/so-long-tests/so-long-tests.el | 4 +-
test/src/fns-tests.el | 2 +-
test/src/keymap-tests.el | 2 +-
11 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index 2c49cbdd72b3..6b1d91c396ad 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -481,7 +481,7 @@ By default, customizing a theme-related user option through the Custom
interfaces or with {{{kbd(M-x customize-set-variable)}}} will not reload the
currently active Modus theme.
-Enable this behaviour by setting this variable to ~nil~.
+Enable this behavior by setting this variable to ~nil~.
** Option for color-coding success state
:properties:
@@ -649,7 +649,7 @@ tables and code blocks to always inherit from the ~fixed-pitch~ face.
This is to ensure that those constructs remain monospaced even when
users opt for a mode that remaps typeface families, such as the built-in
{{{kbd(M-x variable-pitch-mode)}}}. Otherwise the layout would appear
-broken, due to how spacing is done. To disable this behaviour, set the
+broken, due to how spacing is done. To disable this behavior, set the
option to ~t~.
Users may prefer to use another package for handling mixed typeface
@@ -2069,7 +2069,7 @@ contrast on an on-demand basis.
One way to achieve this is to design a command that cycles through three
distinct levels of intensity, though the following can be adapted to any
-kind of cyclic behaviour, such as to switch between red, green, and
+kind of cyclic behavior, such as to switch between red, green, and
blue.
In the following example, we employ the ~modus-themes-color~ function
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 0d86b25dc41a..e798ae1c2c3e 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -7660,7 +7660,7 @@
% If SUBTOPIC is present, precede it with a space, and call \doind.
% (At some time during the 20th century, this made a two-level entry in an
% index such as the operation index. Nobody seemed to notice the change in
-% behaviour though.)
+% behavior though.)
\def\dosubind#1#2#3{%
\def\thirdarg{#3}%
\ifx\thirdarg\empty
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index 6068bf47ce56..f49a809e491d 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -1679,7 +1679,7 @@ By default, customizing a theme-related user option through the
Custom interfaces or with `customize-set-variable' will not
reload the currently active Modus theme.
-Enable this behaviour by setting this variable to nil."
+Enable this behavior by setting this variable to nil."
:group 'modus-themes
:package-version '(modus-themes . "1.5.0")
:version "28.1"
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 7b7cc5b8bdfb..961725747099 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -587,7 +587,7 @@ Usually run by inclusion in `minibuffer-setup-hook'."
;; select it -- again, as desired.
;;
;; FIXME: it's arguable that this second
- ;; behaviour should be a property of the
+ ;; behavior should be a property of the
;; completion table and not the completion
;; frontend such as we have done
;; here. However, it seems generically
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 8feef6beebec..b23b0d64ae6d 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -3437,7 +3437,7 @@ form \"PARAMETER\" to enable a feature, \"PARAMETER=VALUE\" to
configure a specific option or \"-PARAMETER\" to disable a
previously specified feature. SENDER is passed on to
`rcirc-handler-generic'. PROCESS is the process object for the
-current connection. Note that this is not the behaviour as
+current connection. Note that this is not the behavior as
specified in RFC2812, where 005 stood for RPL_BOUNCE."
(rcirc-handler-generic process "005" sender args text)
(with-rcirc-process-buffer process
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 101c323b1320..bdd7751fc0c1 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1710,7 +1710,7 @@ which see."
(defalias 'elisp-eldoc-documentation-function 'elisp--documentation-one-liner
"Return Elisp documentation for the thing at point as one-line string.
This is meant as a backward compatibility aide to the \"old\"
-Elisp eldoc behaviour. Consider variable docstrings and function
+Elisp eldoc behavior. Consider variable docstrings and function
signatures only, in this order. If none applies, returns nil.
Changes to `eldoc-documentation-functions' and
`eldoc-documentation-strategy' are _not_ reflected here. As such
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 68b085d42f4a..f6a4711e244b 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -109,7 +109,7 @@
;;
;; Extensively modified by Luke Lee in 2013 to support complete C expression
;; evaluation and argumented macro expansion; C++11, C++14, C++17, GCC
-;; extension literals and gcc/clang matching behaviours are supported in 2021.
+;; extension literals and gcc/clang matching behaviors are supported in 2021.
;; Various floating point types and operations are also supported but the
;; actual precision is limited by the Emacs internal floating representation,
;; which is the C data type "double" or IEEE binary64 format.
diff --git a/lisp/so-long.el b/lisp/so-long.el
index f4ae71d90582..17af532249c8 100644
--- a/lisp/so-long.el
+++ b/lisp/so-long.el
@@ -90,7 +90,7 @@
;; * Overview of modes and commands
;; --------------------------------
;; - `global-so-long-mode' - A global minor mode which enables the automated
-;; behaviour, causing the user's preferred action to be invoked whenever a
+;; behavior, causing the user's preferred action to be invoked whenever a
;; newly-visited file contains excessively long lines.
;; - `so-long-mode' - A major mode, and the default action.
;; - `so-long-minor-mode' - A minor mode version of the major mode, and an
@@ -111,7 +111,7 @@
;;
;; On rare occasions you may choose to manually invoke the `so-long' command,
;; which invokes your preferred `so-long-action' (exactly as the automatic
-;; behaviour would do if it had detected long lines). You might use this if a
+;; behavior would do if it had detected long lines). You might use this if a
;; problematic file did not meet your configured criteria, and you wished to
;; trigger the performance improvements manually.
;;
@@ -120,7 +120,7 @@
;; available to `so-long' but, like any other mode, they can be invoked directly
;; if you have a need to do that (see also "Other ways of using so-long" below).
;;
-;; If the behaviour ever triggers when you did not want it to, you can use the
+;; If the behavior ever triggers when you did not want it to, you can use the
;; `so-long-revert' command to restore the buffer to its original state.
;; * Basic configuration
@@ -199,7 +199,7 @@
;;
;; Note that `so-long-minor-modes' is not useful for other global minor modes
;; (as distinguished from globalized minor modes), but in some cases it will be
-;; possible to inhibit or otherwise counter-act the behaviour of a global mode
+;; possible to inhibit or otherwise counter-act the behavior of a global mode
;; by overriding variables, or by employing hooks (see below). You would need
;; to inspect the code for a given global mode (on a case by case basis) to
;; determine whether it's possible to inhibit it for a single buffer -- and if
@@ -211,7 +211,7 @@
;; If `so-long-action' is set to either `so-long-mode' or `so-long-minor-mode',
;; the buffer-local value for each variable in the list is set to the associated
;; value in the alist. Use this to enforce values which will improve
-;; performance or otherwise avoid undesirable behaviours. If `so-long-revert'
+;; performance or otherwise avoid undesirable behaviors. If `so-long-revert'
;; is called, then the original values are restored.
;; * Retaining minor modes and settings when switching to `so-long-mode'
@@ -273,7 +273,7 @@
;; `so-long-mode', completely bypassing the automated decision process.
;; Refer to M-: (info "(emacs) Specifying File Variables") RET
;;
-;; If so-long itself causes problems, disable the automated behaviour with
+;; If so-long itself causes problems, disable the automated behavior with
;; M-- M-x global-so-long-mode, or M-: (global-so-long-mode 0)
;; * Example configuration
@@ -313,7 +313,7 @@
;; (add-hook 'js-mode-hook 'my-js-mode-hook)
;;
;; (defun my-js-mode-hook ()
-;; "Custom `js-mode' behaviours."
+;; "Custom `js-mode' behaviors."
;; (setq-local so-long-max-lines 100)
;; (setq-local so-long-threshold 1000))
;;
@@ -327,7 +327,7 @@
;; (add-hook 'nxml-mode-hook 'my-nxml-mode-hook)
;;
;; (defun my-nxml-mode-hook ()
-;; "Custom `nxml-mode' behaviours."
+;; "Custom `nxml-mode' behaviors."
;; (require 'so-long)
;; (setq-local so-long-variable-overrides
;; (remove '(bidi-inhibit-bpa . t) so-long-variable-overrides)))
@@ -380,7 +380,7 @@
;; meaning you would need to add to `safe-local-variable-values' in order to
;; avoid being queried about them.
;;
-;; Finally, the `so-long-predicate' user option enables the automated behaviour
+;; Finally, the `so-long-predicate' user option enables the automated behavior
;; to be determined by a custom function, if greater control is needed.
;; * Implementation notes
@@ -397,7 +397,7 @@
;; * Caveats
;; ---------
-;; The variables affecting the automated behaviour of this library (such as
+;; The variables affecting the automated behavior of this library (such as
;; `so-long-action') can be used as file- or dir-local values in Emacs 26+, but
;; not in previous versions of Emacs. This is on account of improvements made
;; to `normal-mode' in 26.1, which altered the execution order with respect to
@@ -462,7 +462,7 @@
;; 0.6 - Added `so-long-minor-modes' and `so-long-hook'.
;; 0.5 - Renamed library to "so-long.el".
;; - Added explicit `so-long-enable' command to activate our advice.
-;; 0.4 - Amended/documented behaviour with file-local 'mode' variables.
+;; 0.4 - Amended/documented behavior with file-local 'mode' variables.
;; 0.3 - Defer to a file-local 'mode' variable.
;; 0.2 - Initial release to EmacsWiki.
;; 0.1 - Experimental.
@@ -490,7 +490,7 @@
;; automatically."; however `so-long--ensure-enabled' may forcibly re-enable
;; it contrary to the user's expectations, so for the present this should be
;; considered internal-use only (with `global-so-long-mode' the interface
- ;; for enabling or disabling the automated behaviour). FIXME: Establish a
+ ;; for enabling or disabling the automated behavior). FIXME: Establish a
;; way to support the original use-case, or rename to `so-long--enabled'.
"Internal use. Non-nil when any `so-long' functionality has been used.")
@@ -586,7 +586,7 @@ files would prevent Emacs from handling them correctly."
(defcustom so-long-invisible-buffer-function #'so-long-deferred
"Function called in place of `so-long' when the buffer is not displayed.
-This affects the behaviour of `global-so-long-mode'.
+This affects the behavior of `global-so-long-mode'.
We treat invisible buffers differently from displayed buffers because, in
cases where a library is using a buffer for behind-the-scenes processing,
@@ -618,7 +618,7 @@ the mentioned options might interfere with some intended processing."
'so-long-detected-long-line-p)
"Function called after `set-auto-mode' to decide whether action is needed.
-This affects the behaviour of `global-so-long-mode'.
+This affects the behavior of `global-so-long-mode'.
Only called if the major mode is a member of `so-long-target-modes'.
@@ -703,7 +703,7 @@ will be automatically processed; but custom actions can also do these things.
The value `longlines-mode' causes that minor mode to be enabled. See
longlines.el for more details.
-Each action likewise determines the behaviour of `so-long-revert'.
+Each action likewise determines the behavior of `so-long-revert'.
If the value is nil, or not defined in `so-long-action-alist', then no action
will be taken."
@@ -753,7 +753,7 @@ If ACTION-ARG is provided, it is used in place of `so-long-action'."
(defcustom so-long-file-local-mode-function 'so-long-mode-downgrade
"Function to call during `set-auto-mode' when a file-local mode is set.
-This affects the behaviour of `global-so-long-mode'.
+This affects the behavior of `global-so-long-mode'.
The specified function will be called with a single argument, being the
file-local mode which was established.
@@ -855,7 +855,7 @@ By default this happens if `so-long-action' is set to either `so-long-mode'
or `so-long-minor-mode'. If `so-long-revert' is subsequently invoked, then the
disabled modes are re-enabled by calling them with the numeric argument 1.
-`so-long-hook' can be used where more custom behaviour is desired.
+`so-long-hook' can be used where more custom behavior is desired.
Please submit bug reports to recommend additional modes for this list, whether
they are in Emacs core, GNU ELPA, or elsewhere."
@@ -1312,7 +1312,7 @@ This minor mode is a standard `so-long-action' option."
(if so-long-minor-mode ;; We are enabling the mode.
(progn
;; Housekeeping. `so-long-minor-mode' might be invoked directly rather
- ;; than via `so-long', so replicate the necessary behaviours. The minor
+ ;; than via `so-long', so replicate the necessary behaviors. The minor
;; mode also cares about whether `so-long' was already active, as we do
;; not want to remember values which were (potentially) overridden
;; already.
@@ -1387,9 +1387,9 @@ values), despite potential performance issues, type \\[so-long-revert].
Use \\[so-long-commentary] for more information.
Use \\[so-long-customize] to open the customization group `so-long' to
-configure the behaviour."
+configure the behavior."
;; Housekeeping. `so-long-mode' might be invoked directly rather than via
- ;; `so-long', so replicate the necessary behaviours. We could use this same
+ ;; `so-long', so replicate the necessary behaviors. We could use this same
;; test in `so-long-after-change-major-mode' to run `so-long-hook', but that's
;; not so obviously the right thing to do, so I've omitted it for now.
(unless so-long--calling
@@ -1435,7 +1435,7 @@ configure the behaviour."
This advice acts before `so-long-mode', with the previous mode still active."
(unless (derived-mode-p 'so-long-mode)
;; Housekeeping. `so-long-mode' might be invoked directly rather than
- ;; via `so-long', so replicate the necessary behaviours.
+ ;; via `so-long', so replicate the necessary behaviors.
(unless so-long--calling
(so-long-remember-all :reset))
;; Remember the original major mode, regardless.
@@ -1549,7 +1549,7 @@ This is the `so-long-revert-function' for `so-long-mode'."
;; Emacs 26+ has already called `hack-local-variables' (during
;; `run-mode-hooks'; provided there was a `buffer-file-name'), but for older
;; versions we need to call it here. In Emacs 26+ the revised 'HANDLE-MODE'
- ;; argument is set to `no-mode' (being the non-nil-and-non-t behaviour),
+ ;; argument is set to `no-mode' (being the non-nil-and-non-t behavior),
;; which we mimic here by binding `so-long--hack-local-variables-no-mode',
;; in order to prevent a local 'mode' variable from clobbering the major
;; mode we have just called.
@@ -1590,7 +1590,7 @@ because we do not want to downgrade the major mode in that scenario."
;; Act only if `so-long-mode' would be enabled by the current action.
(when (and (symbolp (so-long-function))
(provided-mode-derived-p (so-long-function) 'so-long-mode))
- ;; Downgrade from `so-long-mode' to the `so-long-minor-mode' behaviour.
+ ;; Downgrade from `so-long-mode' to the `so-long-minor-mode' behavior.
(setq so-long-function 'turn-on-so-long-minor-mode
so-long-revert-function 'turn-off-so-long-minor-mode))))
@@ -1610,7 +1610,7 @@ and cannot be conveniently intercepted, so we are forced to replicate it here.
This special-case code will ultimately be removed from Emacs, as it exists to
deal with a deprecated feature; but until then we need to replicate it in order
-to inhibit our own behaviour in the presence of a header comment `mode'
+to inhibit our own behavior in the presence of a header comment `mode'
declaration.
If a file-local mode is detected in the header comment, then we call the
@@ -1747,7 +1747,7 @@ by testing the value against `major-mode'; but as we may have changed the
major mode to `so-long-mode' by this point, that protection is insufficient
and so we need to perform our own test.
-We likewise need to support an equivalent of the `no-mode' behaviour in 26.1+
+We likewise need to support an equivalent of the `no-mode' behavior in 26.1+
to ensure that `so-long-mode-revert' will not restore a file-local mode again
after it has already reverted to the original mode.
@@ -1895,7 +1895,7 @@ When such files are detected by `so-long-predicate', we invoke the selected
Use \\[so-long-commentary] for more information.
Use \\[so-long-customize] to open the customization group `so-long' to
-configure the behaviour."
+configure the behavior."
:global t
:group 'so-long
(if global-so-long-mode
diff --git a/test/lisp/so-long-tests/so-long-tests.el b/test/lisp/so-long-tests/so-long-tests.el
index 23a5660df599..670ab52cef6c 100644
--- a/test/lisp/so-long-tests/so-long-tests.el
+++ b/test/lisp/so-long-tests/so-long-tests.el
@@ -59,7 +59,7 @@
(declare-function so-long-tests-assert-and-revert "so-long-tests-helpers")
(declare-function so-long-tests-predicates "so-long-tests-helpers")
-;; Enable the automated behaviour for all tests.
+;; Enable the automated behavior for all tests.
(global-so-long-mode 1)
(ert-deftest so-long-tests-threshold-under ()
@@ -210,7 +210,7 @@
;; From Emacs 27 the `display-buffer' call is insufficient.
;; The various 'window change functions' are now invoked by the
;; redisplay, and redisplay does nothing at all in batch mode,
- ;; so we cannot test under this revised behaviour. Refer to:
+ ;; so we cannot test under this revised behavior. Refer to:
;; https://lists.gnu.org/r/emacs-devel/2019-10/msg00971.html
;; For interactive (non-batch) test runs, calling `redisplay'
;; does do the trick; so do that first.
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 4d59f349babb..e27a40f644bc 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -788,7 +788,7 @@
(should (equal 1 (string-distance "ab" "a我b")))
(should (equal 1 (string-distance "我" "她")))
- ;; correct behaviour with empty strings
+ ;; correct behavior with empty strings
(should (equal 0 (string-distance "" "")))
(should (equal 0 (string-distance "" "" t)))
(should (equal 1 (string-distance "x" "")))
diff --git a/test/src/keymap-tests.el b/test/src/keymap-tests.el
index 1dbaf7ef2e7e..d7b9e8440ed1 100644
--- a/test/src/keymap-tests.el
+++ b/test/src/keymap-tests.el
@@ -125,7 +125,7 @@
;; ...)
(ert-deftest keymap-lookup-key/mixed-case ()
- "Backwards compatibility behaviour (Bug#50752)."
+ "Backwards compatibility behavior (Bug#50752)."
(let ((map (make-keymap)))
(define-key map [menu-bar foo bar] 'foo)
(should (eq (lookup-key map [menu-bar foo bar]) 'foo))
From 1f6750b53a872a5747dff92b8f61cfede0c5a6a6 Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Fri, 24 Jun 2022 19:18:22 +0200
Subject: [PATCH 195/466] Avoid treating number as an enum in the org manual
* doc/misc/org.org (The Agenda Dispatcher): Avoid treating number as
enum.
---
doc/misc/org.org | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/misc/org.org b/doc/misc/org.org
index baab2efedaf0..b1dc70849864 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -8544,8 +8544,8 @@ commands:
Search for a regular expression in all agenda files and additionally
in the files listed in ~org-agenda-text-search-extra-files~. This
uses the Emacs command ~multi-occur~. A prefix argument can be used
- to specify the number of context lines for each match, default is
- 1.
+ to specify the number of context lines for each match, the default
+ is 1.
- {{{kbd(#)}}} ::
From a9d338818ae9ec789b90f1b3d5700d25fcdbbab6 Mon Sep 17 00:00:00 2001
From: Allen Li
Date: Sun, 26 Jun 2022 00:37:07 -0700
Subject: [PATCH 196/466] ; elec-pair: Fix docstring typo (bug#56233)
* lisp/elec-pair.el (electric-pair-post-self-insert-function): Fix typo.
---
lisp/elec-pair.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el
index 964d21f11c6d..bbed955a3934 100644
--- a/lisp/elec-pair.el
+++ b/lisp/elec-pair.el
@@ -498,7 +498,7 @@ The decision is taken by order of preference:
corresponding delimiter for C;
* According to C alone, by looking C up in the tables
- `electric-pair-paris' or `electric-pair-text-pairs' (which
+ `electric-pair-pairs' or `electric-pair-text-pairs' (which
see);
* According to C's syntax and the syntactic state of the buffer
From fd04009d167a620513fa948155c2e30040a142c2 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Sat, 25 Jun 2022 14:51:28 -0500
Subject: [PATCH 197/466] Port distribution tarball to Solaris 10
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* make-dist (taropt): Use 'tar -H ustar' to generate a portable
tar file format instead of a GNU-specific format. Needed now that
Emacs tarballs contain file names longer than 100 bytes, e.g.:
emacs-28.1/test/lisp/gnus/mml-sec-resources/private-keys-v1.d/C072AF82DCCCB9A7F1B85FFA10B802DC4ED16703.key
emacs-28.1/test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-success.el
Without this patch, extracting a tarball on Solaris 10 fails with
many diagnostics like “tar: ././@LongLink: typeflag 'L' not
recognized, converting to regular file”.
(cherry picked from commit 4410f5d86997b6b238ff05c2ece338b28e1163b1)
---
make-dist | 2 ++
1 file changed, 2 insertions(+)
diff --git a/make-dist b/make-dist
index 447e90f018ef..67e49382d07a 100755
--- a/make-dist
+++ b/make-dist
@@ -485,6 +485,8 @@ if [ "${make_tar}" = yes ]; then
esac
echo "Creating tar file"
taropt='--numeric-owner --owner=0 --group=0 --mode=go+u,go-w'
+ tar -H ustar -cf /dev/null $tempdir/src/lisp.h 2>/dev/null &&
+ taropt="$taropt -H ustar"
tar --sort=name -cf /dev/null $tempdir/src/lisp.h 2>/dev/null &&
taropt="$taropt --sort=name"
[ "$verbose" = "yes" ] && taropt="$taropt --verbose"
From ade34cf8217e40ea27cde7c12ad6071cee283bb1 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Sun, 26 Jun 2022 17:23:20 -0500
Subject: [PATCH 198/466] Mention further crashes on Solaris 10
---
etc/PROBLEMS | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 8a260c3177ce..c2164094d71a 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2400,6 +2400,11 @@ Definitions" to make them defined.
We list bugs in current versions here. See also the section on legacy
systems.
+*** On Solaris 10 sparc, Emacs crashes during the build while saving state.
+This was observed for Emacs 28.1 on Solaris 10 32-bit sparc, with
+Oracle Developer Studio 12.6 (Sun C 5.15). The failure was intermittent,
+and running GNU Make a second time would typically finish the build.
+
*** On Solaris 10, Emacs crashes during the build process.
(This applies only with './configure --with-unexec=yes', which is rare.)
This was reported for Emacs 25.2 on i386-pc-solaris2.10 with Sun
From c66b90a534ed08762d57f8f78224dbd6dd6a1b68 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Sun, 26 Jun 2022 17:36:22 -0500
Subject: [PATCH 199/466] Mention Solaris 10 'make clean' and 'make check'
---
etc/PROBLEMS | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index c2164094d71a..f935b9c9305d 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2400,6 +2400,12 @@ Definitions" to make them defined.
We list bugs in current versions here. See also the section on legacy
systems.
+*** On Solaris 10, 'make clean' and 'make check' do not work.
+The Emacs build procedure uses ’find ... -path ...', which Solaris 10
+'find' does not support. You can work around the problem by
+installing GNU 'find' in your PATH. This problem should be fixed in
+Emacs 29.
+
*** On Solaris 10 sparc, Emacs crashes during the build while saving state.
This was observed for Emacs 28.1 on Solaris 10 32-bit sparc, with
Oracle Developer Studio 12.6 (Sun C 5.15). The failure was intermittent,
From 48bda83d3591d33c5bb8292d9edb06ef3c3f93bd Mon Sep 17 00:00:00 2001
From: Kyle Meyer
Date: Sun, 26 Jun 2022 23:00:38 -0400
Subject: [PATCH 200/466] Update to Org 9.5.4-3-g6dc785
---
lisp/org/oc-basic.el | 9 ++++++++-
lisp/org/org-version.el | 2 +-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index 775690f17679..9ed1b810fab6 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/oc-basic.el
@@ -189,7 +189,14 @@ Return a hash table with citation references as keys and fields alist as values.
(cons 'year
(cond
((consp date)
- (caar date))
+ (let ((year (caar date)))
+ (cond
+ ((numberp year) (number-to-string year))
+ ((stringp year) year)
+ (t
+ (error
+ "First element of CSL-JSON date-parts should be a number or string, got %s: %S"
+ (type-of year) year)))))
((stringp date)
(replace-regexp-in-string
(rx
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 6bdcb0afff51..2a500fe5106c 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5.4"))
+ (let ((org-git-version "release_9.5.4-3-g6dc785"))
org-git-version))
(provide 'org-version)
From a280df4cab8e492123ded9e236c671b275183d53 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii
Date: Mon, 27 Jun 2022 15:57:36 +0300
Subject: [PATCH 201/466] ; Mention in NEWS the need to use --bindir
* etc/NEWS: Mention the need to use --bindir= at configure time
when installing outside of the ${prefix} tree. (Bug#46790)
---
etc/NEWS | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index 770c96b07ba0..962cfe58d109 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -18,6 +18,24 @@ with a prefix argument or by typing 'C-u C-h C-n'.
* Installation Changes in Emacs 28.2
+** To install the Emacs binary in a non-standard directory, use '--bindir='.
+If you install Emacs in a way that places the Emacs executable file in
+a directory other than ${prefix}/bin, you will now need to specify
+that at configure time, if you build Emacs with native-compilation
+support. To this end, add the '--bindir=DIRECTORY' switch to the
+command line of the 'configure' script, where DIRECTORY is the
+directory in which you will install the executable file 'emacs'. This
+is required even if you place a symlink under ${prefix}/bin that
+points to the real executable file in some other DIRECTORY.
+
+It is no longer enough to specify 'bindir=DIRECTORY' on the command
+line of the "make install" command.
+
+The reason for this new requirement is that Emacs needs to locate at
+startup the directory with its '*.eln' natively-compiled files for the
+preloaded Lisp packages, and the relative name of that directory needs
+therefore to be recorded in the executable as part of the build.
+
* Startup Changes in Emacs 28.2
From 091b22cb123c437324bd64c5b7d9d2596da4264c Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios"
Date: Sat, 21 May 2022 23:11:33 +0300
Subject: [PATCH 202/466] Fix hash table function return values in manual
* doc/lispref/hash.texi (Hash Access): Reconcile documented return
values of puthash and clrhash with their respective
docstrings (bug#55562).
---
doc/lispref/hash.texi | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index a566d898240e..34eda45b236d 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -203,7 +203,8 @@ association in @var{table}.
@defun puthash key value table
This function enters an association for @var{key} in @var{table}, with
value @var{value}. If @var{key} already has an association in
-@var{table}, @var{value} replaces the old associated value.
+@var{table}, @var{value} replaces the old associated value. This
+function always returns @var{value}.
@end defun
@defun remhash key table
@@ -219,10 +220,7 @@ otherwise. In Emacs Lisp, @code{remhash} always returns @code{nil}.
@defun clrhash table
This function removes all the associations from hash table @var{table},
so that it becomes empty. This is also called @dfn{clearing} the hash
-table.
-
-@b{Common Lisp note:} In Common Lisp, @code{clrhash} returns the empty
-@var{table}. In Emacs Lisp, it returns @code{nil}.
+table. @code{clrhash} returns the empty @var{table}.
@end defun
@defun maphash function table
From a8e72eb0e26b6671df4ef8585da38e675b15745f Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Tue, 28 Jun 2022 14:40:52 +0200
Subject: [PATCH 203/466] ; * etc/NEWS: Fix file name quotations.
---
etc/NEWS | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 962cfe58d109..722b0da696b4 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -20,19 +20,19 @@ with a prefix argument or by typing 'C-u C-h C-n'.
** To install the Emacs binary in a non-standard directory, use '--bindir='.
If you install Emacs in a way that places the Emacs executable file in
-a directory other than ${prefix}/bin, you will now need to specify
+a directory other than "${prefix}/bin", you will now need to specify
that at configure time, if you build Emacs with native-compilation
support. To this end, add the '--bindir=DIRECTORY' switch to the
command line of the 'configure' script, where DIRECTORY is the
-directory in which you will install the executable file 'emacs'. This
-is required even if you place a symlink under ${prefix}/bin that
+directory in which you will install the executable file "emacs". This
+is required even if you place a symlink under "${prefix}/bin" that
points to the real executable file in some other DIRECTORY.
It is no longer enough to specify 'bindir=DIRECTORY' on the command
line of the "make install" command.
The reason for this new requirement is that Emacs needs to locate at
-startup the directory with its '*.eln' natively-compiled files for the
+startup the directory with its "*.eln" natively-compiled files for the
preloaded Lisp packages, and the relative name of that directory needs
therefore to be recorded in the executable as part of the build.
From 2eba8cad204e4b663809235941d91671d2d8e6da Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Tue, 28 Jun 2022 14:41:45 +0200
Subject: [PATCH 204/466] Tramp shall not trap unrelated D-Bus errors
* lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-event-vector): Declare.
(tramp-gvfs-file-name-handler): Let-bind it.
(tramp-gvfs-dbus-event-vector): Fix docstring.
(tramp-gvfs-maybe-open-connection): Do not set it globally. (Bug#56162)
---
lisp/net/tramp-gvfs.el | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 3a5041c49180..4adc35bcb6dd 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -841,6 +841,8 @@ Operations not mentioned here will be handled by the default Emacs primitives.")
(tramp-file-name-method (tramp-dissect-file-name filename))))
(and (stringp method) (member method tramp-gvfs-methods)))))
+(defvar tramp-gvfs-dbus-event-vector)
+
;;;###tramp-autoload
(defun tramp-gvfs-file-name-handler (operation &rest args)
"Invoke the GVFS related OPERATION and ARGS.
@@ -848,7 +850,11 @@ First arg specifies the OPERATION, second arg is a list of
arguments to pass to the OPERATION."
(unless tramp-gvfs-enabled
(tramp-user-error nil "Package `tramp-gvfs' not supported"))
- (if-let ((fn (assoc operation tramp-gvfs-file-name-handler-alist)))
+ (if-let ((filename (apply #'tramp-file-name-for-operation operation args))
+ (tramp-gvfs-dbus-event-vector
+ (and (tramp-tramp-file-p filename)
+ (tramp-dissect-file-name filename)))
+ (fn (assoc operation tramp-gvfs-file-name-handler-alist)))
(save-match-data (apply (cdr fn) args))
(tramp-run-real-handler operation args)))
@@ -942,7 +948,8 @@ The call will be traced by Tramp with trace level 6."
(defvar tramp-gvfs-dbus-event-vector nil
"Current Tramp file name to be used, as vector.
It is needed when D-Bus signals or errors arrive, because there
-is no information where to trace the message.")
+is no information where to trace the message.
+Globally, the value shall always be nil; it is bound where needed.")
(defun tramp-gvfs-dbus-event-error (event err)
"Called when a D-Bus error message arrives, see `dbus-event-error-functions'."
@@ -2121,10 +2128,6 @@ connection if a previous connection has died for some reason."
(unless (tramp-connectable-p vec)
(throw 'non-essential 'non-essential))
- ;; We set the file name, in case there are incoming D-Bus signals or
- ;; D-Bus errors.
- (setq tramp-gvfs-dbus-event-vector vec)
-
;; For password handling, we need a process bound to the connection
;; buffer. Therefore, we create a dummy process. Maybe there is a
;; better solution?
From 3d91d55432f42bc063439d74fbccfe805fbc0034 Mon Sep 17 00:00:00 2001
From: Michael Albinus
Date: Wed, 29 Jun 2022 11:08:44 +0200
Subject: [PATCH 205/466] Update Tramp version (don't merge with master)
* doc/misc/trampver.texi:
* lisp/net/trampver.el: Change version to "2.5.3".
---
doc/misc/trampver.texi | 2 +-
lisp/net/trampver.el | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index a6914a58d08c..580d9ba69e42 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -8,7 +8,7 @@
@c In the Tramp GIT, the version numbers are auto-frobbed from
@c tramp.el, and the bug report address is auto-frobbed from
@c configure.ac.
-@set trampver 2.5.3-pre
+@set trampver 2.5.3
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 25.1
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 5863beb29560..c1d58a45f4f7 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -7,7 +7,7 @@
;; Maintainer: Michael Albinus
;; Keywords: comm, processes
;; Package: tramp
-;; Version: 2.5.3-pre
+;; Version: 2.5.3
;; Package-Requires: ((emacs "25.1"))
;; Package-Type: multi
;; URL: https://www.gnu.org/software/tramp/
@@ -40,7 +40,7 @@
;; ./configure" to change them.
;;;###tramp-autoload
-(defconst tramp-version "2.5.3-pre"
+(defconst tramp-version "2.5.3"
"This version of Tramp.")
;;;###tramp-autoload
@@ -78,7 +78,7 @@
;; Check for Emacs version.
(let ((x (if (not (string-lessp emacs-version "25.1"))
"ok"
- (format "Tramp 2.5.3-pre is not fit for %s"
+ (format "Tramp 2.5.3 is not fit for %s"
(replace-regexp-in-string "\n" "" (emacs-version))))))
(unless (string-equal "ok" x) (error "%s" x)))
From bf137fdbd2865773a34ec2c74d608cdd586d5a2c Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Wed, 29 Jun 2022 14:07:36 +0200
Subject: [PATCH 206/466] ; * admin/make-tarball.txt: Small clarification.
---
admin/make-tarball.txt | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 02b4f318e26c..98001e24e7dd 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -158,13 +158,15 @@ General steps (for each step, check for possible errors):
5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
- Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the
- files changed by M-x set-version. The easiest way of doing that
- is "C-x v d ROOT-DIR RET", then go to the first modified file,
- press 'M' to mark all modified files, and finally 'v' to commit
- them. Make sure the commit log message mentions all the changes
- in all modified files, as by default 'v' doesn't necessarily do
- so.
+ Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the files
+ changed by M-x set-version. Note that the set-version changes
+ should be committed separately, as described in step 3 above.
+
+ The easiest way of doing that is "C-x v d ROOT-DIR RET", then go
+ to the first modified file, press 'M' to mark all modified files,
+ and finally 'v' to commit them. Make sure the commit log message
+ mentions all the changes in all modified files, as by default 'v'
+ doesn't necessarily do so.
If someone else made a commit between step 1 and now,
you need to repeat from step 4 onwards. (You can commit the files
From 7f749e44dbd50430e14f319b4c4d3f767740b10b Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Wed, 29 Jun 2022 14:20:24 +0200
Subject: [PATCH 207/466] ; Auto-commit of loaddefs files.
---
lisp/ldefs-boot.el | 106 +++++++++++++++++++++++++--------------------
1 file changed, 59 insertions(+), 47 deletions(-)
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 78d6bb520171..3aff6bddf954 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -1452,25 +1452,25 @@ Variables
This is a brief overview of the different variables. For more info,
see the documentation for the variables (type \\[describe-variable] RET).
- artist-rubber-banding Interactively do rubber-banding or not
- artist-first-char What to set at first/second point...
- artist-second-char ...when not rubber-banding
- artist-interface-with-rect If cut/copy/paste should interface with rect
- artist-arrows The arrows to use when drawing arrows
- artist-aspect-ratio Character height-to-width for squares
- artist-trim-line-endings Trimming of line endings
- artist-flood-fill-right-border Right border when flood-filling
- artist-flood-fill-show-incrementally Update display while filling
- artist-pointer-shape Pointer shape to use while drawing
- artist-ellipse-left-char Character to use for narrow ellipses
- artist-ellipse-right-char Character to use for narrow ellipses
- artist-borderless-shapes If shapes should have borders
- artist-picture-compatibility Whether or not to be picture mode compatible
- artist-vaporize-fuzziness Tolerance when recognizing lines
- artist-spray-interval Seconds between repeated sprayings
- artist-spray-radius Size of the spray-area
- artist-spray-chars The spray-\"color\"
- artist-spray-new-chars Initial spray-\"color\"
+ `artist-rubber-banding' Interactively do rubber-banding or not
+ `artist-first-char' What to set at first/second point...
+ `artist-second-char' ...when not rubber-banding
+ `artist-interface-with-rect' Should cut/copy/paste interface with rect
+ `artist-arrows' The arrows to use when drawing arrows
+ `artist-aspect-ratio' Character height-to-width for squares
+ `artist-trim-line-endings' Trimming of line endings
+ `artist-flood-fill-right-border' Right border when flood-filling
+ `artist-flood-fill-show-incrementally' Update display while filling
+ `artist-pointer-shape' Pointer shape to use while drawing
+ `artist-ellipse-left-char' Character to use for narrow ellipses
+ `artist-ellipse-right-char' Character to use for narrow ellipses
+ `artist-borderless-shapes' If shapes should have borders
+ `artist-picture-compatibility' Picture mode compatibility on or off
+ `artist-vaporize-fuzziness' Tolerance when recognizing lines
+ `artist-spray-interval' Seconds between repeated sprayings
+ `artist-spray-radius' Size of the spray-area
+ `artist-spray-chars' The spray-\"color\"
+ `artist-spray-new-char' Initial spray-\"color\"
Hooks
@@ -5284,6 +5284,10 @@ Convert COLOR string to a list of normalized RGB components.
COLOR should be a color name (e.g. \"white\") or an RGB triplet
string (e.g. \"#ffff1122eecc\").
+COLOR can also be the symbol `unspecified' or one of the strings
+\"unspecified-fg\" or \"unspecified-bg\", in which case the
+return value is nil.
+
Normally the return value is a list of three floating-point
numbers, (RED GREEN BLUE), each between 0.0 and 1.0 inclusive.
@@ -8059,8 +8063,11 @@ The directory name must be absolute, but need not be fully expanded.")
(autoload 'dired "dired" "\
\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.
-Optional second argument SWITCHES specifies the `ls' options used.
-\(Interactively, use a prefix argument to be able to specify SWITCHES.)
+Optional second argument SWITCHES specifies the options to be used
+when invoking `insert-directory-program', usually `ls', which produces
+the listing of the directory files and their attributes.
+Interactively, a prefix argument will cause the command to prompt
+for SWITCHES.
If DIRNAME is a string, Dired displays a list of files in DIRNAME (which
may also have shell wildcards appended to select certain files).
@@ -8562,7 +8569,7 @@ If REVERSE, look up an IP address.
(autoload 'dns-mode "dns-mode" "\
Major mode for viewing and editing DNS master files.
-This mode is inherited from text mode. It add syntax
+This mode is derived from text mode. It adds syntax
highlighting, and some commands for handling DNS master files.
Its keymap inherits from `text-mode' and it has the same
variables for customizing indentation. It has its own abbrev
@@ -9261,6 +9268,11 @@ If regular expression is nil, repeat last search.
Query replace FROM with TO in all files of a class tree.
With prefix arg, process files of marked classes only.
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
\(fn FROM TO)" t nil)
(autoload 'ebrowse-tags-search-member-use "ebrowse" "\
@@ -11524,7 +11536,13 @@ Do `query-replace-regexp' of FROM with TO on all files listed in tags table.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
with the command \\[fileloop-continue].
-For non-interactive use, superseded by `fileloop-initialize-replace'.
+
+As each match is found, the user must type a character saying
+what to do with it. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
+
+For non-interactive use, this is superseded by `fileloop-initialize-replace'.
\(fn FROM TO &optional DELIMITED FILES)" t nil)
@@ -19978,7 +19996,7 @@ Create lambda form for macro bound to symbol or key.
\(fn MAC &optional COUNTER FORMAT)" nil nil)
-(register-definition-prefixes "kmacro" '("kdb-macro-redisplay" "kmacro-"))
+(register-definition-prefixes "kmacro" '("kmacro-"))
;;;***
@@ -22099,7 +22117,7 @@ Major mode for the mixal asm language.
;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-encode.el
-(define-obsolete-function-alias 'mm-default-file-encoding #'mm-default-file-type "future")
+(define-obsolete-function-alias 'mm-default-file-encoding #'mm-default-file-type "28.1")
(autoload 'mm-default-file-type "mm-encode" "\
Return a default content type for FILE.
@@ -24057,7 +24075,7 @@ Coloring:
;;;### (autoloads nil "org" "org/org.el" (0 0 0 0))
;;; Generated autoloads from org/org.el
-(push (purecopy '(org 9 5 2)) package--builtin-versions)
+(push (purecopy '(org 9 5 4)) package--builtin-versions)
(autoload 'org-babel-do-load-languages "org" "\
Load the languages defined in `org-babel-load-languages'.
@@ -24421,7 +24439,7 @@ is active.
\(fn &optional TODO-ONLY STRING EDIT-AT)" t nil)
(autoload 'org-todo-list "org-agenda" "\
-Show all (not done) TODO entries from all agenda file in a single list.
+Show all (not done) TODO entries from all agenda files in a single list.
The prefix arg can be used to select a specific TODO keyword and limit
the list to these. When using `\\[universal-argument]', you will be prompted
for a keyword. A numeric prefix directly selects the Nth keyword in
@@ -26628,6 +26646,10 @@ command \\[fileloop-continue].
(autoload 'project-query-replace-regexp "project" "\
Query-replace REGEXP in all the files of the project.
Stops when a match is found and prompts for whether to replace it.
+At that prompt, the user must type a character saying what to do
+with the match. Type SPC or `y' to replace the match,
+DEL or `n' to skip and go to the next match. For more directions,
+type \\[help-command] at that time.
If you exit the `query-replace', you can later continue the
`query-replace' loop using the command \\[fileloop-continue].
@@ -31072,7 +31094,7 @@ values), despite potential performance issues, type \\[so-long-revert].
Use \\[so-long-commentary] for more information.
Use \\[so-long-customize] to open the customization group `so-long' to
-configure the behaviour.
+configure the behavior.
\(fn)" t nil)
@@ -31138,7 +31160,7 @@ When such files are detected by `so-long-predicate', we invoke the selected
Use \\[so-long-commentary] for more information.
Use \\[so-long-customize] to open the customization group `so-long' to
-configure the behaviour.
+configure the behavior.
\(fn &optional ARG)" t nil)
@@ -34908,7 +34930,7 @@ like \"/sys\" or \"/C:\".")
Load Tramp file name handler, and perform OPERATION." (tramp-unload-file-name-handlers) (when tramp-mode (let ((default-directory temporary-file-directory)) (when (bound-and-true-p tramp-archive-autoload) (load "tramp-archive" 'noerror 'nomessage)) (load "tramp" 'noerror 'nomessage))) (apply operation args))
(defun tramp-register-autoload-file-name-handlers nil "\
-Add Tramp file name handlers to `file-name-handler-alist' during autoload." (add-to-list 'file-name-handler-alist (cons tramp-autoload-file-name-regexp #'tramp-autoload-file-name-handler)) (put #'tramp-autoload-file-name-handler 'safe-magic t))
+Add Tramp file name handlers to `file-name-handler-alist' during autoload." (unless (rassq #'tramp-file-name-handler file-name-handler-alist) (add-to-list 'file-name-handler-alist (cons tramp-autoload-file-name-regexp #'tramp-autoload-file-name-handler)) (put #'tramp-autoload-file-name-handler 'safe-magic t)))
(tramp-register-autoload-file-name-handlers)
(defun tramp-unload-file-name-handlers nil "\
@@ -34947,10 +34969,10 @@ It must be supported by libarchive(3).")
Regular expression matching archive file names." '(concat "\\`" "\\(" ".+" "\\." (regexp-opt tramp-archive-suffixes) "\\(?:" "\\." (regexp-opt tramp-archive-compression-suffixes) "\\)*" "\\)" "\\(" "/" ".*" "\\)" "\\'"))
(defun tramp-archive-autoload-file-name-handler (operation &rest args) "\
-Load Tramp archive file name handler, and perform OPERATION." (defvar tramp-archive-autoload) (when tramp-archive-enabled (let ((default-directory temporary-file-directory) (tramp-archive-autoload t)) (apply #'tramp-autoload-file-name-handler operation args))))
+Load Tramp archive file name handler, and perform OPERATION." (defvar tramp-archive-autoload) (let ((default-directory temporary-file-directory) (tramp-archive-autoload tramp-archive-enabled)) (apply #'tramp-autoload-file-name-handler operation args)))
(defun tramp-register-archive-file-name-handler nil "\
-Add archive file name handler to `file-name-handler-alist'." (when tramp-archive-enabled (add-to-list 'file-name-handler-alist (cons (tramp-archive-autoload-file-name-regexp) #'tramp-archive-autoload-file-name-handler)) (put #'tramp-archive-autoload-file-name-handler 'safe-magic t)))
+Add archive file name handler to `file-name-handler-alist'." (when (and tramp-archive-enabled (not (rassq #'tramp-archive-file-name-handler file-name-handler-alist))) (add-to-list 'file-name-handler-alist (cons (tramp-archive-autoload-file-name-regexp) #'tramp-archive-autoload-file-name-handler)) (put #'tramp-archive-autoload-file-name-handler 'safe-magic t)))
(add-hook 'after-init-hook #'tramp-register-archive-file-name-handler)
@@ -35064,7 +35086,7 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
;;;### (autoloads nil "trampver" "net/trampver.el" (0 0 0 0))
;;; Generated autoloads from net/trampver.el
-(push (purecopy '(tramp 2 5 2 28 1)) package--builtin-versions)
+(push (purecopy '(tramp 2 5 3)) package--builtin-versions)
(register-definition-prefixes "trampver" '("tramp-"))
@@ -39511,21 +39533,11 @@ Zone out, completely." t nil)
;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el"
;;;;;; "eshell/em-xtra.el" "faces.el" "files.el" "font-core.el"
;;;;;; "font-lock.el" "format.el" "frame.el" "help.el" "hfy-cmap.el"
-;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charprop.el"
-;;;;;; "international/charscript.el" "international/cp51932.el"
-;;;;;; "international/emoji-zwj.el" "international/eucjp-ms.el"
+;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charscript.el"
+;;;;;; "international/cp51932.el" "international/emoji-zwj.el" "international/eucjp-ms.el"
;;;;;; "international/iso-transl.el" "international/mule-cmds.el"
-;;;;;; "international/mule-conf.el" "international/mule.el" "international/uni-bidi.el"
-;;;;;; "international/uni-brackets.el" "international/uni-category.el"
-;;;;;; "international/uni-combining.el" "international/uni-comment.el"
-;;;;;; "international/uni-decimal.el" "international/uni-decomposition.el"
-;;;;;; "international/uni-digit.el" "international/uni-lowercase.el"
-;;;;;; "international/uni-mirrored.el" "international/uni-name.el"
-;;;;;; "international/uni-numeric.el" "international/uni-old-name.el"
-;;;;;; "international/uni-special-lowercase.el" "international/uni-special-titlecase.el"
-;;;;;; "international/uni-special-uppercase.el" "international/uni-titlecase.el"
-;;;;;; "international/uni-uppercase.el" "isearch.el" "jit-lock.el"
-;;;;;; "jka-cmpr-hook.el" "language/burmese.el" "language/cham.el"
+;;;;;; "international/mule-conf.el" "international/mule.el" "isearch.el"
+;;;;;; "jit-lock.el" "jka-cmpr-hook.el" "language/burmese.el" "language/cham.el"
;;;;;; "language/chinese.el" "language/cyrillic.el" "language/czech.el"
;;;;;; "language/english.el" "language/ethiopic.el" "language/european.el"
;;;;;; "language/georgian.el" "language/greek.el" "language/hebrew.el"
From 6c26f089a79f4b665a3a75adbb5dc1087951ce2b Mon Sep 17 00:00:00 2001
From: Stefan Kangas
Date: Wed, 29 Jun 2022 15:19:55 +0200
Subject: [PATCH 208/466] Update ChangeLog and AUTHORS for 28.1.90 pretest
* ChangeLog.3:
* etc/AUTHORS: Update.
---
ChangeLog.3 | 1225 ++++++++++++++++++++++++++++++++++++++++++++++++++-
etc/AUTHORS | 166 +++----
2 files changed, 1309 insertions(+), 82 deletions(-)
diff --git a/ChangeLog.3 b/ChangeLog.3
index ecd966fb6914..d0ff14117be3 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,1226 @@
+2022-06-29 Michael Albinus
+
+ Update Tramp version (don't merge with master)
+
+ * doc/misc/trampver.texi:
+ * lisp/net/trampver.el: Change version to "2.5.3".
+
+2022-06-28 Michael Albinus
+
+ Tramp shall not trap unrelated D-Bus errors
+
+ * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-event-vector): Declare.
+ (tramp-gvfs-file-name-handler): Let-bind it.
+ (tramp-gvfs-dbus-event-vector): Fix docstring.
+ (tramp-gvfs-maybe-open-connection): Do not set it globally. (Bug#56162)
+
+2022-06-28 Basil L. Contovounesios
+
+ Fix hash table function return values in manual
+
+ * doc/lispref/hash.texi (Hash Access): Reconcile documented return
+ values of puthash and clrhash with their respective
+ docstrings (bug#55562).
+
+2022-06-27 Kyle Meyer
+
+ Update to Org 9.5.4-3-g6dc785
+
+2022-06-27 Paul Eggert
+
+ Mention Solaris 10 'make clean' and 'make check'
+
+ Mention further crashes on Solaris 10
+
+2022-06-26 Paul Eggert
+
+ Port distribution tarball to Solaris 10
+
+ * make-dist (taropt): Use 'tar -H ustar' to generate a portable
+ tar file format instead of a GNU-specific format. Needed now that
+ Emacs tarballs contain file names longer than 100 bytes, e.g.:
+ emacs-28.1/test/lisp/gnus/mml-sec-resources/private-keys-v1.d/C072AF82DCCCB9A7F1B85FFA10B802DC4ED16703.key
+ emacs-28.1/test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-success.el
+ Without this patch, extracting a tarball on Solaris 10 fails with
+ many diagnostics like “tar: ././@LongLink: typeflag 'L' not
+ recognized, converting to regular file”.
+
+ (cherry picked from commit 4410f5d86997b6b238ff05c2ece338b28e1163b1)
+
+2022-06-24 Stefan Kangas
+
+ Avoid treating number as an enum in the org manual
+
+ * doc/misc/org.org (The Agenda Dispatcher): Avoid treating number as
+ enum.
+
+2022-06-22 Eli Zaretskii
+
+ Improve last change in autotype.texi
+
+ * doc/misc/autotype.texi (Autoinserting): Fix wording. Suggested
+ by Richard Stallman .
+
+2022-06-21 Stefan Kangas
+
+ * lisp/repeat.el (repeat-mode): Fix message format.
+
+2022-06-21 Earl Hyatt
+
+ Clarify autotype.texi text slightly
+
+ * doc/misc/autotype.texi (Autoinserting): Make text slightly
+ clearer (bug#56118).
+
+2022-06-20 Eli Zaretskii
+
+ Support builds configured with a separate --bindir
+
+ * src/emacs.c (load_pdump): Don't overwrite the leading
+ directories of the Emacs executable just because the pdumper file
+ was not found in the expected directory relative to the binary.
+ This is needed to support builds with a separate --bindir
+ configure-time option and native-compilation. (Bug#55741)
+
+2022-06-20 Stefan Kangas
+
+ * doc/misc/eww.texi (Overview, Basics): Fix typos.
+
+2022-06-18 Richard Hansen
+
+ Fix invalid defcustom :group when :predicate is used
+
+ * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
+ invalid `:group' argument for the `-modes' defcustom that is created
+ when `:predicate' is used (bug#56049).
+
+2022-06-17 Lars Ingebrigtsen
+
+ Prune the Gnus FAQ of some outdated data
+
+ * doc/misc/gnus-faq.texi (FAQ 9-2): Remove some outdated advice
+ (bug#56042).
+
+2022-06-17 Lars Ingebrigtsen
+
+ Fix efaq-w32.texi build warning
+
+ * doc/misc/efaq-w32.texi (Other useful ports): Fix ordering to
+ match nodes (or should the nodes be moved instead?).
+
+ Do not merge to master.
+
+2022-06-17 Lars Ingebrigtsen
+
+ Update cl-struct-sequence-type doc string
+
+ * lisp/emacs-lisp/cl-macs.el (cl-struct-sequence-type): Fix doc
+ string to reflect what it does (bug#46523).
+
+2022-06-17 Lars Ingebrigtsen
+
+ Fix a tagging problem in tramp.texi
+
+ * doc/misc/tramp.texi (Frequently Asked Questions): Restore an
+ @end lisp removed by accident.
+
+2022-06-17 Lars Ingebrigtsen
+
+ Mention face quirks after the final line in the lispref manual
+
+ * doc/lispref/display.texi (Face Attributes): Mention the quirks
+ about point after the final line (bug#56011).
+
+2022-06-17 Stefan Kangas
+
+ Delete reference to obsolete library complete.el
+
+ * doc/misc/tramp.texi (Frequently Asked Questions): Delete reference
+ to obsolete library complete.el.
+
+2022-06-16 Stefan Kangas
+
+ * lisp/textmodes/artist.el: Minor doc fixes.
+
+2022-06-16 Michael Albinus
+
+ * lisp/net/tramp.el (tramp-methods): Fix quoting in docstring.
+
+2022-06-16 Arash Esbati
+
+ Update MS Windows FAQ for MinGW64-w64/MSYS2
+
+ * doc/misc/efaq-w32.texi (Compiling, Debugging): Mention
+ MinGW64-w64/MSYS2 as the preferred way for building Emacs on
+ capable systems.
+ (Attachments with Gnus): Catch up with emacs-mime.texi in the
+ example given.
+ (Spell check): Add the availability of GNU Aspell and Hunspell
+ in MSYS2 distribution.
+ (Other useful ports): Add an entry for MinGW64-w64/MSYS2.
+ Fix link for MinGW homepage.
+ Remove entry for defunct UWIN project. (Bug#55930)
+
+2022-06-15 Robert Pluim
+
+ Describe 'set-file-modes' argument prompting
+
+ * src/fileio.c (Fset_file_modes): Document that FILENAME is prompted
+ for. (Bug#55984)
+
+2022-06-14 Lars Ingebrigtsen
+
+ Revert "Clarify what a Calc registeri in in calc-insert-register"
+
+ This reverts commit 73400e4002ce8fca060093548e6791b3a784eeaa.
+
+ This has been fixed in Emacs 29 by making it possible to use regular registers in calc.
+
+2022-06-13 Lars Ingebrigtsen
+
+ Clarify what a Calc registeri in in calc-insert-register
+
+ * lisp/calc/calc-yank.el (calc-insert-register): Note that these
+ aren't normal registers (bug#55943).
+
+2022-06-11 Eli Zaretskii
+
+ Fix doc strings in whitespace.el
+
+ * lisp/whitespace.el (whitespace-style, whitespace-action):
+ Untabify the doc strings. (Bug#55904)
+
+2022-06-10 Eli Zaretskii
+
+ Improve documentation of "etags -I"
+
+ * doc/man/etags.1:
+ * doc/emacs/maintaining.texi (Create Tags Table): Elaborate on the
+ importance of the '-I' option to 'etags'. (Bug#45246)
+
+2022-06-09 Lars Ingebrigtsen
+
+ Mention the #f syntax from cl-prin1
+
+ * doc/lispref/objects.texi (Special Read Syntax): Mention #f,
+ which is in cl-prin1 output (bug#55853).
+
+2022-06-09 Michael Albinus
+
+ Fix file name quoting in tramp-smb.el (do not merge)
+
+ * lisp/net/tramp-smb.el (tramp-smb-handle-write-region): Quote tmpfile.
+ (tramp-smb-get-localname): Remove superfluous test. (Bug#55855)
+
+ * test/lisp/net/tramp-tests.el (tramp-test03-file-name-method-rules):
+ Remove superfluous checks.
+
+2022-06-09 Jeff Walsh
+
+ Update error message to reflect variable rename
+
+ * src/comp.c (Fcomp_el_to_eln_filename): Update error message. (Bug#55861)
+
+2022-06-08 Ken Brown
+
+ Fix error reporting in process-async-https-with-delay
+
+ * test/src/process-tests.el (process-async-https-with-delay): Use
+ 'plist-get' instead of 'assq' in testing for a connection error.
+ The 'status' variable is a plist, not an alist. (Bug#55849)
+
+2022-06-08 Stefan Kangas
+
+ * doc/misc/org.org: Remove spurious markup.
+
+2022-06-08 Michael Albinus
+
+ Make Tramp version check more robust
+
+ * lisp/net/trampver.el (tramp-repository-branch)
+ (tramp-repository-version): Check for "git" executable.
+
+2022-06-07 Eli Zaretskii
+
+ Fix debugging with GDB when a breakpoint has multiple locations
+
+ * lisp/progmodes/gdb-mi.el (gdb-breakpoints--add-breakpoint-row):
+ New function, extracted from 'gdb-breakpoints-list-handler-custom'.
+ Don't print "in " for header-rows of breakpoints with
+ multiple locations that don't have a function name attached.
+ (gdb-breakpoints-list-handler-custom): Add to the breakpoint table
+ also any locations in multiple-location breakpoints, which are
+ supported since GDB 6.8.
+
+2022-06-05 Eli Zaretskii
+
+ Update documentation of 'aset' and 'store-substring'
+
+ * doc/lispref/strings.texi (Modifying Strings): Adjust to
+ implementation changes: it is possible for the modified string to
+ have fewer or more bytes than the original. Add recommendations
+ regarding unibyte vs multibyte strings and characters. (Bug#55801)
+
+2022-06-04 Kyle Meyer
+
+ Update to Org 9.5.4
+
+2022-06-04 Eli Zaretskii
+
+ Clarify documentation of 'string-to-unibyte'
+
+ * doc/lispref/nonascii.texi (Converting Representations): Clarify
+ what 'string-to-unibyte' does. Reported by Richard Hansen
+ . (Bug#55777)
+
+2022-06-02 Ikumi Keita (tiny change)
+
+ Improve keystrokes in doc strings in some find-file functions
+
+ * lisp/files.el (find-file):
+ (find-file-other-window):
+ (find-file-other-frame): Include the correct keymap so that
+ keystrokes are displayed better (bug#55761).
+
+2022-06-02 Eli Zaretskii
+
+ Fix segfaults when starting on 80x26 TTY frames
+
+ * src/dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Make
+ sure we have valid frame glyph matrices for the interactive
+ session. (Bug#55760)
+ (adjust_frame_glyphs): Add assertions for when we fail to allocate
+ valid frame glyph matrices for a TTY frame.
+
+2022-06-01 Lars Ingebrigtsen
+
+ Make it explicit that a couple of _s in lispref are underscores
+
+ * doc/lispref/strings.texi (Custom Format Strings):
+ * doc/lispref/control.texi (pcase Macro): Make it explicit that
+ it's an underscore (bug#55742).
+
+2022-05-31 Eli Zaretskii
+
+ Remove from FAQ the MS-Windows info about BDF fonts
+
+ * doc/misc/efaq.texi (How to add fonts): Remove the MS-Windows
+ specific steps, as BDF fonts are no longer supported on
+ MS-Windows. (Bug#55740)
+
+2022-05-31 Ikumi Keita (tiny change)
+
+ Fix Display Property manual example
+
+ * doc/lispref/display.texi (Display Property): Fix syntax of
+ example (bug#55736).
+
+2022-05-29 Michael Albinus
+
+ Some Tramp cleanup on MS Windows
+
+ * lisp/net/tramp.el (tramp-restricted-shell-hosts-alist): Do not add
+ localhost when `tramp-encoding-shell' is a POSIX shell.
+
+ * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+ Skip on MS Windows.
+
+2022-05-28 Alan Mackenzie
+
+ do_switch_frame: before leaving mini-window, check other (mru) window is live
+
+ This fixes bug#55684. There, with a minibuffer-only frame at start up,
+ Emacs tried to switch to this frame, whose selected window was the
+ mini-window. There is no other active window in this frame, so the
+ attempt to swith to another window failed.
+
+ * src/frame.c (do_switch_frame): On switching to a frame whose selected
+ window is as above, before selecting the most recently used window, check
+ this ostensible window is an actual live window. Otherwise leave the
+ mini-window selected.
+
+2022-05-28 Eli Zaretskii
+
+ Fix commands used to produce on-line HTML docs
+
+ * admin/admin.el (manual-meta-string): Only include the first
+ line, and move the rest...
+ (manual-links-string): ...to this new string.
+ (manual-html-fix-headers): Don't remove the ',
+ see gnu.org ticket #1840138.
+
+2022-05-28 Eli Zaretskii
+
+ Fix a bad cross-reference in elisp.pdf
+
+ * doc/lispref/control.texi (pcase Macro): Fix a conditional
+ cross-reference (bug#55689).
+
+2022-05-28 Eli Zaretskii
+
+ Fix documentation of 'string-pad'
+
+ * doc/lispref/strings.texi (Creating Strings): Fix description of
+ 'string-pad'. (Bug#55688)
+
+2022-05-27 Juri Linkov
+
+ Fix more occurrences of renamed kmacro-keymap command
+
+ * doc/emacs/kmacro.texi (Basic Keyboard Macro): Fix documentation
+ after recent kmacro-redisplay command name change.
+
+2022-05-27 Eli Zaretskii
+
+ Mention "unspecified-fg" and "unspecified-bg" in some doc strings
+
+ * lisp/faces.el (face-foreground, face-background)
+ (foreground-color-at-point, background-color-at-point):
+ * lisp/color.el (color-name-to-rgb): Mention "unspecified-fg" and
+ "unspecified-bg" pseudo-colors on TTY frames. (Bug#55623)
+
+2022-05-26 Hayden Shenk (tiny change)
+
+ Fix format specifiers in tramp-adb.el
+
+ * lisp/net/tramp-adb.el (tramp-adb-get-device): Fix format
+ specifiers for port. (Bug#55651)
+
+2022-05-22 Damien Cassou
+
+ Improve documentation of mail-user-agent.
+
+ * doc/emacs/sending.texi (Mail Methods):
+ * lisp/simple.el (mail-user-agent): Mention additional options
+ of non-bundled MUA. (Bug#5569)
+
+2022-05-21 Eli Zaretskii
+
+ More fixes in abbrev.el doc strings
+
+ * lisp/abbrev.el (inverse-add-global-abbrev, inverse-add-mode-abbrev):
+ Document the effect of negative ARG. (Bug#55527)
+
+2022-05-21 Lars Ingebrigtsen
+
+ Add note about Tramp completion to completion-styles doc string
+
+ * lisp/minibuffer.el (completion-styles): Add note about Tramp
+ completion (bug#37954).
+
+2022-05-21 Arash Esbati
+
+ Remove mention of removed nnimap-nov-is-evil variable
+
+ * doc/misc/gnus.texi (Slow/Expensive Connection): Remove mention
+ of removed nnimap-nov-is-evil variable (bug#55556).
+
+2022-05-21 Eli Zaretskii
+
+ Improve documentation strings and prompts in abbrev.el
+
+ * lisp/abbrev.el (abbrev-file-name, only-global-abbrevs)
+ (copy-abbrev-table, insert-abbrevs, list-abbrevs)
+ (abbrev-table-name, edit-abbrevs, define-abbrevs)
+ (read-abbrev-file, quietly-read-abbrev-file, write-abbrev-file)
+ (abbrev-edit-save-to-file, abbrev-edit-save-buffer)
+ (add-mode-abbrev, add-global-abbrev, inverse-add-mode-abbrev)
+ (inverse-add-global-abbrev, abbrev-prefix-mark)
+ (expand-region-abbrevs, abbrev-table-get, abbrev-table-put)
+ (abbrev-get, abbrev-minor-mode-table-alist, abbrevs-changed)
+ (abbrev-all-caps, last-abbrev-text, last-abbrev-location)
+ (clear-abbrev-table, define-abbrev, define-global-abbrev)
+ (define-mode-abbrev, abbrev--active-tables, abbrev--symbol)
+ (abbrev-symbol, abbrev-expansion, abbrev-insert)
+ (abbrev-expand-function, abbrev--suggest-above-threshold)
+ (abbrev--suggest-saved-recommendations)
+ (abbrev--suggest-shortest-abbrev, abbrev--suggest-get-totals)
+ (insert-abbrev-table-description, define-abbrev-table)
+ (abbrev-table-menu): Fix doc strings: wording, punctuation,
+ clarity.
+ (add-abbrev, inverse-add-abbrev): Improve the prompt text.
+ (Bug#55527)
+
+2022-05-20 Alan Mackenzie
+
+ Restore the Fselect_window call in gui_consider_frame_title.
+
+ This fixes bug #55412. The call to Fselect_window was removed on 2021-03-21
+ in the commit "Prevent open minibuffers getting lost when their frame gets
+ deleted". This call is actually needed to determine current elements of the
+ pertinent window and frame when these are used in the frame title.
+
+ * src/frame.c (do_switch_frame): When the selected window in the target frame
+ is the mini-window, switch away from this window unless there is a valid
+ minibuffer there.
+
+ * src/frame.h (struct frame): Add an incidental comment about the element
+ selected_window.
+
+ * src/minibuf.c (move_minibuffers_onto_frame): No longer set the selected
+ window of the source frame. This action is now performed later, on returning
+ to that frame, in do_switch_frame when needed (see above).
+
+ * src/xdisp.c (gui_consider_frame_title): Replace the Fselect_window call and
+ associated ancillary settings.
+
+2022-05-20 Eli Zaretskii
+
+ Advise against settings in the MS-Windows system registry
+
+ * doc/emacs/cmdargs.texi (MS-Windows Registry): Advise against
+ setting environment variables in the system registry. (Bug#16429)
+
+2022-05-17 Lars Ingebrigtsen
+
+ Fix kmacro-keymap binding after previous change
+
+ * lisp/kmacro.el (kmacro-keymap): Fix binding after
+ kmacro-redisplay command name change.
+
+2022-05-17 Lars Ingebrigtsen
+
+ Add glossary entries for "interactively"
+
+ * doc/emacs/glossary.texi (Glossary): Mention "interactively" and
+ how it relates to the "command" concept (bug#55461).
+
+2022-05-17 Eli Zaretskii
+
+ Fix the name of a kmacro command.
+
+ * lisp/kmacro.el (kmacro-redisplay): Rename from
+ 'kdb-macro-redisplay' (which was wrong and included a typo).
+
+ * etc/NEWS: Announce the change. (Bug#55471)
+
+2022-05-17 Michael Albinus
+
+ Fix Tramp sshfs tests (don't merge)
+
+ * test/lisp/net/tramp-tests.el (tramp-fuse-remove-hidden-files): Declare.
+ (tramp-test16-directory-files)
+ (tramp-test16-file-expand-wildcards)
+ (tramp-test26-file-name-completion, tramp--test-check-files): Use it.
+ (tramp--test-check-files): Delete directory recursively.
+
+2022-05-17 Michael Albinus
+
+ Some minor Tramp fixes
+
+ * lisp/net/tramp-cmds.el (tramp-list-tramp-buffers)
+ (tramp-list-remote-buffers): Add ;;;###tramp-autoload cookie.
+
+ * lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defvar.
+ (tramp-fuse-remove-hidden-files): Use it.
+
+ * lisp/net/tramp-gvfs.el (tramp-gvfs-handler-askquestion):
+ Keep regression tests running.
+
+2022-05-15 Kyle Meyer
+
+ Update to Org 9.5.3-6-gef41f3
+
+2022-05-15 Michael Albinus
+
+ Hide temporary FUSE files in Tramp
+
+ * lisp/net/tramp-fuse.el (tramp-fuse-remove-hidden-files): New defsubst.
+ (tramp-fuse-handle-directory-files)
+ (tramp-fuse-handle-file-name-all-completions): Use it.
+
+2022-05-15 Michael Albinus
+
+ * test/lisp/net/tramp-tests.el (tramp-test27-load): Adapt test. Don't merge
+
+2022-05-13 Po Lu
+
+ Fix tooltip face overwriting dragged text strings during mouse DND
+
+ * lisp/mouse.el (mouse-drag-and-drop-region): Copy
+ `text-tooltip' before showing it. Do not merge to master.
+
+2022-05-13 Eli Zaretskii
+
+ Fix lexical-binding fallout in vhdl-mode.el
+
+ * lisp/progmodes/vhdl-mode.el (arch-alist, pack-alist)
+ (file-alist, unit-alist, rule-alist): Defvar them, since vhdl-aput
+ expects them to be dynamically bound. (Bug#55389)
+ (vhdl-speedbar-insert-hierarchy): Rename the PACK-ALIST argument
+ to PACKAGE-ALIST, to avoid shadowing the global variable.
+
+2022-05-12 Michael Albinus
+
+ Fix ControlPath quoting in Tramp
+
+ * lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
+ Adapt docstring. Do not quote ControlPath. Reported by Daniel
+ Kessler .
+
+2022-05-09 Eli Zaretskii