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. * 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. ** Project --- *** 'C-x p v' ('project-vc-dir') uses the truename of the project root. 'C-x v d' already did this when used interactively. So e.g. if 'link/' is a symbolic link to 'target/', then 'C-x v d link/ RET' is the same as 'C-x v d target/ RET'. Now the same is true for 'C-x p v', so that if the project root is a symbolic link, 'C-x p v' first finds the truename of the directory named by that link, and then opens VC-Dir there. ** 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. ** 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 . Local variables: coding: utf-8 mode: outline mode: emacs-news paragraph-separate: "[ ]" end: