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 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. * 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. * Changes in Emacs 29.1 ** Help --- *** 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. ** Fonts --- *** Emacs now supports "medium" fonts. Emacs previously didn't distinguish between the "regular" weight and the "medium" weight, but it now also supports the (heavier) "medium" weight. +++ ** 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'. * 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 amount 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. * Changes in Specialized Modes and Packages in Emacs 29.1 ** align --- *** Alignment in 'text-mode' has changed. Previously, 'M-x align' didn't do anything, and you had to say 'C-u M-x align' for it to work. This has now been changed. The default regexp for 'C-u M-x align-regexp' has also been changed to be easier for inexperienced users to use. ** eww +++ *** New user option to automatically rename EWW buffers. The 'eww-auto-rename-buffer' user option can be configured to rename rendered web pages by using their title, URL, or a user-defined function which returns a string. For the first two cases, the length of the resulting name is controlled by 'eww-buffer-name-length'. By default, no automatic renaming is performed. ** help *** New user option `help-link-key-to-documentation'. When this option is non-nil, key bindings displayed in the *Help* buffer will be linked to the documentation for the command they are bound to. This does not affect listings of key bindings and functions. ** image-dired --- *** New command for the thumbnail buffer. The new command 'image-dired-unmark-all-marks' has been added with a binding in the menu. ** info-look --- *** info-look specs can now be expanded at run time instead of a load time. The new ':doc-spec-function' element can be used to compute the ':doc-spec' element when the user asks for info on that particular mode (instead of at load time). ** subr-x +++ *** New macro 'with-memoization' provides a very primitive form of memoization. ** ansi-color --- *** Support for ANSI 256-color and 24-bit colors. 256-color and 24-bit color codes are now handled by ANSI color filters and displayed with the specified color. ** term-mode --- *** Support for ANSI 256-color and 24-bit colors, italic and other fonts. Term-mode can now display 256-color and 24-bit color codes. It can also handle ANSI codes for faint, italic and blinking text, displaying it with new 'term-{faint,italic,slow-blink,fast-blink}' faces. ** Xref *** 'project-find-file' and 'project-or-external-find-file' now accept a prefix argument which is interpreted to mean "include all files". ** File notifications +++ *** The new command 'file-notify-rm-all-watches' removes all file notifications. ** Sql --- *** Sql now supports sending of passwords in-process. To improve security, if an sql product has ':password-in-comint' set to t, a password supplied via the minibuffer will be sent in-process, as opposed to via the command-line. * New Modes and Packages in Emacs 29.1 +++ ** New mode 'erts-mode'. This mode is used to edit files geared towards testing actions in Emacs buffers, like indentation and the like. The new ert function 'ert-test-erts-file' is used to parse these files. * Incompatible Lisp Changes in Emacs 29.1 --- ** 'downcase' details have changed slightly. In certain locales, changing the case of an ASCII-range character may turn it into a multibyte character, most notably with "I" in Turkish (the lowercase is "ı", 0x0131). Previously, 'downcase' on a unibyte string was buggy, and would mistakenly just return the lower byte of this, 0x31 (the digit "1"). 'downcase' on a unibyte string has now been changed to downcase such characters as if they were ASCII. To get proper locale-dependent downcasing, the string has to be converted to multibyte first. (This goes for the other case-changing functions, too.) --- ** 'def' indentation changes. In 'emacs-lisp-mode', forms with a symbol with a name that start with "def" have been automatically indented as if they were 'defun'-like forms, for instance: (defzot 1 2 3) This heuristic has now been removed, and all functions/macros that want to be indented this way have to be marked with (declare (indent defun)) or the like. If the function/macro definition itself can't be changed, the indentation can also be adjusted by saying something like: (put 'defzot 'lisp-indent-function 'defun) --- ** The 'inhibit-changing-match-data' variable is now obsolete. Instead, functions like 'string-match' and 'looking-at' now take an optional 'inhibit-modify' argument. --- ** 'gnus-define-keys' is now obsolete. Use 'define-keymap' instead. --- ** MozRepl has been removed from js.el. MozRepl was removed from Firefox in 2017, so this code doesn't work with recent versions of Firefox. * Lisp Changes in Emacs 29.1 ** Locale --- *** New variable 'current-locale-environment'. This holds the value of the previous call to 'set-locale-environment'. --- *** New macro 'with-locale-environment'. This macro can be used to change the locale temporarily while executing code. +++ ** 'define-key' now understands a new strict 'kbd' representation for keys. The '(define-key map ["C-c M-f"] #'some-command)' syntax is now supported, and is like the 'kbd' representation, but is stricter. If the string doesn't represent a valid key sequence, an error is signalled (both when evaluating and byte compiling). +++ ** :keys in 'menu-item' can now be a function. If so, it is called whenever the menu is computed, and can be used to calculate the keys dynamically. +++ ** New major mode 'clean-mode'. This is a new major mode meant for debugging. It kills absolutely all local variables and removes overlays and text properties. +++ ** 'kill-all-local-variables' can now kill all local variables. If given the new optional KILL-PERMANENT argument, also kill permanent local variables. +++ ** Third 'mapconcat' argument SEPARATOR is now optional. An explicit nil always meant the empty string, now it can be left out. --- ** Themes can now be made obsolete. Using 'make-obsolete' on a theme is now supported. This will make 'load-theme' issue a warning when loading the theme. +++ ** New function 'define-keymap'. This function allows defining a number of keystrokes with one form. +++ ** New macro 'defvar-keymap'. This macro allows defining keymap variables more conveniently. --- ** 'kbd' can now be used in built-in, preloaded libraries. It no longer depends on edmacro.el and cl-lib.el. +++ ** New function 'kbd-valid-p'. The 'kbd' function is quite permissive, and will try to return something usable even if the syntax of the argument isn't completely correct. The 'kbd-valid-p' predicate does a stricter check of the syntax. * Changes in Emacs 29.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 paragraph-separate: "[ ]*$" end: