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 --- *** 'C-h b' uses outlining by default. Set 'describe-bindings-outline' to nil to get the old behaviour. --- *** 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". ** 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. --- *** New user option 'outline-minor-mode-buttons'. This is a list of pairs of open/close strings used to display buttons. ** 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'. ** Windows +++ *** 'display-buffer' now can set up the body size of the chosen window. For example, an alist entry as '(window-width . (body-columns . 40))' will make the body of the chosen window 40 columns wide. * 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. ** 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. * Changes in Specialized Modes and Packages in Emacs 29.1 ** EIEIO +++ *** 'slot-value' can now be used to read slots of 'cl-defstruct' objects ** 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 (such as 'C-h b'). ** 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". +++ *** New command 'xref-go-forward'. It is bound to 'C-M-,' and jumps to the location where 'xref-go-back' ('M-,', also known as 'xref-pop-marker-stack') was invoked previously. ** 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. ** Image-Dired --- *** Reduce dependency on external "exiftool" command. The 'image-dired-copy-with-exif-file-name' no longer requires an external "exiftool" command to be available. The user options 'image-dired-cmd-read-exif-data-program' and 'image-dired-cmd-read-exif-data-options' are now obsolete. --- *** New command for the thumbnail buffer. The new command 'image-dired-unmark-all-marks' has been added with a binding in the menu. --- *** Support Thumbnail Managing Standard v0.9.0 (Dec 2020). This standard allows sharing generated thumbnails across different programs. Version 0.9.0 adds two larger thumbnail sizes: 512x512 and 1024x1024 pixels. See the user option `image-dired-thumbnail-storage' to use it; it is not enabled by default. --- *** Support GraphicsMagick command line tools. Support for the GraphicsMagick command line tool ("gm") has been added, and is used instead of ImageMagick when it is available. --- *** Support for bookmark.el. The command 'bookmark-set' (bound to 'C-x r m') is now supported in the thumbnail view, and will create a bookmark that opens the current directory in Image-Dired. +++ *** 'image-dired-show-all-from-dir-max-files' has been increased to 500. This option controls asking for confirmation when starting Image-Dired in a directory with many files. However, Image-Dired creates thumbnails in the background these days, so this is not as important as it used to be, back when entering a large directory could lock up Emacs for tens of seconds. In addition, you can now customize this option to nil to disable this confirmation completely. --- *** Make 'image-dired-rotate-thumbnail-(left|right)' obsolete. Instead, use 'M-x image-dired-refresh-thumb' to generate a new thumbnail, or 'M-x image-rotate' to rotate the thumbnail without updating the thumbnail file. ** Dired --- *** New user option 'dired-make-directory-clickable'. If non-nil (which is the default), hitting 'RET' or 'mouse-1' on the directory components at the directory displayed at the start of the buffer will take you to that directory. ** Exif *** New function 'exif-field'. This is a convenience function to extract the field data from 'exif-parse-file' and 'exif-parse-buffer'. * 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 ** Keymap descriptions have changed. 'help--describe-command', 'C-h b' and associated functions that output keymap descriptions have changed. In particular, prefix commands are not output at all, and instead of "??" for closures/functions, "[closure]"/"[lambda]" is output. --- ** '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. --- ** The function 'image-dired-get-exif-data' is now obsolete. Use 'exif-parse-file' and 'exif-field' instead. --- ** The obsolete variable 'automount-dir-prefix' has been removed. In Emacs 24.3, the variable 'automount-dir-prefix' was made obsolete. For similar functionality, use 'directory-abbrev-alist' instead. * Lisp Changes in Emacs 29.1 +++ *** New function 'file-has-changed-p'. This convenience function is useful when writing code that parses files at run-time, and allows Lisp programs to re-parse files only when they have changed. --- *** New function 'font-has-char-p'. This can be used to check whether a specific font has a glyph for a character. ** XDG support *** New function 'xdg-state-home' returns $XDG_STATE_HOME. This new location, introduced in the XDG Base Directory Specification version 0.8 (8th May 2021), "contains state data that should persist between (application) restarts, but that is not important or portable enough to the user that it should be stored in $XDG_DATA_HOME". +++ ** New macro 'with-delayed-message'. This macro is like 'progn', but will output the specified message if the body takes longer to execute than the specified timeout. --- ** New function 'funcall-with-delayed-message'. This function is like 'funcall', but will output the specified message is the function take longer to execute that the specified timeout. ** 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. ** Tabulated List Mode +++ *** A column can now be set to an image descriptor. The `tabulated-list-entries' variable now supports using an image descriptor, which means to insert an image in that column instead of text. See the documentation string of that variable for details. +++ ** '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. +++ ** New function 'image-at-point-p'. This function returns t if point is on a valid image, and nil otherwise. +++ ** New function 'string-pixel-width'. This returns the width of a string in pixels. This can be useful when dealing with variable pitch fonts and glyphs that have widths that aren't integer multiples of the default font. +++ ** New function 'string-glyph-split'. This function splits a string into a list of strings representing separate glyphs. This takes into account combining characters and grapheme clusters. --- ** 'lookup-key' is more allowing when searching for extended menu items. In Emacs 28.1, the behavior of 'lookup-key' was changed: when looking for a menu item '[menu-bar Foo-Bar]', first try to find an exact match, then look for the lowercased '[menu-bar foo-bar]'. This has been extended, so that when looking for a menu item with a symbol containing spaces, as in '[menu-bar Foo\ Bar]', first look for an exact match, then the lowercased '[menu-bar foo\ bar]' and finally '[menu-bar foo-bar]'. This further improves backwards-compatibility when converting menus to use 'easy-menu-define'. * Changes in Emacs 29.1 on Non-Free Operating Systems ** MS-Windows +++ *** Emacs now supports system dark mode. On Windows 10 (version 1809 and higher) and Windows 11, Emacs will now follow the system's dark mode: GUI frames use the appropriate light or dark title bar and scroll bars, based on the user's Windows-wide color settings. ---------------------------------------------------------------------- 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: