GNU Emacs NEWS -- history of user-visible changes.

Copyright (C) 2022-2026 Free Software Foundation, Inc.
See the end of the file for license conditions.

Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
If possible, use 'M-x report-emacs-bug'.

This file is about changes in Emacs version 32.

See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.31, NEWS.30, ..., NEWS.18, and NEWS.1-17 for changes
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 32.1


* Startup Changes in Emacs 32.1


* Changes in Emacs 32.1

---
** Emacs no longer kills child processes after EPIPE.
Previously, Emacs would immediately kill a child process and set its
exit status to 256 if sending input to that process returned EPIPE.
Now when this happens, Emacs closes the file descriptor to write to the
child process, but allows it to continue execution as normal.

---
** New variable 'tty-cursor-movement-use-TAB'.
If this is set to the nil value, Emacs will not use TABs to optimize
cursor motion on text-mode terminals.  This is for the rare cases where
the hardware tabs of the terminal were set to a non-default value by the
'tabs' command or similar, or if using TABs for cursor movement has any
other undesired effects.  The default is t, which preserves past
behavior.

If this variable is nil, 'tty-cursor-movement-use-TAB-BS' has no effect,
and Emacs will never use TABs for any cursor-movement sequences.

---
** File- and directory-local variables respect user option setters.
Values of variables that are user options mentioned in file-local
variable sections and directory-locals via ".dir-locals.el" are now
set similarly to 'setopt-local'; i.e., if a user option has a defcustom
':set' function, that function will be invoked.

---
** New user option 'setopt-local-type-mismatch'.
This option controls what 'setopt-local' does when it detects a type
mismatch between the specified value and the :type specification of a
user option.  Its backward-compatible default is nil which emits a
warning and accepts the type-mismatched value.  You can control this by
customizing 'setopt-local-type-mismatch' to a non-nil value: the value
'accept' inhibits the warning and silently accepts type-mismatched
values; the value 'discard' inhibits the warning and discards
type-mismatched values; any other non-nil value prompts you whether to
accept or ignore the value.

---
** Specifying a minor mode as a local variables enables that mode,
unconditionally.  The previous behavior, toggling the mode, was
neither reliable nor generally desirable.

+++
** Emacs tries to display overlay arrow in the left margin.
On a non-graphical display (or when the left fringe is not shown), if a
left margin is present, Emacs will now display the overlay arrow into
this margin.  Edebug is now using this feature by explicitly setting up
a left margin for it.


* Editing Changes in Emacs 32.1


* Changes in Specialized Modes and Packages in Emacs 32.1

** Package

---
*** Package-vc can copy local changes from existing installations.
When installing the latest release of a package, 'package-vc' will
propose copying files from an existing tarball installation of the same
package with the same version.  This is useful if you have started
making local changes to your tarball installation, and then decided to
check out the repository to prepare a patch for the package maintainer.

** Compilation mode

---
*** Messages from Ansible are now recognized.

** VC

+++
*** VC-Dir outgoing revisions count is now asynchronous.
This means it won't get in your way even if it's slow for your
repository.  As such, the 'vc-dir-show-outgoing-count' option is now
obsolete.

---
*** VC-Dir now shows key binding hints.
To hide these, you can customize the new user option
'vc-dir-show-key-binding-hints' to nil.

** Outline mode

*** New command 'outline-show-entry-and-parents'.
It is bound to 'C-e' and reveals the current entry
with its parent hierarchy.

---
*** New function 'outline-search-from-regexp'.
A generic 'outline-search-function' implementation driven by
'outline-regexp', suitable for modes or minor modes that customize
'outline-regexp' but do not need a custom search strategy.
Install it with:

  (setq-local outline-search-function #'outline-search-from-regexp)

---
*** 'outline-search-function' is now a user option.
Previously a plain variable, it is now a 'defcustom'
with named choices for the predefined search functions
('outline-search-from-regexp' and 'outline-search-level')
as well as the default nil and arbitrary user functions.


* New Modes and Packages in Emacs 32.1

** New major modes based on the tree-sitter library

*** New major mode 'markdown-ts-mode'.
A major mode based on the tree-sitter library for editing Markdown
files.  Markdown files are visited using this mode when the required
tree-sitter grammars ('markdown' and 'markdown-inline') are available,
or when the user has opted in via 'treesit-enabled-modes'.  Otherwise,
Markdown files fall back to 'text-mode'.

To install the grammars, use 'M-x markdown-ts-mode-install-parsers'.


* Incompatible Lisp Changes in Emacs 32.1


* Lisp Changes in Emacs 32.1

+++
** 'kill-all-local-variables' can kill locals silently and reset the buffer.
This function's KILL-PERMANENT argument now accepts the value
'permanent-local', which kills all locals ignoring any variable
watchers.  That argument can also be 'reset', which does what
'permanent-local' does, and also resets the buffer as if it were newly
created.  Use these with caution to avoid unexpected behavior such as
'default-directory' being reset to nil.

---
** 'with-work-buffer' kills all locals silently and resets its buffers.
When this macro returns a buffer to its buffer pool, it now kills all
buffer locals silently, ignoring any variable watchers, and resets the
buffer as if it were newly created.

+++
** The new function 'markers-in' returns the set of markers in a region.

---
** New variable 'completion-frontend-properties'.
This variable generalizes the 'completion-lazy-hilit' variable added in
Emacs 30.  It allows Lisp programs that present completion candidates
("completion frontends") to provide additional information which can be
used to adjust or optimize completion candidates computation.

** D-Bus

+++
*** Support error handler in asynchronous method calls.
The HANDLER argument of 'dbus-call-method-asynchronously' can be a cons
cell '(HANDLER . ERROR-HANDLER)'.  ERROR-HANDLER is invoked if the
method call returns with a D-Bus error; the error is passed as argument.


* Changes in Emacs 32.1 on Non-Free Operating Systems


----------------------------------------------------------------------
This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.


Local variables:
coding: utf-8
mode: outline
mode: emacs-news
paragraph-separate: "[	 ]"
end:
