master c1ad9d27207 1/4: Merge from origin/emacs-31

Sean Whitton <[email protected]>
Newsgroups gmane.emacs.diffs
Message-ID <[email protected]>
branch: master
commit c1ad9d27207aff96a22d49ae4c6cab35a2619927
Merge: 5126c15e29b 4458f68df1f
Author: Sean Whitton <[email protected]>
Commit: Sean Whitton <[email protected]>

    Merge from origin/emacs-31
    
    4458f68df1f ; Update exported ChangeLog files and etc/AUTHORS
    0968d7e5e26 ; Update acknowledgements for Emacs 31.
    d30a86ba2c0 ; Fill in missing :version and :package-version metadata.
    6dedbb722dc ; * admin/release-process: Combine two 'make' commands.
    e1f465d9935 * doc/misc/efaq.texi (New in Emacs 31): New node.
    eca43790ac1 ; * etc/NEWS: Remove temporary +++/--- lines.
    8b38548dd5d ; Document native-compile-directory.
    8e33b6a059b ; Document C-x <UP> in shell-mode.
    61c7285a959 ; Document project-remember-project.
    ced4d70ee01 Add "VTE" to list of auto-enabled xterm-mouse-mode terminals
    91a630245f4 ; * lisp/speedbar.el (speedbar-window--close): Doc fix.
    07922525948 Handle 'speedbar-buffer' kill when in 'speedbar-window-mo...
    951ee70ee3e ; * lisp/simple.el (char-uppercase-p): Fix a typo.
    
    # Conflicts:
    #       etc/NEWS
---
 ChangeLog.5                   | 672 +++++++++++++++++++++++++++++++++++++++-
 admin/release-process         |   5 +-
 doc/emacs/ack.texi            |  27 +-
 doc/emacs/emacs.texi          | 148 ++++-----
 doc/emacs/maintaining.texi    |   9 +-
 doc/emacs/misc.texi           |  12 +
 doc/lispref/compile.texi      |   9 +
 doc/misc/efaq.texi            |  87 ++++++
 etc/AUTHORS                   |  55 ++--
 etc/NEWS.31                   | 699 +-----------------------------------------
 lisp/calendar/icalendar.el    |   9 +-
 lisp/eshell/esh-mode.el       |   3 +-
 lisp/mail/rmailsum.el         |   3 +-
 lisp/org/ob-ditaa.el          |   1 +
 lisp/org/org-src.el           |   1 +
 lisp/play/zone.el             |   9 +-
 lisp/progmodes/antlr-mode.el  |  15 +-
 lisp/progmodes/compile.el     |   3 +-
 lisp/progmodes/csharp-mode.el |   3 +-
 lisp/progmodes/eglot.el       |  12 +-
 lisp/progmodes/flymake.el     |   3 +-
 lisp/simple.el                |   2 +-
 lisp/speedbar.el              |  37 ++-
 lisp/term/xterm.el            |   1 +
 lisp/tmm.el                   |   3 +-
 lisp/transient.el             |   5 +
 26 files changed, 995 insertions(+), 838 deletions(-)

diff --git a/ChangeLog.5 b/ChangeLog.5
index 40b653b1eb4..6de0fb1d8bf 100644
--- a/ChangeLog.5
+++ b/ChangeLog.5
@@ -1,3 +1,673 @@
+2026-08-17  Sean Whitton  <[email protected]>
+
+	* doc/misc/efaq.texi (New in Emacs 31): New node.
+
+2026-08-16  Philip Kaludercic  <[email protected]>
+
+	Add "VTE" to list of auto-enabled xterm-mouse-mode terminals
+
+	* lisp/term/xterm.el (xterm--auto-xt-mouse-allowed-names): Add
+	entry to match VTE, GNOME's terminal emulation library.
+	(Bug#74833)
+
+2026-08-16  Vincenzo Pupillo  <[email protected]>
+
+	Handle 'speedbar-buffer' kill when in 'speedbar-window-mode'.
+
+	This handles the DFRAME TIMER ERROR reported by Daniel Mendler
+	(bug#81561).  In addition, it eliminates other causes of stale
+	idle timers.
+	* lisp/speedbar.el (speedbar-window-mode): Add a 'kill-buffer'
+	handler.  Removed an unnecessary 'speedbar-mode' invocation.
+	(speedbar-window--close): New optional parameter used by the
+	'kill-buffer' handler for 'speedbar-buffer'.
+	(speedbar-set-timer): Make sure that 'speedbar-set-timer' is
+	called in 'speedbar-buffer', this prevents the creation of stale
+	idle timers.
+	(speedbar--speedbar-live-p): Make sure that 'speedbar-buffer' is
+	still live.
+
+2026-08-15  Eli Zaretskii  <[email protected]>
+
+	Fix an infloop during cursor movement
+
+	* src/xdisp.c (move_it_vertically_backward): Prevent infloop due
+	to overlays with embedded newlines at BOB.  (Bug#81567)
+
+2026-08-14  Protesilaos  <[email protected]>
+
+	vc-dir: Set major mode before popping to the buffer
+
+	* lisp/vc/vc-dir.el (vc-dir): Set major mode before popping to
+	the buffer (bug#81613).
+
+2026-08-14  Sean Whitton  <[email protected]>
+
+	hs-hide-block-behavior: Fix some terminology
+
+	* lisp/progmodes/hideshow.el (hs-hide-block-behavior): Use
+	'after-point' instead of 'after-cursor'.
+	* doc/emacs/programs.texi (Hideshow):
+	* etc/NEWS: Update documentation.
+
+2026-08-14  Alan Third  <[email protected]>
+
+	Backport: Fix freeze in NS event handling (bug#81510)
+
+	* src/nsterm.m (EV_TRAILER): Don't queue event if it's of kind
+	'NO_EVENT'.
+
+2026-08-14  Stéphane Marks  <[email protected]>
+
+	Fix Fns_block_system_sleep to respect activity_id lifetime (bug#81577)
+
+	* src/nsfns.m (Fns_block_system_sleep): Move unblock_input after
+	setting activity_id.
+
+2026-08-12  F. Jason Park  <[email protected]>
+
+	Remove assertion in erc-speedbar--dframe-controlled
+
+	* lisp/erc/erc-speedbar.el (erc-speedbar--ensure): Remove assertion for
+	robustness even though it should still pass.
+	(erc-speedbar--get-timers): Remove unused function.
+	(erc-speedbar--dframe-controlled): Fix failing assertion related to
+	changes from bug#81561, namely the negating of the condition in
+	`dframe-set-timer' that checks whether `dframe-client-functions' is
+	nonempty.
+	* test/lisp/erc/erc-scenarios-status-sidebar.el
+	(erc-scenarios-status-sidebar--nickbar): Inline body of deleted function
+	`erc-speedbar--get-timers'.
+
+2026-08-12  João Távora  <[email protected]>
+
+	Eglot: bump version to 1.24.31 and update EGLOT-NEWS
+
+	This is a change specific to emacs-31.  Don't merge to master.
+
+	* lisp/progmodes/eglot.el: (Version): Mark it 1.24.31
+
+	* etc/EGLOT-NEWS (1.24.31): Fill in section.
+
+2026-08-12  João Távora  <[email protected]>
+
+	Flymake: really restore advertised compatibility to Emacs 26
+
+	Emacs 26 doesn't have with-supressed-warnings
+
+	bug#79930
+
+	* lisp/progmodes/flymake.el (flymake-goto-next-error): Use with-no-warnings.
+	(Version): Bump to 1.4.6
+
+2026-08-12  João Távora  <[email protected]>
+
+	Eglot: support commas in globs (bug#81425)
+
+	* lisp/progmodes/eglot.el (eglot--glob-parse): Tweak.
+
+	* test/lisp/progmodes/eglot-tests.el (eglot-test-glob-test): Add
+	some comma-cases.
+
+2026-08-11  Aaron L. Zeng  <[email protected]>
+
+	Eglot: respect e-stay-out-of when turning off (bug#81593)
+
+	* lisp/progmodes/eglot.el (eglot--managed-mode): Respect
+	`eglot-stay-out-of' during teardown/reconnect.
+
+2026-08-11  Juri Linkov  <[email protected]>
+
+	Fix Custom keybindings in the documentation
+
+	* etc/NEWS:
+	* doc/emacs/custom.texi (Changing a Variable):
+	Use more user-friendly representation of the
+	key sequence 'C-c TAB' as it's displayed in
+	the Help buffer for 'Custom-goto-first-choice'.
+	Fix typos in keybindings.
+
+2026-08-09  João Távora  <[email protected]>
+
+	Eglot: prevent showDocument disruption of sync requests (bug#81538)
+
+	This couldn't be reproduced here, but seems nevertheless possible.  The
+	previous (run-at-time 0...) technique for the window/showDocument
+	handling never really avoided the fact that that timer could kick during
+	the accept-process-output of jsonrpc-request, thus happening before the
+	response to the original request.  Since the handling evolves a lot of
+	output to send to the process, it could be interrupted by the 'throw'
+	that's meant to exit abort 'accept-process-output' (and only that).
+
+	This commit should ensure the sequence is always this one.
+
+	a1. -> adals/ff-thingy sync client request
+	b1.   <- window/showDocument server request
+	b2.   -> window/showDocument client response (after scheduling 'c')
+	a2. <- ada/ff-thingy server response
+	c.  -> f-f-no-select, Eglot sends the large didOpen notification
+
+	* lisp/progmodes/eglot.el (eglot-handle-request): Maybe use
+	"post command" once trick.
+
+2026-08-09  Juri Linkov  <[email protected]>
+
+	* lisp/progmodes/sh-script.el (bash-ts-mode): Fix 'sexp-default' thing.
+
+	Handle 'sexp-default' thing in 'treesit-thing-settings'
+	for "${a}" in addition to "$(a)".
+
+2026-08-09  Martin Rudalics  <[email protected]>
+
+	Fix setting windows' old_buffer in 'set-window-configuration' (Bug#81589)
+
+	* src/window.c (struct save_window_data): New slot change_stamp.
+	(Fset_window_configuration): Restore the old_buffer of a window
+	from the saved old_buffer only if the change stamps of the frame
+	and save_window_data are the same (Bug#81589).
+	(Fcurrent_window_configuration): Store FRAME's current change
+	stamp in save_window_data.
+
+2026-08-09  Daniel Mendler  <[email protected]>
+
+	Fix defcustom type of 'dframe-update-speed'
+
+	* lisp/dframe.el (dframe-update-speed): Generalize type from integer to
+	number and update docstring.  (Bug#81560)
+
+2026-08-09  Vincenzo Pupillo  <[email protected]>
+
+	Speedbar: no more stale idle timers (bug#81561)
+
+	* lisp/dframe.el (dframe-set-timer): Fixed the condition for removing
+	the timer (the code does not match what is written in the comment).
+	* lisp/speedbar.el (speedbar-window--close): 'speedbar-set-timer' must
+	be called from the 'speedbar-buffer'.
+
+2026-08-09  Philip Kaludercic  <[email protected]>
+
+	Load all dependencies when isolating a package
+
+	* lisp/emacs-lisp/package.el (package-isolate): Replace call to
+	'package-compute-transaction', which omits already inferred
+	dependencies, with a manual dependency resolution.
+
+2026-08-09  Martin Rudalics  <[email protected]>
+
+	Have 'frame-deletable-p' check other frame's terminal (Bug#81575)
+
+	* lisp/frame.el (frame-deletable-p): Return nil when there's no
+	other visible or iconified frame on FRAME's terminal (Bug#81575).
+
+2026-08-08  DaKnig  <[email protected]>  (tiny change)
+
+	Eglot: Add vala mode support
+
+	* lisp/progmodes/eglot.el (lisp/progmodes/eglot.el): Add 'vala-mode'.
+	(Bug#81543)
+
+2026-08-08  Philip Kaludercic  <[email protected]>
+
+	Warn about INFOPATH shadowing package manuals
+
+	* doc/emacs/package.texi (Packages): Add footnote.  (Bug#81105)
+
+2026-08-07  Martin Rudalics  <[email protected]>
+
+	Handle transposing and rotating of dedicated windows (Bug#81406)
+
+	* lisp/window-x.el (transpose-dedicated-windows): New option.
+	(window-layout-rotate-clockwise)
+	(window-layout-rotate-anticlockwise)
+	(window-layout-flip-leftright, window-layout-flip-topdown)
+	(window-layout-transpose, rotate-windows-back): Say that these
+	functions may signal an error when they encounter dedicated,
+	fixed-size or atomic windows.
+	(rotate-windows): Handle dedicated windows like the other
+	transpose functions.
+	(window--transpose): Handle 'transpose-dedicated-windows'.
+	* doc/lispref/windows.texi (Changing Window Layouts): Describe new
+	option 'transpose-dedicated-windows'.
+	* etc/NEWS: Announce new option 'transpose-dedicated-windows'.
+
+2026-08-06  Philip Kaludercic  <[email protected]>
+
+	Remove overlays from package menu when performing transaction
+
+	* lisp/emacs-lisp/package.el (package-menu--perform-transaction):
+	Remove all overlays at the beginning of the function.  (Bug#81213)
+
+2026-08-05  Philip Kaludercic  <[email protected]>
+
+	Avoid installing packages when using 'package-isolate'
+
+	* lisp/emacs-lisp/package.el (package-isolate): When translating
+	full package names into package descriptors, prefer the package
+	descriptors of already installed packages to those of remote
+	packages.
+
+2026-08-05  Eshel Yaron  <[email protected]>
+
+	Mitigate arbitrary code execution vulnerability
+
+	This mitigates a vulnerability that allowed a specially
+	crafted file to trigger execution of attacker-controlled
+	arbitrary Emacs Lisp code immediately when the file is
+	visited in Emacs (before the file's malicious contents are
+	even displayed).  See demonstration in bug#80574.
+
+	* lisp/progmodes/cc-fonts.el (c-compose-keywords-list):
+	* lisp/vc/vc-hooks.el (vc-find-backend-function):
+	Nullify 'read-symbol-shorthands' around risky 'intern' calls.
+	Do not merge to master.
+
+2026-08-05  Stéphane Marks  <[email protected]>
+
+	Fix progress-reporter-echo-area update-text
+
+	* lisp/subr.el (progress-reporter-echo-area): Format UPDATE-TEXT
+	as a string (bug#81514).
+
+2026-08-05  Sean Whitton  <[email protected]>
+
+	VC-Git: Pass --no-optional-locks
+
+	* lisp/vc/vc-git.el (vc-git--no-optional-locks): New function.
+	(vc-git-command, vc-git--call): Use it.
+
+2026-08-05  Sean Whitton  <[email protected]>
+
+	Fix text-property-search-backward skipping one character regions
+
+	* lisp/emacs-lisp/text-property-search.el
+	(text-property-search-backward)
+	(text-property--find-end-backward): Fix skipping one character
+	non-matching regions (bug#81539).
+	* test/lisp/emacs-lisp/text-property-search-tests.el
+	(text-property-setup): Make one of the propertized regions one
+	character long to test bug#81539.
+	(text-property-search-forward-bold-nil)
+	(text-property-search-forward-nil-nil)
+	(text-property-search-backward-bold-nil)
+	(text-property-search-backward-nil-nil)
+	(text-property-search-backward-prop-match-match-face-nil-nil)
+	(text-property-search-backward-prop-match-match-face-italic-t)
+	(text-property-search-backward-prop-match-match-face-italic-nil):
+	Update tests.
+
+2026-08-05  Binbin Ye  <[email protected]>
+
+	Fix JSX tag angle-bracket pairing in tsx-ts-mode
+
+	* lisp/progmodes/typescript-ts-mode.el (tsx-ts--s-p-query):
+	Capture 'jsx_self_closing_element' as well.
+	(tsx-ts--syntax-propertize-captures): For JSX tag elements, give
+	only the leading '<' and trailing '>' matching-pair syntax and
+	leave the interior untouched; for 'jsx_text', neutralize
+	balanced pair characters to punctuation (bug#81460).
+	* test/lisp/progmodes/typescript-ts-mode-tests.el
+	(tsx-ts-mode-test-jsx-tag-syntax-propertize): New test.
+
+2026-08-04  Michael Albinus  <[email protected]>
+
+	* admin/notes/jargon: Add FUD.
+
+2026-08-04  Spencer Baugh  <[email protected]>
+
+	pcm-try-completion: collapse ** into *
+
+	* lisp/minibuffer.el (completion-pcm--merge-completions): Only
+	include one star in the return value (bug#81394).
+	* test/lisp/minibuffer-tests.el (completion-pcm-test-7): Update
+	for new behavior.
+
+2026-08-04  Richard Lawrence  <[email protected]>
+
+	Distinguish UTC vs. UTC+0:00 times in iCalendar library
+
+	This fixes a bug discussed on emacs-devel; see the thread at
+	https://https://lists.gnu.org/archive/html/emacs-devel/2026-07/msg00445.html
+
+	The issue was that the library did not distinguish between UTC time and
+	times that have an offset of 0 but are not in the UTC time zone,
+	e.g. standard times in Europe/London or Europe/Dublin.  This led to test
+	failures on systems in these time zones.  This fix represents true UTC
+	times by inserting the special value `t' in the zone slot of a decoded
+	time at parse time (which `encode-time' already handles correctly).
+	This distinguishes them from decoded times with an offset of 0 seconds.
+
+	* lisp/calendar/icalendar-ast.el (icalendar-make-component):
+	Ensure auto-generated DTSTAMP uses the new representation.
+	(icalendar-make-node-from-templates): Fix docstring.
+	* lisp/calendar/icalendar-parser.el (icalendar-read-time)
+	(icalendar-read-date-time): Read iCalendar UTC times to the new
+	representation.
+	(icalendar-print-time): Print the new representation.
+	(icalendar--decoded-time-p, icalendar--decoded-date-time-p)
+	(icalendar-date-time-is-utc-p): Check for the new
+	representation.
+	(icalendar-date-time): Docstring improvement.
+	(icalendar-requires-utc-validator): New validator function to
+	check that property values are in UTC.
+	(icalendar-completed, icalendar-created, icalendar-dtstamp): Use
+	it.
+	* lisp/calendar/icalendar-recur.el
+	(icalendar-recur-tz-decode-time): Decode to new representation;
+	explicitly support this.
+	* lisp/calendar/icalendar-utils.el (icalendar-date-time<)
+	(icalendar-date-time-simultaneous-p):
+	* lisp/calendar/diary-icalendar.el
+	(diary-icalendar-format-time-as-local): Work with the new
+	representation.
+	(diary-icalendar-convert-time-via-strategy)
+	(diary-icalendar-parse-entry): Ensure times decode to new
+	representation.
+	* test/lisp/calendar/icalendar-parser-tests.el
+	(icalendar-parser-test-bad-hyphenated-dates):
+	* test/lisp/calendar/icalendar-recur-tests.el
+	(icalendar-test-recur-find-secondly-interval)
+	(icalendar-test-recur-tz-observance-on): Update tests to use new
+	representation.
+	* test/lisp/calendar/icalendar-parser-tests.el
+	(icalendar-parse-test-utc+0-is-not-utc): New regression test.
+	* test/lisp/calendar/diary-icalendar-tests.el: Update 'to-utc test.
+	* test/lisp/calendar/diary-icalendar-resources/import-bug-24199.diary-all:
+	Update diary representation of UTC times in a recurrence rule.
+
+2026-08-04  Eli Zaretskii  <[email protected]>
+
+	Fix documentation of ':set' function in 'defcustom'
+
+	* etc/NEWS: Document the change in signature of ':set'.
+	* lisp/custom.el (defcustom): Doc fix.  (Bug#81547)
+
+2026-08-03  Aaron L. Zeng  <[email protected]>
+
+	Fix vc-hg-diff arguments to diff vs empty tree
+
+	* lisp/vc/vc-hg.el (vc-hg-diff): Fix behavior according to
+	backend function specification (bug#81527).
+	* test/lisp/vc/vc-hg-tests.el (vc-hg-diff-revision-arguments):
+	New test.
+
+2026-08-02  João Távora  <[email protected]>
+
+	Eglot: fix use of progress reporters again (bug#81514)
+
+	There were still some cases of errors reported with the new stricter
+	progress reporters.
+
+	* lisp/progmodes/eglot.el (eglot--on-shutdown): Cleanup with
+	progress-reporter-done.
+	(eglot-handle-notification): Always pass percentage to
+	progress-reporter-update.
+
+2026-08-01  Eli Zaretskii  <[email protected]>
+
+	Fix display of ambiguous-width CJK characters in GUI sessions
+
+	* lisp/international/characters.el (use-cjk-char-width-table): Fix
+	to work correctly in GUI sessions on Windows.  (Bug#81489)
+
+2026-08-01  João Távora  <[email protected]>
+
+	Eglot: do more orthodox use of progress reporters (bug#81514)
+
+	The progress reporters on recent Emacs has backward incompatible
+	changes, but our use of them wasn't too correct either.
+
+	* lisp/progmodes/eglot.el (eglot-handle-notification): Call
+	progress-reporter-done.
+
+2026-07-31  Philip Kaludercic  <[email protected]>
+
+	Summarize changes when upgrading packages
+
+	* lisp/emacs-lisp/package.el (package-upgrade-all): Print a
+	final message listing the completed and rejected package
+	upgrades, as the messages printed by 'package-install' get lost
+	in the Messages buffer.  (Bug#81112)
+
+2026-07-31  Philip Kaludercic  <[email protected]>
+
+	Prevent 'package-menu--mark-upgrades-1' from blocking
+
+	* lisp/emacs-lisp/package.el (package-menu--mark-upgrades-1):
+	If 'package-retention-policy' applies, still move forward a line
+	so that the loop can consider the next package.  (Bug#81373)
+
+2026-07-31  Sean Whitton  <[email protected]>
+
+	Export GIT_OPTIONAL_LOCKS=0 for "git status" invocations (bug#80903)
+
+	* lisp/vc/vc-git.el (vc-git--env-vars): New function.
+	(vc-git-command, vc-git--call): Use it (bug#80903).
+
+2026-07-31  Charles A. Roelli  <[email protected]>
+
+	* lisp/vc/vc.el (vc-delete-file): Don't backup backup files.
+
+2026-07-31  Donjuanplatinum  <[email protected]>  (tiny change)
+
+	Restore current buffer after clone-indirect-buffer-hook errors
+
+	* src/buffer.c (Fmake_indirect_buffer): Replace
+	set_buffer_internal_1 with specpdl unwind in the clone path
+	(bug#81504).
+
+2026-07-31  Sean Whitton  <[email protected]>
+
+	Assign some calendar & icalendar files to packages
+
+	* lisp/calendar/diary-icalendar.el:
+	* lisp/calendar/icalendar-ast.el:
+	* lisp/calendar/icalendar-macs.el:
+	* lisp/calendar/icalendar-mode.el:
+	* lisp/calendar/icalendar-parser.el:
+	* lisp/calendar/icalendar-recur.el:
+	* lisp/calendar/icalendar-shortdoc.el:
+	* lisp/calendar/icalendar-utils.el: Assign to 'icalendar'
+	package.
+	* lisp/calendar/diary-lib.el: Assign to 'calendar' package.
+
+2026-07-30  Aaron L. Zeng  <[email protected]>
+
+	Do not asynchronously prompt to save buffers after vc-checkin
+
+	* lisp/vc/vc-dispatcher.el (vc-set-async-update): Bind
+	`non-essential' around background `vc-dir-refresh'.
+
+2026-07-30  Stephen Berman  <[email protected]>
+
+	File name with newline: require 'ls' --dired switch
+
+	File name with newline: require 'ls' --dired switch
+
+	Previously the handling of newlines in file names tested for the
+	-b switch, but on systems such as Solaris 'ls' takes -b but not
+	--dired and the latter is needed to set the correct bounds of file
+	names containing a newline.
+
+	* lisp/dired.el (dired--check-use-ls-dired): New function.
+	(dired-internal-noselect, dired-insert-directory)
+	(dired--set-auto-toggle-b-switch): Use it.
+	(dired--remove-b-switch): Delete.
+
+	* test/lisp/dired-tests.el (dired-test-filename-with-newline-1)
+	(dired-test-filename-with-newline-2): Use the new function to skip
+	tests when 'ls' does not support the --dired switch (bug#81481).
+
+2026-07-30  Eli Zaretskii  <[email protected]>
+
+	Fix starting local processes in the MS-Windows build
+
+	* src/w32proc.c (sys_spawnve): Use default value of
+	'exec-suffixes', as we are starting a local process.
+
+2026-07-30  Eli Zaretskii  <[email protected]>
+
+	Avoid errors in 'dabbrev-expand'
+
+	* lisp/dabbrev.el (dabbrev-expand): Fix use of
+	'dabbrev--last-buffer-found': it could be a killed buffer.
+	(Bug#81452)
+
+	(cherry picked from commit 0e8fbd63e96b9b775d386b19f2a64d89d91cc6e3)
+
+2026-07-30  Michael Albinus  <[email protected]>
+
+	Backport: Use default exec-suffixes when needed (bug#81280, bug#81517)
+
+	* lisp/files.el (executable-find): Use (default-value 'exec-suffixes).
+
+	* src/callproc.c (Qexec_suffixes): Declare.
+	(call_process):
+	* src/process.c (Fmake_process): Use Fdefault_value (Qexec_suffixes).
+
+	* test/lisp/files-x-tests.el (files-x-test--variables6):
+	New defconst.
+	(files-x-test-connection-local-special-variables): New test.
+
+	(cherry picked from commit dcdd76f89e77421bf8be4ae0c2324b3029a23f1a)
+
+2026-07-29  Richard Lawrence  <[email protected]>
+
+	Fix attendee lookup in gnus-icalendar
+
+	* lisp/gnus/gnus-icalendar.el
+	(gnus-icalendar-event--find-attendee): Restore previous behavior
+	for matching attendees to user variables (bug#81408).
+
+2026-07-29  Sean Whitton  <[email protected]>
+
+	vc-working-revision: Don't bind default-directory to a relative name
+
+	* lisp/vc/vc-hooks.el (vc-working-revision): Don't bind
+	default-directory to a relative file name.
+
+2026-07-28  Stephen Berman  <[email protected]>
+
+	Fix Dired problem with nonexistent directory (bug#81509)
+
+	* lisp/dired.el (dired, dired-other-window, dired-other-frame)
+	(dired-other-tab): If the directory that the Dired command tries
+	to visit does not exist, ensure the buffer that was current when
+	the command was invoked remains the current buffer.
+
+2026-07-27  Michael Albinus  <[email protected]>
+
+	Fix emacs-eglot test on emba
+
+	* test/infra/Dockerfile.emba (emacs-eglot): Do not install
+	typescript via npm.
+
+2026-07-27  Sean Whitton  <[email protected]>
+
+	Fix C-x v w a/A on the repository root
+
+	With regard to vc--fileset-by-state, all the cond* clauses after
+	the '(atom next)' clause were essentially dead code.
+
+	With regard to vc-dir-status-files, when operating on the
+	repository root we would pass "./" to vc-dir-status-files, which
+	isn't a sensible value for 'default-directory'.
+
+	* lisp/vc/vc.el (vc-dir-status-files): Call expand-file-name on
+	DIRECTORY before using it.
+	(vc--fileset-by-state): Fix the control flow.
+	* test/lisp/vc/vc-tests/vc-tests.el
+	(vc-test--apply-to-other-working-tree): Pass the repository root
+	as the fileset instead of the five file names in order to test
+	vc--fileset-by-state's control flow.
+
+2026-07-26  Stefan Monnier  <[email protected]>
+
+	(sh-font-lock-paren): Fix bug#81192
+
+	Since commit 4e1fe56e316c turned several new chars into punctuations,
+	they're not skipped by (skip-syntax-backward "w_") any more,
+	so we need to skip them more explicitly instead when trying to
+	skip a case pattern.
+
+	* lisp/progmodes/sh-script.el (sh-font-lock-paren): Skip more
+	punctuation chars.
+	* test/lisp/progmodes/sh-script-resources/sh-indents.erts
+	(sh-indents-case-pattern-bug#81192): New test.
+
+2026-07-24  Michael Albinus  <[email protected]>
+
+	Backport: ; Fix last change, again
+
+	(cherry picked from commit b1a5151dbbe1579c77fbc61f11f39ae3f709cf23)
+
+2026-07-24  Michael Albinus  <[email protected]>
+
+	Backport: ; Fix last change
+
+	* lisp/net/tramp.el (with-tramp-progress-reporter):
+	Deactivate `progress-reporter-echo-area' when calling
+	`progress-reporter-done'.  We call `tramp-message' instead.
+
+	* lisp/net/tramp-fuse.el (tramp-fuse-handle-insert-directory):
+	* lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+	Use progress reporter.
+
+	(cherry picked from commit e4df903f6b5946fde7ecb3619c2b7ef8bc2331ce)
+
+2026-07-24  Stéphane Marks  <[email protected]>
+
+	Backport: Fix 'with-tramp-progress-reporter' (bug#81455)
+
+	Clear stateful progress reporters like 'system-taskbar'.
+
+	* lisp/net/tramp.el (with-tramp-progress-reporter): Call
+	'progress-reporter-done' in 'unwind-protect'.
+
+	(cherry picked from commit 1f9a492aeace12c0e49cf8ac3e0b09fb8a82ddb3)
+
+2026-07-24  Yuan Fu  <[email protected]>
+
+	Fix treesit_cursor_helper_1 for zero-width nodes (bug#81436)
+
+	* lisp/treesit.el (treesit--some): Add edebug declare.
+	* src/treesit.c (treesit_cursor_helper_1): Don't use
+	ts_tree_cursor_goto_first_child_for_byte for zero-width nodes.
+
+2026-07-24  Yuan Fu  <[email protected]>
+
+	Update tree-sitter manual for embed level
+
+	* doc/lispref/parsing.texi (Using Parser): Mention embed level.
+	(Multiple Languages): Explain embed level, and local vs
+	non-local parsers.
+
+2026-07-23  Sean Whitton  <[email protected]>
+
+	vc--count-outgoing: Set process query on exit flag to nil
+
+	* lisp/vc/vc.el (vc--count-outgoing): Set process query on exit
+	flag to nil (bug#81454).  Do not merge to master.
+
+2026-07-23  Sean Whitton  <[email protected]>
+
+	Fix discarding user edits after async commit completes (bug#81453)
+
+	* lisp/vc/vc-dispatcher.el (vc-resynch-buffer): New
+	'unless-modified' value for NOQUERY parameter.
+	(vc-finish-logentry): Pass it in the case of an asynchronous
+	commit (bug#81453).
+
+2026-07-23  Sean Whitton  <[email protected]>
+
+	Bump Emacs version to 31.0.91
+
+	* README:
+	* configure.ac:
+	* exec/configure.ac:
+	* java/AndroidManifest.xml.in (Version-code):
+	* msdos/sed2v2.inp:
+	* nt/README.W32: Bump Emacs version to 31.0.91.
+
 2026-07-22  Sean Whitton  <[email protected]>
 
 	VC-Annotate menu: Fix inserting "Span NN.NN days" entries
@@ -67200,7 +67870,7 @@
 
 This file records repository revisions from
 commit 1cda0967b4d3c815fc610794ad6a8fc2b913a3c5 (exclusive) to
-commit 1bd56ff93273f754e72e9a50cbefae3b218d2260 (inclusive).
+commit 0968d7e5e268a8b698730addb22bc84fe88782d5 (inclusive).
 See ChangeLog.4 for earlier changes.
 
 ;; Local Variables:
diff --git a/admin/release-process b/admin/release-process
index 64b022c8aef..25b07d00e75 100644
--- a/admin/release-process
+++ b/admin/release-process
@@ -105,8 +105,7 @@ with defcustoms that use :package-version have the appropriate
 add-to-list that determines the correspondence between package versions
 and Emacs versions.  Any changes you make in :version etc. should be
 tested by running "M-x customize-changed" after regenerating cus-load.el
-(run "make custom-deps" in the lisp/ directory) and loaddefs.el (run
-"make autoloads-force").
+and loaddefs.el (run "make -C lisp custom-deps autoloads-force").
 
 ** Manuals
 Check for node names using problematic characters:
@@ -118,7 +117,7 @@ Lisp files), and add the relevant authors to the Acknowledgments in
 doc/emacs/ack.texi and emacs.texi.  To find new files, you could run a
 command such as this:
 
-  $ git diff --name-status emacs-NN emacs-XX | grep -E "^A"
+  $ git diff --name-status --diff-filter=A emacs-NN emacs-XX
 
 where emacs-NN is the previous Emacs release branch, and emacs-XX is the
 new one.
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index b17d0d87e3b..95c7ffe4290 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -596,6 +596,11 @@ for the Transport Layer Security protocol.
 Arne J@o{}rgensen wrote @file{latexenc.el}, a package to
 automatically guess the correct coding system in @LaTeX{} files.
 
+@item
+Rahul Martim Juliato and St@'ephane Marks wrote
+@file{markdown-ts-mode.el} and @file{markdown-ts-mode-x.el}, a major
+mode for editing Markdown files.
+
 @item
 Alexandre Julliard wrote @file{vc-git.el}, support for the Git version
 control system.
@@ -711,6 +716,10 @@ chart that can be printed to a PostScript printer; and
 @file{whitespace.el}, a package that detects and cleans up excess
 whitespace in a file (building on an earlier version by Rajesh Vaidheeswarran).
 
+@item
+Richard Lawrence wrote @file{diary-icalendar.el}, a library to handle
+iCalendar (RFC 5545) data.
+
 @item
 Frederic Lepied wrote @file{expand.el}, which uses the abbrev
 mechanism for inserting programming constructs.
@@ -826,6 +835,11 @@ Bill Mann wrote @file{perl-mode.el}, a mode for editing Perl code.
 Brian Marick and Daniel LaLiberte wrote @file{hideif.el}, support for
 hiding selected code within C @code{#ifdef} clauses.
 
+@item
+St@'ephane Marks wrote @file{system-sleep.el} and
+@file{system-taskbar.el}, libraries to interface with operating system
+sleep/wake and taskbar facilities.
+
 @item
 Simon Marshall wrote @file{regexp-opt.el}, which generates a regular
 expression from a list of strings; and the fast-lock and lazy-lock
@@ -872,6 +886,10 @@ buffer listings; @file{ehelp.el}, bindings for browsing help screens;
 and @file{rfc822.el}, a parser for E-mail addresses in the format
 used in mail messages and news articles (Internet RFC 822 and its successors).
 
+@item
+Bret Mogilefsky, Christian Vogler, Juergen Hoetzel, Reuben Thomas and
+wrote @file{lua-mode.el}, an Emacs mode for editing Lua programs.
+
 @item
 Gerd M@"ollmann was the Emacs maintainer from the beginning of Emacs 21
 development until the release of 21.1.  He wrote the new display
@@ -1059,8 +1077,9 @@ Michael D. Prange and Steven A. Wood wrote @file{fortran.el}, a mode
 for editing Fortran code.
 
 @item
-Vincenzo Pupillo wrote @code{php-ts-mode.el}, a major mode for editing
-PHP programs.
+Vincenzo Pupillo wrote @file{mhtml-ts-mode.el}, a major mode for editing
+HTML files, and @file{php-ts-mode.el}, a major mode for editing PHP
+programs.
 
 @item
 Ashwin Ram wrote @file{refer.el}, commands to look up references in
@@ -1472,6 +1491,10 @@ Masatake Yamato wrote @file{ld-script.el}, an editing mode for GNU
 linker scripts, and contributed subword handling and style
 guessing in CC mode.
 
+@item
+Eshel Yaron wrote @file{elisp-scope.el}, an implementation of semantic
+analysis for Emacs Lisp symbols.
+
 @item
 Jonathan Yavner wrote @file{testcover.el}, a package for keeping track
 of the testing status of Emacs Lisp code; @file{unsafep.el} to determine
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 5e0bc37854f..28a22df45d5 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -1507,79 +1507,81 @@ Gwyn, Bruno Haible, Ken'ichi Handa, Lars Hansen, Chris Hanson, Jesper
 Harder, Alexandru Harsanyi, K. Shane Hartman, John Heidemann, Jon
 K. Hellan, Magnus Henoch, Markus Heritsch, Dirk Herrmann, Karl Heuer,
 Manabu Higashida, Joe Hildebrand, Konrad Hinsen, Torsten Hilbrich,
-Anders Holst, Jeffrey C. Honig, J@"urgen H@"otzel, Tassilo Horn, Kurt
-Hornik, Khaled Hosny, Tom Houlder, Joakim Hove, Denis Howe, Lars
-Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Philip Jackson, Martyn
-Jago, Pavel Janik, Paul Jarc, Ulf Jasper, Thorsten Jolitz, Michael
-K. Johnson, Kyle Jones, Terry Jones, Simon Josefsson, Alexandre
-Julliard, Arne J@o{}rgensen, Jambunathan K, Tomoji Kagatani, Brewster
-Kahle, Tokuya Kameshima, Lute Kamstra, Stefan Kangas, Ivan Kanis, David
-Kastrup, David Kaufman, Henry Kautz, Taichi Kawabata, Taro Kawagishi,
-Howard Kaye, Michael Kifer, Richard King, Wilhelm Kirschbaum, Peter
-Kleiweg, Karel Kl@'i@v{c}, Shuhei Kobayashi, Pavel Kobyakov, Larry
-K. Kolodney, David Howard Kaye, Michael Kifer, Richard King, Peter
-Kleiweg, M. Koppelman, Koseki Yoshinori, Robert Krawitz, Sebastian
-Kremer, Ryszard Kubiak, Tak Kunihiro, Igor Kuzmin, David K@aa{}gedal,
-Daniel LaLiberte, Karl Landstrom, Mario Lang, Aaron Larson, James
-R. Larus, Gemini Lasswell, Vinicius Jose Latorre, Werner Lemberg,
-Frederic Lepied, Peter Liljenberg, Christian Limpach, Lars Lindberg,
-Chris Lindblad, Anders Lindgren, Thomas Link, Juri Linkov, Francis
-Litterio, Sergey Litvinov, Leo Liu, Emilio C. Lopes, Martin Lorentzson,
-Dave Love, Eric Ludlam, K@'aroly L@H{o}rentey, Sascha L@"udecke, Greg
-McGary, Roland McGrath, Michael McNamara, Alan Mackenzie, Christopher
-J. Madsen, Neil M. Mager, Arni Magnusson, Artur Malabarba, Ken
-Manheimer, Bill Mann, Brian Marick, Simon Marshall, Bengt Martensson,
-Charlie Martin, Yukihiro Matsumoto, Tomohiro Matsuyama, David Maus,
-Thomas May, Will Mengarini, David Megginson, Jimmy Aguilar Mena, Stefan
-Merten, Ben A. Mesander, Wayne Mesard, Brad Miller, Lawrence Mitchell,
-Richard Mlynarik, Gerd M@"ollmann, Dani Moncayo, Stefan Monnier, David
-Moore, Keith Moore, Jan Moringen, Morioka Tomohiko, Glenn Morris, Don
-Morrison, John Muhl, Diane Murray, Riccardo Murri, Sen Nagata, Erik
-Naggum, Gergely Nagy, Nobuyoshi Nakada, Thomas Neumann, Mike Newton,
-Thien-Thi Nguyen, Jurgen Nickelsen, Dan Nicolaescu, Hrvoje Nik@v{s}i@'c,
-Jeff Norden, Andrew Norman, Theresa O'Connor, Kentaro Ohkouchi,
-Christian Ohler, Kenichi Okada, Alexandre Oliva, Bob Olson, Michael
-Olson, Takaaki Ota, Mark Oteiza, Pieter E. J. Pareit, Ross Patterson,
-David Pearson, Juan Pechiar, Jeff Peck, Damon Anton Permezel, Tom
-Perrine, William M. Perry, Per Persson, Jens Petersen, Nicolas Petton,
-Daniel Pfeiffer, Justus Piater, Richard L. Pieri, Fred Pierresteguy,
-Fran@,{c}ois Pinard, Daniel Pittman, Christian Plaunt, Alexander
-Pohoyda, David Ponce, Noam Postavsky, Francesco A. Potort@`i, Michael
-D. Prange, Mukesh Prasad, Steve Purcell, Vincenzo Pupillo, Jim Radford,
-Ken Raeburn, Marko Rahamaa, Ashwin Ram, Eric S. Raymond, Paul Reilly,
-Edward M. Reingold, David Reitter, Alex Rezinsky, Rob Riepel, Lara Rios,
-Adrian Robert, Nick Roberts, Roland B. Roberts, John Robinson, Denis
-B. Roegel, Danny Roozendaal, Sebastian Rose, William Rosenblatt, Markus
-Rost, Guillermo J. Rozas, Martin Rudalics, Ivar Rummelhoff, Jason
-Rumney, Wolfgang Rupprecht, Benjamin Rutt, Kevin Ryde, Phil Sainty,
-James B. Salem, Masahiko Sato, Timo Savola, Jorgen Sch@"afer, Holger
-Schauer, William Schelter, Ralph Schleicher, Gregor Schmid, Michael
-Schmidt, Ronald S. Schnell, Philippe Schnoebelen, Jan Schormann, Alex
-Schroeder, Stefan Schoef, Rainer Sch@"opf, Raymond Scholz, Eric Schulte,
-Andreas Schwab, Randal Schwartz, Oliver Seidel, Daniel Semyonov, Manuel
-Serrano, Paul Sexton, Hovav Shacham, Stanislav Shalunov, Marc Shapiro,
-Richard Sharman, Olin Shivers, Tibor @v{S}imko, Espen Skoglund, Rick
-Sladkey, Lynn Slater, Chris Smith, David Smith, JD Smith, Paul D. Smith,
-Wilson Snyder, William Sommerfeld, Simon South, Andre Spiegel, Michael
-Staats, Richard M. Stallman, Thomas Steffen, Ulf Stegemann, Reiner
-Steib, Sam Steingold, Ake Stenhoff, Philipp Stephani, Peter Stephenson,
-Ken Stevens, Andy Stewart, Jonathan Stigelman, Martin Stjernholm, Kim F.
-Storm, Steve Strassmann, Christopher Suckling, Olaf Sylvester, Naoto
-Takahashi, Steven Tamm, Jan Tatarik, Jo@~ao T@'avora, Luc Teirlinck,
-Jean-Philippe Theberge, Jens T.@: Berger Thielemann, Spencer Thomas, Jim
-Thompson, Theodor Thornhill, Toru Tomabechi, Andy Oram, David O'Toole,
-Markus Triska, Tom Tromey, Eli Tziperman, Daiki Ueno, Masanobu Umeda,
-Rajesh Vaidheeswarran, Neil W. Van Dyke, Didier Verna, Joakim Verona,
-Ulrik Vieth, Geoffrey Voelker, Johan Vromans, Inge Wallin, John Paul
-Wallington, Colin Walters, Barry Warsaw, Christoph Wedler, Ilja Weis,
-Zhang Weize, Morten Welinder, Joseph Brian Wells, Rodney Whitby, Sean
-Whitton, John Wiegley, Sascha Wilde, Ed Wilkinson, Mike Williams, Roland
-Winkler, Bill Wohler, Steven A. Wood, Dale R. Worley, Francis J. Wright,
-Felix S. T. Wu, Tom Wurgler, Yamamoto Mitsuharu, Po Lu, Katsumi Yamaoka,
-Masatake Yamato, Jonathan Yavner, Ryan Yeske, Ilya Zakharevich, Milan
-Zamazal, Victor Zandy, Eli Zaretskii, Jamie Zawinski, Andrew Zhilin,
-Shenghuo Zhu, Piotr Zieli@'nski, Ian T. Zimmermann, Reto Zimmermann,
-Neal Ziring, Teodor Zlatanov, and Detlev Zundel.
+Juergen Hoetzel, Anders Holst, Jeffrey C. Honig, J@"urgen H@"otzel,
+Tassilo Horn, Kurt Hornik, Khaled Hosny, Tom Houlder, Joakim Hove, Denis
+Howe, Lars Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Philip Jackson,
+Martyn Jago, Pavel Janik, Paul Jarc, Ulf Jasper, Thorsten Jolitz,
+Michael K. Johnson, Kyle Jones, Terry Jones, Simon Josefsson, Alexandre
+Julliard, Rahul Martim Juliato, Arne J@o{}rgensen, Jambunathan K, Tomoji
+Kagatani, Brewster Kahle, Tokuya Kameshima, Lute Kamstra, Stefan Kangas,
+Ivan Kanis, David Kastrup, David Kaufman, Henry Kautz, Taichi Kawabata,
+Taro Kawagishi, Howard Kaye, Michael Kifer, Richard King, Wilhelm
+Kirschbaum, Peter Kleiweg, Karel Kl@'i@v{c}, Shuhei Kobayashi, Pavel
+Kobyakov, Larry K. Kolodney, David Howard Kaye, Michael Kifer, Richard
+King, Peter Kleiweg, M. Koppelman, Koseki Yoshinori, Robert Krawitz,
+Sebastian Kremer, Ryszard Kubiak, Tak Kunihiro, Igor Kuzmin, David
+K@aa{}gedal, Daniel LaLiberte, Karl Landstrom, Mario Lang, Aaron Larson,
+James R. Larus, Gemini Lasswell, Vinicius Jose Latorre, Richard
+Lawrence, Werner Lemberg, Frederic Lepied, Peter Liljenberg, Christian
+Limpach, Lars Lindberg, Chris Lindblad, Anders Lindgren, Thomas Link,
+Juri Linkov, Francis Litterio, Sergey Litvinov, Leo Liu, Emilio
+C. Lopes, Martin Lorentzson, Dave Love, Eric Ludlam, K@'aroly
+L@H{o}rentey, Sascha L@"udecke, Greg McGary, Roland McGrath, Michael
+McNamara, Alan Mackenzie, Christopher J. Madsen, Neil M. Mager, Arni
+Magnusson, Artur Malabarba, Ken Manheimer, Bill Mann, Brian Marick,
+St@'ephane Marks, Simon Marshall, Bengt Martensson, Charlie Martin,
+Yukihiro Matsumoto, Tomohiro Matsuyama, David Maus, Thomas May, Will
+Mengarini, David Megginson, Jimmy Aguilar Mena, Stefan Merten, Ben
+A. Mesander, Wayne Mesard, Brad Miller, Lawrence Mitchell, Richard
+Mlynarik, Gerd M@"ollmann, Bret Mogilefsky, Dani Moncayo, Stefan
+Monnier, David Moore, Keith Moore, Jan Moringen, Morioka Tomohiko, Glenn
+Morris, Don Morrison, John Muhl, Diane Murray, Riccardo Murri, Sen
+Nagata, Erik Naggum, Gergely Nagy, Nobuyoshi Nakada, Thomas Neumann,
+Mike Newton, Thien-Thi Nguyen, Jurgen Nickelsen, Dan Nicolaescu, Hrvoje
+Nik@v{s}i@'c, Jeff Norden, Andrew Norman, Theresa O'Connor, Kentaro
+Ohkouchi, Christian Ohler, Kenichi Okada, Alexandre Oliva, Bob Olson,
+Michael Olson, Takaaki Ota, Mark Oteiza, Pieter E. J. Pareit, Ross
+Patterson, David Pearson, Juan Pechiar, Jeff Peck, Damon Anton Permezel,
+Tom Perrine, William M. Perry, Per Persson, Jens Petersen, Nicolas
+Petton, Daniel Pfeiffer, Justus Piater, Richard L. Pieri, Fred
+Pierresteguy, Fran@,{c}ois Pinard, Daniel Pittman, Christian Plaunt,
+Alexander Pohoyda, David Ponce, Noam Postavsky, Francesco A. Potort@`i,
+Michael D. Prange, Mukesh Prasad, Steve Purcell, Vincenzo Pupillo, Jim
+Radford, Ken Raeburn, Marko Rahamaa, Ashwin Ram, Eric S. Raymond, Paul
+Reilly, Edward M. Reingold, David Reitter, Alex Rezinsky, Rob Riepel,
+Lara Rios, Adrian Robert, Nick Roberts, Roland B. Roberts, John
+Robinson, Denis B. Roegel, Danny Roozendaal, Sebastian Rose, William
+Rosenblatt, Markus Rost, Guillermo J. Rozas, Martin Rudalics, Ivar
+Rummelhoff, Jason Rumney, Wolfgang Rupprecht, Benjamin Rutt, Kevin Ryde,
+Phil Sainty, James B. Salem, Masahiko Sato, Timo Savola, Jorgen
+Sch@"afer, Holger Schauer, William Schelter, Ralph Schleicher, Gregor
+Schmid, Michael Schmidt, Ronald S. Schnell, Philippe Schnoebelen, Jan
+Schormann, Alex Schroeder, Stefan Schoef, Rainer Sch@"opf, Raymond
+Scholz, Eric Schulte, Andreas Schwab, Randal Schwartz, Oliver Seidel,
+Daniel Semyonov, Manuel Serrano, Paul Sexton, Hovav Shacham, Stanislav
+Shalunov, Marc Shapiro, Richard Sharman, Olin Shivers, Tibor @v{S}imko,
+Espen Skoglund, Rick Sladkey, Lynn Slater, Chris Smith, David Smith, JD
+Smith, Paul D. Smith, Wilson Snyder, William Sommerfeld, Simon South,
+Andre Spiegel, Michael Staats, Richard M. Stallman, Thomas Steffen, Ulf
+Stegemann, Reiner Steib, Sam Steingold, Ake Stenhoff, Philipp Stephani,
+Peter Stephenson, Ken Stevens, Andy Stewart, Jonathan Stigelman, Martin
+Stjernholm, Kim F.  Storm, Steve Strassmann, Christopher Suckling, Olaf
+Sylvester, Naoto Takahashi, Steven Tamm, Jan Tatarik, Jo@~ao T@'avora,
+Luc Teirlinck, Jean-Philippe Theberge, Jens T.@: Berger Thielemann,
+Reuben Thomas, Spencer Thomas, Jim Thompson, Theodor Thornhill, Toru
+Tomabechi, Andy Oram, David O'Toole, Markus Triska, Tom Tromey, Eli
+Tziperman, Daiki Ueno, Masanobu Umeda, Rajesh Vaidheeswarran, Neil
+W. Van Dyke, Didier Verna, Joakim Verona, Ulrik Vieth, Christian Vogler,
+Geoffrey Voelker, Johan Vromans, Inge Wallin, John Paul Wallington,
+Colin Walters, Barry Warsaw, Christoph Wedler, Ilja Weis, Zhang Weize,
+Morten Welinder, Joseph Brian Wells, Rodney Whitby, Sean Whitton, John
+Wiegley, Sascha Wilde, Ed Wilkinson, Mike Williams, Roland Winkler, Bill
+Wohler, Steven A. Wood, Dale R. Worley, Francis J. Wright, Felix
+S. T. Wu, Tom Wurgler, Yamamoto Mitsuharu, Po Lu, Katsumi Yamaoka,
+Masatake Yamato, Eshel Yaron, Jonathan Yavner, Ryan Yeske, Ilya
+Zakharevich, Milan Zamazal, Victor Zandy, Eli Zaretskii, Jamie Zawinski,
+Andrew Zhilin, Shenghuo Zhu, Piotr Zieli@'nski, Ian T. Zimmermann, Reto
+Zimmermann, Neal Ziring, Teodor Zlatanov, and Detlev Zundel.
 @end iftex
 
 @node Intro
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 7e893ab4fdf..e8e12ff228d 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2388,16 +2388,19 @@ records the list of known projects.  It defaults to the file
 @subsection Managing the Project List File
 
 @table @kbd
+@item M-x project-remember-project
+Add the current project to the @code{project-list-file}.
 @item M-x project-forget-project
 Remove a known project from the @code{project-list-file}.
 @end table
 
+@findex project-remember-project
 @findex project-forget-project
   Normally Emacs automatically adds and removes projects to and from the
 @code{project-list-file}, but sometimes you may want to manually edit
-the available projects.  @kbd{M-x project-forget-project}
-prompts you to choose one of the available projects, and then removes
-it from the file.
+the available projects.  @kbd{M-x project-remember-project} remembers
+the current project, and @kbd{M-x project-forget-project} prompts you to
+choose one of the available projects, and then removes it from the file.
 
 @vindex project-list-exclude
   The user option @code{project-list-exclude} may be set to always
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index be6aa29c1c2..9067a20efd4 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1303,6 +1303,12 @@ resubmit them or copy them to the end.  Or you can use a
 Fetch the next earlier old shell command
 (@code{comint-previous-input}).
 
+@findex comint-complete-input-ring
+@kindex C-x @key{UP} @r{(Shell mode)}
+@item C-x @key{UP}
+Complete the current input using shell command history
+(@code{comint-complete-input-ring}).
+
 @kindex M-n @r{(Shell mode)}
 @findex comint-next-input
 @item M-n
@@ -1350,6 +1356,12 @@ successively more recent shell commands from the buffer.
 @kbd{C-@key{UP}} works like @kbd{M-p}, and @kbd{C-@key{DOWN}} like
 @kbd{M-n}.
 
+  @kbd{C-x @key{UP}} tries to complete (@pxref{Completion}) your current
+input against the history of old shell commands.  So, for example, you
+could type the first few words of a long and complex shell command you
+executed earlier, then invoke this command to have Emacs fill in the
+rest of it.
+
   The history search command @kbd{M-r} begins an incremental regular
 expression search of previous shell commands.  After typing @kbd{M-r},
 start typing the desired string or regular expression; the last
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index d0a0285f9f1..ba83d0d0cec 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -871,6 +871,15 @@ invokes the same Emacs executable as the process that called this
 function.
 @end defun
 
+@defun native-compile-directory directory
+This function recursively searches for @file{.el} files in
+@var{directory} and any subdirectories thereof, and runs
+native-compilation on any that have not already been compiled.  To
+determine whether a file has already been compiled, it searches for a
+corresponding @file{.eln} in the @code{native-comp-eln-load-path}
+variable (@pxref{Native-Compilation Variables}).
+@end defun
+
 @defun batch-native-compile &optional for-tarball
 This function runs native-compilation on files specified on the Emacs
 command line in batch mode.  It must be used only in a batch execution
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index c65b5ee5593..a8d27426b25 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -848,6 +848,7 @@ in the Emacs development repository (@pxref{Latest version of Emacs}).
 @menu
 * Origin of the term Emacs::
 * Latest version of Emacs::
+* New in Emacs 31::
 * New in Emacs 30::
 * New in Emacs 29::
 * New in Emacs 28::
@@ -923,6 +924,92 @@ this command a prefix argument to read about which features were new
 in older versions.
 
 
+@node New in Emacs 31
+@section What is different about Emacs 31?
+@cindex Differences between Emacs 30 and Emacs 31
+@cindex Emacs 31, new features in
+
+Here's a selection of changes in Emacs 31 as compared to Emacs 30.  The
+full list is too long to fit here, but can be read in the Emacs
+@file{NEWS} file by typing @kbd{C-h n} inside Emacs.
+
+@itemize
+@item
+Using the mouse to control Emacs is enabled by default in most
+terminals.
+
+@item
+New @file{user-lisp/} subdirectory of your Emacs configuration
+directory.  Lisp files placed here will be automatically compiled and
+loaded without additional configuration.
+
+@item
+Child frames (used e.g. for completion and tooltips) are now supported
+on text frames.
+
+@item
+Various improvements to the way the @file{*Completions*} buffer works.
+In particular, it can be configured to be displayed immediately and to
+be updated dynamically as you type.
+
+@item
+Commands to split windows now make better choices between splitting
+vertically and splitting horizontally.  Whether the frame is landscape
+or portrait now has more of an influence.
+
+@item
+New built-in facility to hide minor mode lighters:
+@code{mode-line-collapse-minor-modes}.
+
+@item
+New commands to interactively store buffers and files in registers:
+@code{buffer-to-register} and @code{file-to-register}.
+
+@item
+You can now bookmark local and remote shell buffers.
+
+@item
+SHR slices large images into rows, so scrolling no longer jumps past the
+entire image.
+
+@item
+Ispell can now save spelling corrections as abbrevs, such that if you
+make the same mistake again it will be immediately corrected.
+
+@item
+Typing @kbd{d} during @code{query-replace} shows a diff buffer with the
+replacements.
+
+@item
+The @file{*grep*} and @file{*xref*} now support editable modes, like
+Occur Edit mode.  The edits will be reflected in buffers visiting the
+originating files.
+
+@item
+New VC commands to handle repositories with multiple working trees.  The
+VC Directory and Log View mode interfaces have seen a number of
+usability improvements.
+
+@item
+New feature to review changes to packages before installing or upgrading
+them, and new minor mode to automatically suggest packages to install
+when visiting files with no specific major mode yet available.
+
+@item
+The Speedbar can be configured to open in a window instead of a frame.
+
+@item
+New theme, the Newcomers Presets theme, designed to make Emacs more
+approachable for new users.  It is basically a set of alternative
+defaults.
+
+@item
+New library to handle iCalendar (RFC 5545) data, with integrations for
+the Calendar and Diary packages.
+
+@end itemize
+
+
 @node New in Emacs 30
 @section What is different about Emacs 30?
 @cindex Differences between Emacs 29 and Emacs 30
diff --git a/etc/AUTHORS b/etc/AUTHORS
index fce94721cd4..92d73db780f 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -16,8 +16,9 @@ Aaron Jensen: changed nsterm.m frameset.el ruby-bracketed-args-indent.rb
 
 Aaron Larson: co-wrote bibtex.el
 
-Aaron L. Zeng: changed savehist.el emacs-module-tests.el emacs-module.c
-  eval.c goto-addr.el lisp.h vc-hg.el
+Aaron L. Zeng: changed savehist.el vc-hg.el eglot.el
+  emacs-module-tests.el emacs-module.c eval.c goto-addr.el lisp.h
+  vc-dispatcher.el vc-hg-tests.el
 
 Aaron S. Hawley: wrote lisp-tests.el undo-tests.el
 and changed simple.el files.texi isearch.el morse.el sgml-mode.el
@@ -737,8 +738,8 @@ Billy Lei: wrote burmese.el
 
 Billy Zheng: changed README.md eglot.el
 
-Binbin Ye: changed json-ts-mode-tests.el json-ts-mode.el
-  typescript-ts-mode.el
+Binbin Ye: changed typescript-ts-mode.el json-ts-mode-tests.el
+  json-ts-mode.el typescript-ts-mode-tests.el
 
 Bjarte Johansen: wrote ob-sed.el
 and changed use-package-bind-key.el
@@ -1308,7 +1309,7 @@ Daniel Mendler: co-wrote compat.el
 and changed minibuffer.el simple.el browse-url.el eldoc.el ibuffer.el
   crm.el eww.el minibuf.texi project.el buffer-tests.el buffer.c buffer.h
   dispextern.h display.texi faces.el frame.c frame.h package.el
-  picture.el subr-tests.el subr.el and 30 other files
+  picture.el subr-tests.el subr.el and 31 other files
 
 Daniel M German: co-wrote org-protocol.el
 
@@ -1978,8 +1979,8 @@ Eshel Yaron: wrote completion-preview.el elisp-scope.el
 and changed completion-preview-tests.el programs.texi eglot.el
   elisp-mode.el emacs.texi emoji.el eww.el help-fns.el info.el
   minibuffer-tests.el minibuffer.el text-mode.el window.c xdisp.c xref.el
-  bookmark.el dictionary.el display.texi easy-mmode.el eldoc.el
-  elec-pair.el and 24 other files
+  bookmark.el cc-fonts.el dictionary.el display.texi easy-mmode.el
+  eldoc.el and 26 other files
 
 Espen Skoglund: wrote pascal.el
 
@@ -2102,9 +2103,9 @@ Filippo Argiolas: changed eglot.el eglot.texi c-ts-common.el
 
 F. Jason Park: changed erc.el erc-tests.el erc-backend.el erc-stamp.el
   erc-common.el erc-fill.el erc.texi erc-goodies.el erc-button.el
-  erc-fill-tests.el erc-networks.el foonet.eld erc-compat.el erc-match.el
-  erc-speedbar.el erc-dcc.el erc-scenarios-common.el erc-sasl.el
-  erc-networks-tests.el erc-track.el erc-goodies-tests.el
+  erc-fill-tests.el erc-networks.el foonet.eld erc-compat.el
+  erc-speedbar.el erc-match.el erc-dcc.el erc-scenarios-common.el
+  erc-sasl.el erc-networks-tests.el erc-track.el erc-goodies-tests.el
   and 209 other files
 
 Flemming Hoejstrup Hansen: changed forms.el
@@ -5165,7 +5166,7 @@ and co-wrote compat.el
 and changed package.el rcirc.el package.texi rcirc.texi vc.el
   sgml-mode.el vc-git.el project.el which-key.el package-autosuggest.eld
   startup.el package-activate.el message.el subr.el custom.texi eglot.el
-  simple.el bytecomp.el cus-edit.el custom.el help.el and 94 other files
+  simple.el bytecomp.el cus-edit.el custom.el help.el and 95 other files
 
 Philippe Altherr: changed sh-script.el sh-script-tests.el shell.sh
 
@@ -5454,13 +5455,13 @@ Richard Lawrence: wrote calendar-tests.el diary-icalendar.el
   icalendar-parser.el icalendar-recur.el icalendar-shortdoc.el
   icalendar-utils.el
 and changed calendar.el diary-icalendar-tests.el icalendar-recur-tests.el
-  icalendar.el calendar.texi diary-lib.el gnus-icalendar.el
-  icalendar-parser-tests.el icalendar-tests.el .gitattributes cal-dst.el
-  cal-move.el cond-star.el diary-icalendar-resources emacs.texi
+  icalendar.el calendar.texi icalendar-parser-tests.el gnus-icalendar.el
+  diary-lib.el icalendar-tests.el .gitattributes cal-dst.el cal-move.el
+  cond-star.el diary-icalendar-resources emacs.texi
   gnus-icalendar-tests.el icalendar-ast-tests.el
   import-bug-11473.diary-iso import-bug-22092.diary-iso
-  import-bug-33277.diary-iso import-legacy-function.ics
-  and 22 other files
+  import-bug-24199.diary-all import-bug-33277.diary-iso
+  and 23 other files
 
 Richard Levitte: changed vc-mtn.el
 
@@ -5784,9 +5785,9 @@ Sean Whitton: wrote em-elecslash.el em-extpipe-tests.el em-extpipe.el
   vc-test-misc.el
 and co-wrote vc-tests-helpers.el vc-tests.el
 and changed vc.el vc-git.el vc-dispatcher.el vc-hg.el vc-dir.el
-  diff-mode.el vc-hooks.el vc1-xtra.texi log-view.el maintaining.texi
+  vc-hooks.el diff-mode.el vc1-xtra.texi log-view.el maintaining.texi
   subr.el project.el log-edit.el files.texi server.el simple.el window.el
-  cond-star.el dired-aux.el keyboard.c vc/vc-bzr.el and 334 other files
+  cond-star.el configure.ac dired-aux.el keyboard.c and 347 other files
 
 Sebastian Fieber: changed gnus-art.el mm-decode.el mm-view.el
 
@@ -6032,7 +6033,7 @@ and co-wrote font-lock.el gitmerge.el pcvs.el visual-wrap.el
 and changed subr.el simple.el cl-macs.el bytecomp.el files.el keyboard.c
   lisp.h vc.el eval.c xdisp.c alloc.c help-fns.el buffer.c sh-script.el
   package.el tex-mode.el progmodes/compile.el lread.c keymap.c window.c
-  easy-mmode.el and 1744 other files
+  easy-mmode.el and 1745 other files
 
 Stefano Facchini: changed gtkutil.c
 
@@ -6059,10 +6060,10 @@ Steinar Bang: changed gnus-setup.el imap.el
 Stéphane Boucher: changed replace.el
 
 Stephane Marks: wrote savehist-tests.el system-sleep.el system-taskbar.el
-and changed frame.el markdown-ts-mode.el frames.texi nsfns.m tab-bar.el
-  bookmark.el frame.c nsterm.m subr.el project.el display.texi recentf.el
-  savehist.el vtable.el w32fns.c ibuf-macs.el os.texi saveplace.el
-  shell.el subr-x.el treesit.el and 34 other files
+and changed frame.el markdown-ts-mode.el nsfns.m frames.texi subr.el
+  tab-bar.el bookmark.el frame.c nsterm.m project.el display.texi
+  recentf.el savehist.el vtable.el w32fns.c ibuf-macs.el os.texi
+  saveplace.el shell.el subr-x.el tramp.el and 34 other files
 
 Stephane Zermatten: changed term-tests.el term.el ansi-osc.el
 
@@ -6697,10 +6698,10 @@ Vincent Del Vecchio: changed info.el mh-utils.el
 
 Vincenzo Pupillo: wrote mhtml-ts-mode.el php-ts-mode.el
 and changed js.el c-ts-mode.el java-ts-mode.el c-ts-common.el
-  cmake-ts-mode.el typescript-ts-mode.el speedbar.el treesit.el
-  Makefile.in compilation.txt compile-tests.el css-mode.el frames.texi
-  html-ts-mode.el progmodes/compile.el progmodes/python.el speedbar.texi
-  sql.el treesit-admin.el yaml-ts-mode.el
+  cmake-ts-mode.el speedbar.el typescript-ts-mode.el treesit.el
+  Makefile.in compilation.txt compile-tests.el css-mode.el dframe.el
+  frames.texi html-ts-mode.el progmodes/compile.el progmodes/python.el
+  speedbar.texi sql.el treesit-admin.el yaml-ts-mode.el
 
 Vince Salvino: changed msdos.texi w32.c w32fns.c
 
diff --git a/etc/NEWS.31 b/etc/NEWS.31
index 5f5f59d2a9f..1198fb3ca67 100644
--- a/etc/NEWS.31
+++ b/etc/NEWS.31
@@ -15,30 +15,20 @@ 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 31.1
 
-+++
 ** Unexec dumper removed.
 The traditional unexec dumper, deprecated since Emacs 27, has been
 removed.
 
-+++
 *** The portable dumper now works on m68k a.out targets.
 
----
 ** Emacs's old 'ctags' program is no longer built or installed.
 You are encouraged to use Universal Ctags <https://ctags.io/> instead.
 For now, to get the old 'ctags' behavior you can can run 'etags --ctags'
 or use a shell script named 'ctags' that runs 'etags --ctags "$@"'.
 
----
 ** Changed GCC default options on 32-bit x86 systems.
 When using GCC 4 or later to build Emacs on 32-bit x86 systems,
 'configure' now defaults to using the GCC options '-mfpmath=sse' (if the
@@ -46,7 +36,6 @@ host system supports SSE2) or '-fno-tree-sra' (if not).  These GCC
 options work around GCC bug 58416, which can cause Emacs to behave
 incorrectly in rare cases.
 
----
 ** New configure option '--with-systemduserunitdir'.
 This allows specifying the directory where the user unit file for
 systemd is installed; the default is '${prefix}/usr/lib/systemd/user'.
@@ -54,7 +43,6 @@ systemd is installed; the default is '${prefix}/usr/lib/systemd/user'.
 
 * Startup Changes in Emacs 31.1
 
-+++
 ** In compatible terminals, 'xterm-mouse-mode' is turned on by default.
 For these terminals the mouse will work by default.  A compatible
 terminal is one that supports Emacs setting and getting the OS selection
@@ -64,14 +52,12 @@ OS selection instead of terminal-specific keybindings.
 
 You can keep the old behavior by customizing 'xterm-mouse-mode' to nil.
 
-+++
 ** site-start.el is now loaded before the user's early init file.
 Previously, the order was early-init.el, site-start.el and then the
 user's regular init file, but now site-start.el comes first.  This
 allows site administrators to customize things that can normally only be
 done from early-init.el, such as adding to 'package-directory-list'.
 
-+++
 ** New User Lisp directory feature.
 If you have a subdirectory "user-lisp/" in your Emacs configuration
 directory, then Lisp files in it and any subdirectories are now
@@ -84,7 +70,6 @@ other directory instead.  There is also a new command
 'prepare-user-lisp' that you can invoke at any time.  See the Info node
 "(emacs) User Lisp Directory" for more details.
 
----
 ** The first client frame now shows warnings from daemon startup.
 When there are warnings emitted during Emacs startup, usually due to
 problems in your initialization file, these are shown in a "*Warnings*"
@@ -97,13 +82,11 @@ like a plain invocation of 'emacs' would.
 
 * Changes in Emacs 31.1
 
-+++
 ** 'line-spacing' now supports specifying spacing above the line.
 Previously, only spacing below the line could be specified.  The user
 option can now be set to a cons cell to specify spacing both above and
 below the line, which allows you to vertically center text.
 
-+++
 ** New face 'margin' for the window margin display.
 A new basic face 'margin' is used by default for text displayed in the
 left and right margin areas, which are used by various packages for
@@ -118,11 +101,9 @@ buffer text to serve as a default for any unspecified face attributes of
 strings displayed in the margin, you must now apply those face
 attributes to the margin string itself using 'propertize'.
 
-+++
 ** 'prettify-symbols-mode' attempts to ignore undisplayable characters.
 Previously, such characters would be rendered as, e.g., white boxes.
 
-+++
 ** 'standard-display-table' now has more extra slots.
 'standard-display-table' has been extended to allow specifying glyphs
 that are used for borders around child frames and menu separators on TTY
@@ -133,7 +114,6 @@ Call the command 'standard-display-unicode-special-glyphs' to set up the
 documentation of that command to see which slots of the display table it
 changes.
 
-+++
 ** Child frames are now supported on TTY frames.
 This supports use-cases like Posframe, Corfu, and child frames acting
 like tooltips.  To enable tooltips on TTY frames, call 'tty-tip-mode'.
@@ -144,7 +124,6 @@ The presence of child frame support on TTY frames can be checked with
 Recent versions of Posframe and Corfu are known to use child frames on
 TTYs if they are supported.
 
-+++
 ** Several font-lock face variables are now obsolete.
 The following variables are now obsolete: 'font-lock-builtin-face',
 'font-lock-comment-delimiter-face', 'font-lock-comment-face',
@@ -169,28 +148,23 @@ If you have been using these variables in Lisp code (for example, in
 font-lock rules), simply quote the symbol, to use the face directly
 instead of its now-obsolete variable.
 
----
 ** New char-table 'special-mirror-table' for mirroring special glyphs.
 This char-table is used to mirror special glyphs (truncation and
 continuation) when the user has defined an alternative representation
 for those characters via display tables.
 
----
 ** find-func.el commands now have history enabled.
 The 'find-function', 'find-library', 'find-face-definition', and
 'find-variable' commands now allow retrieving previous input using the
 usual minibuffer history commands.  Each command has a separate history.
 
----
 ** New minor mode 'find-function-mode' replaces 'find-function-setup-keys'.
 The new minor mode defines the keys at a higher precedence level than
 the old function, one more usual for a minor mode.  To restore the old
 behavior, customize 'find-function-mode-lower-precedence' to non-nil.
 
----
 ** 'find-function' can now find 'cl-defmethod' invocations inside macros.
 
----
 ** New minor mode 'prettify-special-glyphs-mode'.
 The new minor mode prettifies the special character glyphs (truncation
 and continuation) on TTY frames (and GUI frames without fringes).  You
@@ -198,7 +172,6 @@ can customize the associated new face 'special-glyphs'.
 
 ** Minibuffer and Completions
 
-+++
 *** Support for immediate display of the "*Completions*" buffer.
 Whenever a minibuffer with completion is opened, then if the completion
 table sets the 'eager-display' completion property to non-nil, the
@@ -209,7 +182,6 @@ can be overridden for different completion categories by customizing
 "*Completions*" for all minibuffers, or nil to suppress this for all
 minibuffers.
 
-+++
 *** Support for updating "*Completions*" as you type.
 If the "*Completions*" buffer is displayed and the completion table sets
 the completion property 'eager-update' to non-nil, then the
@@ -220,19 +192,16 @@ be overridden for different completion categories by customizing
 be updated as you type, or nil to suppress this always.  Note that for
 large or inefficient completion tables, this can slow down typing.
 
----
 *** Support for completion category inheritance.
 You can now define completion categories that inherit properties from
 existing categories, using the new function 'define-completion-category'.
 
-+++
 *** New optional value of 'minibuffer-visible-completions'.
 If the value of this option is 'up-down', only the '<UP>' and '<DOWN>'
 arrow keys move point between candidates shown in the "*Completions*"
 buffer display, while '<RIGHT>' and '<LEFT>' arrows move point in the
 minibuffer.
 
----
 *** 'RET' chooses the completion selected with 'M-<UP>/M-<DOWN>'.
 If a completion candidate is selected with 'M-<UP>' or 'M-<DOWN>',
 typing 'RET' will exit completion with that candidate as the result.
@@ -241,7 +210,6 @@ This feature supersedes 'minibuffer-completion-auto-choose', which
 previously provided similar behavior; that variable is now nil by
 default.
 
-+++
 *** New user option 'completion-pcm-leading-wildcard'.
 This option configures how the partial-completion style does completion.
 It defaults to nil, which preserves the existing behavior.  When it is
@@ -249,7 +217,6 @@ set to t, the partial-completion style behaves more like the substring
 style, in that the input can match a candidate anywhere in the candidate
 string.
 
-+++
 *** 'completion-styles' now can contain lists of bindings.
 In addition to a symbol naming a completion style, an element of
 'completion-styles' can now be a list of the form '(STYLE ((VARIABLE
@@ -261,7 +228,6 @@ different values for completion-affecting variables like
 also applies to the styles configuration in
 'completion-category-overrides' and 'completion-category-defaults'.
 
-+++
 *** Navigating "*Completions*" now accommodates 'completions-format'.
 When 'completions-format' is set to 'vertical', typing 'n', 'TAB' or
 'M-<DOWN>' in the "*Completions*" buffer (the latter also in the
@@ -279,7 +245,6 @@ moves point only within the current line, analogously to how, in the
 horizontal format, '<DOWN>' and '<UP>' move point only within the
 current column.
 
----
 *** Selected completion candidate is preserved across "*Completions*" updates.
 When the window point is on a completion candidate in the
 "*Completions*" buffer (because of 'minibuffer-next-completion' or for
@@ -287,7 +252,6 @@ any other reason), it will remain on that candidate after the
 "*Completions*" is updated with a new list of completions.  The
 candidate is deselected when the "*Completions*" buffer is hidden.
 
----
 *** "*Completions*" is now displayed faster when there are many candidates.
 As before, if there are more completion candidates than can be displayed
 in the current frame, only a subset of the candidates is displayed.
@@ -297,7 +261,6 @@ interacts with the text of the "*Completions*" buffer.  This
 optimization only applies when 'completions-format' is 'horizontal' or
 'one-column'.
 
----
 *** New user option 'crm-prompt' for 'completing-read-multiple'.
 This option configures the prompt format of 'completing-read-multiple'.
 By default, the prompt indicates to the user that the completion command
@@ -305,7 +268,6 @@ accepts a comma-separated list.  The prompt format can include the
 separator description and the separator string, which are both stored as
 text properties of the 'crm-separator' regular expression.
 
----
 *** New user option 'completion-preview-sort-function'.
 This option controls how Completion Preview mode sorts completion
 candidates.  If you use this mode together with an in-buffer completion
@@ -316,30 +278,25 @@ that your popup interface uses for a more integrated experience.
 ('completion-preview-sort-function' was already present in Emacs 30.1,
 but as a plain Lisp variable, not a user option.)
 
----
 *** New user option 'completion-preview-inhibit-functions'.
 This option provides fine-grained control over Completion Preview mode
 activation.  You can use it to specify arbitrary conditions in which to
 inhibit the mode's operation.
 
----
 *** New mode 'minibuffer-nonselected-mode'.
 This mode, enabled by default, directs attention to the active
 minibuffer window in the case the minibuffer window is no longer
 selected, but still waiting for input.  This uses the new
 'minibuffer-nonselected' face.
 
-+++
 *** 'read-multiple-choice' now uses the minibuffer to read a character.
 It still can use 'read-key' when the variable
 'read-char-choice-use-read-key' is non-nil.
 
-+++
 *** 'map-y-or-n-p' now uses the minibuffer to read a character.
 It still can use 'read-key' when the variable
 'y-or-n-p-use-read-key' is non-nil.
 
----
 *** 'flex' completion style rewritten to be faster and more accurate.
 Completion and highlighting use a new, superior algorithm.  For example,
 pattern "scope" now ranks 'elisp-scope-*' functions well above
@@ -348,17 +305,14 @@ pattern "scope" now ranks 'elisp-scope-*' functions well above
 
 ** Mouse
 
-+++
 *** New mode 'mouse-shift-adjust-mode' extends selection with 'S-<mouse-1>'.
 When enabled, you can use the left mouse button with the '<Shift>' modifier
 to extend the boundaries of the active region by dragging the mouse pointer.
 
----
 *** 'context-menu-mode' now includes a "Send to..." menu item.
 The menu item enables sending current file(s) or region text to external
 (non-Emacs) applications or services.  See send-to.el for customizations.
 
----
 *** The mouse now drags lines in character increments again.
 Dragging a horizontal or vertical line like the mode line or the lines
 dividing side-by-side windows now happens in increments of the
@@ -370,7 +324,6 @@ increments, as with Emacs 24 through Emacs 30, customize
 
 ** Windows
 
-+++
 *** New commands to modify window layouts of frames.
 'window-layout-rotate-clockwise' ('C-x w r <RIGHT>') and its counterpart
 'window-layout-rotate-anticlockwise' ('C-x w r <LEFT>') rotate an entire
@@ -384,20 +337,17 @@ every horizontal split becomes a vertical split and vice versa.
 'rotate-windows-back' ('C-x w o <LEFT>') rotate windows in cyclic
 ordering.
 
-+++
 *** New user option 'rotate-windows-change-selected'.
 This controls whether 'rotate-windows' and 'rotate-windows-back' change
 the selected window.  If nil, the selected window does not change.
 The default is t, which means the new selected window will be the one
 that winds up at the location of the previously-selected window.
 
-+++
 *** New user option 'transpose-dedicated-windows'.
 This controls how functions transposing or rotating windows handle
 dedicated windows.  The default is nil, which causes these function to
 signal an error if they encounter a dedicated window.
 
-+++
 *** Windmove commands now move to skipped windows if invoked twice in a row.
 The new user option 'windmove-allow-repeated-command-override' controls
 this behavior: if it is non-nil, invoking the same windmove command twice
@@ -405,13 +355,11 @@ overrides the 'no-other-window' property, allowing navigation to windows
 that would normally be skipped.  The default is t; customize it to nil
 if you want the old behavior.
 
-+++
 *** New hook 'window-deletable-functions'.
 This abnormal hook gives its client a way to save a window from being
 deleted implicitly by functions like 'kill-buffer', 'bury-buffer' and
 'quit-restore-window'.
 
-+++
 *** Buffer-local window change functions now run in their buffers.
 Running the buffer-local version of each of the abnormal hooks
 'window-buffer-change-functions', 'window-size-change-functions',
@@ -419,55 +367,46 @@ Running the buffer-local version of each of the abnormal hooks
 will make the respective buffer temporarily current while running the
 hook.
 
-+++
 *** 'window-buffer-change-functions' is run for removed buffers too.
 The buffer-local version of 'window-buffer-change-functions' may now be
 run twice: once for the buffer removed from the window and once for the
 buffer now shown in that window.
 
-+++
 *** New user option 'quit-window-kill-buffer'.
 This option specifies whether 'quit-window' should preferably kill or
 bury the buffer shown by the window to quit.  The default is nil.
 Customize it to t to always kill the buffer; customize to a list of
 major modes to kill if the buffer's major mode is one of those.
 
-+++
 *** New user option 'kill-buffer-quit-windows'.
 This option has 'kill-buffer' call 'quit-restore-window' to handle the
 further destiny of any window showing the buffer to be killed.
 
-+++
 *** 'split-window' can optionally resurrect deleted windows.
 A new optional argument REFER of 'split-window' makes it possible to,
 instead of making a new window object, reuse an existing, deleted one.
 This can be used to preserve the identity of windows when swapping or
 transposing them.
 
-+++
 *** New window parameter 'quit-restore-prev'.
 This parameter is set up by 'display-buffer' when it detects that the
 window used already has a 'quit-restore' parameter.  Its presence gives
 'quit-restore-window' a way to undo a sequence of buffer display
 operations more intuitively.
 
-+++
 *** 'quit-restore-window' handles new values for BURY-OR-KILL argument.
 The values 'killing' and 'burying' are like 'kill' and 'bury' but assume
 that the actual killing or burying of the buffer is done by the caller.
 
-+++
 *** New user option 'quit-restore-window-no-switch'.
 With this option set, 'quit-restore-window' will delete its window more
 aggressively rather than switching to some other buffer in it.
 
----
 *** The user option 'display-comint-buffer-action' has been removed.
 It has been obsolete since Emacs 30.1.  Use '(category . comint)'
 instead.  Another user option 'display-tex-shell-buffer-action' has been
 removed too, for which you can use '(category . tex-shell)'.
 
-+++
 *** New user option 'split-window-preferred-direction'.
 Functions called by 'display-buffer' split the selected window when they
 need to create a new window.  A window can be split either vertically
@@ -484,45 +423,37 @@ always tried to split vertically first, so to get the previous behavior,
 you can customize this option to 'vertical'.  The value 'horizontal'
 always prefers the horizontal split.
 
----
 *** The default value of 'split-width-threshold' is reduced from 160 to 150.
 We believe that, after splitting, text filled to 75 columns remains
 comfortable to read.
 
-+++
 *** New optional argument INDIRECT for 'get-buffer-window-list'.
 With this argument non-nil, 'get-buffer-window-list' will include in the
 return value windows whose buffers share their text with BUFFER-OR-NAME.
 
-+++
 *** New 'display-buffer' action alist entry 'reuse-indirect'.
 With such an entry, 'display-buffer-reuse-window' may also choose a
 window whose buffer shares text with the buffer to display.
 
-+++
 *** New variable 'window-state-normalize-buffer-name'.
 When bound to non-nil, 'window-state-get' will normalize 'uniquify'
 managed buffer names by removing 'uniquify' prefixes and suffixes.  This
 helps to restore window buffers across Emacs sessions.
 
-+++
 *** New action alist entry 'this-command' for 'display-buffer'.
 You can use this in 'display-buffer-alist' to match buffers displayed
 during the execution of particular commands.
 
----
 *** New command 'other-window-backward' ('C-x O').
 This moves in the opposite direction of 'other-window' and is for its
 default keybinding consistent with 'repeat-mode'.
 
-+++
 *** New functions 'combine-windows' and 'uncombine-window'.
 'combine-windows' is useful to make a new parent window for several
 adjacent windows and subsequently operate on that parent.
 'uncombine-window' can then be used to restore the window configuration
 to the state it had before running 'combine-windows'.
 
-+++
 *** New function 'window-cursor-info'.
 This function returns a vector of pixel-level information about the
 physical cursor in a given window, including its type, coordinates,
@@ -530,20 +461,17 @@ dimensions, and ascent.
 
 ** Frames
 
-+++
 *** New function 'frame-deletable-p'.
 If this function returns nil, the following call to 'delete-frame' might
 fail to delete its argument FRAME or might signal an error.  It is
 therefore advisable to use this function as part of a condition that
 determines whether to call 'delete-frame'.
 
-+++
 *** New function 'frame-use-time'.
 This function is the frame equivalent of the function 'window-use-time'
 for a window.  The result is the 'window-use-time' of the frame's most
 recently used window.
 
-+++
 *** New functions 'get-mru-frames' and 'get-mru-frame'.
 'get-mru-frames' returns a list of frames sorted by their most recent
 use time, among all frames, or among those visible or iconified on the
@@ -551,20 +479,17 @@ same terminal as the selected frame.  Child frames can be excluded.  A
 single frame can be excluded (e.g. the selected frame).  'get-mru-frame'
 returns the single most recently used frame.
 
-+++
 *** After deleting, 'delete-frame' now selects the most recently used frame.
 Previously, after deleting a specified frame, 'delete-frame' would
 select the oldest visible frame on the same terminal.  To revert to the
 old behavior, set the new user option 'delete-frame-choose-selected'
 to nil.
 
-+++
 *** New value 'force' for user option 'frame-inhibit-implied-resize'.
 This will inhibit implied resizing while a new frame is made.  It can be
 useful on tiling window managers where the initial frame size should be
 specified by external means.
 
-+++
 *** New user option 'alter-fullscreen-frames'.
 This option is useful to maintain a consistent state when attempting to
 resize fullscreen frames.  It defaults to 'inhibit' on NS builds which
@@ -574,7 +499,6 @@ either resize the frame and change the fullscreen status accordingly, or
 keep the frame size unchanged.  The value t means to first reset the
 fullscreen status and then resize the frame.
 
-+++
 *** New functions to set frame size and position in one compound step.
 'set-frame-size-and-position' sets the new size and position of a frame
 in one compound step.  Both size and position can be specified as with
@@ -582,18 +506,15 @@ the corresponding frame parameters 'width', 'height', 'left' and 'top'.
 'set-frame-size-and-position-pixelwise' is similar but has a more
 restricted set of values for specifying size and position.
 
-+++
 *** New commands 'split-frame' and 'merge-frames'.
 'split-frame' moves a specified number of windows from an existing frame
 to a newly-created frame.  'merge-frames' merges all windows from two
 frames into one of these frames and deletes the other one.
 
----
 *** Frames can now be renamed to "F<number>" on text terminals.
 Unlike with other frame names, an attempt to rename to "F<number>"
 signals an error when a frame of that name already exists.
 
-+++
 *** New frame parameters 'cloned-from' and 'undeleted'.
 The frame parameter 'cloned-from' is set to the frame from which the new
 frame is cloned using the command 'clone-frame'.
@@ -605,7 +526,6 @@ These are useful if you need to detect a cloned or undeleted frame in
 hooks like 'after-make-frame-functions' and
 'server-after-make-frame-hook'.
 
-+++
 *** Frames now have unique ids and the new function 'frame-id'.
 Each non-tooltip frame is assigned a unique integer id.  This allows you
 to unambiguously identify frames even if they share the same name or
@@ -613,7 +533,6 @@ title.  When 'undelete-frame-mode' is enabled, each deleted frame's id
 is stored for resurrection.  The function 'frame-id' returns a frame's
 id (in C, use the frame struct member 'id').
 
-+++
 *** New commands 'select-frame-by-id', 'undelete-frame-by-id'.
 The command 'select-frame-by-id' selects a frame by ID and undeletes it
 if deleted.  The command 'undelete-frame-by-id' undeletes a frame by its
@@ -621,7 +540,6 @@ ID.  When called interactively, both functions prompt for an ID.
 
 ** Mode Line
 
----
 *** New definitions for mode line faces on dark backgrounds.
 The faces 'mode-line' and 'mode-line-highlight' now have separate
 definitions for dark backgrounds.  Previously, these two faces looked
@@ -629,27 +547,24 @@ the same with both light and dark background modes.  To get the previous
 visuals for these two faces, customize them to have the colors "grey75"
 and "grey40", respectively, regardless of the background mode.
 
-+++
 *** New user option 'mode-line-collapse-minor-modes'.
-If non-nil, minor mode lighters on the mode line are collapsed into a
+This is a new, built-in facility to hide minor mode lighters.  If
+non-nil, minor mode lighters on the mode line are collapsed into a
 single button.  The value can also be a list to specify minor mode
 lighters to hide or show.  The default value is nil, which retains the
 previous behavior of showing all minor mode lighters.
 
----
 *** New user option 'mode-line-modes-delimiters'.
 This option allows changing or removing the delimiters shown around
 the major mode and list of minor modes in the mode line.  The default
 retains the existing behavior of using parentheses.
 
-+++
 *** New minor mode 'mode-line-invisible-mode'.
 This minor mode makes the mode line of the current buffer invisible.
 The command 'mode-line-invisible-mode' toggles the visibility of the
 current-buffer's mode line.  The default is to show the mode line of
 every buffer.
 
----
 *** The standard mode line no longer specifies minimum widths.
 The default values for the 'mode-line-position' variable and
 'mode-line-format' user option no longer specify any minimum widths.  If
@@ -658,35 +573,29 @@ customize the values of these variables to include minimum widths again.
 
 ** Tab Bars and Tab Lines
 
----
 *** New commands 'split-tab' and 'merge-tabs'.
 'split-tab' moves a specified number of windows from an existing tab to
 a newly created tab.  'merge-tabs' merges all windows from two tabs into
 one of these tabs, and closes the other.
 
----
 *** New abnormal hook 'tab-bar-auto-width-functions'.
 This hook allows you to control which tab-bar tabs are auto-resized.
 
----
 *** 'mouse-face' properties are now supported on the 'tab-bar'.
 'tab-bar' tab buttons are now highlighted when the mouse pointer
 hovers over them.  You can customize the new face
 'tab-bar-tab-highlight'.
 
----
 *** New abnormal hook 'tab-bar-post-undo-close-tab-functions'.
 This hook allows you to operate on a reopened tab.
 
 This is useful when you define custom tab parameters that may need
 adjustment when a tab is restored, without resorting to advice.
 
----
 *** Tabs are now closed upon releasing the middle mouse button.
 Previously, closing the tab-bar's tabs occurred upon pressing the
 button.
 
----
 *** New user option 'tab-bar-define-keys'.
 This controls which key bindings tab-bar creates.  Values are t, the
 default, which defines all keys and is backwards compatible, 'numeric'
@@ -697,52 +606,43 @@ This is useful to avoid key binding conflicts, such as when folding in
 outline mode using 'TAB' keys, or when a user wants to define her own
 tab-bar keys without first having to remove the defaults.
 
----
 *** New variable 'tab-bar-format-tab-help-text-function'.
 This variable may be overridden with a user-provided function to
 customize the help text for tabs displayed on the tab-bar.  Help text is
 normally shown in the echo area or via tooltips.  See the variable's
 docstring for the arguments passed to a help-text function.
 
----
 *** New variable 'tab-bar-truncate'.
 When non-nil, it truncates the tab bar, and therefore prevents
 wrapping and resizing the tab bar to more than one line.
 
----
 *** New user option 'tab-line-define-keys'.
 When t, the default, it redefines window buffer switching keys
 such as 'C-x <LEFT>' and 'C-x <RIGHT>' to tab-line specific variants
 for switching tabs.
 
----
 *** New command 'tab-line-move-tab-forward' ('C-x M-<RIGHT>').
 Together with the new command 'tab-line-move-tab-backward'
 ('C-x M-<LEFT>'), it can be used to move the current tab
 on the tab line to a different position.
 
----
 *** New command 'tab-line-close-other-tabs'.
 It is bound to the tab's context menu item "Close other tabs".
 
----
 *** New user option 'tab-line-exclude-buffers'.
 This user option controls where 'tab-line-mode' should not be enabled in
 a buffer.  The value must be a condition which is passed to
 'buffer-match-p'.
 
----
 *** New user option 'tab-line-close-modified-button-show'.
 With this user option, if non-nil (the default), the tab close button
 will change its appearance if the tab's selected buffer has been
 modified.
 
----
 *** New user option 'tab-line-tabs-window-buffers-filter-function'.
 This user option controls which buffers should appear in the tab line.
 By default, this is set so as to not filter out any buffers.
 
-+++
 *** New faces 'tab-line-active' and 'tab-line-inactive'.
 These inherit from the 'tab-line' face, but the faces actually used on
 the tab lines are now these two: the selected window uses
@@ -750,57 +650,46 @@ the tab lines are now these two: the selected window uses
 
 ** Help
 
-+++
 *** New binding 'C-h u' for 'apropos-user-option'.
 
----
 ** IDLWAVE has moved to GNU ELPA.
 The version included with Emacs is out-of-date, and is now marked as
 obsolete.  Use 'list-packages' to install the 'idlwave' package from GNU
 ELPA instead.
 
-+++
 ** New faces 'header-line-active' and 'header-line-inactive'.
 These inherit from the 'header-line' face, but the faces actually used
 on the header lines are now these two: the selected window uses
 'header-line-active', and non-selected windows use 'header-line-inactive'.
 
----
 ** In 'customize-face', the "Font family" attribute now supports completion.
 
-+++
 ** 'process-adaptive-read-buffering' is now nil by default.
 Setting this variable to a non-nil value reduces performance and leads
 to wrong results in some cases.  We believe that it is no longer useful;
 please contact us if you still need it for some reason.
 
----
 ** 'byte-compile-cond-use-jump-table' is now obsolete.
 
----
 ** Modified settings for an enabled theme now apply immediately.
 Evaluating a 'custom-theme-set-faces' or 'custom-theme-set-variables'
 call for an enabled theme causes the settings to apply immediately,
 without a need to re-load the theme.
 
----
 ** 'describe-variable' now automatically says if 'setopt' is needed.
 If a user option has a defcustom ':set' function, users will normally
 need to set it with 'setopt' for it to take an effect.  If the docstring
 doesn't already mention 'setopt', the 'describe-variable' command will
 now add a note about this automatically.
 
-+++
 ** New user option 'eldoc-help-at-pt' to show help at point via ElDoc.
 When enabled, display the 'help-at-pt-kbd-string' via ElDoc.  This
 setting is an alternative to 'help-at-pt-display-when-idle'.
 
----
 ** New user option 'native-comp-async-on-battery-power'.
 Customize this to nil to disable starting new asynchronous native
 compilations while AC power is not connected.
 
-+++
 ** New user option 'show-paren-not-in-comments-or-strings'.
 If this option is non-nil, it tells 'show-paren-mode' not to highlight
 parens inside comments and strings.  If set to 'all', 'show-paren-mode'
@@ -809,13 +698,11 @@ to 'on-mismatch', mismatched parens inside comments and strings will not
 be highlighted.  If set to nil (the default), highlight parens wherever
 they are.
 
-+++
 ** New user option 'view-lossage-auto-refresh'.
 If this option is non-nil, the lossage buffer of 'view-lossage' will be
 refreshed automatically for each new input keystroke and command
 invoked.
 
----
 ** Change in SVG foreground color handling.
 SVG images no longer have the 'fill' attribute set to the value of
 ':foreground' or the current text foreground color.  The 'currentcolor'
@@ -827,7 +714,6 @@ To use the ':foreground' or current text color ensure the 'fill' attribute
 in the SVG is set to 'currentcolor', or set the image spec's ':css'
 value to 'svg {fill: currentcolor;}'.
 
----
 ** Errors signaled by 'emacsclient' connections can now enter the debugger.
 If 'debug-on-error' is non-nil, errors signaled by Lisp programs
 executed by 'emacsclient' connections will now enter the Lisp debugger
@@ -835,20 +721,17 @@ and show a backtrace.  If 'debug-on-error' is nil, these errors will be
 sent to 'emacsclient', as before, and will be displayed on the terminal
 from which 'emacsclient' was invoked.
 
-+++
 ** Empty string arguments to emacsclient are no longer ignored.
 Emacs previously discarded arguments to emacsclient of zero length, such
 as in 'emacsclient --eval "(length (pop server-eval-args-left))" ""'.
 These are no longer discarded.
 
-+++
 ** Emacs now uses the 'setrgbf' and 'setrgbb' terminfo capabilities.
 Emacs now uses 24-bit colors on terminals that support the 'setrgbf' and
 'setrgbb' user-defined terminfo capabilities.  These are supported by
 more terminals and applications than the old capabilities, 'setf24' and
 'setb24', which are now obsolete.
 
-+++
 ** New user option 'xterm-update-cursor' to update cursor display on TTYs.
 When enabled, Emacs sends Xterm escape sequences on Xterm-compatible
 terminals to update the cursor's appearance.  Emacs can update the
@@ -857,23 +740,19 @@ on graphical displays then when this option is enabled Emacs will use a
 purple bar cursor on compatible terminals as well.  See the Info node
 "(emacs) Cursor Display" for more information.
 
----
 ** New command 'copy-theme-options'.
 You can use this command to copy options from a theme into your user
 configuration.
 
----
 ** New user option 'multiple-terminals-merge-keyboards'.
 Customizing this option to non-nil disables entering single-keyboard
 mode in most cases in which Emacs would by default enter that mode.
 This can make things work better for some cases of X forwarding; see the
 Info node "(emacs) Multiple Displays".
 
-+++
 ** Emacs now comes with Org v9.8.
 See the file "etc/ORG-NEWS" for user-visible changes in Org.
 
-+++
 ** New user option 'compilation-search-extra-path'.
 compile.el will now use paths specified in both
 'compilation-search-extra-path' and 'compilation-search-path' when
@@ -884,7 +763,6 @@ per-project basis with directory-local variables.
 
 * Editing Changes in Emacs 31.1
 
-+++
 ** Commands for keyboard translation.
 'key-translate' is now interactive.  It prompts for a key to translate
 from, and another to translate to, and sets 'keyboard-translate-table'.
@@ -894,19 +772,15 @@ translation table.
 
 ** Internationalization
 
----
 *** Emacs now supports Unicode Standard version 17.0.
 
----
 *** New input method 'greek-polytonic'.
 This input method has support for polytonic and archaic Greek
 characters.
 
----
 *** New language environment and input method for Tifinagh.
 The Tifinagh script is used to write the Berber languages.
 
----
 *** New input methods for Northern Iroquoian languages.
 Input methods are now implemented for Haudenosaunee languages in the
 Northern Iroquoian language family: 'mohawk-postfix' (Mohawk
@@ -918,37 +792,31 @@ Northern Iroquoian language family: 'mohawk-postfix' (Mohawk
 general-purpose 'haudenosaunee-postfix' input method to facilitate
 writing in the orthographies of the six languages simultaneously.
 
----
 *** New input methods for languages based on Burmese.
 These include: Burmese, Burmese (visual order), Shan, and Mon.
 
----
 *** New language environment and input methods for Syriac languages.
 A new language environment for languages that use the Syriac script:
 Classical Syriac, Aramaic, and others.  There are two new input methods
 for these languages: Syriac and Syriac (phonetic).
 
----
 ** 'visual-wrap-prefix-mode' now supports variable-pitch fonts.
 When using 'visual-wrap-prefix-mode' in buffers with variable-pitch
 fonts, the wrapped text will now be lined up correctly so that it is
 exactly below the text after the prefix on the first line.
 
----
 ** New commands 'unix-word-rubout' and 'unix-filename-rubout'.
 Unix-words are words separated by whitespace regardless of the buffer's
 syntax table.  In a Unix terminal or shell, 'C-w' kills by Unix-word.
 The new commands 'unix-word-rubout' and 'unix-filename-rubout' allow
 you to bind keys to operate more similarly to such a terminal.
 
----
 ** New user option 'kill-region-dwim'.
 This option, if non-nil, modifies the fall-back behavior of
 'kill-region' ('C-w') if no region is active, and will kill the last
 word instead of raising an error.  If you have disabled Transient Mark
 mode you might prefer to bind 'unix-word-rubout' to a key instead.
 
----
 ** New user option 'delete-pair-push-mark'.
 This option, if non-nil, makes 'delete-pair' push a mark at the end of
 the region enclosed by the deleted delimiters.  This makes it easy to
@@ -956,13 +824,11 @@ act on that region.  For example, you can highlight it using 'C-x C-x'.
 
 ** Electric Pair mode
 
-+++
 *** Electric Pair mode can now pair multiple delimiters at once.
 You can now insert or wrap text with multiple sets of parentheses and
 other matching delimiters at once with Electric Pair mode, by providing
 a prefix argument when inserting one of the delimiters.
 
----
 *** Electric Pair mode now supports multi-character paired delimiters.
 'electric-pair-pairs' and 'electric-pair-text-pairs' now allow using
 strings for multi-character paired delimiters.
@@ -972,39 +838,33 @@ To use this, add a list to both electric pair user options: '("/*" . "*/")'.
 You can also specify that an extra space should be inserted after the
 first string, like this: '("/*" " */" t)'.
 
----
 ** New user option 'electric-indent-actions'.
 This user option specifies a list of actions to reindent.  The possible
 elements for this list are: 'yank' to reindent the yanked text, and
 'before-save' to indent the whole buffer before saving it.
 
-+++
 ** You can now use 'M-~' during 'C-x s' ('save-some-buffers').
 Typing 'M-~' while saving some buffers means not to save the buffer and
 also to mark it as unmodified.  This is an alternative way to mark a
 buffer as unmodified which doesn't require switching to that buffer.
 
-+++
 ** New minor mode 'delete-selection-local-mode'.
 This mode sets 'delete-selection-mode' buffer-locally.  This can be
 useful for enabling or disabling the features of 'delete-selection-mode'
 based on the state of the buffer, such as for the different states of
 modal editing packages.
 
----
 ** New user option 'exchange-point-and-mark-highlight-region'.
 When set to nil, this modifies 'exchange-point-and-mark' so that it doesn't
 activate the mark if it is not already active.
 The default value is t, which retains the old behavior.
 This variable has no effect when Transient Mark mode is off.
 
----
 ** You can now use 'M-s t' to swap FROM and TO during 'query-replace'.
 Likewise during 'query-replace-regexp'.  The original binding of 'M-s'
 ('next-matching-history-element') is now available on 'M-s M-s' or 'M-s
 s' for query replace minibuffer input.
 
----
 ** New commands for filling text using semantic linefeeds.
 The new command 'fill-paragraph-semlf' fills a paragraph of text using
 "semantic linefeeds", where a newline is inserted after every sentence.
@@ -1014,7 +874,6 @@ can set the variable 'fill-region-as-paragraph-function' to the value
 'fill-region-as-paragraph-semlf' to make commands like 'fill-paragraph'
 and 'fill-region' fill text using semantic linefeeds.
 
----
 ** Temporary files are named differently when 'file-precious-flag' is set.
 When the user option 'file-precious-flag' is set to a non-nil value,
 Emacs now names the temporary file it creates while saving buffers using
@@ -1023,12 +882,10 @@ fails for some reason, and the temporary file is not renamed back to the
 original file's name, and you can easily identify which file's saving
 failed.
 
-+++
 ** 'C-u C-x .' clears the fill prefix.
 You can now use 'C-u C-x .' to clear the fill prefix, similarly to how
 you could already use 'C-u C-x C-n' to clear the goal column.
 
-+++
 ** New prefix argument for 'C-/' in Dired and Proced modes.
 The Dired and Proced major modes bind mode-specific undo commands to the
 same keys to which 'undo' is globally bound, 'C-/', 'C-_' and 'C-x u'.
@@ -1036,13 +893,11 @@ These commands did not previously accept a prefix argument.
 Now a numeric prefix argument specifies a repeat count, just like it
 already did for 'undo'.
 
----
 ** New minor mode 'center-line-mode'.
 This mode keeps modified lines centered horizontally according to the
 value of 'fill-column', by calling 'center-line' on each non-empty line
 of the modified region.
 
-+++
 ** New command 'unfill-paragraph'.
 This is the inverse of 'M-q' ('fill-paragraph').
 
@@ -1051,20 +906,16 @@ This is the inverse of 'M-q' ('fill-paragraph').
 
 ** Project
 
----
 *** New command 'project-root-find-file'.
 It is equivalent to running 'project-any-command' with 'find-file'.
 
----
 *** New command 'project-customize-dirlocals'.
 It is equivalent to running 'project-any-command' with
 'customize-dirlocals'.
 
----
 *** Improved prompt for 'project-switch-project'.
 The prompt now displays the project on which to invoke a command.
 
----
 *** 'project-prompter' values may be called with up to three arguments.
 These allow callers of the value of 'project-prompter' to specify a
 prompt string; prompt the user to choose between a subset of all the
@@ -1072,31 +923,26 @@ known projects; and disallow returning arbitrary directories.
 See the docstring of 'project-prompter' for a full specification of
 these new optional arguments.
 
----
 *** 'project-current' has a new optional argument, MAYBE-PROMPT.
 If 'project-current' is called with this argument non-nil, then it is
 passed to the 'project-prompter' to use as a prompt string.
 Callers can use this to indicate the reason for which or context in
 which Emacs should ask the user to select a project.
 
----
 *** New command 'project-find-matching-buffer'.
 It can be used when switching between projects with similar file trees
 (such as Git worktrees of the same repository).  It supports being
 invoked standalone or from the 'project-switch-commands' dispatch menu.
 See also the 'C-x v w w' ('vc-switch-working-tree') command, below.
 
----
 *** New variable 'project-find-matching-buffer-function'.
 Major modes can set this to major mode-specific functions to control how
 'project-find-matching-buffer' finds matching buffers.
 
-+++
 *** New user option 'project-list-exclude'.
 This user option describes projects that should always be skipped by
 'project-remember-project'.
 
----
 *** New user option 'project-prune-zombie-projects'.
 This user option controls the automatic deletion of projects from
 'project-list-file', when prompting for a project, that cannot be
@@ -1109,37 +955,31 @@ where WHEN specifies where the deletion will be performed, and PREDICATE
 is a function which takes one argument, and must return non-nil if the
 project should be removed.
 
----
 *** New command 'project-save-some-buffers' bound to 'C-x p C-x s'.
 This is like 'C-x s', but only for this project's buffers.
 
 *** 'project-remember-project' is now interactive.
 
----
 *** 'project-shell' and 'project-eshell' support numeric prefix buffer naming.
 They now accept numeric prefix arguments to select or create numbered
 shell sessions.  For example, 'C-2 C-x p s' switches to or creates a
 buffer named "*name-of-project-shell<2>*".  By comparison, a plain
 universal argument as in 'C-u C-x p s' always creates a new session.
 
----
 *** 'project-switch-to-buffer' re-uniquifies buffer names while prompting.
 When 'uniquify-buffer-name-style' is non-nil, 'project-switch-to-buffer'
 changes the buffer names to only make them unique within the given
 project, during completion.  That makes some items shorter.
 
----
 *** 'project-switch-to-buffer' uses 'project-buffer' as completion category.
 The category defaults are the same as for 'buffer', but any user
 customizations need to be re-added.
 
-+++
 *** 'project-mode-line' can now show the project name only for local files.
 If the value of 'project-mode-line' is 'non-remote', project name and
 the Project menu will be shown on the mode line only for projects with
 local files.
 
----
 *** The VC-aware project backend caches the current project and its name.
 The duration for which the values are cached depends on whether it is
 called from a 'non-essential' context, and is determined by the variables
@@ -1147,11 +987,9 @@ called from a 'non-essential' context, and is determined by the variables
 
 ** Network Security Manager (NSM)
 
----
 *** NSM warns about TLS 1.1 by default.
 It has been deprecated by RFC 8996, published in 2021.
 
----
 *** NSM warns about DHE and RSA key exchange by default.
 Emacs now warns about ephemeral Diffie-Hellman key exchange, and static
 RSA key exchange, also when 'network-security-level' is customized to
@@ -1159,7 +997,6 @@ its default 'medium' value.
 
 ** Etags
 
-+++
 *** New command-line options for handling unrecognized programming languages.
 The new command-line option '--no-fallback-lang' disables attempts to
 parse as Fortran or C/C++ files whose programming language 'etags' could
@@ -1170,7 +1007,6 @@ tags tables for files in which no tags were found.
 
 ** Delete Selection mode
 
----
 *** New face 'delete-selection-replacement' for the replacement text.
 This comes with a change to how we track what is considered "the
 replacement text", which should be more robust, and is made more clear
@@ -1178,14 +1014,12 @@ by the highlighting.
 
 ** Editorconfig
 
----
 *** 'editorconfig-apply' is declared obsolete.
 You can now use 'editorconfig-display-current-properties' without having
 to call 'editorconfig-apply'.
 
 ** Auth Source
 
-+++
 *** Non-existing or empty files in 'auth-sources' are ignored.
 File-based data stores are ignored in 'auth-sources' if the underlying
 data file does not exist.  This is relevant if a new secret is stored in
@@ -1193,12 +1027,10 @@ such a file; the first usable entry of 'auth-sources' is selected as the
 target file.  If you want files that do not exist to also be selected,
 customize the user option 'auth-source-ignore-non-existing-file' to nil.
 
----
 *** 'auth-sources' set to nil means use only the password cache.
 
 ** Autoinsert
 
-+++
 *** New condition for 'auto-insert-alist'.
 'auto-insert-alist' can now contain predicates taking no argument as
 conditions.  These types of conditions should be declared with
@@ -1207,24 +1039,20 @@ finer-grained control.
 
 ** Register
 
-+++
 *** New commands 'buffer-to-register' and 'file-to-register'.
 These allow users to interactively store files and buffers in registers.
 Killed buffers stored in a register using 'buffer-to-register' are
 automatically converted to a file-query value if the buffer was visiting
 a file.
 
----
 *** The "*Register Preview*" buffer shows only suitable registers.
 That was already the case for the "fancy" UI but is now also true in
 the default UI you get, i.e., when 'register-use-preview' is 'traditional'.
 
----
 *** The "*Register Preview*" buffer shows sorted items.
 
 ** Tree-sitter
 
-+++
 *** New user option 'treesit-enabled-modes'.
 You can customize it either to t to enable all available
 tree-sitter-based modes, or to select a list of tree-sitter-based modes
@@ -1233,25 +1061,21 @@ to enable.  Depending on your customization, it modifies the variable
 'treesit-major-mode-remap-alist' prepared by tree-sitter-based mode
 packages.
 
----
 *** New user option 'treesit-auto-install-grammar'.
 It controls the automatic installation of tree-sitter grammar libraries
 needed for tree-sitter-based modes, if these grammar libraries are not
 available when such modes are turned on.
 
----
 *** 'treesit-extra-load-path' is now a customizable user option.
 The first directory in the list is used as the default directory
 to install the language grammar when 'treesit-auto-install-grammar'
 is 'ask', 'ask-dir' or 'always'.
 
----
 *** 'treesit-language-source-alist' supports keywords.
 The language and URL are mandatory, but remaining data can use keywords like
 
     (json "https://github.com/tree-sitter/tree-sitter-json" :commit "4d770d3")
 
----
 *** The file treesit-x.el defines a number of simple tree-sitter modes.
 Using the new macro 'define-treesit-generic-mode', generic modes are
 defined including, but not limited to, 'gitattributes-generic-ts-mode'.
@@ -1259,7 +1083,6 @@ Visiting a file in such mode asks for confirmation before installing
 its tree-sitter grammar.  Then it highlights the visited file
 according to the syntax defined by the grammar.
 
----
 *** New command 'treesit-cycle-sexp-thing'.
 It cycles the type of navigation for commands that move across sexp's
 and lists, such as 'treesit-forward-sexp', 'treesit-forward-list',
@@ -1270,12 +1093,10 @@ symbols and using the thing 'list' for lists.
 With the 'sexp' type, these commands move across nodes defined by
 the tree-sitter thing 'sexp' in 'treesit-thing-settings'.
 
-+++
 *** Indirect buffers can have their own parser list.
 Before, indirect buffers share their base buffer's parser list and
 parsers.  Now they can have their own parser list.
 
-+++
 *** New variable 'treesit-language-remap-alist'.
 This variable allows a user to remap one language into another, such
 that creating a parser for language A actually creates a parser for
@@ -1286,14 +1107,12 @@ This is useful for reusing font-lock rules and indentation rules of
 language A for language B when language B is a strict superset of
 language A.
 
-+++
 *** New accessor functions for each setting in 'treesit-font-lock-settings'.
 Now you can access a setting's query, feature, enable flag, and override
 flag by 'treesit-font-lock-setting-query',
 'treesit-font-lock-setting-feature', 'treesit-font-lock-setting-enable',
 and 'treesit-font-lock-setting-override'.
 
----
 *** New tree-sitter thing 'list'.
 Unlike the existing thing 'sexp' that includes both lists and atoms,
 'list' makes only lists be navigated by 'forward-sexp'.
@@ -1301,7 +1120,6 @@ The new command 'treesit-forward-sexp-list' uses 'list'
 to move across lists.  But to move across atoms inside the list
 it uses 'forward-sexp-default-function'.
 
----
 *** New tree-sitter based functions for moving by lists.
 If a major mode defines 'list' in 'treesit-thing-settings',
 tree-sitter setup for these modes sets 'forward-list-function' to
@@ -1310,45 +1128,37 @@ tree-sitter setup for these modes sets 'forward-list-function' to
 'forward-list', 'up-list', and 'down-list' motion commands for those
 modes.
 
----
 *** Tree-sitter enabled modes now properly support 'show-paren-mode'.
 They do that by letting 'show-paren-mode' use the results of parsing by
 the tree-sitter library.  The new function 'treesit-show-paren-data' is
 used to communicate the tree-sitter parsing results to 'show-paren-mode'.
 
----
 *** Tree-sitter enabled modes now properly support 'hs-minor-mode'.
 All commands from hideshow.el can selectively display blocks
 defined by the new tree-sitter thing 'list'.
 
----
 *** New tree-sitter thing 'comment'.
 The new variable 'forward-comment-function' is set to the new function
 'treesit-forward-comment' if a major mode defines the thing 'comment'.
 
-+++
 *** New function 'treesit-query-eagerly-compiled-p'.
 This function returns non-nil if a query was eagerly compiled.
 
-+++
 *** New function 'treesit-query-source'.
 This function returns the string or sexp source query of a compiled query.
 
-+++
 *** New function 'treesit-language-display-name'.
 This new function returns the display name of a language given the
 language symbol.  For example, 'cpp' is translated to "C++".  A new
 variable 'treesit-language-display-name-alist' holds the translations of
 language symbols where that translation is not trivial.
 
----
 *** New function 'treesit-merge-font-lock-feature-list'.
 This function merges two tree-sitter font-lock feature lists.  It
 returns a new font-lock feature list with no duplicates at the same
 level.  It can be used to merge font-lock feature lists in a
 multi-language major mode.
 
----
 *** New function 'treesit-replace-font-lock-feature-settings'.
 Given two tree-sitter font-lock settings, it replaces the feature in the
 second font-lock settings with the same feature in the first font-lock
@@ -1356,66 +1166,54 @@ settings.  In a multi-language major mode it is sometimes necessary to
 replace features from one of the major modes with others that are
 better suited to the new multilingual context.
 
-+++
 *** New variable 'treesit-aggregated-simple-imenu-settings'.
 This variable allows major modes to setup Imenu for multiple languages.
 
-+++
 *** New variable 'treesit-aggregated-outline-predicate'.
 This variable allows major modes to setup 'outline-minor-mode'
 for multiple languages.
 
----
 *** New function 'treesit-simple-indent-add-rules'.
 This new function makes it easier to customize indent rules for
 tree-sitter modes.
 
----
 *** New function 'treesit-simple-indent-modify-rules'.
 Given two tree-sitter indent rules, it replaces, adds, or prepends rules
 in the old rules with new ones, then returns the modified rules.  In a
 multi-language major mode it is sometimes necessary to modify rules from
 one of the major modes to better suit the new multilingual context.
 
----
 *** New variable 'treesit-simple-indent-override-rules'.
 Users can customize this variable to add simple custom indentation rules
 for tree-sitter major modes.
 
-+++
 *** New variable 'treesit-languages-require-line-column-tracking'.
 Now Emacs can optionally track line and column numbers for buffer edits
 and send that information to tree-sitter parsers.  Parsers of languages
 in this list will receive line and column information.  This is only
 needed for very few languages.  So far only Haskell is known to need it.
 
-+++
 *** New function 'treesit-tracking-line-column-p'.
 New function to check if a buffer is tracking line and column for buffer
 edits.
 
-+++
 *** New function 'treesit-parser-tracking-line-column-p'.
 New function to check if a parser is receiving line and column
 information.
 
-+++
 *** 'treesit-language-at-point-function' is now optional.
 Multi-language major modes can rely on the default return value from
 'treesit-language-at' that uses the new function 'treesit-parsers-at'.
 
-+++
 *** New function 'treesit-query-with-optional'.
 When used in 'treesit-font-lock-rules', 'treesit-query-with-optional'
 returns a default query plus the valid queries from a list of optional
 queries.
 
-+++
 *** New function 'treesit-query-with-fallback'.
 When used in 'treesit-font-lock-rules', 'treesit-query-with-fallback'
 selects the first valid query from a list.
 
-+++
 *** Tree-sitter thing functions now work better with multiple parsers.
 The following functions now better handle the case when there are
 multiple parsers at point: 'treesit-thing-prev', 'treesit-thing-next',
@@ -1427,19 +1225,16 @@ functions now also take an additional optional argument, PARSER, that
 allows the caller to specify a parser or language to use.  That also
 means 'treesit-beginning/end-of-defun' can now move across parsers.
 
-+++
 *** New command 'treesit-explore'.
 This command replaces 'treesit-explore-mode'.  It turns on
 'treesit-explore-mode' if it is not on, and pops up the explorer buffer
 if it is already on.
 
-+++
 *** 'treesit-explore-mode' now supports local parsers.
 Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser
 rather than a language, and it is now possible to select a local parser
 at point to explore.
 
-+++
 *** Tree-sitter query predicates ':equal', ':match', and ':pred' are deprecated.
 Use ':eq?', ':match?', and ':pred?' instead.  The change is because
 newer tree-sitter libraries mandate query predicates to end with a
@@ -1453,51 +1248,42 @@ convention (regexp arg second) and Emacs convention (regexp arg first).
 
 ** Track changes
 
-+++
 *** New variable 'track-changes-undo-only' to distinguish undo changes.
 
 ** Hideshow
 
-+++
 *** New command 'hs-cycle'.
 This command cycles the visibility state of the current block between
 hiding the parent block, hiding only the nested blocks and showing all
 the blocks.
 
-+++
 *** New user option 'hs-cycle-filter' for visibility-cycling with 'TAB'.
 This user option controls the positions on the headline of hideable blocks
 where the 'TAB' key cycles the blocks' visibility.
 
-+++
 *** New command 'hs-toggle-all'.
 This command hides or shows all the blocks in the current buffer.
 
----
 *** 'hs-hide-level' no longer hides all the blocks in the current buffer.
 If 'hs-hide-level' was not inside a code block, it would hide all the
 blocks in the buffer like 'hs-hide-all'.  Now it only hides all the
 second level blocks.
 
-+++
 *** New user option 'hs-display-lines-hidden'.
 If this option is non-nil, Hideshow displays the number of hidden lines
 next to the ellipsis.  By default this is disabled.
 
-+++
 *** New user option 'hs-show-indicators'.
 This user option determines if Hideshow should display indicators to
 show and toggle the block hiding.  If non-nil, the indicators are enabled.
 By default this is disabled.
 
-+++
 *** New user option 'hs-indicator-maximum-buffer-size'.
 This user option limits the display of Hideshow indicators to buffers
 that are not too large.  By default, buffers larger than 2MB have the
 indicators disabled; a value of nil will activate the indicators
 regardless of the buffer size.
 
-+++
 *** New user option 'hs-indicator-type'.
 This user option determines which indicator type should be used for the
 block indicators.
@@ -1510,14 +1296,12 @@ The new icons 'hs-indicator-show' and 'hs-indicator-hide' can be used to
 customize the indicators appearance, but apply only if
 'hs-indicator-type' is set to 'margin' or nil.
 
-+++
 *** The hiding behavior of some hideshow commands has changed.
 'hs-hide-block', 'hs-hide-level', 'hs-cycle' and 'hs-toggle-hiding' now
 hide the innermost block to which the current line belongs instead of
 the block after point.  To restore the old behavior, set the new user
 option 'hs-hide-block-behavior' to 'after-point'.
 
----
 *** The variable 'hs-special-modes-alist' is now obsolete.
 Instead of customizing Hideshow for a mode by setting the elements of
 'hs-special-modes-alist', such as START, COMMENT-START,
@@ -1525,11 +1309,9 @@ FORWARD-SEXP-FUNC, etc., major mode authors should set the corresponding
 buffer-local variables 'hs-block-start-regexp', 'hs-c-start-regexp',
 'hs-forward-sexp-function', etc.
 
-+++
 *** 'hs-hide-level' can now hide comments too.
 This is controlled by 'hs-hide-comments-when-hiding-all'.
 
-+++
 *** New minor mode 'hs-indentation-mode'.
 This buffer-local minor mode configures 'hs-indentation-mode' to detect
 blocks based on indentation.
@@ -1539,7 +1321,6 @@ adjust the hiding range for this minor mode.
 
 ** C-ts mode
 
-+++
 *** New user option 'c-ts-mode-enable-doxygen'.
 By default, this is nil, and the Doxygen comment blocks in C/C++ sources
 are highlighted like other comments.  When non-nil, Doxygen comment
@@ -1547,14 +1328,12 @@ blocks are font locked if the Doxygen grammar library is available.
 
 ** Csharp-ts mode
 
----
 *** Renamed feature in 'treesit-font-lock-feature-list'.
 The feature 'property' has been renamed to 'attribute', since this is
 what it is generally called among C# programmers.
 
 ** Go-ts mode
 
-+++
 *** New unit test commands.
 Three new commands are now available to run unit tests.
 
@@ -1576,40 +1355,34 @@ additional flags to pass to the go test command line.
 
 ** Lua-ts mode
 
----
 *** New user option 'lua-ts-auto-close-block-comments'.
 When non-nil, inserting a block comment "--[[" will close it by
 inserting its respective "]]".  By default, this is disabled.
 
 ** Java-ts mode
 
-+++
 *** New user option 'java-ts-mode-enable-doxygen'.
 By default, this is nil, and the Doxygen comment blocks in Java sources
 are highlighted like other comments.  When non-nil, Doxygen comment
 blocks are font locked if the Doxygen grammar library is available.
 
----
 *** New user option 'java-ts-method-chaining-indent-offset'.
 Now method chaining is indented by 8 spaces rather than 4, and this
 option controls how much is indented for method chaining.
 
 ** JSON-ts mode
 
----
 *** New command 'json-ts-jq-path-at-point'.
 This command copies the path of the JSON element at point to the
 kill-ring, but formatted for use with the 'jq' utility.
 
 ** PHP-ts mode
 
----
 *** 'php-ts-mode' now depends on 'mhtml-ts-mode'.
 The direct dependency on 'js-ts-mode', 'css-ts-mode' and 'html-ts-mode'
 has now been replaced by 'mhtml-ts-mode'.  Navigation, Outline and Imenu
 work for all languages, and code maintenance is easier.
 
----
 *** 'php-ts-mode-run-php-webserver' can now accept a custom "php.ini" file.
 You can use the new optional argument CONFIG when calling
 'php-ts-mode-run-php-webserver' to pass an alternative "php.ini" file to
@@ -1617,51 +1390,42 @@ the built-in Web server.  Interactively, when invoked with a prefix
 argument, 'php-ts-mode-run-php-webserver' prompts for the config file as
 well as for other connection parameters.
 
----
 *** The user option 'php-ts-mode-css-fontify-colors' has been removed.
 'mhtml-ts-mode-css-fontify-colors' replaces this option.
 
----
 *** New user option 'php-ts-mode-html-relative-indent'.
 In buffers containing both PHP and HTML, this option allows you to
 define how the PHP code should be indented relative to the position of
 the HTML tags.
 
----
 *** New user option 'php-ts-mode-html-indent-offset'.
 Offset of PHP code block relative to HTML tags.
 
----
 *** New user option 'php-ts-mode-find-sibling-rules'.
 Rules for finding siblings of a PHP file.
 
----
 *** New user option 'php-ts-mode-phpdoc-highlight-errors'.
 When non-nil, it highlights unknown PHPDOC tags using
 'font-lock-warning-face' so that the user can identify them more easily.
 
----
 *** New command 'php-ts-mode-show-ini'.
 Show the location of the PHP ini files.  If the current buffer is
 associated to a remote PHP file, show the remote PHP ini files.
 
 ** Rust-ts mode
 
----
 *** New user option 'rust-ts-mode-fontify-number-suffix-as-type'.
 Rust number literals may have an optional type suffix.  When this option
 is non-nil, this suffix is fontified using 'font-lock-type-face'.
 
 ** YAML-ts mode
 
----
 *** New user option 'yaml-ts-mode-yamllint-options'.
 Additional options for 'yamllint', the command used for Flymake's YAML
 support.
 
 ** EIEIO
 
----
 *** New value 'warn' for 'eieio-backward-compatibility'.
 This is the new default value and causes warnings to be emitted
 at run-time for the use of the associated deprecated features.
@@ -1670,7 +1434,6 @@ the previous silence.
 
 ** Text mode
 
----
 *** New commands to convert between ASCII and full-width characters.
 New commands 'fullwidth-region' and 'fullwidth-word' convert ASCII
 characters in region or in the word at point to the corresponding
@@ -1681,40 +1444,33 @@ converted to '1', etc.  Companion commands 'halfwidth-region' and
 
 ** Texinfo mode
 
----
 *** Texinfo mode now can auto-close the ``'' pairs.
 Now inserting `` in 'texinfo-mode' will close it by inserting its
 respective '', if 'electric-pair-mode' is enabled.
 
 ** ASM mode
 
----
 *** 'asm-mode-set-comment-hook' is obsolete.
 You can now set 'asm-comment-char' from 'asm-mode-hook' instead.
 
 ** Ibuffer
 
----
 *** New column 'recency' in Ibuffer display.
 The user option 'ibuffer-formats' configures the Ibuffer formats.  Add
 'recency' to the format to display the column.
 
----
 *** New value 'title' for the user option 'ibuffer-use-header-line'.
 Display column titles in the header line if 'ibuffer-use-header-line' is
 set to 'title'.
 
----
 *** New user option 'ibuffer-human-readable-size'.
 When non-nil, buffer sizes are shown in human readable format.
 
----
 *** 'define-ibuffer-op' prompts can now be functions.
 The prompts 'opstring' and 'active-opstring' can now either be strings
 or functions.  This is useful when your prompts can benefit from dynamic
 content.
 
----
 *** New Ibuffer-dedicated faces.
 New faces 'ibuffer-marked', 'ibuffer-deletion', 'ibuffer-title', and
 'ibuffer-filter-group-name'.  By default, they inherit from the
@@ -1723,20 +1479,17 @@ behavior.
 
 ** ElDoc
 
----
 *** New ElDoc function 'elisp-eldoc-funcall-with-docstring'.
 This function includes the current function's docstring in the ElDoc
 echo area and can be used as a more detailed alternative to
 'elisp-eldoc-funcall'.
 
----
 *** New user option 'elisp-eldoc-funcall-with-docstring-length'.
 This user option specifies how long function docstrings must be
 displayed in 'elisp-eldoc-funcall-with-docstring'.  If set to 'short'
 (the default), only display the first sentence of the docstring.
 Otherwise, if set to 'full', display the full docstring.
 
----
 *** New user option 'elisp-eldoc-docstring-length-limit'.
 This user option controls the maximum length of docstrings in character
 units that 'elisp-eldoc-funcall-with-docstring' and
@@ -1745,14 +1498,12 @@ to 1000 characters.
 
 ** Buffer Menu
 
----
 *** New user option 'Buffer-menu-human-readable-sizes'.
 When non-nil, buffer sizes are shown in human readable format.  The
 default is nil, which retains the old format.
 
 ** Term
 
----
 *** The terminal emulator now supports auto-margins control.
 Term mode now handles DECAWM escape sequences that control whether text
 automatically wraps at the right margin:
@@ -1765,25 +1516,20 @@ margin are discarded, which matches the behavior of physical terminals
 and other terminal emulators.  Control sequences and escape sequences
 are still processed correctly regardless of margin position.
 
----
 ** SMerge mode
 
----
 *** New 'repeat-map' for SMerge conflict resolution commands.
 With 'repeat-mode' enabled, after invoking an SMerge command (for
 example, 'C-c ^ n'), you can repeat further SMerge commands by typing
 just the final key (for example, 'n', 'p', 'u', 'l').
 
----
 *** New command 'smerge-extend' extends a conflict over surrounding lines.
 
----
 *** New command 'smerge-refine-exchange-point' to jump to the other side.
 When used inside a refined chunk, it jumps to the matching position in
 the other side of the refinement: if you are in the new text, it jumps
 to the corresponding position in the old text and vice versa.
 
----
 *** New user option 'smerge-refine-shadow-cursor'.
 When 'smerge-refine' shows the conflict diffs at word granularity, a
 shadow cursor is now displayed in the lower version when point is in the
@@ -1792,29 +1538,24 @@ corresponding to the position where 'smerge-refine-exchange-point' would
 jump, shown in a new distinct face 'smerge-refine-shadow-cursor', by
 default a box face.
 
----
 *** 'smerge-refine-regions' can compare regions in different buffers.
 
 ** Cursor Sensor mode
 
-+++
 *** New direction 'moved' used when the cursor moved within the active area.
 
 ** Image Dired
 
----
 *** 'image-dired-show-all-from-dir' takes the same first argument as 'dired'.
 This allows passing a string with wildcards, or a cons cell where the
 first element is a list and the rest is a list of files.
 
----
 *** New single-letter bindings in 'image-dired-thumbnail-mode-map'.
 The keys 'f', 'b', 'n', 'p', 'a' and 'e' are now bound to the same
 commands as their 'C-' counterparts.
 
 ** Browse URL
 
----
 *** New user option 'browse-url-transform-alist'.
 This user option is an alist that allows transforming URLs before asking
 a web browser to load them.  For example, it could be used like this:
@@ -1822,12 +1563,10 @@ a web browser to load them.  For example, it could be used like this:
     (add-to-list 'browse-url-transform-alist
                  '("vim\\.org/.*" . "gnu.org/software/emacs/"))
 
----
 *** New command 'browse-url-qutebrowser' for Qutebrowser.
 For better integration with Qutebrowser, set
 'browse-url(-secondary)-browser-function' to 'browse-url-qutebrowser'.
 
----
 *** New GTK-native launch mode.
 For better Wayland support, the pgtk toolkit exposes a new
 'x-gtk-launch-uri' browse-url handler and uses it by default when URLs
@@ -1835,19 +1574,16 @@ are browsed from a PGTK frame.  For other frames, we fall back to the
 default URL launch function.  This change allows us to properly raise
 browser windows under Wayland using the xdg_activation_v1 protocol.
 
----
 *** 'RET' can visit URLs in read-only buffers.
 In some keymaps such as 'ansi-osc-hyperlink-map',
 'browse-url-button-map', 'goto-address-highlight-keymap', and
 'bug-reference-map', it is now possible to visit URLs by typing just
 'RET' instead of 'C-c RET' in read-only buffers.
 
----
 *** Removed support for some obsolete web browsers.
 Conkeror (obsolete since Emacs 28.1), gnome-moz-remote (obsolete since
 Emacs 25.1), and gnudoit (obsolete since Emacs 25.1).
 
----
 *** 'browse-url-firefox-program' now supports LibreWolf and Zen Browser.
 LibreWolf, Floorp and Zen Browser, three popular Firefox forks, have been
 added to the programs that are automatically recognizable as Firefox
@@ -1856,10 +1592,8 @@ one of these found on your system.
 
 ** CL-Lib
 
-+++
 *** Derived types (i.e. 'cl-deftype') can now be used as method specializers.
 
-+++
 *** Some cl-lib functions and macros are now built-in.
 These functions or macros have been added to Emacs Lisp, and the old
 names are now aliases for the built-in equivalents:
@@ -1875,24 +1609,18 @@ names are now aliases for the built-in equivalents:
 'cl-member-if' is marked obsolete.  The other names are deprecated too,
 and will be marked as obsolete in a future release.
 
-+++
 *** 'cl-labels' now also accepts '(FUNC EXP)' bindings, like 'cl-flet'.
 Such bindings make it possible to compute the function to bind to FUNC.
 
----
 *** 'cl-block' names are now lexically scoped, as documented.
 
-+++
 *** 'cl-locally' is now obsolete.
 It is an alias for the 'progn' special-form.
 
-+++
 *** 'cl-declare' is now obsolete; use 'defvar' instead.
 
-+++
 *** 'cl-gensym' is now obsolete; use 'gensym' instead.
 
-+++
 *** New macro 'cl-with-accessors'.
 This macro is similar to 'with-slots', but uses accessor functions
 instead of slot names.  It is useful when some slot accessor functions
@@ -1902,12 +1630,10 @@ that slot.  Symbol macros are created for the accessor functions using
 
 ** Whitespace
 
----
 *** 'whitespace-cleanup' now adds a missing newline at end of file.
 If 'whitespace-style' includes 'missing-newline-at-eof' (which is the
 default), the 'whitespace-cleanup' function will now add the newline.
 
----
 *** 'whitespace-mode' can now prettify page delimiter characters ('^L').
 If 'page-delimiters' is set in 'whitespace-style', or the new minor mode
 'whitespace-page-delimiters-mode' is on, the page delimiter character
@@ -1915,7 +1641,6 @@ If 'page-delimiters' is set in 'whitespace-style', or the new minor mode
 width of the window.  The new 'whitespace-page-delimiter' face can be
 used to customize the appearance.
 
----
 *** New user option 'whitespace-global-mode-buffers'.
 Normally, 'global-whitespace-mode' skips special buffers whose name
 starts with an asterisk "*".  This user option provides an override: it
@@ -1926,20 +1651,17 @@ buffer.
 
 ** Bookmark
 
----
 *** Bookmark history now saves each bookmark only once.
 Previously, the variable 'bookmark-history' accumulated duplicate
 bookmark names when bookmark features were used interactively.  This
 made their history larger than necessary for frequent bookmark users.
 Bookmark names are now saved uniquely.
 
----
 *** New user option 'bookmark-bmenu-type-column-width'.
 This user option controls the width of the type column on the bookmark
 menu 'bookmark-bmenu-list'.  The default value is 8 which is backwards
 compatible.
 
----
 *** New hook 'bookmark-after-load-file-hook'.
 This hook is run by 'bookmark-load' after loading a bookmark file.  This
 hook can be used, for example, to reconcile 'bookmark-alist' against
@@ -1947,7 +1669,6 @@ bookmark state that you, or a package that you use, maintains.
 
 ** Recentf
 
----
 *** You can now regularly auto-save recently opened files.
 Customize user option 'recentf-autosave-interval' to the number of
 seconds between auto saving recently opened files.  For example,
@@ -1956,12 +1677,10 @@ minutes.  From Lisp, use 'setopt', not 'setq'.  If
 'recentf-autosave-interval' is nil, auto saving is disabled; this is the
 default.
 
----
 *** New user option 'recentf-show-messages'.
 'recentf-save-list' can print a message when saving the recentf list.
 The new option, if customized to nil, suppresses this message.
 
----
 *** New user option 'recentf-suppress-open-file-help'.
 By default, invoking 'recentf-open-files' displays a message saying what
 action clicking or typing 'RET' on the item at point executes, and tabbing
@@ -1970,7 +1689,6 @@ messages.  To suppress these messages, customize the user option
 'recentf-suppress-open-file-help' to non-nil.  The default value of this
 option is nil.
 
----
 *** New user option 'recentf-exclude-ignored-extensions'.
 Add the new predicate function 'recentf-exclude-file-by-extension-p' to
 the list that is the value of the user option 'recentf-exclude' to
@@ -1982,7 +1700,6 @@ extensions by customizing the new user option
 
 ** Saveplace
 
----
 *** You can now regularly auto-save places.
 Customize user option 'save-place-autosave-interval' to the number of
 seconds between auto-saving places.  For example, customize this
@@ -1992,13 +1709,11 @@ disabled; this is the default.
 
 ** Savehist
 
----
 *** The history file can be modified by external tools.
 Emacs can now handle this case gracefully by merging the external and
 internal history information.  This feature is activated only when
 'savehist-additional-variables' is nil.
 
----
 *** Savehist no longer saves additional variables more than once.
 If you configured 'savehist-additional-variables' with variables that
 were also dynamically accumulated in minibuffer history during
@@ -2007,7 +1722,6 @@ minibuffer use, they are now saved only once in the file specified by
 
 ** Rectangle Mark
 
----
 *** New user option to control whether empty rectangle selections are shown.
 The new user option 'rectangle-indicate-zero-width-rectangle' can be
 used to disable the default display of empty rectangular selections.
@@ -2016,7 +1730,6 @@ horizontal shift of text on display, which could be distracting.)
 
 ** Message
 
----
 *** "In-Reply-To" header contains only a message id.
 The "In-Reply-To" header created when replying to a message now contains
 only the originating message's id, conforming to RFC 5322.  The previous
@@ -2024,48 +1737,38 @@ behavior included additional information about the originating message.
 The new user option 'message-header-use-obsolete-in-reply-to', nil by
 default, can be set to a non-nil value to restore the previous behavior.
 
-+++
 *** 'message-subject-re-regexp' default value is derived from 'mail-re-regexps'.
 'mail-re-regexps' is a new user option that is easier to customize than
 'message-subject-re-regexp'.  'message-subject-re-regexp' is still
 honored if it was already set.
 
-+++
 *** 'message-strip-subject-re' now matches case-insensitively.
 
----
 *** 'message-change-subject' inserts the current subject into future history.
 
-+++
 *** Hashcash support has been removed.
 It is believed to no longer be useful as a method to fight spam.  The
 'message-generate-hashcash' option is now obsolete and has no effect.
 
 ** Gnus
 
----
 *** Replying to icalendar events now supports specifying a comment.
 When called with a prefix argument, accepting, declining, or tentatively
 accepting an icalendar event will prompt for a comment to add to the
 response.
 
-+++
 *** Hashcash support has been removed.
 It is believed to no longer be useful as a method to fight spam.  The
 'spam-use-hashcash' hook is now obsolete and has no effect.
 
----
 *** Add 'M-i' keybinding as the symbolic prefix in the group keymap.
 The symbolic prefix is another kind of universal prefix that is used in
 Gnus; see "(gnus) Symbolic Prefixes" in the Gnus manual.
 
----
 *** Sorting selected groups is now possible with 'gnus-topic-mode'.
 
----
 *** gnus-dbus.el is now obsolete.
 
-+++
 *** System sleep integration is now independent of D-Bus.
 The system sleep integration previously provided by customizing the
 variable 'gnus-dbus-close-on-sleep' is now deprecated.  A new system
@@ -2075,23 +1778,19 @@ using the builtin system-sleep.el library is now available by customizing
 
 ** Sieve
 
-+++
 *** New keybinding to refresh buffer in 'sieve-manage-mode'.
 'sieve-refresh-scriptlist' is now bound to 'g' to refresh the contents
 of the current sieve buffer.
 
 ** Button
 
-+++
 *** New function 'unbuttonize-region'.
 It removes all the buttons in the specified region.
 
-+++
 *** Disabling 'button-mode' now removes all buttons in the current buffer.
 
 ** Shell
 
-+++
 *** Shell buffers now support bookmarks.
 You can now bookmark local and remote shell buffers using the bookmark
 menu 'bookmark-bmenu-list', or by using the command 'bookmark-set'.
@@ -2104,7 +1803,6 @@ You can customize 'shell-bookmark-name-function'.
 'comint-complete-input-ring' ('C-x <UP>') is like 'minibuffer-complete-history'
 but completes on comint inputs.
 
----
 *** 'ansi-osc-directory-tracker' now respects remote directories.
 Remote directories are now retained when changes to 'default-directory'
 are detected by this filter.  For example, "/ssh:hostname:/home/username"
@@ -2112,7 +1810,6 @@ would have been stripped to just "/home/username" before.
 
 ** Eshell
 
----
 *** New interactive command 'eshell-clear'.
 This command scrolls the screen so that only the current prompt is
 visible, optionally erasing all the previous input/output as well.
@@ -2120,7 +1817,6 @@ Previously, the Eshell built-in command 'eshell/clear' supported this
 (e.g., to call it via 'M-x'), but this new command behaves more
 consistently if you have a partially typed command at the Eshell prompt.
 
----
 *** New user option 'eshell-command-async-buffer'.
 This option lets you tell 'eshell-command' how to respond if its output
 buffer is already in use by another invocation of 'eshell-command', much
@@ -2129,25 +1825,21 @@ this will prompt for confirmation before creating a new buffer when
 necessary.  To restore the previous behavior, customize this option to
 'confirm-kill-process'.
 
-+++
 *** 'eshell-execute-file' is now an interactive command.
 Interactively, this now prompts for a script file to execute.  With the
 prefix argument, it will also insert any output into the current buffer
 at point.
 
-+++
 *** 'eshell-command' and 'eshell-execute-file' can now say where stderr goes.
 These functions now take an optional ERROR-TARGET argument to control
 where to send the standard error output.
 See the Info node "(eshell) Entry Points" for more details.
 
-+++
 *** You can now loop over ranges of integers with the Eshell 'for' command.
 When passing a range like 'BEGIN..END' to the Eshell 'for' command,
 Eshell will now iterate over each integer between BEGIN and END, not
 including END.
 
-+++
 *** Conditional statements in Eshell now use an 'else' keyword.
 Eshell now prefers the following form when writing conditionals:
 
@@ -2155,25 +1847,21 @@ Eshell now prefers the following form when writing conditionals:
 
 The old form (without the 'else' keyword) is retained for compatibility.
 
-+++
 *** You can now chain conditional statements in Eshell.
 When using the newly-preferred conditional form in Eshell, you can now
 chain together multiple 'if'/'else' statements.  For more information,
 see "(eshell) Control Flow" in the Eshell manual.
 
-+++
 *** Eshell's built-in 'wait' command now accepts a timeout.
 By passing '-t' or '--timeout', you can specify a maximum time to wait
 for the processes to exit.  Additionally, you can now wait for external
 processes by passing their PIDs.
 
----
 *** New hook 'eshell-after-initialize-hook'.
 This hook runs after an Eshell session has been fully initialized,
 immediately before running 'eshell-post-command-hook' for the first
 time.
 
-+++
 *** Improved history Isearch.
 History Isearch in Eshell has been reworked.  Two new commands
 'eshell-isearch-backward-regexp' and 'eshell-isearch-forward-regexp' are
@@ -2189,7 +1877,6 @@ your configuration:
       (keymap-set eshell-hist-mode-map "M-s"
                   #'eshell-next-matching-input))
 
-+++
 *** New user option 'eshell-history-isearch'.
 When 'eshell-history-isearch' is nil (the default), Isearch commands
 search in the buffer contents.  If you customize it to t, those commands
@@ -2197,7 +1884,6 @@ only search in input history.  If you customize it to the symbol 'dwim',
 those commands search in input history only when point is after the last
 prompt.
 
----
 *** Eshell 'alias' command now sorts the alias list.
 When adding an alias interactively, Eshell now sorts the list of aliases
 before saving the alias file.  This maintains the stability of the
@@ -2206,7 +1892,6 @@ store your aliases in version control.
 
 ** Mail Utils
 
-+++
 *** New user option 'mail-re-regexps'.
 This contains the list of regular expressions used to match "Re:" and
 international variants of it when modifying the Subject field in
@@ -2214,12 +1899,10 @@ replies.
 
 ** Mairix
 
----
 *** 'mairix-search' now keeps its own minibuffer history.
 
 ** Imap
 
----
 *** 'imap-authenticate' can now use PLAIN authentication.
 "AUTH=PLAIN" support is auto-enabled if the IMAP server supports it.  If
 you do not wish to use "AUTH=PLAIN", pass a specific authentication type
@@ -2228,26 +1911,22 @@ to 'imap-open' for 'imap-authenticate' to use, or remove 'plain' from
 
 ** Rmail
 
-+++
 *** 'rmail-re-abbrevs' default value is now derived from 'mail-re-regexps'.
 'mail-re-regexps' is a new user option that is easier to customize than
 'rmail-re-abbrevs'.  'rmail-re-abbrevs' is still honored if it was
 already set.
 
-+++
 *** New user options for formatting Rmail summary lines.
 'rmail-summary-sender-function' and 'rmail-summary-recipient-function'
 control how the sender/recipient fields are displayed in the summary.
 'rmail-summary-address-width' controls the width of that field.
 
-+++
 *** New user option 'rmail-mime-save-action'.
 This option specifies an action to take after saving a MIME attachment.
 Predefined values include visiting the file in Emacs, jumping to the
 file in Dired, or opening the file with an external program.  You can
 also provide a custom function.
 
----
 *** Rmail now detects email messages from suspicious sender addresses.
 If the "From" header of a message contains a suspicious email address,
 Rmail will now highlight it in a distinct face and provide a 'help-echo'
@@ -2259,7 +1938,6 @@ non-nil; customize to nil to disable the check.
 
 ** Sendmail
 
----
 *** Sending an email via sendmail.el checks for suspicious addressees.
 The command 'mail-send', used to send email in Mail mode, now checks the
 addressees for suspicious email addresses.  If such addresses are found,
@@ -2270,7 +1948,6 @@ customize 'mail-user-agent' to the value 'sendmail-user-agent'.
 
 ** SHR
 
-+++
 *** SHR now slices large images into rows.
 Sliced images allow for more intuitive scrolling up/down by letting you
 scroll past each slice, instead of jumping past the entire image.
@@ -2279,12 +1956,10 @@ matter how large or small that was.  Now, SHR slices any images taller
 than 'shr-sliced-image-height'.  For more information, see the Info node
 "(eww) Advanced".
 
----
 *** You can now customize the image zoom levels to cycle through.
 By customizing 'shr-image-zoom-levels', you can change the list of zoom
 levels that SHR cycles through when calling 'shr-zoom-image'.
 
----
 *** New user option 'shr-fill-text'.
 When 'shr-fill-text' is non-nil (the default), SHR will fill text
 according to the width of the window.  If you customize it to nil, SHR
@@ -2294,7 +1969,6 @@ visually wrapped at word boundaries.
 
 ** EWW
 
----
 *** EWW now enables 'visual-wrap-prefix-mode' when 'shr-fill-text' is nil.
 By default, 'shr-fill-text' is t, and EWW fills the text according to
 the width of the window.  If you customize 'shr-fill-text' to nil, EWW
@@ -2303,21 +1977,18 @@ will now automatically turn on 'visual-wrap-prefix-mode' in addition to
 near the window edge, and continuation lines are indented using prefixes
 computed from the surrounding context.
 
----
 *** New user option 'eww-guess-content-type-functions'.
 The value is a list of functions that EWW should call to determine the
 content-type of Web pages which don't have a valid 'Content-Type'
 header.  The default value is a function that considers a page with an
 HTML 'doctype' declaration to have content-type "text/html".
 
-+++
 *** 'eww-switch-to-buffer' falls back to calling 'eww'.
 When there is no EWW buffer, 'eww-switch-to-buffer' falls back to
 calling 'eww'.
 
 ** URL Queue
 
----
 *** 'url-queue-retrieve' now makes use of some url request variables.
 The variables 'url-request-data', 'url-request-method', and
 'url-request-extra-headers' can now be bound around a call to
@@ -2326,20 +1997,17 @@ The variables 'url-request-data', 'url-request-method', and
 
 ** CC mode
 
-+++
 *** New type of 'c-offsets-alist' element.
 The 'cdr' of such an alist element may now be a syntactic symbol.  A
 source line with a syntactic element whose symbol is the 'car' of that
 alist element is indented as though it were the 'cdr'.
 
-+++
 *** Enums now have their own syntactic symbols.
 The new symbols 'enum-open', 'enum-close', 'enum-intro' and
 'enum-entry' are used in the analysis of enum constructs.  Previously,
 they were given 'brace-list-open', etc.  These are fully described in
 the "(ccmode) Enum Symbols" node of the CC mode manual.
 
-+++
 *** Enums are now, by default, indented like classes, not brace-lists.
 To get the old behavior back, add an element '(enum-open
 . brace-list-open)' to 'c-offsets-alist' in your CC mode style, or amend
@@ -2348,29 +2016,24 @@ To get the old behavior back, add an element '(enum-open
 
 ** Emacs Lisp mode
 
-+++
 *** Semantic highlighting support for Emacs Lisp.
 'emacs-lisp-mode' can now use code analysis to highlight more symbols
 more accurately.  Customize the new user option
 'elisp-fontify-semantically' to non-nil to enable this feature, and see
 the Info node "(emacs) Semantic Font Lock" for more information.
 
----
 *** Checkdoc will now flag incorrect formatting in warnings.
 This affects calls to 'warn', 'lwarn', 'display-warning', and
 'message-box'.
 
----
 *** New function 'checkdoc-batch'.
 It checks the buffer in batch mode, prints all found errors
 and signals the first found error.
 
----
 *** New file-local variable 'lisp-indent-local-overrides'.
 This variable can be used to locally override the indent specification
 of symbols.
 
----
 *** Checkdoc no longer warns about missing footer lines in some cases.
 Emacs Lisp libraries have traditionally ended with a footer line
 (sometimes referred to as "terminating comment").  Their purpose was to
@@ -2388,35 +2051,29 @@ those versions can't install packages where that line is missing.
 This change affects both 'checkdoc' and the corresponding flymake
 backend.
 
----
 *** Checkdoc no longer warns about wide docstrings.
 The Checkdoc warning for wide docstrings duplicates the byte-compiler
 warning added in Emacs 28.1.  This redundancy is now removed.
 
----
 *** New user option 'checkdoc-arguments-missing-flag'.
 Set this to nil to disable warnings for function arguments that are not
 documented in docstrings.
 
----
 *** New user option 'checkdoc-allow-quoting-nil-and-t'.
 Customizing this option to a non-nil value stops checkdoc from warning
 for docstrings where symbols 'nil' and 't' are in quotes.
 
----
 *** The default of 'checkdoc-verb-check-experimental-flag' is now nil.
 In most cases, having it enabled leads to a large amount of false
 positives.
 
 ** IELM
 
----
 *** IELM input history is now saved also when the IELM process is killed.
 When you kill the IELM process with 'C-c C-c', the input history is now
 saved to the file specified by 'ielm-history-file-name', just like when
 you exit the Emacs session or kill the IELM buffer.
 
----
 *** New value 'point' for user option 'ielm-dynamic-return'.
 When 'ielm-dynamic-return' is set to 'point', typing 'RET' has dynamic
 behavior based on whether point is inside an sexp.  While point is
@@ -2426,19 +2083,16 @@ proceeds with evaluating the expression.  This is useful when
 
 ** Doc View
 
----
 *** Dedicated buffer for plain text contents.
 When switching to the plain text contents with 'doc-view-open-text',
 Doc View now creates a dedicated buffer to display it.  'C-c C-c' gets you
 back to the real Doc View buffer if it still exists.
 
-+++
 *** New commands to save and restore pages in buffer-local registers.
 Doc View can store the current page to buffer-local registers with the new
 command 'doc-view-page-to-register' (bound to 'm'), and later the stored
 page can be restored with 'doc-view-jump-to-register' (bound to ''').
 
-+++
 *** Doc View can generate imenu indices for DjVu and ODF documents.
 When the 'djvused' program is available, Doc View can now generate an imenu
 index for DjVu files from its outline.  Indices for Open Document Format
@@ -2449,12 +2103,10 @@ option 'doc-view-djvused-program'.
 
 ** Ispell
 
----
 *** The default value of 'ispell-help-timeout' has changed.
 The default value is now 30 seconds, as the old value was too short to
 allow reading the help text.
 
-+++
 *** Ispell can now save spelling corrections as abbrevs.
 In the Ispell command loop, type 'C-u' immediately before selecting a
 replacement to toggle whether that correction will be saved as a global
@@ -2464,7 +2116,6 @@ is enabled by default.
 
 ** Flyspell
 
----
 *** New user option 'flyspell-delay-use-timer'.
 By default, Flyspell waits after so-called "delayed" commands by calling
 'sit-for'.  If you customize this option to non-nil, Flyspell instead
@@ -2473,7 +2124,6 @@ allows idle timers and other code to run during this delay period.  We
 plan to make this behavior the default in a future Emacs release, so we
 invite Flyspell users to enable this new option and report any issues.
 
----
 *** 'turn-on-flyspell' and 'turn-off-flyspell' are obsolete.
 To unconditionally enable 'flyspell-mode' from a hook, use this instead:
 
@@ -2481,13 +2131,11 @@ To unconditionally enable 'flyspell-mode' from a hook, use this instead:
 
 ** Tramp
 
-+++
 *** Tramp signals 'remote-file-error' in case of connection problems.
 This is a subcategory of 'file-error'.  Therefore, all checks for
 'file-error' in 'condition-case', 'ignore-error', 'error-conditions' and
 the like still work.
 
-+++
 *** New command 'tramp-cleanup-bufferless-connections'.
 Connection-related objects for which no associated buffers exist, except
 for Tramp internal buffers, are flushed.  This is helpful to prune
@@ -2495,36 +2143,29 @@ connections after you close remote-file buffers without having to either
 cherry-pick via 'tramp-cleanup-connection' or clear them all via
 'tramp-cleanup-all-connections'.
 
-+++
 *** External methods can now be used in multi-hop connections.
 This is implemented for 'tramp-sh' methods, like "/scp:user@host|sudo::".
 
-+++
 *** New command 'tramp-dired-find-file-with-sudo'.
 This command, bound to '@' in Dired, visits the file or directory on the
 recent Dired line with superuser, or root, permissions.
 
-+++
 *** 'C-x x @' is now bound to 'tramp-revert-buffer-with-sudo'.
 You can use 'C-u C-x x @' to select a Tramp method other than the
 default, "sudo".
 
-+++
 *** 'tramp-file-name-with-method' can now be set as connection-local variable.
 
-+++
 *** New optional connection methods "surs" and "sudors".
 These connection methods are similar to "su" and "sudo", but they use
 the modern 'su-rs' and 'sudo-rs' commands.
 
-+++
 *** Connection method "kubernetes" now supports an optional namespace.
 The host name for Kubernetes connections can be of kind
 "[CONTAINER.]POD[%NAMESPACE]", in order to specify the namespace to be
 used.  This overrides the setting in 'tramp-kubernetes-namespace', if
 any.
 
-+++
 *** Different proxies for the same destination host name can be specified.
 A typical example are docker containers, which run on different hosts
 under the same docker name.  When the user option
@@ -2537,15 +2178,12 @@ can be used in parallel.  Example: on both remote hosts "host1" and
 
 This feature is experimental.
 
----
 *** Implementation of filesystem notifications for connection method "smb".
 
-+++
 *** Remote process support has been rewritten for the "smb" connection method.
 For more information, see "(tramp) Running remote processes on MS
 Windows hosts" in the Tramp manual.
 
-+++
 *** New functions to extend the set of operations with a remote implementation.
 The new functions 'tramp-add-external-operation' and
 'tramp-remove-external-operation' allow adding an implementation for
@@ -2554,7 +2192,6 @@ This can be used by external ELPA packages for performance optimizations
 in special cases.  For more information, see "(tramp) New operations" in
 the Tramp manual.
 
-+++
 *** New user option 'tramp-propagate-emacsclient-tramp'.
 When this option is non-nil, Tramp propagates the environment variable
 EMACSCLIENT_TRAMP with a proper value to remote processes.  This is
@@ -2563,16 +2200,13 @@ started inside Emacs.
 
 ** Isearch and Replace
 
-+++
 *** Typing 'd' during 'query-replace' shows the diff buffer with replacements.
 
 ** Diff
 
----
 *** 'diff-mode' now refrains from automatically refining big hunks.
 What is big is defined by the new 'diff-refine-threshold' user option.
 
-+++
 *** Refining a hunk shows a shadow cursor at the beginning/end of region.
 By default, the shadow cursor looks like an empty rectangle the size of
 a character cell.  It is displayed at the beginning or the end of the
@@ -2580,14 +2214,12 @@ refined region, to better show where the refined region starts or ends.
 This can be controlled by the new user option
 'smerge-refine-shadow-cursor', which also affects SMerge mode.
 
----
 *** New command 'diff-kill-ring-save'.
 This command copies to the 'kill-ring' a region of text modified
 according to diffs in the current buffer, but without applying the diffs
 to the original text.  If the selected range extends beyond a hunk, the
 command attempts to look up and copy the text in between the hunks.
 
-+++
 *** New command 'diff-revert-and-kill-hunk' bound to 'u' and 'C-c M-u'.
 This command reverts the hunk at point (i.e., applies the reverse of the
 hunk), and then removes the hunk from the diffs.
@@ -2596,49 +2228,40 @@ you are in buffers generated by 'C-x v =' and 'C-x v D'.
 When the region is active, the command reverse-applies and kills hunks
 that the region overlaps.
 
----
 *** 'v' is now bound to 'vc-next-action' in read-only Diff mode buffers.
 
----
 *** 's' is now bound to 'diff-split-hunk' in read-only Diff mode buffers.
 
----
 *** 'diff-file-prev' and 'diff-hunk-prev' always move to start of header.
 Previously, 'diff-file-prev' and 'diff-hunk-prev' would move when point
 is after the corresponding file or hunk header, but not when inside it.
 Now they will always move to the start of the current header.
 
-+++
 *** New command 'diff-delete-other-hunks' bound to 'C-c RET n'.
 This command deletes all hunks other than the current hunk.  It is
 useful to prepare a "*vc-diff*" buffer for committing a single hunk.
 When the region is active, it deletes all hunks that the region does not
 overlap.
 
----
 *** 'vc-version-diff' and 'vc-root-version-diff' changed default for REV1.
 They now suggest the previous revision as the default for REV1, not the
 last one as before.  This makes them different from 'vc-diff' and
 'vc-root-diff' when those are called without a prefix argument.
 
----
 *** 'diff-apply-hunk' now supports creating and deleting files.
 'diff-apply-buffer' supports creating files but not deleting them, yet.
 
-+++
 *** Diff mode's application and killing commands now consider the region.
 If the region is active, 'diff-apply-hunk', 'diff-apply-buffer' and
 'diff-hunk-kill' now apply or kill all hunks that the region overlaps.
 Otherwise, they have their existing behavior.
 
-+++
 *** 'diff-apply-buffer' can reverse-apply.
 With a prefix argument, it now reverse-applies hunks.
 This matches the existing prefix argument to 'diff-apply-hunk'.
 
 ** Ediff
 
-+++
 *** Ediff's copy commands now apply to all changes with 'C-u' prefix.
 The Ediff copy commands, bound to 'a', 'b', 'ab', etc., now copy all
 changes when supplied with a universal prefix argument via 'C-u':
@@ -2654,7 +2277,6 @@ changes when supplied with a universal prefix argument via 'C-u':
 - 'C-u c a' copies all changes from buffer C to buffer A.
 - 'C-u c b' copies all changes from buffer C to buffer B.
 
-+++
 *** Ediff now supports more flexible custom window layouts.
 Custom implementations of 'ediff-window-setup-function' no longer need
 to display all Ediff windows.  Any of the A, B, C, and control windows
@@ -2663,7 +2285,6 @@ This change enables custom layouts without a control panel window.
 
 ** Dired
 
----
 *** New user option 'dired-create-empty-file-in-current-directory'.
 When non-nil, 'dired-create-empty-file' creates a new empty file and
 adds an entry for it (or its topmost new parent directory if created)
@@ -2677,14 +2298,12 @@ Note that setting this user option to non-nil makes invoking
 (like other Dired commands that always prompt with the current
 subdirectory, such as 'dired-create-directory').
 
-+++
 *** New user option 'dired-check-symlinks' allows disabling validity checks.
 Dired uses 'file-truename' to check symbolic link validity when
 fontifying them, which can be slow for remote directories.  Setting
 'dired-check-symlinks' to nil disables these checks.  The new option
 defaults to t and can be set as a connection-local variable.
 
----
 *** New user option 'dired-hide-details-hide-absolute-location'.
 When Dired's 'dired-hide-details-mode' is enabled, also hide the
 'default-directory' absolute location, typically displayed as the first
@@ -2698,17 +2317,14 @@ Without 'dired-hide-details-hide-absolute-location':
 
     /absolute/path/to/my/important/project: (100 GiB available)
 
----
 *** Clicking on the base name of a directory reverts the buffer.
 When 'dired-make-directory-clickable' is non-nil, clicking on the base
 name of the directory now reverts the Dired buffer.
 
----
 *** 'dired-copy-filename-as-kill' supports project-relative names.
 With a prefix argument value of 1, this command now copies file names
 relative to the root directory of the current project.
 
-+++
 *** Warning when Dired displays a file name with a literal newline.
 If Dired uses an 'ls' implementation that supports the '-b' switch, then
 on visiting a directory that contains a file whose name has a newline,
@@ -2717,7 +2333,6 @@ automatically pops up a buffer warning that such a display can be
 problematic for Dired and showing a way to change the display to use the
 unproblematic character '\n'.
 
-+++
 *** New user option 'dired-auto-toggle-b-switch'.
 When this user option is non-nil and Dired uses an 'ls' implementation
 that supports the '-b' switch and 'dired-listing-switches' does not
@@ -2728,7 +2343,6 @@ of a literal newline.  This prevents executing many Dired operations on
 such a file from failing and signaling an error.  The default value of
 this user option is nil.
 
----
 *** New Dired handling of errors from 'ls'.
 When invoking a Dired command causes 'ls' to emit an error message,
 Emacs now displays the message in a popped up buffer instead of
@@ -2736,16 +2350,14 @@ outputting it in the Dired buffer and signalling an error.
 
 ** Grep
 
-+++
 *** Grep results can be edited to reflect changes in the originating file.
 Like Occur Edit mode, typing 'e' in the "*grep*" buffer will now make
-the 'grep' results editable.  The edits will be reflected in the buffers
+the 'grep' results editable.  The edits will be reflected in buffers
 visiting the originating files.  Typing 'C-c C-c' will leave the Grep
 Edit mode.
 
 ** Imenu
 
----
 *** New user option 'imenu-allow-duplicate-menu-items'.
 This specifies whether Imenu can include duplicate menu items.
 Duplicate items are now allowed by default (option value t), which
@@ -2754,7 +2366,6 @@ behavior of Emacs 29 and Emacs 30.
 
 ** Time Stamp
 
----
 *** 'time-stamp' can up-case, capitalize and down-case date words.
 This control can be useful in languages in which days of the week and/or
 month names are capitalized only at the beginning of a sentence.  For
@@ -2764,7 +2375,6 @@ Because this feature is new in Emacs 31.1, do not use it in the local
 variables section of any file that might be edited by an older version
 of Emacs.
 
----
 *** Some historical 'time-stamp' conversions now warn.
 'time-stamp-pattern' and 'time-stamp-format' had quietly accepted
 several 'time-stamp' conversions (e.g., "%:y") that have been deprecated
@@ -2778,7 +2388,6 @@ with a file-local variable, you may be asked to update the value.
 
 ** TeX modes
 
-+++
 *** New Xref backend for TeX modes.
 The new backend ('tex-etags') is on by default, and improves the
 functionality of the standard Xref commands in TeX buffers.  You can
@@ -2786,7 +2395,6 @@ restore the standard 'etags' backend with the 'xref-etags-mode' toggle.
 
 ** BibTeX mode
 
----
 *** New user options facilitate customization of BibTeX and biblatex entries.
 Entry definitions via the user options 'bibtex-BibTeX-aux-entry-alist',
 'bibtex-biblatex-aux-entry-alist', 'bibtex-BibTeX-aux-opt-alist', and
@@ -2795,26 +2403,21 @@ Entry definitions via the user options 'bibtex-BibTeX-aux-entry-alist',
 These user options now support the definition of aliases that inherit
 the definition of another entry.
 
----
 *** 'bibtex-user-optional-fields' has been renamed to 'bibtex-aux-opt-alist'.
 The old name is an obsolete alias.
 
----
 *** 'bibtex-include-OPTkey' is now obsolete and its default is nil.
 Use 'bibtex-aux-opt-alist' instead.
 
----
 *** New user option 'bibtex-entry-ask-for-key'.
 When non-nil, 'bibtex-entry' asks for a key.
 
----
 *** 'bibtex-string-file-path' and 'bibtex-file-path' are lists of directories.
 For backward compatibility, considered obsolete, these user options
 may still be strings of colon-separated lists of directories.
 
 ** Midnight mode
 
----
 *** Change for activating the mode.
 Putting '(require 'midnight)' in your init file no longer activates the
 mode.  Now, one needs to customize 'midnight-mode' to non-nil or say
@@ -2822,14 +2425,12 @@ mode.  Now, one needs to customize 'midnight-mode' to non-nil or say
 
 ** Python mode
 
----
 *** New 'repeat-map' for Python indentation commands.
 The commands 'python-indent-shift-left' and 'python-indent-shift-right'
 can now be repeated using 'repeat-mode'.  With 'repeat-mode' enabled,
 after invoking one of these commands via 'C-c <' or 'C-c >', you can
 type '<' or '>' to repeat the command.
 
----
 *** Prefer "python" for 'python-interpreter' and 'python-shell-interpreter'.
 On recent versions of mainstream GNU/Linux distributions, "python"
 either does not exist or it points to Python 3.  These user options now
@@ -2838,7 +2439,6 @@ exist.  If "python" points to Python 2 on your system, you now need to
 customize these variables to "python3" if you want to use Python 3
 instead.
 
----
 *** Python 2 support is now optional and disabled by default.
 Since Python 2 EOL was over 5 years ago, this release removes Python
 2-only builtins such as "file" from the default highlighting in
@@ -2846,10 +2446,8 @@ Since Python 2 EOL was over 5 years ago, this release removes Python
 customize the new user option 'python-2-support' to a non-nil value and
 restart Emacs.
 
----
 *** New Python support for 'electric-layout-mode'.
 
----
 *** 'DEL' can delete text in the active region.
 When point is between indentation, the command
 'python-indent-dedent-line-backspace' (by default bound to 'DEL') now
@@ -2857,43 +2455,36 @@ deletes the text in the region and deactivates the mark if Transient
 Mark mode is enabled, the mark is active, and the value of the prefix
 argument is 1.
 
----
 *** 'python-eldoc-function-timeout' now accepts floating-point numbers.
 To allow for finer-grained adjustment of timeout for
 'python-eldoc-function', 'python-eldoc-function-timeout' now accepts
 floating-point numbers as well as integers.
 
----
 *** The default value of 'python-shell-completion-setup-code' is changed.
 A new function is added to the setup code.  Users who modify this option
 may need to update the value for the Python shell completion to work.
 
 ** Tmm Menubar
 
----
 *** New shortcut '^' to navigate to the previous menu.
 
----
 *** New user option 'tmm-shortcut-inside-entry'.
 When non-nil, highlight the character shortcut in the menu entry's
 string instead of prepending it and 'tmm-mid-prompt' to said entry.
 
 ** Foldout
 
-+++
 *** Improved behavior of 'foldout-exit-fold' with a negative prefix argument.
 When 'foldout-exit-fold' is called with a negative argument (so that the
 exited fold remains visible), the position of point and window view are
 preserved.
 
----
 *** New command 'foldout-widen-to-current-fold'.
 This command widens the view to the current fold level when in a fold,
 or behaves like 'widen' if not in a fold.
 
 ** MPC
 
----
 *** New user option 'mpc-notifications'.
 When non-nil, MPC (the Emacs front-end to Music Player Daemon) displays
 a desktop notification when the song changes, using
@@ -2901,13 +2492,11 @@ a desktop notification when the song changes, using
 customized using the new user options 'mpc-notifications-title' and
 'mpc-notifications-body'.
 
----
 *** New user option 'mpc-crossfade-time'.
 When non-nil, MPC will crossfade between songs for the specified number
 of seconds.  Crossfading can be toggled using the command
 'mpc-toggle-crossfade' or from the MPC menu.
 
----
 *** New command 'mpc-describe-song'.
 This command displays information about the currently playing song or
 song at point in the "*MPC-Songs*" buffer.  The list of tags to display
@@ -2915,7 +2504,6 @@ can be customized using the new user option 'mpc-song-viewer-tags' and
 the appearance of the list with the new faces 'mpc-table-key',
 'mpc-table-value', and 'mpc-table-empty'.
 
----
 *** New command 'mpc-server-stats'.
 This command displays information about the connected MPD server.  The
 appearance of the list can be customized with the new faces
@@ -2923,7 +2511,6 @@ appearance of the list can be customized with the new faces
 
 ** VC
 
-+++
 *** Printing root branch logs has moved to 'C-x v b L'.
 Previously, the command to print the root log for a branch was bound to
 'C-x v b l'.  It has now been renamed from 'vc-print-branch-log' to
@@ -2937,23 +2524,19 @@ To undo this change you can use
     (with-eval-after-load 'vc-dir
       (keymap-set vc-dir-mode-map "b l" #'vc-print-root-branch-log))
 
-+++
 *** New command 'C-x v b l' ('vc-print-fileset-branch-log').
 This command prints the log of VC changes to the current fileset on
 another branch.
 
----
 *** VC Annotate for Mercurial repositories shows changeset hashes.
 To restore showing revision numbers instead of changeset hashes,
 customize the new user option 'vc-hg-annotate-show-revision-numbers' to
 non-nil.
 
----
 *** 'vc-hg-working-revision' now returns changeset hashes.
 Previously, it returned local revision numbers, but hashes are more
 robust for how this function is typically used.
 
-+++
 *** New commands to handle repositories with multiple working trees.
 Some VCS support more than one working tree with the same backing
 revisions store, such as with Git's 'worktree' subcommand and
@@ -2977,43 +2560,34 @@ In addition, Lisp programs that extend VC can invoke the new backend
 functions to obtain a list of other working trees, and to add, remove
 and relocate them.
 
----
 *** Using 'e' from Log View mode to modify change comments now works for Git.
 
----
 *** New user option 'vc-allow-rewriting-published-history'.
 Some VCS commands can change your copy of published change history
 without warning.  In VC we try to detect before that happens, and stop.
 You can customize this option to permit rewriting history even though
 Emacs thinks it is dangerous.
 
----
 *** 'vc-clone' is now an interactive command.
 When called interactively, 'vc-clone' now prompts for the remote
 repository address, and the directory into which to clone the
 repository.  It tries to automatically determine the VC backend for
 cloning, or prompts for that, too.
 
----
 *** 'vc-clone' now accepts an optional argument OPEN-DIR.
 When the argument is non-nil, the function switches to a buffer visiting
 the directory into which the repository was cloned.
 
-+++
 *** 'vc-revert' is now bound to '@' in VC Directory.
 
-+++
 *** 'vc-revert' is now additionally bound to 'C-x v @'.
 This is in addition to 'C-x v u'.
 
-+++
 *** 'vc-rename-file' is now bound to 'C-x v R'.
 
----
 *** 'vc-revert' now works on directories listed in VC Directory.
 Reverting a directory means reverting changes to all files inside it.
 
-+++
 *** New global minor mode 'vc-auto-revert-mode'.
 This is like 'global-auto-revert-mode' but limited to VCS-tracked files.
 As compared with VC's existing, default support for reverting files
@@ -3021,7 +2595,6 @@ after VCS operations, the new mode is a more reliable way to ensure that
 Emacs reverts buffers visiting tracked files when VCS operations change
 the contents of those files.
 
-+++
 *** New commands to cherry-pick and revert revisions.
 The commands 'vc-cherry-pick', 'vc-revert-or-delete-revision',
 'vc-revert-revision' and 'vc-delete-revision' let you copy revisions
@@ -3030,35 +2603,30 @@ From Log View buffers, you can use 'C' to cherry-pick the revision at
 point or all marked revisions, and 'R' to undo the revision at point or
 all marked revisions.
 
-+++
 *** New commands to rewind branches.
 In Log View mode, 'x' deletes revisions newer than the revision at point
 from the history of the current branch, though without undoing the
 changes made by those revisions to the working tree.  'X' is similar
 except that it does remove the changes from the working tree.
 
----
 *** New command 'log-edit-done-strip-cvs-lines'.
 This command strips all lines beginning with "CVS:" from the buffer.
 It is intended to be added to the 'log-edit-done-hook' so that
 'vc-cvs-checkin' behaves like invoking 'cvs commit [files...]' from the
 command line.
 
----
 *** New user options 'vc-resolve-conflicts' and 'vc-*-resolve-conflicts'.
 They control whether to mark a conflicted file as resolved when saving.
 You can now control it globally, with 'vc-resolve-conflicts', or for
 specific backends with 'vc-bzr-resolve-conflicts',
 'vc-hg-resolve-conflicts', and 'vc-svn-resolve-conflicts'.
 
----
 *** New value for 'vc-git-resolve-conflicts'.
 The option now accepts the symbol 'default' as a value, which is
 its default value.  Effectively, the default value hasn't changed,
 since 'vc-resolve-conflicts' defaults to t, the previous default value
 for 'vc-git-resolve-conflicts'.
 
----
 *** VC Directory can now automatically add and remove marks on other lines.
 When you try to use a mark or unmark command where doing so would
 be permitted only if other lines were marked or unmarked first, Emacs
@@ -3069,32 +2637,27 @@ Previously, Emacs would simply refuse to make any changes.
 You can customize 'vc-dir-allow-mass-mark-changes' to restore the old
 behavior or dispense with the prompting.
 
-+++
 *** 'C-x v x' and VC Directory's 'd' command can now delete unregistered files.
 Previously, these commands could only delete registered files.
 To restore the old, more limited behavior for VC Directory, you can do
 
     (keymap-set vc-dir-mode-map "d" #'vc-dir-clean-files)
 
----
 *** New VC Directory bindings 'z d' and 'D' to delete Git stashes.
 These correspond to the existing 'z p' to pop a stash and 'P' to pop the
 stash at point (deleting the stash at point is also bound to 'C-k').
 
-+++
 *** New VC Directory command 'V' ('vc-dir-root-next-action').
 This is like 'v' ('vc-next-action') but applies to the whole VC Directory
 buffer, ignoring the position of point and any marks.  This is useful to
 check in all local changes at once.
 
----
 *** VC Directory can now register files when checking in mixed filesets.
 Previously, if some files to be checked in were unregistered but others
 were added, removed or edited, Emacs would refuse to proceed.
 Now Emacs prompts to register the unregistered files, so that all
 files in the fileset are in a compatible state for a checkin.
 
-+++
 *** 'C-x v v' handles missing and removed files more consistently.
 Missing files are those which have been removed from the filesystem but
 which are still tracked by version control.  Removed files are those
@@ -3116,7 +2679,6 @@ In addition, the Git backend has been fixed to display missing files as
 There is still some further work to do to rationalize VC's handling of
 file removal.
 
-+++
 *** New user option 'vc-dir-auto-hide-up-to-date'.
 If you customize this option to 'revert', the 'g' command to refresh
 the VC Directory buffer also has the effect of the 'x' command.
@@ -3126,13 +2688,11 @@ If you customize this option to any other non-nil value, then in
 addition, hide items whenever their state would change to 'up-to-date'
 or 'ignored'.
 
----
 *** New user option 'vc-dir-save-some-buffers-on-revert'.
 If you customize this option to non-nil, Emacs will offer to save
 relevant buffers before generating the contents of a VC Directory buffer
 (like the third-party package Magit does with its status buffer).
 
-+++
 *** New commands to report incoming and outgoing diffs.
 'vc-root-diff-incoming' and 'vc-root-diff-outgoing' report diffs of all
 the changes that would be pulled and would be pushed, respectively.
@@ -3146,7 +2706,6 @@ include were committed and will be pushed.
 'vc-diff-incoming' and 'vc-diff-outgoing' are similar but limited to the
 current VC fileset.
 
-+++
 *** New commands to report information about unintegrated changes.
 'C-x v T =' ('vc-diff-unintegrated') and 'C-x v T D'
 ('vc-root-diff-unintegrated') report diffs of changes since the merge
@@ -3163,14 +2722,12 @@ the current branch.  They are also available as 'T =', 'T D', 'T l' and
 ('vc-root-log-remote-unintegrated') are corresponding commands which
 report information about the remote versions of a topic branch.
 
-+++
 *** New commands to report combined diffs of all local changes.
 'C-x v E =' ('vc-diff-outgoing-and-edited') and 'C-x v E D'
 ('vc-root-diff-outgoing-and-edited') report combined diffs of all
 outgoing changes plus any uncommitted changes.  They are useful to show
 all work that's present only locally.
 
-+++
 *** New user option 'vc-use-incoming-outgoing-prefixes'.
 If this is customized to non-nil, 'C-x v I' and 'C-x v O' become prefix
 commands, such that the new incoming and outgoing commands have global
@@ -3183,23 +2740,19 @@ bindings:
 - 'C-x v O =' is bound to 'vc-diff-outgoing'.
 - 'C-x v O D' is bound to 'vc-root-diff-outgoing'.
 
-+++
 *** New display of outgoing revisions count in VC Directory.
 If there are outgoing revisions, VC Directory now includes a count of
 how many in its headers, to remind you to push them.  If this is slow,
 you can disable it by customizing 'vc-dir-show-outgoing-count' to nil.
 (In Emacs 32 it will be populated asynchronously.)
 
-+++
 *** New user option 'vc-async-checkin' to enable async checkin operations.
 Currently only supported by the Git and Mercurial backends.
 
-+++
 *** New user option 'vc-display-failed-async-commands'.
 If non-nil, displays the buffer with the output of the failed command
 when an asynchronous VC command (e.g., pulls and pushes) fails.
 
----
 *** New 'log-edit-hook' option to display diff of changes to commit.
 You can customize 'log-edit-hook' to include its new
 'log-edit-maybe-show-diff' option to enable displaying a diff of the
@@ -3207,32 +2760,27 @@ changes to be committed in a window.  This is like the 'C-c C-d' command
 in Log Edit mode buffers, except that it does not select the "*vc-diff*"
 buffer's window, and so works well when added to 'log-edit-hook'.
 
----
 *** 'vc-annotate' now abbreviates the Git revision in more cases.
 In Emacs 30, 'vc-annotate' gained the ability to abbreviate the Git
 revision in the buffer name.  Now, it also abbreviates the Git revision
 when visiting other revisions, such as with
 'vc-annotate-revision-previous-to-line'.
 
----
 *** New buffer-local variable 'vc-buffer-overriding-fileset'.
 Primarily intended for buffers not visiting files, this specifies the
 VC backend and VCS-managed file name or file names to which the buffer's
 contents corresponds.  It overrides the behavior of 'vc-deduce-fileset'.
 This replaces and generalizes the old 'vc-annotate-parent-file'.
 
----
 *** New buffer-local variable 'vc-buffer-revision'.
 This specifies the revision to which the buffer's contents corresponds.
 This replaces and generalizes the old 'vc-annotate-parent-rev'.
 
----
 *** The 'log-incoming' and 'log-outgoing' functions are deprecated.
 Backend authors should implement the 'incoming-revision' and 'mergebase'
 backend functions instead.  These are jointly sufficient to support the
 'C-x v I' and 'C-x v O' commands.
 
----
 *** Marking revisions in Log View now works more like other modes.
 Previously, 'm' toggled whether the current revision was marked, and
 didn't advance point.  Now 'm' only adds marks, 'u' removes marks, and
@@ -3244,7 +2792,6 @@ You can get back the old behavior with something like this:
 
 In addition, a new command 'U' removes all marks.
 
-+++
 *** New commands 'M-RET', 'M-p' and 'M-n' in Log View mode.
 'M-RET' expands the current entry, if relevant, and displays its diff in
 another window.  'M-p' and 'M-n' move to the previous and next entries,
@@ -3254,14 +2801,12 @@ You can use these three commands together to more easily view all the
 log entries and diffs of a series of revisions: use 'M-RET' on the first
 revision, then either 'M-n' or 'M-p' repeatedly to view the others.
 
-+++
 *** New command 'w' in Log View mode.
 The new command 'log-view-copy-revision-as-kill', bound to 'w' in Log
 View mode, copies to the kill ring the ID of the revision at point in
 the log entry.  If there are marked revisions, it copies the IDs of
 those, instead.
 
----
 *** New commands 'vc-print-change-log' and 'vc-print-root-change-log'.
 These are just like 'vc-print-log' and 'vc-print-root-log' except that
 they have a different prefix argument that some users may prefer.
@@ -3274,82 +2819,66 @@ already have, consider replacing the default global bindings, like this:
     (keymap-global-set "C-x v l" #'vc-print-change-log)
     (keymap-global-set "C-x v L" #'vc-print-root-change-log)
 
----
 *** New command alias 'vc-restore' for 'vc-revert'.
 
----
 *** The 'diff-restrict-view' command is disabled by default.
 This command is Diff mode's specialized 'narrow-to-region'.
 'narrow-to-region' has long been disabled by default, so for
 consistency, 'diff-restrict-view' is now too.
 To enable it again, use 'enable-command'.
 
----
 *** 'C-x v !' now has its own input history.
 
----
 *** 'C-x v +' for Git pulls from a configured push remote.
 If the current branch has a configured push remote, the default
 arguments to 'git pull' will cause a pull from the push remote.
 You can use 'C-u C-x v +' to preview or change the arguments.
 
----
 *** 'C-u C-x v +' and 'C-u C-x v P' for Git have an input history.
 This was already in place for Mercurial.
 
----
 *** vc-dav.el is now obsolete.
 
 ** Package
 
-+++
 *** No longer warn if a package has no footer line.
 package.el no longer warns for packages without a "footer line", which
 is the line that usually appears at the very end of an Emacs Lisp file:
 
     ;;; FILENAME ends here
 
----
 *** New optional argument to 'package-autoremove'.
 An optional argument NOCONFIRM has been added to 'package-autoremove'.
 If it is non-nil (interactively, with a prefix argument),
 'package-autoremove' will not prompt the user for confirmation before
 removing packages.
 
----
 *** New prefix argument for 'package-install-selected-packages'.
 When invoked with a prefix argument, 'package-install-selected-packages'
 will not prompt the user for confirmation before installing packages.
 
----
 *** 'package-refresh-contents' runs asynchronously.
 Refreshing the package index will no longer block when invoked
 interactively.
 
----
 *** 'package-upgrade' no longer accepts a string argument.
 When called from Lisp, it now only accepts a symbol.
 
----
 *** 'package-install-from-buffer' respects files marked by Dired.
 When invoking the command in a Dired buffer with marked files,
 the command will copy only those files.
 
----
 *** 'package-isolate' can now also install packages.
 If a package is missing, 'package-isolate' will fetch the missing
 tarballs and prepare them to be activated in the sub-process.
 
-+++
 *** package-x.el is now obsolete.
 
----
 *** The command 'package-vc-install-from-checkout' is now obsolete.
 Use the User Lisp directory instead: see Info node "(emacs) User Lisp
 Directory".  This also means that combining the 'use-package' keywords
 ':vc' and ':load-path' is obsolete.
 
----
 *** Package menu now highlights packages marked for installation or deletion.
 
 *** Package menu now displays the total number of the package type.
@@ -3358,7 +2887,6 @@ packages installed, the total number of packages from all the package
 archives, the total number of packages to upgrade and the total number
 of new packages available.
 
-+++
 *** New functions to query builtin package information.
 'package-versioned-builtin-packages' returns a list of symbols of
 built-in packages; 'package-builtin-package-version' returns the
@@ -3366,10 +2894,8 @@ version-list of a given package symbol.  These functions provide public
 interfaces for external tools to query information about built-in
 packages.
 
----
 *** Uninstalling a package now removes its directory from 'load-path'.
 
-+++
 *** Packages can be reviewed before installation or upgrade.
 The user option 'package-review-policy' can configure which packages
 the user should be allowed to review before any processing takes place.
@@ -3377,13 +2903,11 @@ The package review can include reading the downloaded source code,
 presenting a diff between the downloaded code and a previous
 installation or displaying a ChangeLog.
 
-+++
 *** New command 'package-autosuggest'.
 Using a built-in database of ELPA package suggestions, this command will
 install viable packages if no specific major mode is available for the
 contents of the current buffer.
 
-+++
 *** New minor mode 'package-autosuggest-mode'.
 When enabled, this displays indications about the availability of add-on
 ELPA packages for the current buffer and suggestions for installing
@@ -3392,12 +2916,10 @@ can be used to install such packages, but you can customize the
 presentation style of these suggestions using
 'package-autosuggest-style'.
 
-+++
 *** New user option 'package-retention-policy'.
 This user option controls what previous packages versions to keep on
 upgrade.  By default, this is set to nil, to keep the previous behavior.
 
----
 *** Packages are now checked for recursive dependencies before installing.
 If a package has dependencies not available on any of the archives in
 'package-archives', it will appear as unavailable, with the reasons
@@ -3405,13 +2927,11 @@ stated in its description.
 
 ** Rcirc
 
-+++
 *** Authentication via NickServ can access auth source passwords.
 For details, consult 'rcirc-authinfo'.
 
 ** Xref
 
----
 *** Xref commands that jump to some location use 'display-buffer'.
 The commands that jump to some location use 'display-buffer' and specify
 the category 'xref-jump'.  As a result, you can customize how the
@@ -3422,21 +2942,18 @@ destination window is chosen using 'display-buffer-alist'.  Example:
                                    display-buffer-use-some-window)
                                   (some-window . mru))))
 
-+++
 *** New minor mode 'xref-mouse-mode'.
 This minor mode binds 'xref-find-definitions-at-mouse' to
 'C-<down-mouse-1>', allowing you to control-click to jump to a
 definition, following the convention from other editors.  The global
 minor mode 'global-xref-mouse-mode' enables this in all buffers.
 
-+++
 *** New command 'xref-change-to-xref-edit-mode'.
 It is bound to 'e' and it switches an Xref buffer into an "editable"
 mode, like similar features in Occur and Grep buffers.
 
 ** Revert
 
-+++
 *** Variable 'revert-buffer-in-progress' has been renamed.
 The old name, 'revert-buffer-in-progress-p', is kept as an obsolete
 variable alias.  (Symbol names with a trailing '-p' are conventionally
@@ -3444,18 +2961,15 @@ reserved for predicates.)
 
 ** Autorevert
 
-+++
 *** New variable 'inhibit-auto-revert-buffers'.
 While a buffer is member of this variable, a list of buffers,
 auto-reverting of that buffer is suppressed.
 
-+++
 *** New macro 'inhibit-auto-revert'.
 This macro adds the current buffer to 'inhibit-auto-revert-buffers',
 runs its body, and removes the current buffer from
 'inhibit-auto-revert-buffers' afterwards.
 
-+++
 *** New variable 'auto-revert-buffer-in-progress'.
 'auto-revert-buffer' binds this variable to a non-nil value while it is
 working.  This can be used by major mode 'revert-buffer-function'
@@ -3463,7 +2977,6 @@ implementations to suppress messages in Auto Revert modes, for example.
 
 ** Strokes
 
----
 *** 'strokes-mode' no longer demands the presence of a mouse.
 'strokes-mode' now permits itself to be enabled if no mouse is
 connected, to facilitate enabling 'strokes-mode' in sessions where the
@@ -3472,7 +2985,6 @@ observed on Android).
 
 ** Yank Media
 
-+++
 *** 'yank-media' now auto-selects the most preferred MIME type.
 Major-mode authors can customize the variables
 'yank-media-autoselect-function' and/or 'yank-media-preferred-types' to
@@ -3480,19 +2992,16 @@ change the selection rules.
 
 ** Remember
 
----
 *** Remember mode is now a minor mode.
 The 'remember' command enables the major mode set in
 'remember-initial-major-mode' and then the 'remember-mode' minor mode in
 the 'remember-buffer'.  This allows users to customize the major mode
 used to write notes.
 
----
 *** New handler that appends remember data in directory.
 The 'remember-append-in-data-directory' handler appends remember data in
 a file, that file being chosen by the user through the minibuffer.
 
----
 *** New prefix map for remember commands.
 Meant to be given a global binding convenient to the user.  Example:
 
@@ -3500,13 +3009,11 @@ Meant to be given a global binding convenient to the user.  Example:
 
 ** Speedbar
 
-+++
 *** New commands for Speedbar.
 
 - 'speedbar-window-mode' opens Speedbar in a window instead of a frame.
 - 'speedbar-window' is an alias for 'speedbar-window-mode'.
 
-+++
 *** New user options for Speedbar.
 
 - 'speedbar-prefer-window' tells 'speedbar' to open a side window
@@ -3518,12 +3025,10 @@ Meant to be given a global binding convenient to the user.  Example:
 - 'speedbar-window-max-width' defines the maximum width of the
   'speedbar-window' when it is closed and then restored.
 
----
 *** 'speedbar-easymenu-definition-trailer' is now a function.
 
 ** Icomplete
 
----
 *** Change in meaning of 'icomplete-show-matches-on-no-input' (again).
 For Emacs 28 to Emacs 30, when 'icomplete-show-matches-on-no-input' was
 non-nil, 'RET' had special behavior when the minibuffer's contents was
@@ -3538,7 +3043,6 @@ You can opt back in to the special behavior of 'RET' like this:
       icomplete-minibuffer-map "<remap> <minibuffer-complete-and-exit>"
       #'icomplete-ret)
 
----
 *** New user options for 'icomplete-vertical-mode'.
 New user options have been added to enhance 'icomplete-vertical-mode':
 
@@ -3551,7 +3055,6 @@ New user options have been added to enhance 'icomplete-vertical-mode':
 - 'icomplete-vertical-unselected-prefix-indicator' specifies the prefix
   string for non-selected candidates.
 
----
 *** New faces for 'icomplete-vertical-mode'.
 New faces have been added to 'icomplete-vertical-mode':
 
@@ -3562,29 +3065,24 @@ New faces have been added to 'icomplete-vertical-mode':
 
 ** Custom
 
-+++
 *** New function 'custom-initialize-after-file-load'.
 Useful to delay initialization to the end of the file, so it can use
 functions defined later than the variable, as is common for minor modes.
 'define-globalized-minor-mode' now automatically uses it if the
 ':init-value' is non-nil.
 
----
 *** New major mode 'Custom-dirlocals-mode'.
 This is intended for customizing directory-local variables in the
 current directory's ".dir-locals.el" file.
 
-+++
 *** New binding 'C-c C-k' for 'Custom-reset-standard'.
 
-+++
 *** New command 'C-c TAB' ('Custom-goto-first-choice').
 When first opening the customization interface for a user option, you
 can use this command as a shortcut to jump to the first actionable
 button or field (for instance an on/off button for boolean options, or a
 text field for other values).
 
-+++
 *** ':set' functions should accept an optional argument BUFFER-LOCAL.
 This is the third argument, in addition to SYMBOL and VALUE.  If that
 argument's value is 'buffer-local', the ':set' function should use
@@ -3592,26 +3090,22 @@ argument's value is 'buffer-local', the ':set' function should use
 current buffer.  This is used by 'setopt-local', which will signal an
 error if this optional argument is not supported by the ':set' function.
 
-+++
 *** The 'defcustom' ':local' keyword can now be 'permanent-only'.
 This means that the variable's 'permanent-local' property is set to t,
 without marking it as automatically buffer-local.
 
 ** Pulse
 
----
 *** New user option 'pulse-face-duration'.
 This option controls the flash duration for 'flash-face-bell-function'
 and 'flash-echo-area-bell-function'.
 
----
 *** New function 'pulse-faces'.
 This function pulses a specified list of faces.  The pulse duration is
 determined by the new user option 'pulse-face-duration'.
 
 ** Edebug
 
-+++
 *** New command 'edebug-bounce-to-previous-value' (bound to 'P').
 This command temporarily displays the outside current buffer with the
 outside point corresponding to the previous value, where the previous
@@ -3621,16 +3115,13 @@ the user has evaluated in the context outside of Edebug.
 This replaces the binding of command 'edebug-view-outside' to 'P', which
 is still available on 'v'.
 
----
 ** Flymake
 
-+++
 *** Enhanced 'flymake-show-diagnostics-at-end-of-line'.
 The new value for this user option 'fancy' attempts to lay out
 diagnostics below the affected line, using unicode graphics to point to
 the diagnostic locus.
 
----
 *** Enhanced 'flymake-show-buffer-diagnostics'.
 The command 'flymake-show-buffer-diagnostics' is now capable of
 highlighting a nearby diagnostic in the resulting listing.
@@ -3639,30 +3130,25 @@ indicators, operating on the diagnostics of the corresponding line.
 You can bind it yourself in other situations too, such as in the
 diagnostic overlay map.
 
-+++
 *** More powerful 'flymake-make-diagnostic' API.
 Flymake backends can now specify origin and code attributes, allowing
 Flymake and other extensions to segregate diagnostics based on this
 extended information.
 
-+++
 *** New user option 'flymake-diagnostic-format-alist'.
 This provides fine-grained control over diagnostic formatting across
 different contexts, allowing you to specify which components (origin,
 code, message or one-liner message) appear in each output destination.
 
----
 *** Dynamic column sizing in diagnostic listings.
 The tabulated listings produced by 'flymake-show-buffer-diagnostics' and
 'flymake-show-project-diagnostics' now automatically adjust their column
 widths based on content, optimizing display space and readability.
 
----
 *** New value 'auto' of user option 'flymake-indicator-type'.
 This value (set by default) tries to use fringes if possible, otherwise
 falls back to margins.
 
----
 *** New user option 'elisp-flymake-byte-compile-executable'.
 This allows customizing the Emacs executable used for Flymake byte
 compilation in 'emacs-lisp-mode'.  This option should be set when editing
@@ -3672,24 +3158,20 @@ provide more accurate warnings from byte compilation.
 
 ** SQLite
 
-+++
 *** SQLite databases can now be opened in read-only mode.
 The new optional argument READONLY of function 'sqlite-open' allows
 opening an existing database only for reading.
 
-+++
 *** 'sqlite-open' now recognizes 'file://' URIs as well as file names.
 'file://' URIs are supported by default.  In the unusual case that a
 normal file name starts with "file:", you can disable the URI
 recognition by calling 'sqlite-open' with the new optional argument
 DISABLE-URI non-nil.
 
-+++
 *** 'sqlite-close' now does nothing if the connection is already closed.
 
 ** GUD
 
-+++
 *** 'pdb', 'perldb', and 'guiler' suggest debugging the current file via 'M-n'.
 When starting these debuggers (e.g., 'pdb') while visiting a file,
 pressing 'M-n' in the command prompt suggests a command line including
@@ -3697,28 +3179,23 @@ the file name, using the minibuffer's future history.
 
 ** Calendar
 
-+++
 *** New command 'C-l' ('calendar-recenter').
 This command recenters the month of the date at point.
 
----
 *** Mouse wheel bindings for scrolling the calendar.
 You can now use the mouse wheel to scroll the calendar by 3 months.
 With the shift modifier, it scrolls by one month.  With the meta
 modifier, it scrolls by one year.
 
-+++
 *** Simpler key bindings for navigation in calendar by months and by years.
 The month and year navigation key bindings 'M-}', 'M-{', 'C-x ]' and
 'C-x [' now have the alternative keys '}', '{', ']' and '['.
 
----
 *** Avoid modifying Calendar's user options.
 The user options 'calendar-mark-holidays-flag' and
 'calendar-mark-diary-entries-flag' are no longer modified when changing
 the marking state in the calendar buffer.
 
----
 *** New library for iCalendar data.
 A new library has been added to Emacs for handling iCalendar (RFC 5545)
 data.  The library is designed for reuse in other parts of Emacs and in
@@ -3732,14 +3209,12 @@ features from icalendar.el; see below.
 
 ** Diary
 
----
 *** New user option 'diary-date-insertion-form'.
 This user option determines how dates are inserted into the diary by
 Lisp functions.  Its value is a pseudo-pattern of the same type as in
 'diary-date-forms'.  It is used by 'diary-insert-entry' when inserting
 entries from the calendar, or when importing them from other formats.
 
-+++
 *** New library diary-icalendar.el.
 This library reimplements features previously provided by icalendar.el:
 import from iCalendar format to the diary, and export from the diary to
@@ -3748,13 +3223,11 @@ diary and display and mark their contents in the calendar without
 importing them to the diary file.  The library uses the new iCalendar
 library (see above) and makes diary import and export more customizable.
 
-+++
 *** New commands to display more months in the calendar.
 'calendar-show-more-months' and 'calendar-show-fewer-months' display
 more or fewer months in the calendar, respectively.  The calendar shows
 at most 12 months and at least 3 months.
 
-+++
 *** 'calendar-scroll-left-three-months' and its variants are obsolete aliases.
 Because the calendar can now display more than three months, commands
 'calendar-scroll-left-three-months' and
@@ -3764,7 +3237,6 @@ The old names are kept for now as obsolete aliases.
 
 ** Calc
 
-+++
 *** New user option 'calc-string-maximum-character'.
 Previously, the 'calc-display-strings', 'string', and 'bstring'
 functions only considered integer vectors whose elements are all in the
@@ -3773,14 +3245,12 @@ Latin-1 range 0-255.  This hard-coded maximum is replaced by
 the display of matching vectors as Unicode strings.  The default value
 is 0xFF or 255 to preserve the existing behavior.
 
-+++
 *** New user option 'calc-inhibit-startup-message'.
 If it is non-nil, inhibit Calc from printing its startup message.  The
 default value is nil to preserve the existing behavior.
 
 ** Time
 
----
 *** New user option 'world-clock-sort-order'.
 This option controls the order of timezone entries in the 'world-clock'.
 By default, no sorting is done, and entries appear in the same order as
@@ -3790,14 +3260,12 @@ each refresh.  The sort direction can be controlled by using a cons cell
 of a format string and a boolean.  Alternatively, a sorting function can
 be provided directly.
 
----
 *** New user option 'display-time-help-echo-format'.
 This option controls the format of the help echo when hovering over the
 time.
 
 ** Fill
 
-+++
 *** New variable 'fill-region-as-paragraph-function'.
 The new variable 'fill-region-as-paragraph-function' provides a way to
 override how functions like 'fill-paragraph' and 'fill-region' fill
@@ -3806,7 +3274,6 @@ needs.  It defaults to 'fill-region-as-paragraph-default'.
 
 ** Newsticker
 
----
 *** New user option 'newsticker-hide-old-feed-header'.
 It controls whether to automatically hide the header of feeds whose
 items are all old or obsolete in the plainview "*newsticker*" buffer.
@@ -3814,7 +3281,6 @@ This is only visually interesting if the content of those feeds are also
 hidden (see 'newsticker-hide-old-items-in-newsticker-buffer' and
 'newsticker-show-descriptions-of-new-items').
 
----
 *** New commands to hide and show headers of old newsticker feeds.
 The new commands 'newsticker-hide-old-feed-header' and
 'newsticker-show-old-feed-header', bound to 'h h' and 's h',
@@ -3823,13 +3289,11 @@ or obsolete.
 
 ** CPerl mode
 
----
 *** Syntax of Perl up to version 5.42 is supported.
 CPerl mode creates Imenu entries for ":writer" generated accessors and
 recognizes the new builtin functions "all" and "any".
 See https://perldoc.perl.org/5.42.0/perldelta for details.
 
----
 ** Zone
 
 Zone can scramble multiple windows across multiple frames; it may also
@@ -3874,12 +3338,10 @@ begrudgingly use the "*scratch*" buffer.
 
 ** Abbrev mode
 
-+++
 *** You can now enable Abbrev mode by default using Easy Customization.
 Customize the user option 'abbrev-mode' to non-nil to enable Abbrev mode
 by default in all buffers.
 
----
 ** Antlr mode
 
 *** Variable 'antlr-tool-version' is no longer a user option.
@@ -3916,20 +3378,17 @@ behavior back.
 
 ** Hi Lock
 
----
 *** The active region is used for default values in more functions.
 If an active region exists, the commands 'hi-lock-line-face-buffer' and
 'hi-lock-face-phrase-buffer' now use its contents as their default
 value.  Previously, only 'hi-lock-face-buffer' supported this.
 
----
 ** Shadowfile
 
 *** 'shadow-info-buffer' and 'shadow-todo-buffer' now use ephemeral buffer names.
 
 ** Display Battery mode
 
----
 *** UPower battery status can update automatically without polling.
 On systems where the user option 'battery-status-function' is set to
 'battery-upower', it is now possible to get battery status updates on
@@ -3940,7 +3399,6 @@ percentage, or presence in the bay changes.
 
 ** Etags Regen mode
 
----
 *** The tags table is no longer created during completion.
 Previously, when there was no tags table loaded and the default
 completion function was called, 'etags-regen-mode' ensured that tags
@@ -3949,155 +3407,129 @@ were created.  This has been disabled, and the new user option
 
 ** Miscellaneous
 
----
 *** 'tooltip-mode' now shows tooltips on TTY frames after a delay.
 Display of tooltips on text-only terminals now happens after
 'tooltip-delay', as it already did on GUI terminals.  To get back the
 old behavior, customize the value of 'tooltip-delay' to zero.
 
----
 *** New user option 'follow-mode-prefix-key'.
 This user option replaces 'follow-mode-prefix', which had to be set
 before loading Follow mode.  This new option allows you to change the
 prefix even after it was loaded, using 'customize-option' or 'setopt'.
 
----
 *** cdl.el is now obsolete.
 Use 'shell-command' and 'shell-command-on-region' instead.
 
----
 *** echistory.el is now obsolete.
 
----
 *** hashcash.el is now obsolete.
 It is believed to no longer be useful as a method to fight spam.
 
----
 *** kermit.el is now obsolete.
 
----
 *** New user option 'ns-click-through' on Nextstep (GNUstep/Mac OS).
 This controls whether activation clicks are passed through to Emacs
 commands.  When nil, clicking on an inactive Emacs frame will only
 activate it.  When t (the default), the click will both activate the
 frame and be interpreted as a command.
 
----
 *** New user option 'global-hl-line-buffers'.
 This specifies the buffers in which 'global-hl-line-mode' should be
 switched on.  The default is all buffers except the minibuffer, and
 buffers that enable 'cursor-face-highlight-mode', like the
 "*Completions*" buffer.
 
----
 *** New value 'window' for the user option 'global-hl-line-sticky-flag'.
 Unlike the value t that highlights the line containing point, it
 highlights the line with the window's point.  Also it uses the new face
 'hl-line-nonselected' for highlighting the line with the window's point
 in non-selected windows.
 
----
 *** New user option 'display-fill-column-indicator-warning'.
 Customize it to a non-nil value to have the fill-column indicators
 change their face if the current line exceeds the 'fill-column'.  The
 new face 'display-fill-column-indicator-warning-face' is used to
 highlight the fill-column indicators.  By default, this is disabled.
 
----
 *** New function 'flash-face-bell-function'.
 This function flashes a face briefly.
 It is intended to be used in 'ring-bell-function'.
 
----
 *** New function 'flash-echo-area-bell-function'.
 This function flashes the current frame's echo area briefly.
 It is intended to be used in 'ring-bell-function'.
 
----
 *** New user option 'flash-face-faces'.
 This option tells 'flash-face-bell-function' which faces should flash.
 
----
 *** New user option 'flash-face-attributes'.
 This option tells 'flash-face-bell-function' and
 'flash-echo-area-bell-function' which face attributes should be used
 to flash.
 
-+++
 *** 'face-all-attributes' now accepts an optional argument INHERIT.
 It has the same meaning as the INHERIT argument to 'face-attribute',
 which already takes this argument for a single attribute.  This is
 useful when you want the face attributes to be absolute and not
 'unspecified'.
 
----
 *** New user option 'ffap-prefer-remote-file'.
 If non-nil, FFAP always finds remote files in buffers with remote
 'default-directory'.  If nil, FFAP finds local files first for absolute
 file names in those buffers.  The default is nil.
 
-+++
 *** New theme 'newcomers-presets'.
 This new theme configures user options and minor modes that might
 interest new users, but would otherwise be too invasive to enable by
-default.  (An Emacs theme is a generic collection of settings, and need
-not affect Emacs's appearance.)  See the Info node "(emacs) Newcomers
-Theme" for more information.
+default.  It is basically a set of alternative defaults.  (An Emacs
+theme is a generic collection of settings, and need not affect Emacs's
+appearance.)  See the Info node "(emacs) Newcomers Theme" for more
+information.
 
----
 *** 'report-emacs-bug' now checks whether the bug report is about Org.
 The command 'report-emacs-bug' looks in the report text for symbols that
 indicate problems in Org, and if found, will ask whether the bug report
 is actually about Org (in which case users should use the Org-specific
 command for reporting bugs).
 
----
 *** The elint.el package is now obsolete.
 Use the byte-compiler instead; it provides more and more useful warnings.
 
 
 * New Modes and Packages in Emacs 31.1
 
----
 ** New major mode 'icalendar-mode'.
 A major mode for displaying and editing iCalendar (RFC 5545) data.  This
 mode handles line unfolding and fontification, including highlighting
 syntax errors in invalid data.
 
-+++
 ** New minor mode 'delete-trailing-whitespace-mode'.
 A simple buffer-local mode that runs 'delete-trailing-whitespace'
 before saving the buffer.
 
----
 ** New major mode 'conf-npmrc-mode'.
 A major mode based on 'conf-mode' for editing ".npmrc" files.
 
 ** New major modes based on the tree-sitter library
 
----
 *** New major mode 'mhtml-ts-mode'.
 An optional major mode based on the tree-sitter library for editing HTML
 files.  This mode handles indentation, fontification, and commenting for
 embedded JavaScript and CSS.
 
----
 *** New major mode 'go-work-ts-mode'.
 A major mode based on the tree-sitter library for editing "go.work"
 files.  If tree-sitter is properly set-up by the user, it can be
 enabled for files named "go.work".
 
----
 ** New package 'lua-mode'.
 The 'lua-mode' package from NonGNU ELPA is now included in Emacs.
 
----
 ** New library 'timeout'.
 This library provides functions to throttle or debounce Emacs Lisp
 functions.  This is useful for corralling overeager code that is slow
 and blocks Emacs, or does not provide ways to limit how often it runs.
 
-+++
 ** New mode 'system-taskbar-mode'.
 This is a global minor mode and companion functions that integrate Emacs
 with system GUI taskbars (also called docks or launchers or something
@@ -4111,7 +3543,6 @@ On GNU/Linux systems, shell extensions or similar helpers such as
 <https://extensions.gnome.org/extension/307/dash-to-dock/> and
 <https://wiki.ubuntu.com/Unity/LauncherAPI>.
 
-+++
 ** New package 'system-sleep'.
 This package provides platform-neutral interfaces to block your system
 from entering idle sleep and a hook to process pre-sleep and post-wake
@@ -4131,7 +3562,6 @@ sleep events require Windows 8 or later).
 
 * Incompatible Lisp Changes in Emacs 31.1
 
-+++
 ** Boundaries of 'cursor-sensor-functions' now obey stickiness.
 'cursor-sensor-mode' now uses 'get-pos-property' to decide whether a
 boundary is considered to be inside or outside.
@@ -4146,12 +3576,10 @@ stickiness, for example with a call like:
                          '(cursor-sensor-functions (MY-FUNCTION)
                            rear-nonsticky (cursor-sensor-functions)))
 
-+++
 ** 'makunbound' on a variable alias undoes the alias.
 Previously, it had the effect of applying the 'makunbound' to the target
 of the alias (which can fail for some builtin variables).
 
----
 ** 'FOO-ts-mode-indent-offset' renamed to 'FOO-ts-indent-offset'.
 When the new TS modes were introduced, a mistake was made where those
 modes used 'FOO-mode-indent-offset' instead of the conventional
@@ -4163,7 +3591,6 @@ modes used 'FOO-mode-indent-offset' instead of the conventional
 'go-ts-indent-offset', 'csharp-ts-indent-offset',
 'cmake-ts-indent-offset', 'c-ts-indent-offset'.
 
-+++
 ** String mutation has been restricted further.
 'aset' on unibyte strings now requires the new character to be a single
 byte (0-255).  On multibyte strings the new character and the character
@@ -4178,7 +3605,6 @@ Other functions that use 'aset' to modify string data, such as
 'subst-char-in-string' with a non-nil INPLACE argument, will signal an
 error if called with arguments that would violate these rules.
 
-+++
 ** More program constants are combined by the compiler.
 The compiler now unifies more constants that are 'equal' for better code
 generation.  This does not affect correct programs but may expose some
@@ -4190,66 +3616,54 @@ may return either nil or t.
 
 ** Nested backquotes are no longer supported in Pcase patterns.
 
----
 ** The obsolete variable 'redisplay-dont-pause' has been removed.
 
----
 ** The 'rx' category name 'chinese-two-byte' must now be spelled correctly.
 An old alternative name (without the first 'e') has been removed.
 
-+++
 ** 'text-property-default-nonsticky' is now buffer-local.
 This variable now becomes buffer-local when set.  Use 'setq-default' in
 the (unlikely) case you want to change the global value.
 
----
 ** All the digit characters now have the 'digit' category.
 All the characters whose Unicode general-category is Nd now have the
 'digit' category, whose mnemonic is '6'.  This includes both ASCII and
 non-ASCII digit characters.
 
----
 ** All the symbol characters now have the 'symbol' category.
 All the characters that belong to the 'symbol' script (according to
 'char-script-table') now have the 'symbol' category, whose mnemonic is
 '5' (it looks like an 'S').
 
----
 ** Some libraries obsolete since Emacs 24.4 and 24.5 have been removed:
 cc-compat.el, info-edit.el, meese.el, otodo-mode.el, rcompile.el,
 sup-mouse.el, terminal.el, vi.el, vip.el, ws-mode.el, and yow.el.
 
-+++
 ** 'if-let' and 'when-let' are now obsolete.
 Use 'if-let*', 'when-let*' and 'and-let*' instead.
 
 This effectively obsoletes the old '(if-let (SYMBOL SOMETHING) ...)'
 single binding syntax, which we'd kept only for backwards compatibility.
 
----
 ** The Eshell 'pwd' command now expands the directory name on all systems.
 This ensures that user directories are properly expanded to their full
 name.  Previously, Eshell only did this for MS-Windows systems.  To
 restore the old behavior, you can set 'eshell-pwd-convert-function' to
 'identity'.
 
----
 ** The rx 'eval' form now uses the current Lisp dialect for evaluation.
 Previously, its argument was always evaluated using dynamic binding.
 
----
 ** Unused block comment variables have been removed.
 The unused variables 'block-comment-start' and 'block-comment-end',
 which never actually had any effect when set by major modes, have been
 removed.
 
-+++
 ** 'delete-frame' now needs a non-nil FORCE to delete the daemon frame.
 The initial terminal frame of an Emacs process running as daemon can be
 deleted via 'delete-frame' if and only if its optional FORCE argument is
 non-nil.
 
----
 ** 'date-to-time' no longer accepts malformed times with time zone like "EDT".
 Time strings like "2025-06-04T13:21:00 EDT" are not in valid ISO 8601
 time format, and 'date-to-time' now signals an error for them.  Use a
@@ -4259,22 +3673,18 @@ instead, which gives the time offset as +/-hh or +/-hh:mm.  A designator
 formats, like "2025-06-04 13:21:00 EDT", without the ISO 8601 "T"
 separator, are also supported.
 
----
 ** The obsolete variable 'load-convert-to-unibyte' has been removed.
 
----
 ** The experimental variable 'binary-as-unsigned' has been removed.
 Instead of '(let ((binary-as-unsigned t)) (format "%x" N))' you can use
 '(format "%x" (logand N MASK))' where MASK is for the desired word size,
 e.g., #x3fffffffffffffff for typical Emacs fixnums.
 
-+++
 ** The 'exec-path' variable now uses same default PATH as other programs.
 That is, if the PATH environment variable is unset or empty, 'exec-path'
 now acts as if PATH is the system default, which is "/bin:/usr/bin"
 on GNU/Linux systems.
 
----
 ** New variable 'tty-cursor-movement-use-TAB-BS'.
 The display optimization where the combination 'TAB' characters +
 'BACKSPACE' is used to move to a position on a TTY frame is now disabled
@@ -4282,7 +3692,6 @@ by default and controlled by this variable; it can be set to non-nil
 to keep the old behavior.  This change is to accommodate screen
 readers.
 
----
 ** 'next-completion' and 'previous-completion' now use 'completions-format'.
 Previously, these commands only took horizontal format into account;
 now, they call either '{next,previous}-line-completion' or the new
@@ -4295,7 +3704,6 @@ assumes the previous implementation must be adjusted accordingly; see
 'minibuffer-next-completion' for an example of such an adjustment in
 Emacs core.
 
-+++
 ** A thread's current buffer can now be killed.
 We introduce a new attribute for threads called "buffer disposition".
 See the new argument in 'make-thread' as well as the
@@ -4303,7 +3711,6 @@ See the new argument in 'make-thread' as well as the
 The default value allows the thread's current buffer to be killed by another
 thread.  This does not apply to the main thread's buffer.
 
----
 ** Defining or modifying a face so that it inherits from itself signals error.
 Calling any function that defines or modifies a face in a way that
 causes cyclical inheritance (i.e., the face inherits from itself, either
@@ -4313,7 +3720,6 @@ display time or even cause Emacs to hang trying to display such a face.
 Affected APIs include 'defface', 'set-face-attribute', their callers,
 and other similar functions.
 
-+++
 ** Original behavior of 'overlays-in' and 'overlays-at' has been restored.
 Before Emacs 28.1, the list of overlays returned by these two functions
 included overlays outside of the current narrowing of the buffer, and
@@ -4324,21 +3730,18 @@ actual end of buffer, disregarding narrowing.  As result,
 'remove-overlays' can now again remove overlays outside of the
 narrowing, as it did before Emacs 28.1.
 
----
 ** 'help-setup-xref' now re-enables the major mode of the Help buffer.
 As a result, in many cases the buffer will be read-only afterwards.
 This should not cause any trouble as long as the actual buffer
 modification takes place inside 'with-help-window' or
 'with-output-to-temp-buffer' after the call to 'help-setup-xref'.
 
----
 ** Xref commands don't automatically suggest visiting a tags table anymore.
 When no tags file is loaded, symbol completion now just won't provide
 any suggestions.  Thus, so the 'M-?' command now works without a tags
 table.  And the 'M-.' command will show a message describing the several
 built-in options that will provide an Xref backend when used.
 
-+++
 ** Calling 'debug' in batch sessions no longer kills Emacs.
 If you want Emacs to exit, your program will now have to call
 'kill-emacs' explicitly.
@@ -4346,7 +3749,6 @@ If you want Emacs to exit, your program will now have to call
 
 * Lisp Changes in Emacs 31.1
 
-+++
 ** The API to manipulate error descriptors has been improved.
 There are new functions: 'error-type-p', 'error-type',
 'error-has-type-p', and 'error-slot-value'.  You can now say '(signal
@@ -4354,32 +3756,27 @@ err)' instead of '(signal (car err) (cdr err))', which is not only more
 concise, but also preserves the equality (under 'eq') of the error
 descriptor.
 
-+++
 ** 'secure-hash' now supports generating SHA-3 message digests.
 The list returned by 'secure-hash-algorithms' now contains the symbols
 'sha3-224', 'sha3-256', 'sha3-384', and 'sha3-512'.  These symbols can
 be used as the ALGORITHM argument of 'secure-hash' to generate SHA-3
 hashes.
 
-+++
 ** New function 'garbage-collect-heapsize'.
 Same as 'garbage-collect' but just returns the info from the last GC
 without performing a collection.
 
-+++
 ** Improve 'replace-region-contents' to accept more forms of sources.
 It has been moved from subr-x.el to editfns.c.  You can now directly
 pass it a string or a buffer rather than a function.  Passing a function
 is now deprecated.
 
-+++
 ** New function 'char-displayable-on-frame-p'.
 'char-displayable-on-frame-p' returns non-nil if Emacs ought to be able
 to display its char argument on a given frame.  This new function,
 unlike 'char-displayable-p', does not check whether the character can be
 encoded by the underlying terminal.
 
-+++
 ** New function 'frame-initial-p'.
 This predicate returns non-nil if a given frame or terminal is or holds,
 respectively, the initial text frame that is used internally during
@@ -4387,20 +3784,17 @@ daemon mode, batch mode, and the early stages of startup.  Interactive
 and graphical programs, for instance, can use this predicate to avoid
 operating on the initial frame, which is never displayed.
 
-+++
 ** New macros 'static-when' and 'static-unless'.
 Like 'static-if', these macros evaluate their condition at
 macro-expansion time and are useful for writing code that can work
 across different Emacs versions.
 
-+++
 ** New feature to speed up repeated lookup of Lisp files in 'load-path'.
 If the new variable 'load-path-filter-function' is set to the new
 function 'load-path-filter-cache-directory-files', calling 'load' will
 cache the directories it scans and their files, and the following
 lookups should be faster.
 
-+++
 ** 'let-alist' supports indexing into lists.
 The macro 'let-alist' now interprets symbols containing numbers as list
 indices.  For example, '.key.0' looks up 'key' in the alist and then
@@ -4408,7 +3802,6 @@ returns its first element.
 
 ** Lexical binding
 
----
 *** You can change the default value of 'lexical-binding'.
 While the default is still the use of dynamic binding dialect of Emacs
 Lisp in those places that don't explicitly set 'lexical-binding', you
@@ -4416,10 +3809,8 @@ can change it globally with:
 
     (set-default-toplevel-value 'lexical-binding t)
 
----
 *** Loading a file displays a warning if there is no 'lexical-binding' cookie.
 
----
 ** Files loaded from '-x' and '--script' now use lexical binding.
 If you don't have time to adapt your script's code to the lexical
 binding dialect (see "(elisp) Converting to Lexical Binding"), you can
@@ -4430,53 +3821,43 @@ wrap your code in:
      '(progn
         YOUR CODE HERE))
 
----
 ** New function 'set-local'.
 This is the buffer-local equivalent of the function 'set'.
 
-+++
 ** New macro 'setopt-local'.
 This is the buffer-local version of 'setopt' for user options rather
 than plain variables, and uses 'custom-set'/'set-local' to set variable
 values.  A new argument, BUFFER-LOCAL, is passed to 'custom-set'
 functions to indicate the buffer-local context.
 
-+++
 ** New macros 'incf' and 'decf'.
 They increment or decrement the value stored in a variable (a symbol),
 or in a generalized variable.
 
-+++
 ** New functions 'plusp' and 'minusp'.
 They return non-nil if a number is positive or negative, respectively,
 and signal an error if they are given a non-number.
 
-+++
 ** New functions 'oddp' and 'evenp'.
 They return non-nil if an integer is odd or even, respectively, and
 signal an error if they are given a non-integer.
 
-+++
 ** New functions 'drop-while' and 'take-while'.
 These work like 'drop' and 'take' but use a predicate instead of
 counting.
 
-+++
 ** New function 'all' and function alias 'any'.
 These return non-nil for lists where all and any elements, respectively,
 satisfy a given predicate.
 
-+++
 ** 'equal' now compares circular lists without signalling an error.
 Comparing very deeply nested objects will still fail, but 'equal'
 will no longer signal the 'circular-list' error.
 
-+++
 ** The 'defvar-local' macro's second argument is now optional.
 This means that you can now call it with just one argument, like
 'defvar', to declare a variable both special and buffer-local.
 
----
 ** The rx atom 'any' is obsolete and usage emits warnings.
 When used as an atom, 'any' is an old alias for 'not-newline' but is
 often mistakenly used where 'anychar' was intended.  Note that the
@@ -4484,7 +3865,6 @@ construct '(any ...)' is unrelated and not obsolete.
 
 ** ERT
 
----
 *** Some experimental ERT macros are now considered stable.
 The following macros, previously only available in the experimental
 'ert-x' module, are now considered stable and have been moved to 'ert':
@@ -4495,13 +3875,11 @@ The following macros, previously only available in the experimental
 
 See "(ert) Helper Functions" node in the ERT manual for more information.
 
-+++
 *** New function 'ert-play-keys'.
 Previously, 'ert-simulate-keys' could be used for sending keys to input
 functions such as 'read-from-minibuffer', but not for other interactive
 input such as starting key-mapped commands.
 
-+++
 *** Show executed tests from erts files via the ERT results buffer.
 For tests that call 'ert-test-erts-file', the ERT results buffer now
 allows you to list the tests defined in the referenced erts files that
@@ -4510,47 +3888,39 @@ Tests Interactively" for more information.
 
 ** Time & Date
 
-+++
 *** 'seconds-to-string' supports new formatting options.
 Optional arguments are provided to produce human-readable time-duration
 strings in a variety of formats, for example "6 months 3 weeks" or "5m
 52.5s".
 
-+++
 ** New function 'hash-table-contains-p'.
 This function returns non-nil if a given key is present in a hash table.
 
-+++
 ** The function 'purecopy' is now an obsolete alias for 'identity'.
 
 ** New function 'native-compile-directory'.
 This function natively compiles all Lisp files in a directory and in its
 sub-directories, recursively, excluding those already natively compiled.
 
----
 ** New function 'color-blend'.
 This function takes two RGB lists and optional ALPHA and returns an RGB
 list whose elements are blended in linear space proportional to ALPHA.
 
-+++
 ** New function 'dom-inner-text'.
 This function gets all the text within a DOM node recursively, returning
 it as a concatenated string.  It replaces the now-obsolete functions
 'dom-text' and 'dom-texts'.
 
----
 ** The obsolete face attribute ':reverse-video' has been removed.
 Use ':inverse-video' instead.
 
 ** D-Bus
 
-+++
 *** Support interactive D-Bus authorization.
 A new ':authorizable t' parameter has been added to 'dbus-call-method'
 and 'dbus-call-method-asynchronously' to allow the user to interactively
 authorize the invoked D-Bus method (for example via polkit).
 
-+++
 *** Support D-Bus file descriptor manipulation.
 A new ':keep-fd' parameter has been added to 'dbus-call-method' and
 'dbus-call-method-asynchronously' to instruct D-Bus to keep a file
@@ -4559,16 +3929,13 @@ functions 'dbus--fd-open', 'dbus--fd-close' and 'dbus--registered-fds'
 implement managing these file descriptors.  See the Info node "(dbus)
 File Descriptors" for details.
 
----
 ** The customization group 'wp' has been removed.
 It has been obsolete since Emacs 26.1.  Use the group 'text' instead.
 
-+++
 ** New optional BUFFER argument for 'string-pixel-width'.
 If supplied, 'string-pixel-width' will use any face remappings from
 BUFFER when computing the string's width.
 
-+++
 ** New function 'truncate-string-pixelwise'.
 This function truncates a string to the specified maximum number of
 pixels rather than by characters, as in 'truncate-string-to-width', and
@@ -4576,14 +3943,12 @@ respects face remappings if BUFFER is specified.  You can also specify
 an optional ellipsis string to append, similar to
 'truncate-string-to-width'.
 
----
 ** New macro 'with-work-buffer'.
 This macro is similar to the already existing macro 'with-temp-buffer',
 except that it does not allocate a new temporary buffer on each call,
 but tries to reuse those previously allocated (up to a number defined by
 the new variable 'work-buffer-limit', which defaults to 10).
 
-+++
 ** 'date-to-time' now defaults to local time.
 The function now assumes local time instead of Universal Time when
 its argument lacks explicit time zone information.  This has been the
@@ -4593,19 +3958,16 @@ removed because its supported date styles can be handled by
 'parse-time-string'.  To restore the previously documented behavior,
 specify "+0000" or "Z" as the time zone in the argument.
 
----
 ** The 'min-width' property is now supported for overlays as well.
 This 'display' property was previously supported only as text property.
 Now overlays can also have this property, with the same effect for the
 text covered by the overlay.
 
-+++
 ** New function 'remove-display-text-property'.
 This function removes a display property from the specified region of
 text, preserving any other display properties already set for that
 region.
 
-+++
 ** New macro 'cond*'.
 The new macro 'cond*' is an alternative to 'cond' and 'pcase'.
 Like them, it can be used to define several clauses, each one with its
@@ -4616,14 +3978,12 @@ another pattern matching syntax that is different from that of 'pcase',
 which some users might find less cryptic.
 See the Info node "(elisp) cond* Macro" for details.
 
----
 ** New function 'shell-command-do-open'.
 This lets a Lisp program access the core functionality of the
 'dired-do-open' command.  It opens a file or files using an external
 program, choosing the program according to the operating system's
 conventions.
 
-+++
 ** 'make-vtable' can create an empty vtable.
 It is now possible to create a vtable without data, by leaving the
 ':objects' list empty, or by providing an ':objects-function' that
@@ -4632,7 +3992,6 @@ provide a ':columns' spec, so that the number of columns and their
 widths can be determined.  Column widths can be set explicitly, or they
 will be calculated based on the window width.
 
-+++
 ** New symbol property 'repeat-continue' for 'repeat-mode'.
 A command with the 'repeat-continue' symbol property, which can be a
 list of keymaps or t, will continue an already active repeating sequence
@@ -4644,14 +4003,11 @@ the 'repeat-continue' property of each command in that list.  The
 'use-package' and 'bind-keys' macros support a similar keyword
 ':continue-only'.
 
-+++
 ** New function 'completion-table-with-metadata'.
 It offers a more concise way to create a completion table with metadata.
 
-+++
 ** 'all-completions' and 'unintern' no longer support old calling conventions.
 
-+++
 ** New symbol property 'find-function-type-alist'.
 Used by 'find-function' and similar commands.  Macros that define an
 object in a way that makes it hard to associate the object's name with
@@ -4662,18 +4018,15 @@ for finding the definition.
 The new convenience function 'find-function-update-type-alist' offers a
 concise way to update a symbol's 'find-function-type-alist' property.
 
----
 ** New function variable 'comment-setup-function' for multi-language modes.
 It can set comment-related variables such as 'comment-start' depending
 on the language under point.
 
-+++
 ** 'inhibit-message' can now inhibit clearing of the echo area.
 Binding 'inhibit-message' to a non-nil value will now suppress both
 the display of messages and the clearing of the echo area, such as
 caused by calling 'message' with a nil argument.
 
----
 ** 'minibuffer-message' no longer blocks while displaying message.
 'minibuffer-message' now uses a timer to clear the message printed to
 the minibuffer, instead of waiting with 'sit-for' and then clearing it.
@@ -4682,48 +4035,39 @@ print a message and then continue to perform work.
 
 ** Special Events
 
-+++
 *** New primitive 'insert-special-event'.
 This function inserts the special EVENT into the input event queue.
 
-+++
 *** New event type 'sleep-event'.
 This event is sent when the device running Emacs enters or leaves the
 sleep state.
 
----
 ** Function aliases obsolete since Emacs 23.2 have been removed:
 'advertised-undo', 'advertised-widget-backward', and
 'dired-advertised-find-file'.
 
-+++
 ** New functions to get and set top-level buffer-local values.
 'buffer-local-toplevel-value' and 'set-buffer-local-toplevel-value' get
 and set the top-level buffer-local value of a variable.  A top-level
 value is the one that variable has outside of any let-bindings.
 
-+++
 ** New function 'exec-suffixes'.
 This function by default returns the value of the corresponding user
 option, but can optionally return the equivalent of 'exec-suffixes' from
 a remote host.  It must be used in conjunction with the function
 'exec-path'.
 
-+++
 ** 'read-directory-name' now accepts an optional PREDICATE argument.
 
----
 ** JSON parse error line and column are now obsolete.
 The column number is no longer available; the line number will be
 removed in the next release of Emacs.
 
-+++
 ** 'defvar-keymap' can now take a ':prefix t' option.
 This is an abbreviation for using the name of the keymap as the prefix
 command name.  E.g., '(defvar-keymap foo-map :prefix t)' is equivalent
 to '(defvar-keymap foo-map :prefix 'foo-map)'.
 
-+++
 ** New 'R' code letter for 'interactive' forms.
 This specifies the beginning and end of an active region, and nil twice
 if the region is inactive.  The interactive specification
@@ -4736,37 +4080,31 @@ is equivalent to
 
 ** Toolkit
 
----
 *** The Emacs PGTK toolkit respects dark and light modes.
 Emacs when built with the pure GTK toolkit now respects desktop dark and
 light modes for drawing the GTK toolbar and widgets, automatically
 toggling between them.
 
----
 *** 'toolkit-theme-set-functions' called when the toolkit theme is set for Emacs.
 When the theme is set on PGTK, Android, or MS-Windows systems,
 'toolkit-theme-set-functions' is called.  The result is stored in the
 variable 'toolkit-theme' as either symbol 'dark' or 'light', but may be
 extended to encompass other toolkit-specific symbols in the future.
 
-+++
 ** Progress reporter context.
 'make-progress-reporter' now accepts the optional argument CONTEXT,
 which if it is the symbol 'async', inhibits updates in the echo area
 when it is busy.  This is useful, for example, if you want to monitor
 progress of an inherently asynchronous command such as 'compile'.
 
-+++
 ** Binary format specifications '%b' and '%B' added.
 These produce the binary representation of a number.  '%#b' and '%#B'
 prefix the bits with '0b' and '0B', respectively.
 
----
 ** 'pp-eval-expression' can now insert results into the current buffer.
 With a prefix argument, 'pp-eval-expression' inserts the result into the
 current buffer, just like 'eval-expression' already did.
 
-+++
 ** New function 'multiple-command-partition-arguments'.
 This function partitions a list of command arguments that might be
 arbitrarily long.  It can be used in cases in which it is known to be
@@ -4774,14 +4112,12 @@ safe to run the command multiple times on subsequent partitions of the
 list of arguments.  The variable 'command-line-max-length' controls the
 partitioning.
 
-+++
 ** New function 'ensure-proper-list'.
 This function is a variation on 'ensure-list' that checks if an object
 is a proper list, in which case the list will be returned as is,
 otherwise the function will return the object wrapped in a singleton
 list.
 
----
 ** In batch mode, 'C-c' (i.e. SIGINT) can either 'quit' or kill Emacs.
 By default it kills Emacs, as before, but 'kill-emacs-on-sigint'
 can be set to nil to change that.
@@ -4789,7 +4125,6 @@ The response to SIGINT in interactive sessions is unaffected,
 e.g., in a normal GUI session it still kills Emacs whereas in a terminal
 it causes 'quit' since it is used for 'C-g'.
 
-+++
 ** New ':interactive-only' way to add an advice.
 While it is marginally more efficient than ':after' or ':before',
 the main purpose is to make the intention more obvious when the advice
@@ -4799,14 +4134,12 @@ of the function.
 
 * Changes in Emacs 31.1 on Non-Free Operating Systems
 
----
 ** Support macOS Accessibility Zoom focus tracking.
 This is an important change for visually-impaired users.  If macOS
 Accessibility Zoom is enabled via (System Settings, Accessibility,
 Zoom...) with keyboard focus tracking (Advanced...), Zoom is informed
 of updated cursor positions during each redisplay cycle.
 
----
 ** New macOS function 'ns-process-is-accessibility-trusted'.
 This function returns t if the macOS Accessibility Framework trusts
 Emacs.  This is a necessary condition for Accessibility Zoom and other
@@ -4814,32 +4147,27 @@ accessibility features.  Enable Emacs via (System Settings, Privacy &
 Security, Accessibility...) and add the Emacs.app installed directory to
 the enabled application list.
 
----
 ** Process execution has been optimized on Android.
 The run-time performance of subprocesses on recent Android releases,
 where a userspace executable loader is required, has been optimized on
 systems featuring Linux 3.5.0 and above.
 
----
 ** It is now possible to read GUI events from non-main Lisp threads on Android.
 Put differently, this enables input events to be read and recursive
 editing sessions to be started from non-main threads.  The only platform
 where this remains unsupported is Nextstep (GNUstep or macOS).
 
----
 ** 'desktop-restore-frames' has been disabled by default on Android systems.
 Restrictions imposed on clients by the window manager on these systems
 are too prohibitive and don't allow restoring frame configurations.
 (For the same reason many window management facilities are also not
 implemented by Emacs.)
 
----
 ** Emacs responds to runtime display configuration changes on Android.
 The upshot of this is that Emacs will adapt to display resolution /
 layout changes applied while an Emacs session is active, which is
 possible on some recently released devices.
 
----
 ** 'NSSpeechRecognitionUsageDescription' now included in "Info.plist" (macOS).
 Should Emacs (or any built-in shell) invoke a process using macOS speech
 recognition APIs, the relevant permission dialog is now displayed, thus
@@ -4848,29 +4176,24 @@ allowing Emacs users access to speech recognition utilities.
 Note: Accepting this permission allows the use of system APIs, which may
 send user data to Apple's speech recognition servers.
 
----
 ** Re-introduced dictation, lost in Emacs 30 (macOS).
 We lost macOS dictation in Emacs 30 when migrating to NSTextInputClient.
 We have now implemented 'selectedRange' in 'nsterm.m' to enable it in
 the new subsystem.  You may notice a slight change in dictation UI
 provided by macOS.
 
-+++
 ** On Mac OS X, stipples now render with color.
 
----
 ** Emacs on MS-Windows now supports GUI dialogs and message boxes better.
 In particular, it is now possible to show text with embedded newlines in
 a dialog popped by 'message-box'.  This is supported on Windows Vista
 and later versions.
 
----
 ** Emacs on MS-Windows now supports drag-n-drop of text into a buffer.
 This is in addition to drag-n-drop of files, which was already
 supported.  As on X, the user options 'dnd-scroll-margin' and
 'dnd-indicate-insertion-point' can be used to customize the process.
 
----
 ** Emacs on MS-Windows now supports color fonts.
 On Windows 8.1 and later versions, Emacs now uses DirectWrite to draw
 text, which supports color fonts.  This can be disabled by setting the
@@ -4881,46 +4204,38 @@ DirectWrite rendering parameters.
 To show color Emojis in Emacs, customize the default fontset to use a
 color Emoji font installed on your system for the 'emoji' script.
 
-+++
 ** Emacs on MS-Windows now supports 'yank-media'.
 This command inserts clipboard data of different formats into the
 current buffer, if the major mode supports it.
 
----
 ** Emacs on MS-Windows now supports up to 1024 sub-processes.
 Changes in implementation of monitoring sub-processes allow Emacs on
 MS-Windows to start up to 1024 sub-processes, similar to GNU/Linux and
 other free systems.
 
----
 ** Images on MS-Windows now support the ':transform-smoothing' flag.
 Transformed images are smoothed using the bilinear interpolation by
 means of the GDI+ library.
 
----
 ** Emacs on MS-Windows is now capable of exporting frame screenshots to files.
 The new primitive 'w32-export-frame' can be used to export a screenshot
 of a specified frame to an image file in one of the supported image
 formats, such as JPEG or PNG.
 
----
 ** Emacs on MS-Windows now supports the ':data' keyword for 'play-sound'.
 In addition to ':file FILE' for playing a sound from a file, ':data
 DATA' can now be used to play a sound from memory.
 
----
 ** New primitive 'w32-sound-volume'.
 This primitive allows getting and setting the volume of the system's
 default audio device (or the "optimal device", if there are several
 devices).
 
----
 ** The MS-DOS port of Emacs now supports more recent releases of GCC and Binutils.
 Accordingly, we have revised our recommendations for a suitable DJGPP
 toolchain to GCC 14.2.0 and Binutils 2.35.1 in lieu of GCC 3.4.x and
 Binutils 2.26.
 
-+++
 ** Windows Terminal can now display 256 and 24-bit RGB color.
 Previously, terminal sessions on Windows supported display of 16 colors.
 There is now support for 8-bit (256 color) and 24-bit RGB (true color).
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index d439d4ed2e3..4d425103651 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -246,13 +246,15 @@ The following specifiers are available:
 For example, a value of \"%h%[email protected]\" will generate a UID code
 for each entry composed of a hash of the event data, a creation
 timestamp, and your personal domain name."
-  :type 'string)
+  :type 'string
+  :version "31.1")
 
 (defcustom ical:vcalendar-prodid
   (format "-//gnu.org//GNU Emacs %s//EN" emacs-version)
   "The value of the `icalendar-prodid' property for VCALENDAR objects
 produced by this Emacs."
-  :type 'string)
+  :type 'string
+  :version "31.1")
 
 (defconst ical:vcalendar-version "2.0"
   "The current version of the VCALENDAR object, used in the
@@ -298,7 +300,8 @@ RFC5545.")
 A value of 2 only logs errors.
 A value of 1 also logs warnings.
 A value of 0 also logs debugging information."
-  :type 'integer)
+  :type 'integer
+  :version "31.1")
 
 (defvar icalendar-debug nil
   "Enable icalendar debug messages.")
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index c1d29e948f4..4a18b1923a7 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -92,7 +92,8 @@ That is to say, the first time during an Emacs session."
 
 (defcustom eshell-after-initialize-hook nil
   "A hook that gets run after an Eshell session has been fully initialized."
-  :type 'hook)
+  :type 'hook
+  :version "31.1")
 
 (defcustom eshell-exit-hook nil
   "A hook that is run whenever `eshell' is exited.
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index 52dd9aaaf1e..f964c7b4c0c 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -171,7 +171,8 @@ message with the same \"Subject\" as B.  First element is ignored.")
 (defcustom rmail-summary-starting-message 1
   "Message number to start summarizing at."
   :type 'integer
-  :group 'rmail-summary)
+  :group 'rmail-summary
+  :version "31.1")
 
 (defvar rmail-summary-message-descendants-vector nil
   "Vector that holds the direct descendants of each message.
diff --git a/lisp/org/ob-ditaa.el b/lisp/org/ob-ditaa.el
index 82995d4789c..bad548640b4 100644
--- a/lisp/org/ob-ditaa.el
+++ b/lisp/org/ob-ditaa.el
@@ -112,6 +112,7 @@ The executable can be configured via `org-ditaa-exec'."
 (defcustom org-ditaa-java-exec "java"
   "Java executable to use when evaluating ditaa blocks using a JAR."
   :group 'org-babel
+  :package-version '(Org . "9.8")
   :type 'string
   :risky t)
 
diff --git a/lisp/org/org-src.el b/lisp/org/org-src.el
index ed265d2d6a6..1eb57d2edb0 100644
--- a/lisp/org/org-src.el
+++ b/lisp/org/org-src.el
@@ -144,6 +144,7 @@ detangling, and indentation.
 
 It has no effect if `org-src-preserve-indentation' is non-nil."
   :group 'org-edit-structure
+  :package-version '(Org . "9.8")
   :type 'integer
   :safe #'wholenump)
 
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index 1ba93d73df3..d9763e86d4c 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -136,17 +136,20 @@ If the element is a function or a list of a function and a number,
 (defcustom zone-all-frames nil
   "When non-nil, zone in all open frames.
 Displays the `*zone*' buffer in all windows in all frames."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 (defcustom zone-all-windows-in-frame nil
   "When non-nil, zone in all windows in the current frame."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 (defcustom zone-delete-other-windows nil
   "When non-nil, make the frame a single window before zoning.
 The original windows and their content will be restored when zoning
 completes."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 ;;;; Hooks to detect the start and finish of zone activity
 
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index 1358cb7f9ee..a9326c977e7 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -417,7 +417,8 @@ end of a rule with negative prefix arg.
 
 Default nil means: `antlr-end-of-rule' jumps to beginning of a
 rule, `antlr-end-of-rule' jumps to end of a rule."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 (defcustom antlr-options-use-submenus t
   "Non-nil, if the major mode menu should include option submenus.
@@ -743,7 +744,8 @@ The value might be tool-dependent, see `antlr-tool-version-variables'.")
 (defcustom antlr-run-tool-on-buffer-file t ; was nil before 3.2.0
   "Non-nil, if \\[antlr-run-tool] runs on the file for the current buffer.
 If nil, the provided tool command must include the file name."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 (defcustom antlr-tool-command nil
   "Command used in \\[antlr-run-tool] to run the Antlr tool.
@@ -759,20 +761,23 @@ OBSOLETE as user option - customize version dependent user options."
   "Command used in \\[antlr-run-tool] to run the Antlr tool.
 This variable should include all options passed to Antlr.
 Value for `antlr-tool-command' when using ANTLR v4."
-  :type 'string)
+  :type 'string
+  :version "31.1")
 
 (defcustom antlr-v3-tool-command "java org.antlr.Tool"
   "Command used in \\[antlr-run-tool] to run the Antlr tool.
 This variable should include all options passed to Antlr.
 Value for `antlr-tool-command' when using ANTLR v3."
-  :type 'string)
+  :type 'string
+  :version "31.1")
 
 (defcustom antlr-v2-tool-command "java antlr.Tool"
   "Command used in \\[antlr-run-tool] to run the Antlr tool.
 This variable should include all options passed to Antlr except the
 option \"-glib\" which is automatically suggested if necessary.
 Value for `antlr-tool-command' when using ANTLR v2."
-  :type 'string)
+  :type 'string
+  :version "31.1")
 
 (defcustom antlr-ask-about-save t
   "If not nil, \\[antlr-run-tool] asks which buffers to save.
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index d10a0d9b100..df6a3a4250b 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -995,7 +995,8 @@ Elements in this list will be searched before those in
 
 The buffer-local value of this variable will be inherited by the
 compilation buffer."
-  :type '(repeat (string :tag "Directory")))
+  :type '(repeat (string :tag "Directory"))
+  :version "31.1")
 
 ;;;###autoload
 (defcustom compile-command
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index 6ebd6c03326..5ad0c661984 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -656,7 +656,8 @@ compilation and evaluation time conflicts."
   "Number of spaces for each indentation step in `csharp-ts-mode'."
   :type 'integer
   :safe 'integerp
-  :group 'csharp)
+  :group 'csharp
+  :version "31.1")
 
 (defvar csharp-ts-mode--indent-rules
   `((c-sharp
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 05efa48afdf..f2a9e36989c 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -187,7 +187,8 @@
                      ("1.12" . "29.2")
                      ("1.12" . "29.3")
                      ("1.12.29" . "29.4")
-                     ("1.17.30" . "30.1")))
+                     ("1.17.30" . "30.1")
+                     ("1.24.31" . "31.1")))
 
 (defun eglot-alternatives (alternatives)
   "Compute server-choosing function for `eglot-server-programs'.
@@ -601,7 +602,8 @@ This is done by sending an additional '$/cancelRequest' notification
 every time Eglot decides to forget a request.  The effect of this
 notification is implementation defined, and is only useful for some
 servers."
-  :type 'boolean)
+  :type 'boolean
+  :package-version '(Eglot . "1.22"))
 
 (defface eglot-code-action-indicator-face
   '((t (:inherit warning :weight bold)))
@@ -5409,11 +5411,13 @@ initial delay and repeat rate, and may not be 100% accurate."
          (defcustom eglot-semantic-token-types
            ',types "LSP-supplied semantic types Eglot should consider."
            :type '(set ,@(mapcar (lambda (o) `(const ,o)) types))
-           :group 'eglot-semantic-fontification)
+           :group 'eglot-semantic-fontification
+           :package-version '(Eglot . "1.20"))
          (defcustom eglot-semantic-token-modifiers
            ',modifiers "LSP-supplied semantic modifiers Eglot should consider."
            :type '(set ,@(mapcar (lambda (o) `(const ,o)) modifiers))
-           :group 'eglot-semantic-fontification)))))
+           :group 'eglot-semantic-fontification
+           :package-version '(Eglot . "1.20"))))))
 
 (eglot--semtok-define-things)
 
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 14245df6217..440f489b417 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -131,7 +131,8 @@
 (add-to-list 'customize-package-emacs-version-alist
              '(Flymake ("1.3.4" . "30.1")
                        ("1.3.5" . "30.1")
-                       ("1.3.6" . "30.1")))
+                       ("1.3.6" . "30.1")
+                       ("1.4.6" . "31.1")))
 
 (defcustom flymake-error-bitmap '(flymake-double-exclamation-mark
                                   flymake-error-fringe)
diff --git a/lisp/simple.el b/lisp/simple.el
index 92666bcfa4f..75111fdcc8e 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -6684,7 +6684,7 @@ and KILLP is t if a prefix arg was specified."
 
 (defun char-uppercase-p (char)
   "Return non-nil if CHAR is an upper-case character.
-A character is considered upper-case if there's a correspoding
+A character is considered upper-case if there's a corresponding
 lower-case character.
 If the Unicode tables are not yet available, e.g. during bootstrap,
 this function gives correct return values only for ASCII characters."
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 6f8698fe997..45c6a9c6b89 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1102,7 +1102,6 @@ supported at a time.
 	    speedbar-last-selected-file nil)
 
       (set-buffer speedbar-buffer)
-      (speedbar-mode)
 
       ;; let's create the window
       (setq speedbar--window
@@ -1121,14 +1120,19 @@ supported at a time.
       (speedbar-update-contents)
       (speedbar-set-timer dframe-update-speed)
 
+      ;; handle kill-buffer
+      (add-hook 'kill-buffer-hook (lambda () (speedbar-window--close t)) nil t)
+
       ;; hscroll
       (setq-local auto-hscroll-mode nil)
       ;; reset the selection variable
       (setq speedbar-last-selected-file nil)
       (select-window current-window))))
 
-(defun speedbar-window--close ()
-  "Close `speedbar-window'."
+(defun speedbar-window--close (&optional no-kill-buffer)
+  "Close `speedbar-window'.
+If optional argument NO-KILL-BUFFER is not nil, close window without
+killing `speedbar-buffer', which is useful for `kill-buffer-hook'."
   (when (speedbar-window--live-p)
     (let ((current-window (selected-window)))
       ;; store the current window width
@@ -1142,10 +1146,11 @@ supported at a time.
       (setq speedbar--window nil
 	    speedbar-frame nil
 	    dframe-attached-frame nil)
-      (with-current-buffer speedbar-buffer
-        (speedbar-set-timer nil))
-      (kill-buffer speedbar-buffer)
-      (setq speedbar-buffer nil)
+
+      (speedbar-set-timer nil)
+      (unless no-kill-buffer
+        (kill-buffer speedbar-buffer)
+        (setq speedbar-buffer nil))
       (when (and current-window (window-live-p current-window))
 	(select-window current-window)))))
 
@@ -2751,13 +2756,15 @@ This should only be used by modes classified as special."
   "Set up the speedbar timer with TIMEOUT.
 Uses `dframe-set-timer'.
 Also resets scanner functions."
-  (dframe-set-timer timeout 'speedbar-timer-fn 'speedbar-update-flag)
-  ;; Apply a revert hook that will reset the scanners.  We attach to revert
-  ;; because most reverts occur during VC state change, and this lets our
-  ;; VC scanner fix itself.
-  (if timeout
-      (add-hook 'after-revert-hook 'speedbar-reset-scanners)
-    (remove-hook 'after-revert-hook 'speedbar-reset-scanners))
+  ;; `dframe-set-timer' must be called from `speedbar-buffer'.
+  (with-current-buffer speedbar-buffer
+    (dframe-set-timer timeout 'speedbar-timer-fn 'speedbar-update-flag)
+    ;; Apply a revert hook that will reset the scanners.  We attach to revert
+    ;; because most reverts occur during VC state change, and this lets our
+    ;; VC scanner fix itself.
+    (if timeout
+        (add-hook 'after-revert-hook 'speedbar-reset-scanners)
+      (remove-hook 'after-revert-hook 'speedbar-reset-scanners)))
   ;; change this if it changed for some reason
   (speedbar-set-mode-line-format))
 
@@ -2767,7 +2774,7 @@ Also resets scanner functions."
    ((and (speedbar-current-frame)
 	 (frame-live-p (speedbar-current-frame)))
     t)
-   ((speedbar-window--window-live-p) t)
+   ((speedbar-window--live-p) t)
    (t nil)))
 
 (defun speedbar-timer-fn ()
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 60a992a7e7b..3bef88d5010 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -106,6 +106,7 @@ If set to `color' only the cursor color is updated.  This uses the OSC
 (defconst xterm--auto-xt-mouse-allowed-names
   (rx string-start
       (or "Konsole"
+          "VTE"
           "WezTerm"
           ;; "XTerm"   ;Disabled because OSC52 support is opt-in only.
           "iTerm2"     ;OSC52 support has opt-in/out UI on first usage
diff --git a/lisp/tmm.el b/lisp/tmm.el
index ac0c5ff8ce7..d2bb10fb156 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -113,7 +113,8 @@ specify nil for this variable."
 When non-nil, the first menu-entry's character that acts as a shortcut
 is displayed with the `highlight' face to help identify it.  The
 `tmm-mid-prompt' string is not used then."
-  :type 'boolean)
+  :type 'boolean
+  :version "31.1")
 
 (defface tmm-inactive
   '((t :inherit shadow))
diff --git a/lisp/transient.el b/lisp/transient.el
index 4879f1acc24..28ad8d2229b 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -51,6 +51,9 @@
 
 (eval-when-compile (require 'subr-x))
 
+(add-to-list 'customize-package-emacs-version-alist
+             '(transient ("0.13.3" . "31.1")))
+
 (declare-function info "info" (&optional file-or-node buffer))
 (declare-function Man-find-section "man" (section))
 (declare-function Man-next-section "man" (n))
@@ -2236,6 +2239,8 @@ For historic reasons \\`C-x' is used by default, but users are
 encouraged to pick another key, preferably one that is not commonly used
 in Emacs but is still convenient to them.  See info node `(transient)
 Common Suffix Commands'."
+  :package-version '(transient . "0.8.8")
+  :group 'transient
   :type 'key
   :initialize (lambda (symbol exp)
                 (custom-initialize-default symbol exp)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.