GNU Emacs NEWS -- history of user-visible changes. Copyright (C) 2021 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 29. See file HISTORY for a list of GNU Emacs versions and release dates. See files NEWS.28, NEWS.27, ..., 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 29.1 ** Emacs has been ported to the Haiku operating system. The configuration process should automatically detect and build for Haiku. There is also an optional window-system port to Haiku, which can be enabled by configuring Emacs with the option '--with-be-app', which will require the Haiku Application Kit development headers and a C++ compiler to be present on your system. If Emacs is not built with the option '--with-be-app', the resulting Emacs will only run in text-mode terminals. +++ *** Cairo drawing support has been enabled for Haiku builds. To enable Cairo support, ensure that the Cairo and FreeType development files are present on your system, and configure Emacs with '--with-be-cairo'. --- *** Double buffering is now enabled on the Haiku operating system. Unlike X, there is no compile-time option to enable or disable double-buffering. If you wish to disable double-buffering, change the frame parameter 'inhibit-double-buffering' instead. ** Emacs now installs the ".pdmp" file using a unique fingerprint in the name. The file is typically installed using a file name akin to "...dir/libexec/emacs/29.1/x86_64-pc-linux-gnu/emacs-.pdmp". If a constant file name is required, the file can be renamed to "emacs.pdmp", and Emacs will find it during startup anyway. ** Emacs now supports use of XInput 2 for input events. If your X server has support and you have the XInput 2 development headers installed, you can configure Emacs with the option '--with-xinput2' to enable this support. The named feature 'xinput2' can be used to test for the presence of XInput 2 support from Lisp programs. * Startup Changes in Emacs 29.1 +++ ** Emacs now has a '--fingerprint' option. This will output a string identifying the current Emacs build. +++ ** New hook 'after-pdump-load-hook'. This is run at the end of the Emacs startup process, and it meant to be used to reinitialize structures that would normally be done at load time. * Incompatible changes in Emacs 29.1 --- ** 'C-x 8 .' has been moved to 'C-x 8 . .'. This is to open up the 'C-x 8 .' map to bind further characters there. --- ** The mode line now uses a proportional font by default. To get the old monospaced mode line back, customize the 'mode-line-active' and 'mode-line-inactive' faces not to inherit from the 'variable-pitch' face, or add this to your "~/.emacs": (set-face-attribute 'mode-line-active nil :inherit 'mode-line) (set-face-attribute 'mode-line-inactive nil :inherit 'mode-line) * Changes in Emacs 29.1 --- ** 'write-file' will now copy some file mode bits. If the current buffer is visiting a file that is executable, the 'C-x C-w' command will now make the new file executable, too. +++ ** New user option 'process-error-pause-time'. This determines how long to pause Emacs after a process filter/sentinel error has been handled. +++ ** New face 'variable-pitch-text'. This face is like 'variable-pitch' (from which it inherits), but is slightly larger, which should help with the visual size differences between the default, non-proportional font and proportional fonts when mixed. +++ ** New face 'mode-line-active'. This inherits from the 'mode-line' face, but is the face actually used on the mode lines (along with 'mode-line-inactive'). +++ ** New function 'buffer-text-pixel-size'. This is similar to 'window-text-pixel-size', but can be used when the buffer isn't displayed. +++ ** New X resource: "borderThickness". This controls the thickness of the external borders of the menu bars and pop-up menus. --- ** New minor mode 'pixel-scroll-precision-mode'. When enabled, and if your mouse supports it, you can scroll the display up or down at pixel resolution, according to what your mouse wheel reports. Unlike 'pixel-scroll-mode', this mode scrolls the display pixel-by-pixel, as opposed to only animating line-by-line scrolls. ** Terminal Emacs --- *** Emacs will now use 24-bit colors on terminals that support "Tc" capability. This is in addition to previously-supported ways of discovering 24-bit color support: either via the "RGB" or "setf24" capabilities, or if the 'COLORTERM' environment variable is set to the value "truecolor". ** ERT +++ *** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'. These variables will override 'print-length' and 'print-level' when printing Lisp values in ERT batch test results. --- *** Redefining an ERT test in batch mode now signals an error. Executing 'ert-deftest' with the same name as an existing test causes the previous definition to be discarded, which was probably not intended when this occurs in batch mode. To remedy the error, rename tests so that they all have unique names. ** Emoji +++ *** Emacs now has several new methods for inserting Emojis. The Emoji commands are under the new 'C-x 8 e' prefix. +++ *** New command 'emoji-insert' (bound to 'C-x 8 e e' and 'C-x 8 e i'). This command guides you through various Emoji categories and combinations in a graphical menu system. +++ *** New command 'emoji-search' (bound to 'C-x 8 e s'). This command lets you search for Emojis based on names. +++ *** New command 'emoji-list' (bound to 'C-x 8 e l'). This command lists all Emojis (categorized by themes) in a special buffer and lets you choose one of them. --- *** New command 'emoji-recent' (bound to 'C-x 8 e r'). This command lets you choose among the Emojis you have recently inserted. +++ *** New command 'emoji-describe' (bound to 'C-x 8 e d'). This command will tell you the name of the Emoji at point. (This command also works for non-Emoji characters.) ** Help --- *** 'C-h b' uses outlining by default. Set 'describe-bindings-outline' to nil to get the old behavior. --- *** Jumping to function/variable source now saves mark before moving point. Jumping to source from "*Help*" buffer moves the point when the source buffer is already open. Now, the old point is pushed to mark ring. +++ *** New key bindings in "*Help*" buffers: 'n' and 'p'. These will take you (respectively) to the next and previous "page". --- *** 'describe-char' now also outputs the name of emoji combinations. ** Outline Minor Mode +++ *** New user option 'outline-minor-mode-use-buttons'. If non-nil, Outline Minor Mode will use buttons to hide/show outlines in addition to the ellipsis. Default nil. --- *** New user option 'outline-minor-mode-buttons'. This is a list of pairs of open/close strings used to display buttons. +++ ** Support for the WebP image format. This support is built by default when the libwebp library is available. To disable it, use the '--without-webp' configure flag. Image specifiers can now use ':type webp'. ** Windows +++ *** 'display-buffer' now can set up the body size of the chosen window. For example, a 'display-buffer-alist' entry of '(window-width . (body-columns . 40))' will make the body of the chosen window 40 columns wide. For the height use 'window-height' in combination with 'body-lines'. ** Tab Bars and Tab Lines --- *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. ** Better detection of text suspiciously reordered on display. The function 'bidi-find-overridden-directionality' has been extended to detect reordering effects produced by embeddings and isolates (started by directional formatting control characters such as RLO and LRI). The new command 'highlight-confusing-reorderings' finds and highlights segments of buffer text whose reordering for display is suspicious and could be malicious. ** Emacs server and client changes +++ *** New command-line option '-r' for emacsclient. With this command-line option, Emacs reuses an existing graphical client frame if one exists; otherwise it creates a new frame. +++ *** 'server-stop-automatically' can be used to automatically stop the server. The Emacs server will be automatically stopped when certain conditions are met. The conditions are given by the argument, which can be 'empty', 'delete-frame' or 'kill-terminal'. * Editing Changes in Emacs 29.1 --- ** Indentation of 'cl-flet' and 'cl-labels' has changed. These forms now indent like this: (cl-flet ((bla (x) (* x x))) (bla 42)) This change also affects 'cl-macrolet', 'cl-flet*' and 'cl-symbol-macrolet'. +++ ** New user option 'translate-upper-case-key-bindings'. This can be set to nil to inhibit translating upper case keys to lower case keys. +++ ** New command 'ensure-empty-lines'. This command increases (or decreases) the number of empty lines before point. --- *** Improved mouse behavior with auto-scrolling modes. When clicking inside the 'scroll-margin' or 'hscroll-margin' region the point is now moved only when releasing the mouse button. This no longer results in a bogus selection, unless the mouse has been effectively dragged. +++ ** 'kill-ring-max' now defaults to 120. --- ** New user option 'yank-menu-max-items'. Customize this option to limit the number of entries in the menu "Edit->Paste from Kill Menu". The default is 60. ** show-paren-mode +++ *** New user option 'show-paren-context-when-offscreen'. When non-nil, if the point is in a closing delimiter and the opening delimiter is offscreen, shows some context around the opening delimiter in the echo area. Default nil. ** Comint +++ *** 'comint-term-environment' is now aware of connection-local variables. The user option 'comint-terminfo-terminal' and variable 'system-uses-terminfo' can now be set as connection-local variables to change the terminal used on a remote host. ** Mwheel --- *** New user options for alternate wheel events. The options 'mouse-wheel-down-alternate-event', 'mouse-wheel-up-alternate-event', 'mouse-wheel-left-alternate-event', and 'mouse-wheel-right-alternate-event' have been added to better support systems where two kinds of wheel events can be received. * Changes in Specialized Modes and Packages in Emacs 29.1 ** New minor mode 'glyphless-display-mode'. This allows an easy way to toggle seeing all glyphless characters in the current buffer. ** Registers +++ *** Buffer names can now be stored in registers. For instance, to enable jumping to the "*Messages*" buffer with 'C-x r j m': (set-register ?m '(buffer . "*Messages*")) ** pixel-fill +++ *** This is a new package that deals with filling variable-pitch text. +++ *** New function 'pixel-fill-region'. This fills the region to be no wider than a specified pixel width. ** Info --- *** New command 'Info-goto-node-web' and key binding 'G'. This will take you to the gnu.org web server's version of the current info node. This command only works for the Emacs and Emacs Lisp manuals. ** vc --- *** 'C-x v v' on an unregistered file will now use the most specific backend. Previously, if you had an SVN-covered "~/" directory, and a Git-covered directory in "~/foo/bar", using 'C-x v v' on a new, unregistered file "~/foo/bar/zot" would register it in the SVN repository in "~/" instead of in the Git repository in "~/foo/bar". This makes this command consistent with 'vc-responsible-backend'. ** Message --- *** New user option 'mml-attach-file-at-the-end'. If non-nil, 'C-c C-a' will put attached files at the end of the message. --- *** Message Mode now supports image yanking. ** HTML Mode --- *** HTML Mode now supports "text/html" and "image/*" yanking. ** Texinfo Mode --- *** 'texinfo-mode' now has a specialised 'narrow-to-defun' definition. It narrows to the current node. ** eww/shr +++ *** New user option 'shr-use-xwidgets-for-media'. If non-nil (and Emacs has been built with support for xwidgets), display