GNU Emacs NEWS -- history of user-visible changes. Copyright (C) 2021-2022 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 can be built with built-in support for accessing SQLite databases. This uses the popular sqlite3 library, and can be disabled by using the '--without-sqlite3' option to the 'configure' script. ** 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. ** Emacs now supports being built with pure GTK. To use this option, make sure the GTK 3 and Cairo development files are installed, and configure Emacs with the option '--with-pgtk'. Unlike the default X and GTK build, the resulting Emacs binary will work on any underlying window system supported by GDK, such as Wayland and Broadway. --- ** The docstrings of preloaded files are not in "etc/DOC" any more. Instead, they're fetched as needed from the corresponding ".elc" file, as was already the case for all the non-preloaded files. * Startup Changes in Emacs 29.1 +++ ** Emacs now support setting 'user-emacs-directory' via --init-directory. +++ ** 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 --- ** New user option 'term-clear-full-screen-programs'. By default, term will now work like most terminals when displaying full-screen programs: When they exit, the output is cleared, leaving what was displayed in the window before the programs started. Set this user option to nil to revert back to the old behavior. --- ** Support for old EIEIO functions is not autoloaded any more. You need an explicit '(require 'eieio-compat)' to use 'defmethod' and 'defgeneric' (which have been made obsolete in Emacs 25.1 with 'cl-defmethod' and 'cl-defgeneric'). Similarly you might need to '(require 'eieio-compat)' before loading files that were compiled with an old EIEIO (Emacs<25). --- ** '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. --- ** 'source' and '.' in Eshell no longer accept the '--help' option. This is for compatibility with the shell versions of these commands, which don't handle options like '--help' in any special way. --- ** The 'delete-forward-char' command now deletes by grapheme clusters. This command is by default bound to the function key (a.k.a. ). When invoked without a prefix argument or with a positive prefix numeric argument, the command will now delete complete grapheme clusters produced by character composition. For example, if point is before an Emoji sequence, pressing will delete the entire sequence, not just a single character at its beginning. ** 'load-history' does not treat autoloads specially any more. An autoload definition appears just as a (defun . NAME) and the (t . NAME) entries are not generated any more. * Changes in Emacs 29.1 --- ** New user option 'find-library-include-other-files'. If non-nil, commands like 'M-x find-library' will only include library files in the completion alternatives. ** New command 'sqlite-mode-open-file' for examining an sqlite3 file. This uses the new 'sqlite-mode' which allows listing the tables in a DB file, and examining and modifying the columns and the contents of those tables. --- ** '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 X resource: "inputStyle". This controls the style of the pre-edit and status areas of X input methods. +++ ** On X11, Emacs now tries to synchronize window resize with the window manager. This leads to less flicker and empty areas of a frame being displayed when a frame is being resized. Unfortunately, it does not work on some ancient buggy window managers, so if Emacs appears to freeze, but is still responive to input, you can turn it off by setting the X resource "synchronizeResize" to "off". +++ ** New frame parameter 'alpha-background' and X resource "alphaBackground". This controls the opacity of the text background when running on a composited display. --- ** New user option 'x-gtk-use-native-input'. This controls whether or not GTK input methods are used by Emacs, instead of XIM input methods. +++ ** New user option 'use-system-tooltips'. This controls whether to use the toolkit tooltips, or Emacs's own native implementation of tooltips as small frames. This option is only meaningful if Emacs was built with GTK+ or Haiku support, and defaults to t, which makes Emacs use the toolkit tooltips. The existing GTK-specific option 'x-gtk-use-system-tooltips' is now an alias of this new option. --- ** 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. +++ *** ERT can generate JUnit test reports. When environment variable 'EMACS_TEST_JUNIT_REPORT' is set, ERT generates a JUnit test report under this file name. This is useful for Emacs integration into CI/CD test environments. *** Unbound test symbols now signal an 'ert-test-unbound' error. This affects the 'ert-select-tests' function and its callers. ** 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.) *** New input method 'emoji'. ** 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. +++ *** New key binding in *Help* buffers: 'I'. This will take you to the Emacs Lisp manual entry for the item displayed, if any. ** Outline Mode *** Support for customizing the default visibility state of headings. Customize the user option 'outline-default-state' to define what headings will be visible after Outline mode is turned on. When equal to a number, the user option 'outline-default-rules' determines the visibility of the subtree starting at the corresponding level. Values are provided to control showing a heading subtree depending on whether the heading matches a regexp, or on whether its subtree has long lines or is itself too long. ** 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'. *** 'other-window-scroll-default' can define the other window to scroll. ** Frames +++ *** Deleted frames can now be undeleted. The 16 most recently deleted frames can be undeleted with 'C-x 5 u' when 'undelete-frame-mode' is enabled. Without a prefix argument, undelete the most recently deleted frame. With a numerical prefix argument between 1 and 16, where 1 is the most recently deleted frame, undelete the corresponding deleted frame. ** Tab Bars and Tab Lines --- *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. --- *** New keymap 'tab-bar-history-mode-map'. By default, it contains 'C-c ' and 'C-c ' to browse the history of tab window configurations back and forward. ** 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'. ** Rcirc +++ *** New command 'rcirc-when'. * Editing Changes in Emacs 29.1 ** New variable 'keep-point-visible'. This variable controls if redisplay will try to keep point visible inside the window. +++ ** New variable 'scroll-move-point'. This variable controls if scrolling moves point to stay inside the window. --- ** 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. ** Performing a pinch gesture on a touchpad now increases the text scale. ** 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 ** Minibuffer and Completions *** The "*Completions*" buffer can now be automatically selected. To enable this behavior, customize the user option 'completion-auto-select' to t. Then pressing 'TAB' will switch to the "*Completions*" buffer when it pops up that buffer. *** New user option 'completion-wrap-movement'. When non-nil, the commands 'next-completion' and 'previous-completion' automatically wrap around on reaching the beginning or the end of the "*Completions*" buffer. *** New user option 'completions-sort'. This option controls the sorting of the completion candidates in the *Completions* buffer. Available styles are no sorting, alphabetical (the default), or a custom sort function. ** Isearch and Replace +++ *** New user option 'char-fold-override' disables default character equivalences. +++ *** New command 'isearch-emoji-by-name'. It is bound to 'C-x 8 e RET' during an incremental search. The command accepts the Unicode name of an Emoji (for example, "smiling face" or "heart with arrow"), like 'C-x 8 e e', with minibuffer completion, and adds the Emoji into the search string. ** 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. +++ *** New user option 'message-server-alist'. This controls automatic insertion of the "X-Message-SMTP-Method" header before sending a message. ** 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-allowed-images'. This complements 'shr-blocked-images', but allows specifying just the allowed images. +++ *** New user option 'shr-use-xwidgets-for-media'. If non-nil (and Emacs has been built with support for xwidgets), display