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 "
      ")) - (replace-match "") - (forward-line 1) - (while (not done) - (cond - ((or (looking-at "
    • \\(\\):[ \t]+\\(.*\\)$") - (looking-at "
    • \\(\\)$")) - (setq tag (match-string 1)) - (setq desc (match-string 2)) - (replace-match "" t t) - (when open-td - (save-excursion - (forward-char -1) - (skip-chars-backward " ") - (delete-region (point) (line-end-position)) - (insert "\n "))) - (insert "
    • \n ") - (if table-workaround - ;; This works around a Firefox bug in the mono file. - (insert "\n
      ") - (insert "")) - (insert tag "" (or desc "")) - (setq open-td t)) - ((eq (char-after) ?\n) - (delete-char 1) - ;; Negate the following `forward-line'. - (forward-line -1)) - ((looking-at "")) - ((looking-at "

      [- ]*The Detailed Node Listing[- \n]*") - (replace-match "

      \n + ;; Texinfo 6.8 and later doesn't produce