diff options
Diffstat (limited to 'etc/NEWS')
-rw-r--r-- | etc/NEWS | 5027 |
1 files changed, 305 insertions, 4722 deletions
@@ -1,15 +1,15 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2021-2023 Free Software Foundation, Inc. +Copyright (C) 2022-2023 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. +This file is about changes in Emacs version 30. 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 +See files NEWS.29, NEWS.28, ..., 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' @@ -22,4897 +22,480 @@ 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 - ---- -** Ahead-of-time native compilation can now be requested via configure. -Use '--with-native-compilation=aot' to request that all the Lisp files -in the Emacs tree should be natively compiled ahead of time. (This is -slow on most machines.) - -This feature existed in Emacs 28.1, but was less easy to request. - -+++ -** Emacs can be built with the tree-sitter parsing library. -This library, together with separate grammar libraries for each -language, provides incremental parsing capabilities for several -popular programming languages and other formatted files. Emacs built -with this library offers major modes, described elsewhere in this -file, that are based on the tree-sitter's parsers. If you have the -tree-sitter library installed, the configure script will automatically -include it in the build; use '--without-tree-sitter' at configure time -to disable that. - -Emacs modes based on the tree-sitter library require an additional -grammar library for each mode. These grammar libraries provide the -tree-sitter library with language-specific lexical analysis and -parsing capabilities, and are developed separately from the -tree-sitter library itself. If you don't have a grammar library -required by some Emacs major mode, and your distro doesn't provide it -as an installable package, you can compile and install such a library -yourself. Many libraries can be downloaded from the tree-sitter site: - - https://github.com/tree-sitter - -Emacs provides a user command, 'treesit-install-language-grammar', -that automates the download and build process of a grammar library. -It prompts for the language, the URL of the language grammar's VCS -repository, and then uses the installed C/C++ compiler to build the -library and install it. - -You can also do this manually. To compile such a library after -cloning its Git repository, compile the files "scanner.c" and -"parser.c" (sometimes named "scanner.cc" and "parser.cc") in the "src" -subdirectory of the library's source tree using the C or C++ compiler, -then link these two files into a shared library named -"libtree-sitter-LANG.so", where LANG is the name of the language -supported by the grammar as it is expected by the Emacs major mode -(for example, "c" for 'c-ts-mode', "cpp" for 'c++-ts-mode', "python" -for 'python-ts-mode', etc.). Then place the shared library you've -built in the same directory where you keep the other shared libraries -used by Emacs, or in the "tree-sitter" subdirectory of your -'user-emacs-directory', or in a directory mentioned in the variable -'treesit-extra-load-path'. - -You only need to install language grammar libraries required by the -Emacs modes you will use, as Emacs loads these libraries only when the -corresponding mode is turned on in some buffer for the first time in -an Emacs session. - -+++ -** 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. - -+++ -** Support for the WebP image format. -This support is built by default when the libwebp library is -available, and includes support for animated WebP images. To disable -WebP support, use the '--without-webp' configure flag. Image -specifiers can now use ':type webp'. - -+++ -** 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. - -To enable Cairo support, ensure that the Cairo and FreeType -development files are present on your system, and configure Emacs with -'--with-be-cairo'. - -Unlike X, there is no compile-time option to enable or disable -double-buffering; it is always enabled. To disable it, 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-<fingerprint>.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 on X now uses XInput 2 for input events. -If your X server has support and you have the XInput 2 development -headers installed, Emacs will use the X Input Extension for handling -input. If this causes problems, you can configure Emacs with the -option '--without-xinput2' to disable this support. - -'(featurep '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 (version 3.22.23 or later) 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. We recommend that you -use this configuration only if you are running a window system other -than X that's supported by GDK. Running this configuration on X is -known to have problems, such as undesirable frame positioning and -various issues with keyboard input of sequences such as 'C-;' and -'C-S-u'. - ---- -** Emacs no longer reduces the size of the Japanese dictionary. -Building Emacs includes generation of a Japanese dictionary, which is -used by Japanese input methods. Previously, the build included a step -of reducing the size of this dictionary's vocabulary. This vocabulary -reduction is now optional, by default off. If you need the Emacs -build to include the vocabulary reduction, configure Emacs with the -option '--with-small-ja-dic'. In an Emacs source tree already -configured without that option, you can force the vocabulary reduction -by saying - - make -C leim generate-ja-dic JA_DIC_NO_REDUCTION_OPTION='' - -after deleting "lisp/leim/ja-dic/ja-dic.el". - ---- -** The docstrings of preloaded files are not in "etc/DOC" any more. -Instead, they're fetched as needed from the corresponding ".elc" -files, as was already the case for all the non-preloaded files. +* Installation Changes in Emacs 30.1 -* Startup Changes in Emacs 29.1 - -+++ -** '--batch' and '--script' now adjust the garbage collection levels. -These switches now set 'gc-cons-percentage' to 1.0 (up from the -default of 0.1). This means that batch processes will typically use -more memory than before, but use less time doing garbage collection. -Batch jobs that are supposed to run for a long time should adjust the -limit back down again. - -+++ -** Emacs can now be used more easily in an executable script. -If you start an executable script with - - #!/usr/bin/emacs -x - -Emacs will start without reading any init files (like with '--quick'), -and then execute the rest of the script file as Emacs Lisp. When it -reaches the end of the script, Emacs will exit with an exit code from -the value of the final form. - -+++ -** Emacs now supports setting 'user-emacs-directory' via '--init-directory'. -Use the '--init-directory' command-line option to set -'user-emacs-directory'. - -+++ -** Emacs now has a '--fingerprint' option. -This will output a string identifying the current Emacs build, and exit. - -+++ -** New hook 'after-pdump-load-hook'. -This is run at the end of the Emacs startup process, and is meant to -be used to reinitialize data structures that would normally be done at -load time. - -** Native Compilation - -+++ -*** New command 'native-compile-prune-cache'. -This command deletes old subdirectories of the eln cache (but not the -ones for the current Emacs version). Note that subdirectories of the -system directory where the "*.eln" files are installed (usually, the -last entry in 'native-comp-eln-load-path') are not deleted. - ---- -*** New function 'startup-redirect-eln-cache'. -This function can be called in your init files to change the -user-specific directory where Emacs stores the "*.eln" files produced -by native compilation of Lisp packages Emacs loads. The default -eln cache directory is unchanged: it is the "eln-cache" subdirectory -of 'user-emacs-directory'. +* Startup Changes in Emacs 30.1 -* Incompatible changes in Emacs 29.1 - -+++ -** The image commands have changed key bindings. -In previous Emacs versions, images have had the '+', '-' and 'r' keys -bound when point is over an image. In Emacs 29.1, additional commands -were added, and this made it more likely that users would trigger the -image commands by mistake. To avoid this, all image commands have -moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -', -and 'r' is now 'i r'. In addition, these commands are now repeating, -so, for example, you can rotate an image twice by typing 'i r r'. - -+++ -** Emacs now picks the correct coding-system for X input methods. -Previously, Emacs would use 'locale-coding-system' for input -methods, which could in some circumstances be incorrect, especially -when the input method chose to fall back to some other coding system. - -Emacs now automatically detects the coding-system used by input -methods, and uses that to decode input in preference to the value of -'locale-coding-system'. This unfortunately means that users who have -changed the coding system used to decode X keyboard input must adjust -their customizations to 'locale-coding-system' to the variable -'x-input-coding-system' instead. - -+++ -** Bookmarks no longer include context for encrypted files. -If you're visiting an encrypted file, setting a bookmark no longer -includes excerpts from that buffer in the bookmarks file. This is -implemented by the new hook 'bookmark-inhibit-context-functions', -where packages can register a function which returns non-nil for file -names to be excluded from adding such excerpts. - ---- -** 'show-paren-mode' is now disabled in 'special-mode' buffers. -In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted -off. In Emacs 28.1, the mode was switched on in all buffers. In -Emacs 29.1, this was changed to be switched on in all editing-related -buffers, but not in buffers that inherit from 'special-mode'. To go -back to how things worked in Emacs 28.1, put the following in your -init file: - - (setopt show-paren-predicate t) - -+++ -** Explicitly-set read-only state is preserved when reverting a buffer. -If you use the 'C-x C-q' command to change the read-only state of the -buffer and then revert it, Emacs would previously use the file -permission bits to determine whether the buffer should be read-only -after reverting the buffer. Emacs now remembers the decision made in -'C-x C-q'. - ---- -** The Gtk selection face is no longer used for the region. -The combination of a Gtk-controlled background and a foreground color -controlled by the internal Emacs machinery led to low-contrast faces -in common default setups. Emacs now uses the same 'region' face on -Gtk and non-Gtk setups. - ---- -** 'C-h f' and 'C-h x' may now require confirmation when you press 'RET'. -If the text in the minibuffer cannot be completed to a single function -or command, typing 'RET' will not automatically complete to the shortest -candidate, but will instead ask for confirmation. Typing 'TAB' will -complete as much as possible, and another 'TAB' will show all the -possible completions. This allows you to insist on the functions name -even if Help doesn't appear to know about it, by confirming with a -second 'RET'. - -** Dired - ---- -*** 'w' ('dired-copy-filename-as-kill') has changed behavior. -If there are several files marked, file names containing space and -quote characters will be quoted "like this". - ---- -*** The 'd' command now more consistently skips dot files. -In previous Emacs versions, commands like 'C-u 10 d' would put the "D" -mark on the next ten files, no matter whether they were dot files -(i.e., "." and "..") or not, while marking the next ten lines with the -mouse (in 'transient-mark-mode') and then hitting 'd' would skip dot -files. These now work equivalently. - -+++ -** Warning about "eager macro-expansion failure" is now an error. - ---- -** Previously, the X "reverseVideo" value at startup was heeded for all frames. -This meant that if you had a "reverseVideo" resource on the initial -display, and then opened up a new frame on a display without any -explicit "reverseVideo" setting, it would get heeded there, too. (This -included terminal frames.) In Emacs 29, the "reverseVideo" X resource -is handled like all the other X resources, and set on a per-frame basis. - -+++ -** 'E' in 'query-replace' now edits the replacement with exact case. -Previously, this command did the same as 'e'. - ---- -** '/ a' in "*Packages*" buffer now limits by archive name(s) instead of regexp. - -+++ -** Setting the goal columns now also affects '<prior>' and '<next>'. -Previously, 'C-x C-n' only affected 'next-line' and 'previous-line', -but it now also affects 'scroll-up-command' and 'scroll-down-command'. - ---- -** Isearch in "*Help*" and "*info*" now char-folds quote characters by default. -This means that you can say 'C-s `foo' (GRAVE ACCENT) if the buffer -contains "‘foo" (LEFT SINGLE QUOTATION MARK) and the like. These -quotation characters look somewhat similar in some fonts. To switch -this off, disable the new 'isearch-fold-quotes-mode' minor mode. - ---- -** Sorting commands no longer necessarily change modification status. -In earlier Emacs versions, commands like 'sort-lines' would always -change buffer modification status to "modified", whether they changed -something in the buffer or not. This has been changed: the buffer is -marked as modified only if the sorting ended up actually changing the -contents of the buffer. - ---- -** 'string-lines' handles trailing newlines differently. -It no longer returns an empty final string if the string ends with a -newline. - ---- -** 'TAB' and '<backtab>' are now bound in 'button-map'. -This means that if point is on a button, 'TAB' will take you to the -next button, even if the mode has bound it to something else. This -also means that 'TAB' on a button in an 'outline-minor-mode' heading -will move point instead of collapsing the outline. - ---- -** 'outline-minor-mode-cycle-map' is now parent of 'outline-minor-mode'. -Instead of adding text property 'keymap' with 'outline-minor-mode-cycle' -on outline headings in 'outline-minor-mode', the keymap -'outline-minor-mode-cycle' is now active in the whole buffer. -But keybindings in 'outline-minor-mode-cycle' still take effect -only on outline headings because they are bound with the help of -'outline-minor-mode-cycle--bind' that checks if point is on a heading. - ---- -** 'Info-default-directory-list' is no longer populated at Emacs startup. -If you have code in your init file that removes directories from -'Info-default-directory-list', this will no longer work. - ---- -** 'C-k' no longer deletes files in 'ido-mode'. -To get the previous action back, put something like the following in -your Init file: - - (require 'ido) - (keymap-set ido-file-completion-map "C-k" #'ido-delete-file-at-head) - ---- -** New user option 'term-clear-full-screen-programs'. -By default, term.el 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. - ---- -** 'C-x 8 =' has been moved to 'C-x 8 = ='. -You can now use 'C-x 8 =' to insert several characters with macron; -for example, 'C-x 8 = a' will insert U+0101 LATIN SMALL LETTER A WITH -MACRON. To insert a lone macron, type 'C-x 8 = =' instead of the -previous 'C-x ='. - -** Eshell +* Changes in Emacs 30.1 -*** Eshell's PATH is now derived from 'exec-path'. -For consistency with remote connections, Eshell now uses 'exec-path' -to determine the execution path on the local or remote system, instead -of using the PATH environment variable directly. +** X selection requests are now handled much faster and asynchronously. +This means it should be less necessary to disable the likes of +'select-active-regions' when Emacs is running over a slow network +connection. ---- -*** 'source' and '.' 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. - -+++ -*** String delimiters in argument predicates/modifiers are more restricted. -Previously, some argument predicates/modifiers allowed arbitrary -characters as string delimiters. To provide more unified behavior -across all predicates/modifiers, the list of allowed delimiters has -been restricted to "...", '...', /.../, |...|, (...), [...], <...>, -and {...}. See the "(eshell) Argument Predication and Modification" -node in the Eshell manual for more details. +** Emacs now updates invisible frames that are made visible by a compositor. +If an invisible or an iconified frame is shown to the user by the +compositing manager, Emacs will now redisplay such a frame even though +'frame-visible-p' returns nil or 'icon' for it. This can happen, for +example, as part of preview for iconified frames. +++ -*** Eshell pipelines now only pipe stdout by default. -To pipe both stdout and stderr, use the '|&' operator instead of '|'. - ---- -** The 'delete-forward-char' command now deletes by grapheme clusters. -This command is by default bound to the '<Delete>' function key -(a.k.a. '<deletechar>'). 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 '<Delete>' -will delete the entire sequence, not just a single character at its -beginning. +** 'write-region-inhibit-fsync' now defaults to t in interactive mode, +as it has in batch mode since Emacs 24. +++ -** '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. +** New user option 'remote-file-name-inhibit-delete-by-moving-to-trash'. +When non-nil, this option suppresses moving remote files to the local +trash when deleting. Default is nil. --- -** The Tamil input methods no longer insert Tamil digits. -The input methods 'tamil-itrans' and 'tamil-inscript' no longer insert -the Tamil digits, as those digit characters are not used nowadays by -speakers of the Tamil language. To get back the previous behavior, -use the new 'tamil-itrans-digits' and 'tamil-inscript-digits' input -methods instead. - -+++ -** New variable 'current-time-list' governing default timestamp form. -Functions like 'current-time' now yield '(TICKS . HZ)' timestamps if -this new variable is nil. The variable defaults to t, which means -these functions default to timestamps of the forms '(HI LO US PS)', -'(HI LO US)' or '(HI LO)', which are less regular and less efficient. -This is part of a long-planned change first documented in Emacs 27. -Developers are encouraged to test timestamp-related code with this -variable set to nil, as it will default to nil in a future Emacs -version and will be removed some time after that. +** New user option 'remote-file-name-inhibit-auto-save'. +If this user option is non-nil, 'auto-save-mode' will not auto-save +remote buffers. The default is nil. +++ -** Functions that recreate the "*scratch*" buffer now also initialize it. -When functions like 'other-buffer' and 'server-execute' recreate -"*scratch*", they now also insert 'initial-scratch-message' and set -the major mode according to 'initial-major-mode', like at Emacs -startup. Previously, these functions ignored -'initial-scratch-message' and left "*scratch*" in 'fundamental-mode'. - ---- -** Naming of Image-Dired thumbnail files has changed. -Names of thumbnail files generated when 'image-dired-thumbnail-storage' -is 'image-dired' now always end in ".jpg". This fixes various issues -on different platforms, but means that thumbnails generated in Emacs 28 -will not be used in Emacs 29, and vice-versa. If disk space is an -issue, consider deleting the 'image-dired-dir' directory (usually -"~/.emacs.d/image-dired/") after upgrading to Emacs 29. - ---- -** The 'rlogin' method in the URL library is now obsolete. -Emacs will now display a warning if you request a URL like -"rlogin://foo@example.org". - ---- -** Setting 'url-gateway-method' to 'rlogin' is now obsolete. -Emacs will now display a warning when setting it to that value. -The user options 'url-gateway-rlogin-host', -'url-gateway-rlogin-parameters', and 'url-gateway-rlogin-user-name' -are also obsolete. - ---- -** The user function 'url-irc-function' now takes a SCHEME argument. -The user option 'url-irc-function' is now called with a sixth argument -corresponding to the scheme portion of the target URL. For example, -this would be "ircs" for a URL like "ircs://irc.libera.chat". - ---- -** The linum.el library is now obsolete. -We recommend using either the built-in 'display-line-numbers-mode', or -the 'nlinum' package from GNU ELPA instead. The former has better -performance, but the latter is closer to a drop-in replacement. - -1. To use 'display-line-numbers-mode', add something like this to your - Init file: - - (global-display-line-numbers-mode 1) - ;; Alternatively, to use it only in programming modes: - (add-hook 'prog-mode-hook #'display-line-numbers-mode) - -2. To use 'nlinum', add this to your Init file: - - (package-install 'nlinum) - (global-nlinum-mode 1) - ;; Alternatively, to use it only in programming modes: - (add-hook 'prog-mode-hook #'nlinum-mode) - -3. To continue using the obsolete package 'linum', add this line to - your Init file, in addition to any existing customizations: - - (require 'linum) - ---- -** The thumbs.el library is now obsolete. -We recommend using command 'image-dired' instead. - ---- -** The autoarg.el library is now marked obsolete. -This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor -modes to emulate the behavior of the historical editor Twenex Emacs. -We believe it is no longer useful. - ---- -** The quickurl.el library is now obsolete. -Use 'abbrev', 'skeleton' or 'tempo' instead. - ---- -** The rlogin.el library, and the 'rsh' command are now obsolete. -Use something like 'M-x shell RET ssh <host> RET' instead. - ---- -** The url-about.el library is now obsolete. - ---- -** The autoload.el library is now obsolete. -It is superseded by the new loaddefs-gen.el library. - ---- -** The netrc.el library is now obsolete. -Use the 'auth-source-netrc-parse-all' function in auth-source.el -instead. - ---- -** The url-dired.el library is now obsolete. +** New user option 'yes-or-no-prompt'. +This allows the user to customize the prompt that is appended by +'yes-or-no-p' when asking questions. The default value is +"(yes or no) ". --- -** The fast-lock.el and lazy-lock.el libraries have been removed. -They have been obsolete since Emacs 22.1. - -The variable 'font-lock-support-mode' is occasionally useful for -debugging purposes. It is now a regular variable (instead of a user -option) and can be set to nil to disable Just-in-time Lock mode. - -+++ -** The 'utf-8-auto' coding-system now produces BOM on encoding. -This is actually a bugfix, since this is how 'utf-8-auto' was -documented from day one; it just didn't behave according to -documentation. It turns out some Lisp programs were using this -coding-system on the wrong assumption that the "auto" part means some -automagic handling of the end-of-line (EOL) format conversion; those -programs will now start to fail, because BOM signature in UTF-8 encoded -text is rarely expected. That is the reason we mention this bugfix -here. - -In general, this coding-system should probably never be used for -encoding, only for decoding. +** New face 'display-time-date-and-time'. +This is used for displaying the time and date components of +'display-time-mode'. -* Changes in Emacs 29.1 - -+++ -** New user option 'major-mode-remap-alist' to specify favorite major modes. -This user option lets you remap the default modes (e.g. 'perl-mode' or -'latex-mode') to your favorite ones (e.g. 'cperl-mode' or -'LaTeX-mode') without having to use 'defalias', which can have -undesirable side effects. -This applies to all modes specified via 'auto-mode-alist', file-local -variables, etc. - ---- -** Emacs now supports Unicode Standard version 15.0. - ---- -** New user option 'electric-quote-replace-consecutive'. - ---- -** Emacs is now capable of editing files with very long lines. -The display of long lines has been optimized, and Emacs should no -longer choke when a buffer on display contains long lines. The -variable 'long-line-threshold' controls whether and when these display -optimizations are in effect. - -A companion variable 'large-hscroll-threshold' controls when another -set of display optimizations are in effect, which are aimed -specifically at speeding up display of long lines that are truncated -on display. - -If you still experience slowdowns while editing files with long lines, -this may be due to line truncation, or to one of the enabled minor -modes, or to the current major mode. Try turning off line truncation -with 'C-x x t', or try disabling all known slow minor modes with -'M-x so-long-minor-mode', or try disabling both known slow minor modes -and the major mode with 'M-x so-long-mode', or visit the file with -'M-x find-file-literally' instead of the usual 'C-x C-f'. - -In buffers in which these display optimizations are in effect, the -'fontification-functions', 'pre-command-hook' and 'post-command-hook' -hooks are executed on a narrowed portion of the buffer, whose size is -controlled by the variables 'long-line-optimizations-region-size' and -'long-line-optimizations-bol-search-limit', as if they were in a -'with-restriction' form. This may, in particular, cause occasional -mis-fontifications in these buffers. Modes which are affected by -these optimizations and by the fact that the buffer is narrowed, -should adapt and either modify their algorithm so as not to expect the -entire buffer to be accessible, or, if accessing outside of the -narrowed region doesn't hurt performance, use the -'without-restriction' form to temporarily lift the restriction and -access portions of the buffer outside of the narrowed region. - -The new function 'long-line-optimizations-p' returns non-nil when -these optimizations are in effect in the current buffer. - -+++ -** New command to change the font size globally. -To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to -decrease it, type 'C-x C-M--'; to restore the font size, type 'C-x -C-M-0'. The final key in these commands may be repeated without the -leading 'C-x' and without the modifiers, e.g. 'C-x C-M-+ C-M-+ C-M-+' -and 'C-x C-M-+ + +' increase the font size by three steps. When -'mouse-wheel-mode' is enabled, 'C-M-wheel-up' and 'C-M-wheel-down' also -increase and decrease the font size globally. Additionally, the -user option 'global-text-scale-adjust-resizes-frames' controls whether -the frames are resized when the font size is changed. - ---- -** New config variable 'syntax-wholeline-max' to reduce the cost of long lines. -This variable is used by some operations (mostly syntax-propertization -and font-locking) to treat lines longer than this variable as if they -were made up of various smaller lines. This can help reduce the -slowdowns seen in buffers made of a single long line, but can also -cause misbehavior in the presence of such long lines (though most of -that misbehavior should usually be limited to mis-highlighting). You -can recover the previous behavior with: - - (setq syntax-wholeline-max most-positive-fixnum) - ---- -** New bindings in 'find-function-setup-keys' for 'find-library'. -When 'find-function-setup-keys' is enabled, 'C-x L' is now bound to -'find-library', 'C-x 4 L' is now bound to 'find-library-other-window' -and 'C-x 5 L' is now bound to 'find-library-other-frame'. - -+++ -** New key binding after 'M-x' or 'M-X': 'M-X'. -Emacs allows different completion predicates to be used with 'M-x' -(i.e., 'execute-extended-command') via the -'read-extended-command-predicate' user option. Emacs also has the -'M-X' (note upper case X) command, which only displays commands -especially relevant to the current buffer. Emacs now allows toggling -between these modes while the user is inputting a command by hitting -'M-X' while in the minibuffer. - ---- -** Interactively, 'kill-buffer' will now offer to save the buffer if unsaved. - ---- -** New commands 'duplicate-line' and 'duplicate-dwim'. -'duplicate-line' duplicates the current line the specified number of times. -'duplicate-dwim' duplicates the region if it is active. If not, it -works like 'duplicate-line'. An active rectangular region is -duplicated on its right-hand side. - ---- -** Files with the ".eld" extension are now visited in 'lisp-data-mode'. - -+++ -** 'network-lookup-address-info' can now check numeric IP address validity. -Specifying 'numeric' as the new optional HINTS argument makes it -check if the passed address is a valid IPv4/IPv6 address (without DNS -traffic). - - (network-lookup-address-info "127.1" 'ipv4 'numeric) - => ([127 0 0 1 0]) - -+++ -** New command 'find-sibling-file'. -This command jumps to a file considered a "sibling file", which is -determined according to the new user option 'find-sibling-rules'. - -+++ -** New user option 'delete-selection-temporary-region'. -When non-nil, 'delete-selection-mode' will only delete the temporary -regions (usually set by mouse-dragging or shift-selection). - -+++ -** New user option 'switch-to-prev-buffer-skip-regexp'. -This should be a regexp or a list of regexps; buffers whose names -match those regexps will be ignored by 'switch-to-prev-buffer' and -'switch-to-next-buffer'. - -+++ -** New command 'rename-visited-file'. -This command renames the file visited by the current buffer by moving -it to a new name or location, and also makes the buffer visit this new -file. - -** Menus - ---- -*** The entries following the buffers in the "Buffers" menu can now be altered. -Change the 'menu-bar-buffers-menu-command-entries' variable to alter -the entries that follow the buffer list. - ---- -** 'delete-process' is now a command. -When called interactively, it will kill the process running in the -current buffer (if any). This can be useful if you have runaway -output in the current buffer (from a process or a network connection), -and want to stop it. - -+++ -** New command 'restart-emacs'. -This is like 'save-buffers-kill-emacs', but instead of just killing -the current Emacs process at the end, it starts a new Emacs process -(using the same command line arguments as the running Emacs process). -'kill-emacs' and 'save-buffers-kill-emacs' have also gained new -optional arguments to restart instead of just killing the current -process. - -** Drag and Drop - -+++ -*** New user option 'mouse-drag-mode-line-buffer'. -If non-nil, dragging on the buffer name part of the mode-line will -drag the buffer's associated file to other programs. This option is -currently only available on X, Haiku and Nextstep (GNUstep or macOS). - -+++ -*** New user option 'mouse-drag-and-drop-region-cross-program'. -If non-nil, this option allows dragging text in the region from Emacs -to another program. - ---- -*** New user option 'mouse-drag-and-drop-region-scroll-margin'. -If non-nil, this option allows scrolling a window while dragging text -around without a scroll wheel. - -+++ -*** The value of 'mouse-drag-copy-region' can now be the symbol 'non-empty'. -This prevents mouse drag gestures from putting empty strings onto the -kill ring. - -+++ -*** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'. -These options allow adjusting point and scrolling a window when -dragging items from another program. - -+++ -*** The X Direct Save (XDS) protocol is now supported. -This means dropping an image or file link from programs such as -Firefox will no longer create a temporary file in a random directory, -instead asking you where to save the file first. - -+++ -** New user option 'record-all-keys'. -If non-nil, this option will force recording of all input keys, -including those typed in response to passwords prompt (this was the -previous behavior). The default is nil, which inhibits recording of -passwords. - -+++ -** New function 'command-query'. -This function makes its argument command prompt the user for -confirmation before executing. - -+++ -** The 'disabled' property of a command's symbol can now be a list. -The first element of the list should be the symbol 'query', which will -cause the command disabled this way prompt the user with a y/n or a -yes/no question before executing. The new function 'command-query' is -a convenient method of making commands disabled in this way. - ---- -** 'count-words' will now report buffer totals if given a prefix. -Without a prefix, it will only report the word count for the narrowed -part of the buffer. - -+++ -** 'count-words' will now report sentence count when used interactively. - -+++ -** New user option 'set-message-functions'. -It allows more flexible control of how echo-area messages are displayed -by adding functions to this list. The default value is a list of one -element: 'set-minibuffer-message', which displays echo-area messages -at the end of the minibuffer text when the minibuffer is active. -Other useful functions include 'inhibit-message', which allows -specifying, via 'inhibit-message-regexps', the list of messages whose -display shall be inhibited; and 'set-multi-message' that accumulates -recent messages and displays them stacked together. - ---- -** New user option 'find-library-include-other-files'. -If set to nil, commands like 'find-library' will only include library -files in the completion candidates. The default is t, which preserves -previous behavior, whereby non-library files could also be included. - -+++ -** 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 faces for font-lock. -These faces are primarily meant for use with tree-sitter. They are: -'font-lock-bracket-face', 'font-lock-delimiter-face', -'font-lock-escape-face', 'font-lock-function-call-face', -'font-lock-misc-punctuation-face', 'font-lock-number-face', -'font-lock-operator-face', 'font-lock-property-name-face', -'font-lock-property-use-face', 'font-lock-punctuation-face', -'font-lock-regexp-face', and 'font-lock-variable-use-face'. - -+++ -** 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 face attribute pseudo-value 'reset'. -This value stands for the value of the corresponding attribute of the -'default' face. It can be used to reset attribute values produced by -inheriting from other faces. - -+++ -** 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. - -+++ -** New X resources: "highlightForeground" and "highlightBackground". -Only in the Lucid build, this controls colors used for highlighted -menu item widgets. - -+++ -** On X, 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 responsive to input, you can turn it off by setting the X -resource "synchronizeResize" to "off". - -+++ -** On X, Emacs can optionally synchronize display with the graphics hardware. -When this is enabled by setting the X resource "synchronizeResize" to -"extended", frame content "tearing" is drastically reduced. This is -only supported on the Motif, Lucid, and no-toolkit builds, and -requires an X compositing manager supporting the extended frame -synchronization protocol (see -https://fishsoup.net/misc/wm-spec-synchronization.html). - -This behavior can be toggled on and off via the frame parameter -'use-frame-synchronization'. - -+++ -** New frame parameter 'alpha-background' and X resource "alphaBackground". -This controls the opacity of the text background when running on a -composited display. - -+++ -** New frame parameter 'shaded'. -With window managers which support this, it controls whether or not a -frame's contents will be hidden, leaving only the title bar on 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+, Nextstep, 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. - -+++ -** Non-native tooltips are now supported on Nextstep. -This means Emacs built with GNUstep or built on macOS is now able to -display different faces and images inside tooltips when the -'use-system-tooltips' user option is nil. - ---- -** 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". - ---- -*** Select active regions with xterm selection support. -On terminals with xterm "setSelection" support, the active region may be -saved to the X primary selection, following the -'select-active-regions' variable. This support is enabled when -'tty-select-active-regions' is non-nil. - ---- -*** New command to set up display of unsupported characters. -The new command 'standard-display-by-replacement-char' produces Lisp -code that sets up the 'standard-display-table' to use a replacement -character for display of characters that the text-mode terminal -doesn't support. This code is intended to be used in your init files. -This feature is most useful with the Linux console and similar -terminals, where Emacs has a reliable way of determining which -characters have glyphs in the font loaded into the terminal's memory. - ---- -*** New functions to set terminal output buffer size. -The new functions 'tty--set-output-buffer-size' and -'tty--output-buffer-size' allow setting and retrieving the output -buffer size of a terminal device. The default buffer size is and has -always been BUFSIZ, which is defined in your system's stdio.h. When -you set a buffer size with 'tty--set-output-buffer-size', this also -prevents Emacs from explicitly flushing the tty output stream, except -at the end of display update. - -** 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 Emoji. -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 Emoji based on names. - -+++ -*** New command 'emoji-list' (bound to 'C-x 8 e l'). -This command lists all Emoji (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 Emoji 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. (It also -works for non-Emoji characters.) - ---- -*** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'. -These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively. They -can be used on any character, but are mainly useful for Emoji. - ---- -*** New command 'emoji-zoom-reset'. -This is bound to 'C-x 8 e 0', and undoes any size changes performed by -'emoji-zoom-increase' and 'emoji-zoom-decrease'. - ---- -*** New input method 'emoji'. -This allows you to enter Emoji using short strings, eg ':face_palm:' -or ':scream:'. - -** Help - ---- -*** Variable values displayed by 'C-h v' in "*Help*" are now fontified. - -+++ -*** New user option 'help-clean-buttons'. -If non-nil, link buttons in "*Help*" buffers will have any surrounding -quotes removed. - ---- -*** 'M-x apropos-variable' output now includes values of variables. -Such apropos buffer is more easily viewed with outlining after -enabling 'outline-minor-mode' in 'apropos-mode'. - -+++ -*** New docstring syntax to indicate that symbols shouldn't be links. -When displaying docstrings in "*Help*" buffers, strings that are -"`like-this'" are made into links (if they point to a bound -function/variable). This can lead to false positives when talking -about values that are symbols that happen to have the same names as -functions/variables. To inhibit this buttonification, use the new -"\\+`like-this'" syntax. - -+++ -*** New user option 'help-window-keep-selected'. -If non-nil, commands to show the info manual and the source will reuse -the same window in which the "*Help*" buffer is shown. - ---- -*** Commands like 'C-h f' have changed how they describe menu bindings. -For instance, previously a command might be described as having the -following bindings: - - It is bound to <open>, C-x C-f, <menu-bar> <file> <new-file>. - -This has been changed to: - - It is bound to <open> and C-x C-f. - It can also be invoked from the menu: File → Visit New File... - -+++ -*** The 'C-h .' command now accepts a prefix argument. -'C-u C-h .' would previously inhibit displaying a warning message if -there's no local help at point. This has been changed to call -'button-describe'/'widget-describe' and display button/widget help -instead. - ---- -*** New user option 'help-enable-variable-value-editing'. -If enabled, 'e' on a value in "*Help*" will pop you to a new buffer -where you can edit the value. This is not enabled by default, because -it is easy to make an edit that yields an invalid result. - ---- -*** 'C-h b' uses outlining by default. -Set 'describe-bindings-outline' to nil to get back the old behavior. - ---- -*** Jumping to function/variable source now saves mark before moving point. -Jumping to source from a "*Help*" buffer moves point when the source -buffer is already open. Now, the old point is pushed onto 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 sequences. - -+++ -*** New key binding in "*Help*" buffer: 'I'. -This will take you to the Emacs Lisp manual entry for the item -displayed, if any. - ---- -*** The 'C-h m' ('describe-mode') "*Help*" buffer has been reformatted. -It now only includes local minor modes at the start, and the global -minor modes are listed after the major mode. - -+++ -*** The user option 'help-window-select' now affects apropos commands. -The apropos commands will now select the apropos window if -'help-window-select' is non-nil. +* Editing Changes in Emacs 30.1 --- -*** 'describe-keymap' now considers the symbol at point. -If the symbol at point is a keymap, 'describe-keymap' suggests it as -the default candidate. +** On X, Emacs now supports input methods which perform "string conversion". +This means an input method can now ask Emacs to delete text +surrounding point and replace it with something else, as well as query +Emacs for surrounding text. If your input method allows you to "undo" +mistaken compositions, this will now work as well. --- -*** New command 'help-quick' displays an overview of common commands. -The command pops up a buffer at the bottom of the screen with a few -helpful commands for various tasks. You can toggle the display using -'C-h C-q'. - -** Emacs now comes with Org v9.6. -See the file "ORG-NEWS" for user-visible changes in Org. - -** 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 initially, after Outline mode is turned on. -When the value is 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. The default is nil, but in 'help-mode' -it has the value 'insert' that inserts the buttons directly into the -buffer, and you can use 'RET' to cycle outline visibility. When -the value is 'in-margins', Outline Minor Mode uses the window margins -for buttons that hide/show outlines. - -+++ -*** Buttons and headings now have their own keymaps. -'outline-button-icon-map', 'outline-overlay-button-map', and -'outline-inserted-button-map' are now available as defined keymaps -instead of being anonymous keymaps. - -** Windows - -+++ -*** New commands 'split-root-window-below' and 'split-root-window-right'. -These commands split the root window in two, and are bound to 'C-x w 2' -and 'C-x w 3', respectively. A number of other useful window-related -commands are now available with key sequences that start with the -'C-x w' prefix. - -+++ -*** New display action 'display-buffer-full-frame'. -This action removes other windows from the frame when displaying a -buffer on that frame. - -+++ -*** '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' and 'body-lines', respectively. - -+++ -*** 'display-buffer' provides more options for using an existing window. -The display buffer action functions 'display-buffer-use-some-window' and -'display-buffer-use-least-recent-window' now honor the action alist -entry 'window-min-height' as well as the entries listed below to make -the display of several buffers in a row more amenable. - -+++ -*** New buffer display action alist entry 'lru-frames'. -This allows to specify which frames 'display-buffer' should consider -when using a window that shows another buffer. - -+++ -*** New buffer display action alist entry 'lru-time'. -'display-buffer' will ignore windows with a use time higher than that -when using a window that shows another buffer. - -+++ -*** New buffer display action alist entry 'bump-use-time'. -This has 'display-buffer' bump the use time of any window it returns, -making it a less likely candidate for displaying another buffer. - -+++ -*** New buffer display action alist entry 'window-min-width'. -This allows to specify a minimum width of the window used to display a -buffer. - ---- -*** You can customize on which window 'scroll-other-window' operates. -This is controlled by the new 'other-window-scroll-default' variable. - -** 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. - -+++ -*** The variable 'icon-title-format' can now have the value t. -That value means to use 'frame-title-format' for iconified frames. -This is useful with some window managers and desktop environments -which treat changes in frame's title as requests to raise the frame -and/or give it input focus, or if you want the frame's title to be the -same no matter if the frame is iconified or not. - -** Tab Bars and Tab Lines - ---- -*** New user option 'tab-bar-auto-width' to automatically determine tab width. -This option is non-nil by default, which resizes tab-bar tabs so that -their width is evenly distributed across the tab bar. A companion -option 'tab-bar-auto-width-max' controls the maximum width of a tab -before its name on display is truncated. - ---- -*** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. -It prompts for the name of a tab and switches to it, creating a new -tab if no tab exists by that name. - ---- -*** New keymap 'tab-bar-history-mode-map'. -By default, it contains 'C-c <left>' and 'C-c <right>' 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 - -+++ -*** New command-line option '-r'/'--reuse-frame' for emacsclient. -With this command-line option, Emacs reuses an existing graphical client -frame if one exists; otherwise it creates a new frame. - -+++ -*** New command-line option '-w N'/'--timeout=N' for emacsclient. -With this command-line option, emacsclient will exit if Emacs does not -respond within N seconds. The default is to wait forever. - -+++ -*** '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'. - -+++ -*** New user option 'rcirc-cycle-completion-flag'. -Rcirc will use the default 'completion-at-point' mechanism. The -conventional IRC behavior of completing by cycling through the -available options can be restored by enabling this option. - -+++ -*** New user option 'rcirc-bridge-bot-alist'. -If you are in a channel where a bot is responsible for bridging -between networks, you can use this variable to make these messages -appear more native. For example, you might set the option to: - - (setopt rcirc-bridge-bot-alist '(("bridge" . "{\\(.+?\\)}[[:space:]]+"))) - -for messages like - - 09:47 <bridge> {john} I am not on IRC - -to be reformatted into - - 09:47 <john> I am not on IRC - ---- -*** New formatting commands. -Most IRC clients (including rcirc) support basic formatting using -control codes. Under the 'C-c C-f' prefix a few commands have been -added to insert these automatically. For example, if a region is -active and 'C-c C-f C-b' is invoked, markup is inserted for the region -to be highlighted in bold. - -** Imenu - -+++ -*** 'imenu' is now bound to 'M-g i' globally. - ---- -*** New function 'imenu-flush-cache'. -Use it if you want Imenu to forget the buffer's index alist and -recreate it anew next time 'imenu' is invoked. - ---- -** Emacs is now capable of abandoning a window's redisplay that takes too long. -This is controlled by the new variable 'max-redisplay-ticks'. If that -variable is set to a non-zero value, display of a window will be -aborted after that many low-level redisplay operations, thus -preventing Emacs from becoming wedged when visiting files with very -long lines. The default is zero, which disables the feature: Emacs -will wait forever for redisplay to finish. (We believe you won't need -this feature, given the ability to display buffers with very long -lines.) - - -* Editing Changes in Emacs 29.1 - -+++ -** 'M-SPC' is now bound to 'cycle-spacing'. -Formerly it invoked 'just-one-space'. The actions performed by -'cycle-spacing' and their order can now be customized via the user -option 'cycle-spacing-actions'. - ---- -** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars. -These commands now behave as case-sensitive for interactive calls when -they are invoked with an uppercase character, regardless of the value -of 'case-fold-search'. - ---- -** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping. -These commands (bound to 'C-M-v' and 'C-M-V') used to scroll the other -windows without looking at customizations in that other window. These -functions now check whether they have been rebound in the buffer shown -in that other window, and then call the remapped function instead. In -addition, these commands now also respect the -'scroll-error-top-bottom' user option. - ---- -** 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'. -Set this option to nil to inhibit the default translation of upper -case keys to their lower case variants. - -+++ -** 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, -point is now moved only when releasing the mouse button. This no -longer results in a bogus selection, unless the mouse has also been -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. - ---- -** New user option 'copy-region-blink-predicate'. -By default, when copying a region with 'kill-ring-save', Emacs only -blinks point and mark when the region is not denoted visually, that -is, when either the region is inactive, or the 'region' face is -indistinguishable from the 'default' face. - -Users who would rather enable blinking unconditionally can now set -this user option to 'always'. To disable blinking unconditionally, -either set this option to 'ignore', or set 'copy-region-blink-delay' -to 0. - -+++ -** 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. The default is nil. - -This option can also be set to the symbols 'overlay' or 'child-frame', -in which case the context is shown in an overlay or child-frame at the -top-left of the current window. The latter option requires a -graphical frame. On non-graphical frames, the context is shown in the -echo area. - -** Comint - -+++ -*** 'comint-term-environment' is now aware of connection-local variables. -The user option 'comint-terminfo-terminal' and the variable -'system-uses-terminfo' can now be set as connection-local variables to -change the terminal used on a remote host. - ---- -*** New user option 'comint-delete-old-input'. -When nil, this prevents comint from deleting the current input when -inserting previous input using '<mouse-2>'. The default is t, to -preserve previous behavior. - ---- -*** New minor mode 'comint-fontify-input-mode'. -This minor mode is enabled by default in "*shell*" and "*ielm*" -buffers. It fontifies input text according to 'shell-mode' or -'emacs-lisp-mode' font-lock rules. Customize the user options -'shell-fontify-input-enable' and 'ielm-fontify-input-enable' to nil if -you don't want to enable input fontification by default. - -** Mwheel - ---- -*** New user options for alternate wheel events. -The user options 'mouse-wheel-down-alternate-event' and -'mouse-wheel-up-alternate-event' as well as the variables -'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. - -** Internationalization - ---- -*** The '<Delete>' function key now allows deleting the entire composed sequence. -For the details, see the item about the 'delete-forward-char' command -above. - ---- -*** New user option 'composition-break-at-point'. -Setting it to a non-nil value temporarily disables automatic -composition of character sequences at point, and thus makes it easier -to edit such sequences by allowing point to "enter" the composed -sequence. - ---- -*** Support for many old scripts and writing systems. -Emacs now supports, and has language-environments and input methods, -for several dozens of old scripts that were used in the past for -various languages. For each such script Emacs now has font-selection -and character composition rules, a language environment, and an input -method. The newly-added scripts and the corresponding language -environments are: - - Tai Tham script and the Northern Thai language environment - - Brahmi script and language environment - - Kaithi script and language environment - - Tirhuta script and language environment - - Sharada script and language environment - - Siddham script and language environment - - Syloti Nagri script and language environment - - Modi script and language environment - - Baybayin script and Tagalog language environment - - Hanunoo script and language environment - - Buhid script and language environment - - Tagbanwa script and language environment - - Limbu script and language environment - - Balinese script and language environment - - Javanese script and language environment - - Sundanese script and language environment - - Batak script and language environment - - Rejang script and language environment - - Makasar script and language environment - - Lontara script and language environment - - Hanifi Rohingya script and language environment - - Grantha script and language environment - - Kharoshthi script and language environment - - Lepcha script and language environment - - Meetei Mayek script and language environment - - Adlam script and language environment - - Mende Kikakui script and language environment - - Wancho script and language environment - - Toto script and language environment - - Gothic script and language environment - - Coptic script and language environment - ---- -*** The "Oriya" language environment was renamed to "Odia". -This is to follow the change in the official name of the script. The -'oriya' input method was also renamed to 'odia'. However, the old -name of the language environment and the input method are still -supported. - ---- -*** New Greek translation of the Emacs tutorial. -Type 'C-u C-h t' to select it in case your language setup does not do -so automatically. - ---- -*** New Ukrainian translation of the Emacs Tutorial. - ---- -*** New default phonetic input method for the Tamil language environment. -The default input method for the Tamil language environment is now -"tamil-phonetic" which is a customizable phonetic input method. To -change the input method's translation rules, customize the user option -'tamil-translation-rules'. - ---- -*** New 'tamil99' input method for the Tamil language. -This supports the keyboard layout specifically designed for the Tamil -language. - ---- -*** New input method 'slovak-qwerty'. -This is a variant of the 'slovak' input method, which corresponds to -the QWERTY Slovak keyboards. - ---- -*** New input method 'cyrillic-chuvash'. -This input method is based on the russian-computer input method, and -is intended for typing in the Chuvash language written in the Cyrillic -script. - ---- -*** New input method 'cyrillic-mongolian'. -This input method is for typing in the Mongolian language using the -Cyrillic script. +** New command 'kill-matching-buffers-no-ask'. +This works like 'kill-matching-buffers', but without asking for +confirmation. -* Changes in Specialized Modes and Packages in Emacs 29.1 - -** Ecomplete - ---- -*** New commands 'ecomplete-edit' and 'ecomplete-remove'. -These allow you to (respectively) edit and bulk-remove entries from -the ecomplete database. - ---- -*** New user option 'ecomplete-auto-select'. -If non-nil and there's only one matching option, auto-select that. +* Changes in Specialized Modes and Packages in Emacs 30.1 --- -*** New user option 'ecomplete-filter-regexp'. -If non-nil, this user option describes what entries not to add to the -database stored on disk. +** Variable order and truncation can now be configured in 'gdb-many-windows'. +The new user option 'gdb-locals-table-row-config' allows users to +configure the order and max length of various properties in the local +variables buffer when using 'gdb-many-windows'. -** Auth Source +By default, this user option is set to write the properties in the order: +name, type and value, where the name and type are truncated to 20 +characters, and the value is truncated according to the value of +'gdb-locals-value-limit'. -+++ -*** New user option 'auth-source-pass-extra-query-keywords'. -Whether to recognize additional keyword params, like ':max' and -':require', as well as accept lists of query terms paired with -applicable keywords. This disables most known behavioral quirks -unique to auth-source-pass, such as wildcard subdomain matching. - -** Dired - -+++ -*** 'dired-guess-shell-command' moved from dired-x to dired. -This means that 'dired-do-shell-command' will now provide smarter -defaults without first having to require 'dired-x'. See the node -"(emacs) Shell Command Guessing" in the Emacs manual for more details. - ---- -*** 'dired-clean-up-buffers-too' moved from dired-x to dired. -This means that Dired now offers to kill buffers visiting files and -dirs when they are deleted in Dired. Before, you had to require -'dired-x' to enable this behavior. To disable this behavior, -customize the user option 'dired-clean-up-buffers-too' to nil. The -related user option 'dired-clean-confirm-killing-deleted-buffers' -(which see) has also been moved to 'dired'. - -+++ -*** 'dired-do-relsymlink' moved from dired-x to dired. -The corresponding key 'Y' is now bound by default in Dired. - -+++ -*** 'dired-do-relsymlink-regexp' moved from dired-x to dired. -The corresponding key sequence '% Y' is now bound by default in Dired. - ---- -*** 'M-G' is now bound to 'dired-goto-subdir'. -Before, that binding was only available if the dired-x package was -loaded. +If you want to get back the old behavior, set the user option to the value -+++ -*** 'dired-info' and 'dired-man' moved from dired-x to dired. -The 'dired-info' and 'dired-man' commands have been moved from the -dired-x package to dired. They have also been renamed to -'dired-do-info' and 'dired-do-man'; the old command names are obsolete -aliases. - -The keys 'I' ('dired-do-info') and 'N' ('dired-do-man') are now bound -in Dired mode by default. The user options 'dired-bind-man' and -'dired-bind-info' no longer have any effect and are obsolete. - -To get the old behavior back and unbind these keys in Dired mode, add -the following to your Init file: - - (with-eval-after-load 'dired - (keymap-set dired-mode-map "N" nil) - (keymap-set dired-mode-map "I" nil)) - ---- -*** New command 'dired-do-eww'. -This command visits the file on the current line with EWW. - ---- -*** New user option 'dired-omit-lines'. -This is used by 'dired-omit-mode', and now allows you to hide based on -other things than just the file names. - -+++ -*** New user option 'dired-mouse-drag-files'. -If non-nil, dragging file names with the mouse in a Dired buffer will -initiate a drag-and-drop session allowing them to be opened in other -programs. - -+++ -*** New user option 'dired-free-space'. -Dired will now, by default, include the free space in the first line -instead of having it on a separate line. To get the previous behavior -back, say: - - (setopt dired-free-space 'separate) - ---- -*** 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. - ---- -*** Search and replace in Dired/Wdired supports more regexps. -For example, the regexp ".*" will match only characters that are part -of the file name. Also "^.*$" can be used to match at the beginning -of the file name and at the end of the file name. This is used only -when searching on file names. In Wdired this can be used when the new -user option 'wdired-search-replace-filenames' is non-nil (which is the -default). - -** Elisp - ---- -*** New command 'elisp-eval-region-or-buffer' (bound to 'C-c C-e'). -This command evals the forms in the active region or in the whole buffer. - ---- -*** New commands 'elisp-byte-compile-file' and 'elisp-byte-compile-buffer'. -These commands (bound to 'C-c C-f' and 'C-c C-b', respectively) -byte-compile the visited file and the current buffer, respectively. - -** Games - ---- -*** New user option 'tetris-allow-repetitions'. -This controls how randomness is implemented (whether to use pure -randomness as before, or to use a bag). - -** Battery - -+++ -*** New user option 'battery-update-functions'. -This can be used to trigger actions based on the battery status. - -** DocView - ---- -*** doc-view can now generate SVG images when viewing PDF files. -If Emacs is built with SVG support, doc-view can generate SVG files -when using MuPDF as the converter for PDF files, which generally leads -to sharper images (especially when zooming), and allows customization -of background and foreground color of the page via the new user -options 'doc-view-svg-background' and 'doc-view-svg-foreground'. To -activate this behavior, set 'doc-view-mupdf-use-svg' to non-nil if -your Emacs has SVG support. Note that, with some versions of MuPDF, -SVG generation is known to sometimes produce SVG files that are buggy -or can take a long time to render. - -** Enriched Mode - -+++ -*** New command 'enriched-toggle-markup'. -This allows you to see the markup in 'enriched-mode' buffers (e.g., -the "HELLO" file). - -** Shell Script Mode - ---- -*** New user option 'sh-indent-statement-after-and'. -This controls how statements like the following are indented: - - foo && - bar - -*** New Flymake backend using the ShellCheck program. -It is enabled by default, but requires that the external "shellcheck" -command is installed. - -** CC Mode - ---- -*** C++ Mode now supports most of the new features in the C++20 Standard. - ---- -*** In Objective-C Mode, no extra types are recognized by default. -The default value of 'objc-font-lock-extra-types' has been changed to -nil, since too many identifiers were getting misfontified as types. -This may cause some actual types not to get fontified. To get the old -behavior back, customize the user option to the value suggested in its -doc string. - -** Cperl Mode - ---- -*** New user option 'cperl-file-style'. -This option determines the indentation style to be used. It can also -be used as a file-local variable. - -** Gud - ---- -*** 'gud-go' is now bound to 'C-c C-v'. -If given a prefix, it will prompt for an argument to use for the -run/continue command. - ---- -*** 'perldb' now recognizes '-E'. -As of Perl 5.10, 'perl -E 0' behaves like 'perl -e 0' but also activates -all optional features of the Perl version in use. 'perldb' now uses -this invocation as its default. - -** Customize - ---- -*** New command 'custom-toggle-hide-all-widgets'. -This is bound to 'H' and toggles whether to hide or show the widget -contents. - -** Diff Mode - ---- -*** New user option 'diff-whitespace-style'. -Sets the value of the buffer-local variable 'whitespace-style' in -'diff-mode' buffers. By default, this variable is '(face trailing)', -which preserves behavior of previous Emacs versions. - -+++ -*** New user option 'diff-add-log-use-relative-names'. -If non-nil insert file names in ChangeLog skeletons relative to the -VC root directory. - -** Ispell - ---- -*** 'ispell-region' and 'ispell-buffer' now push the mark. -These commands push onto the mark ring the location of the last -misspelled word where corrections were offered, so that you can then -skip back to that location with 'C-x C-x'. - -** Dabbrev - ---- -*** New function 'dabbrev-capf' for use on 'completion-at-point-functions'. - -+++ -*** New user option 'dabbrev-ignored-buffer-modes'. -Buffers with major modes in this list will be ignored. By default, -this includes "binary" buffers like 'archive-mode' and 'image-mode'. - -** Package - -+++ -*** New command 'package-update'. -This command allows you to upgrade packages without using 'M-x -list-packages'. - -+++ -*** New command 'package-update-all'. -This command allows updating all packages without any queries. - -+++ -*** New commands 'package-recompile' and 'package-recompile-all'. -These commands can be useful if the ".elc" files are out of date -(invalid byte code and macros). - -+++ -*** New DWIM action on 'x' in "*Packages*" buffer. -If no packages are marked, 'x' will install the package under point if -it isn't already, and remove it if it is installed. - -+++ -*** New command 'package-vc-install'. -Packages can now be installed directly from source by cloning from -their repository. - -+++ -*** New command 'package-vc-install-from-checkout'. -An existing checkout can now be loaded via package.el, by creating a -symbolic link from the usual package directory to the checkout. - -+++ -*** New command 'package-vc-checkout'. -Used to fetch the source of a package by cloning a repository without -activating the package. - -+++ -*** New command 'package-vc-prepare-patch'. -This command allows you to send patches to package maintainers, for -packages checked out using 'package-vc-install'. - -+++ -*** New command 'package-report-bug'. -This command helps you compose an email for sending bug reports to -package maintainers. - -+++ -*** New user option 'package-vc-selected-packages'. -By customizing this user option you can specify specific packages to -install. - -** Emacs Sessions (Desktop) - -+++ -*** New user option to load a locked desktop if locking Emacs is not running. -The option 'desktop-load-locked-desktop' can now be set to the value -'check-pid', which means to allow loading a locked ".emacs.desktop" -file if the Emacs process which locked it is no longer running on the -local machine. This allows avoiding questions about locked desktop -files when the Emacs session which locked it crashes, or was otherwise -interrupted and didn't exit gracefully. See the "(emacs) Saving -Emacs Sessions" node in the Emacs manual for more details. - -** Miscellaneous - -+++ -*** New command 'scratch-buffer'. -This command switches to the "*scratch*" buffer. If "*scratch*" doesn't -exist, the command creates it first. You can use this command if you -inadvertently delete the "*scratch*" buffer. - -** Debugging - ---- -*** 'q' in a "*Backtrace*" buffer no longer clears the buffer. -Instead it just buries the buffer and switches the mode from -'debugger-mode' to 'backtrace-mode', since commands like 'e' are no -longer available after exiting the recursive edit. - -+++ -*** New user option 'debug-allow-recursive-debug'. -This user option controls whether the 'e' (in a "*Backtrace*" -buffer or while edebugging) and 'C-x C-e' (while edebugging) commands -lead to a (further) backtrace. By default, this variable is nil, -which is a change in behavior from previous Emacs versions. - -+++ -*** 'e' in edebug can now take a prefix arg to pretty-print the results. -When invoked with a prefix argument, as in 'C-u e', this command will -pop up a new buffer and show the full pretty-printed value there. - -+++ -*** 'C-x C-e' now interprets a non-zero prefix arg to pretty-print the results. -When invoked with a non-zero prefix argument, as in 'C-u C-x C-e', -this command will pop up a new buffer and show the full pretty-printed -value there. - -+++ -*** You can now generate a backtrace from Lisp errors in redisplay. -To do this, set the new variable 'backtrace-on-redisplay-error' to a -non-nil value. The backtrace will be written to a special buffer -named "*Redisplay-trace*". This buffer will not be automatically -displayed in a window. + (setopt gdb-locals-table-row-config + `((type . 0) (name . 0) (value . ,gdb-locals-value-limit))) ** Compile -+++ -*** New user option 'compilation-hidden-output'. -This can be used to make specific parts of compilation output -invisible. - -+++ -*** The 'compilation-auto-jump-to-first-error' user option has been extended. -It can now have the additional values 'if-location-known' (which will -only jump if the location of the first error is known), and -'first-known' (which will jump to the first known error location). - -+++ -*** New user option 'compilation-max-output-line-length'. -Lines longer than the value of this option will have their ends -hidden, with a button to reveal the hidden text. This speeds up -operations like grepping on files that have few newlines. The default -value is 400; set to nil to disable hiding. - -** Flymake - -+++ -*** New user option 'flymake-mode-line-lighter'. - -+++ -** New minor mode 'word-wrap-whitespace-mode' for extending 'word-wrap'. -This mode switches 'word-wrap' on, and breaks on all the whitespace -characters instead of just 'SPC' and 'TAB'. - ---- -** New mode, 'emacs-news-mode', for editing the NEWS file. -This mode adds some highlighting, makes the 'M-q' command aware of the -format of NEWS entries, and has special commands for doing maintenance -of the Emacs NEWS files. In addition, this mode turns on -'outline-minor-mode', and thus displays customizable icons (see -'icon-preference') in the margins. To disable these icons, set -'outline-minor-mode-use-buttons' to a nil value. - ---- -** Kmacro -Kmacros are now OClosures and have a new constructor 'kmacro' which -uses the 'key-parse' syntax. It replaces the old 'kmacro-lambda-form' -(which is now declared obsolete). - ---- -** savehist.el can now truncate variables that are too long. -An element of user option 'savehist-additional-variables' can now be -of the form '(VARIABLE . MAX-ELTS)', which means to truncate the -VARIABLE's value to at most MAX-ELTS elements (if the value is a list) -before saving the value. - -** Minibuffer and Completions - -+++ -*** New commands for navigating completions from the minibuffer. -When the minibuffer is the current buffer, typing 'M-<up>' or -'M-<down>' selects a previous/next completion candidate from the -"*Completions*" buffer and inserts it to the minibuffer. -When the user option 'minibuffer-completion-auto-choose' is nil, -'M-<up>' and 'M-<down>' do the same, but without inserting -a completion candidate to the minibuffer, then 'M-RET' can be used -to choose the currently active candidate from the "*Completions*" -buffer and exit the minibuffer. With a prefix argument, 'C-u M-RET' -inserts the currently active candidate to the minibuffer, but doesn't -exit the minibuffer. These keys are also available for in-buffer -completion, but they don't insert candidates automatically, you need -to type 'M-RET' to insert the selected candidate to the buffer. - -+++ -*** Choosing a completion with a prefix argument doesn't exit the minibuffer. -This means that typing 'C-u RET' on a completion candidate in the -"*Completions*" buffer inserts the completion into the minibuffer, -but doesn't exit the minibuffer. - -+++ -*** 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. If the value is -'second-tab', then the first 'TAB' will display "*Completions*", and -the second one will switch to the "*Completions*" buffer. - ---- -*** New user option 'completion-auto-wrap'. -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 values for the 'completion-auto-help' user option. -There are two new values to control the way the "*Completions*" buffer -behaves after pressing a 'TAB' if completion is not unique. The value -'always' updates or shows the "*Completions*" buffer after any attempt -to complete. The value 'visual' is like 'always', but only updates -the completions if they are already visible. The default value t -always hides the completion buffer after some completion is made. - ---- -*** New commands to complete the minibuffer history. -'minibuffer-complete-history' ('C-x <up>') is like 'minibuffer-complete' -but completes on the history items instead of the default completion -table. 'minibuffer-complete-defaults' ('C-x <down>') completes -on the list of default items. - -+++ -*** User option 'minibuffer-eldef-shorten-default' is now obsolete. -Customize the user option 'minibuffer-default-prompt-format' instead. - -+++ -*** 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. - -+++ -*** New user option 'completions-max-height'. -This option limits the height of the "*Completions*" buffer. - -+++ -*** New user option 'completions-header-format'. -This is a string to control the header line to show in the -"*Completions*" buffer before the list of completions. -If it contains "%s", that is replaced with the number of completions. -If nil, the header line is not shown. - -+++ -*** New user option 'completions-highlight-face'. -When this user option names a face, the current -candidate in the "*Completions*" buffer is highlighted with that face. -The nil value disables this highlighting. The default is to highlight -using the 'completions-highlight' face. - -+++ -*** You can now define abbrevs for the minibuffer modes. -'minibuffer-mode-abbrev-table' and -'minibuffer-inactive-mode-abbrev-table' are now defined. - -** Isearch and Replace - -+++ -*** Changes in how Isearch responds to 'mouse-yank-at-point'. -If a user does 'C-s' and then uses '<mouse-2>' ('mouse-yank-primary') -outside the echo area, Emacs will, by default, end the Isearch and -yank the text at mouse cursor. But if 'mouse-yank-at-point' is -non-nil, the text will now be added to the Isearch instead. - -+++ -*** Changes for values 'no' and 'no-ding' of 'isearch-wrap-pause'. -Now with these values the search will wrap around not only on repeating -with 'C-s C-s', but also after typing a character. - -+++ -*** New user option 'char-fold-override'. -Non-nil means that the default definitions of equivalent characters -are overridden. - -*** New command 'describe-char-fold-equivalences'. -It displays character equivalences used by 'char-fold-to-regexp'. - -+++ -*** 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. - -** GDB/MI - ---- -*** New user option 'gdb-debuginfod-enable-setting'. -On capable platforms, GDB 10.1 and later can download missing source -and debug info files from special-purpose servers, called "debuginfod -servers". Use this new option to control whether 'M-x gdb' instructs -GDB to download missing files from debuginfod servers when you debug -the corresponding programs. The default is to ask you at the -beginning of each debugging session whether to download the files for -that session. - -** Glyphless Characters - -+++ -*** New minor mode 'glyphless-display-mode'. -This allows an easy way to toggle seeing all glyphless characters in -the current buffer. - ---- -*** The extra slot of 'glyphless-char-display' can now have cons values. -The extra slot of the 'glyphless-char-display' char-table can now have -values that are cons cells, specifying separate values for text-mode -and GUI terminals. - -+++ -*** "Replacement character" feature for undisplayable characters on TTYs. -The 'acronym' method of displaying glyphless characters on text-mode -frames treats single-character acronyms specially: they are displayed -without the surrounding '[..]' "box", thus in effect treating such -"acronyms" as replacement characters. - -** 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 - -+++ -*** Command 'info-apropos' now takes a prefix argument to search for regexps. - ---- -*** 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. - -** Shortdoc - ---- -*** New command 'shortdoc-copy-function-as-kill' bound to 'w'. -It copies the name of the function near point into the kill ring. - ---- -*** 'N' and 'P' are now bound to 'shortdoc-{next,previous}-section'. -This is in addition to the old keybindings 'C-c C-n' and 'C-c C-p'. +*** New user option 'grep-use-headings'. +When non-nil, the output of Grep is split into sections, one for each +file, instead of having file names prefixed to each line. It is +equivalent to the "--heading" option of some tools such as 'git grep' +and 'rg'. The headings are displayed using the new 'grep-heading' +face. ** VC --- -*** New command 'vc-pull-and-push'. -This commands first does a "pull" command, and if that is successful, -does a "push" command afterwards. Currently supported in Git and Bzr. - -+++ -*** 'C-x v b' prefix key is used now for branch commands. -'vc-print-branch-log' is bound to 'C-x v b l', and new commands are -'vc-create-branch' ('C-x v b c') and 'vc-switch-branch' ('C-x v b s'). -The VC Directory buffer now uses the prefix 'b' for these branch-related -commands. - -+++ -*** New command 'vc-dir-mark-by-regexp' bound to '% m' and '* %'. -This command marks files based on a regexp. If given a prefix -argument, unmark instead. - -+++ -*** New command 'C-x v !' ('vc-edit-next-command'). -This prefix command requests editing of the next VC shell command -before execution. For example, in a Git repository, you can produce a -log of more than one branch by typing 'C-x v ! C-x v b l' and then -appending additional branch names to the 'git log' command. - -The intention is that this command can be used to access a wide -variety of version control system-specific functionality from VC -without complexifying either the VC command set or the backend API. - ---- -*** 'C-x v v' in a diffs buffer allows to commit only some of the changes. -This command is intended to allow you to commit only some of the -changes you have in your working tree. Begin by creating a buffer -with the changes against the last commit, e.g. with 'C-x v D' -('vc-root-diff'). Then edit the diffs to remove the hunks you don't -want to commit. Finally, type 'C-x v v' in that diff buffer to commit -only part of your changes, those whose hunks were left in the buffer. - ---- -*** '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'. - ---- -*** Log Edit now fontifies long Git commit summary lines. -Writing shorter summary lines avoids truncation in contexts in which -Git commands display summary lines. See the two new user options -'vc-git-log-edit-summary-target-len' and 'vc-git-log-edit-summary-max-len'. - ---- -*** New 'log-edit-headers-separator' face. -It is used to style the line that separates the 'log-edit' headers -from the 'log-edit' summary. - ---- -*** The function 'vc-read-revision' accepts a new MULTIPLE argument. -If non-nil, multiple revisions can be queried. This is done using -'completing-read-multiple'. - ---- -*** New function 'vc-read-multiple-revisions'. -This function invokes 'vc-read-revision' with a non-nil value for -MULTIPLE. - -+++ -*** New command 'vc-prepare-patch'. -Patches for any version control system can be prepared using VC. The -command will query what commits to send and will compose messages for -your mail user agent. The behavior of 'vc-prepare-patch' can be -modified by the user options 'vc-prepare-patches-separately' and -'vc-default-patch-addressee'. - -** 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 specialized 'narrow-to-defun' definition. -It narrows to the current node. +*** New user option 'vc-git-shortlog-switches'. +This is a string or a list of strings that specifies the Git log +switches for shortlogs, such as the one produced by 'C-x v L'. +'vc-git-log-switches' is no longer used for shortlogs. -** EUDC - -+++ -*** Deprecations planned for next release. -After Emacs 29.1, some aspects of EUDC will be deprecated. The goal -of these deprecations is to simplify EUDC server configuration by -making 'eudc-server-hotlist' the only place to add servers. There -will not be a need to set the server using the 'eudc-set-server' -command. Instead, the 'eudc-server-hotlist' user option should be -customized to have an entry for the server. The plan is to obsolete -the 'eudc-hotlist' package since Customize is sufficient for changing -'eudc-server-hotlist'. How the 'eudc-server' user option works in this -context is to-be-determined; it can't be removed, because that would -break compatibility, but it may become synchronized with -'eudc-server-hotlist' so that 'eudc-server' is always equal to '(car -eudc-server-hotlist)'. The first entry in 'eudc-server-hotlist' is the -first server tried by 'eudc-expand-try-all'. The hotlist -simplification will allow 'eudc-query-form' to show a drop down of -possible servers, instead of requiring a call to 'eudc-set-server' -like it does in this release. The default value of -'eudc-ignore-options-file' will be changed from nil to t. - -+++ -*** New user option 'eudc-ignore-options-file' that defaults to nil. -The 'eudc-ignore-options-file' user option can be configured to ignore -the 'eudc-options-file' (typically "~/.emacs.d/eudc-options"). Most -users should configure this to t and put EUDC configuration in the -main Emacs initialization file ("~/.emacs" or "~/.emacs.d/init.el"). - -+++ -*** 'eudc-expansion-overwrites-query' to 'eudc-expansion-save-query-as-kill'. -The user option 'eudc-expansion-overwrites-query' is renamed to -'eudc-expansion-save-query-as-kill' to reflect the actual behavior of -the user option. The former is kept as alias. - -+++ -*** New command 'eudc-expand-try-all'. -This command can be used in place of 'eudc-expand-inline'. It takes a -prefix argument that causes 'eudc-expand-try-all' to return matches -from all servers instead of just the matches from the first server to -return any. This is useful for example, if one wants to search LDAP -for a name that happens to match a contact in one's BBDB. - -+++ -*** New behavior and default for user option 'eudc-inline-expansion-format'. -EUDC inline expansion result formatting defaulted to - - ("%s %s <%s>" firstname name email) - -Since email address specifications need to comply with RFC 5322 in -order to be useful in messages, there was a risk to produce syntax -which was standard with RFC 822, but is marked as obsolete syntax by -its successor RFC 5322. Also, the first and last name part was never -enclosed in double quotes, potentially producing invalid address -specifications, which may be rejected by a receiving MTA. Thus, this -variable can now additionally be set to nil (the new default), or a -function. In both cases, the formatted result will be in compliance -with RFC 5322. When set to nil, a default format very similar to the -old default will be produced. When set to a function, that function -is called, and the returned values are used to populate the phrase and -comment parts (see RFC 5322 for definitions). In both cases, the -phrase part will be automatically quoted if necessary. - -+++ -*** New function 'eudc-capf-complete' with 'message-mode' integration. -EUDC can now contribute email addresses to 'completion-at-point' by -adding the new function 'eudc-capf-complete' to -'completion-at-point-functions' in 'message-mode'. - -+++ -*** Additional attributes of query and results in eudcb-macos-contacts.el. -The EUDC back-end for the macOS Contacts app now provides a wider set -of attributes to use for queries, and delivers more attributes in -query results. - -+++ -*** New back-end for ecomplete. -A new back-end for ecomplete allows information from that database to -be queried by EUDC, too. The attributes present in the EUDC query are -used to select the entry type in the ecomplete database. - -+++ -*** New back-end for mailabbrev. -A new back-end for mailabbrev allows information from that database to -be queried by EUDC, too. The attributes 'email', 'name', and 'firstname' -are supported only. - -** EWW/SHR - -+++ -*** 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 the user option -'eww-buffer-name-length'. By default, no automatic renaming is -performed. - -+++ -*** 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 <video> elements with an xwidget. Note that this is -experimental; it is known to crash Emacs on some systems, and just -doesn't work on other systems. Also see etc/PROBLEMS. - -+++ -*** New user option 'eww-url-transformers'. -These are used to alter an URL before using it. By default it removes -the common "utm_" trackers from URLs. - -** Find Dired - ---- -*** New command 'find-dired-with-command'. -This enables users to run 'find-dired' with an arbitrary command, -enabling running commands previously unsupported and also enabling new -commands to be built on top. - -** Gnus - -+++ -*** Tool bar changes in Gnus/Message. -There were previously two styles of tool bars available in Gnus and -Message, referred to as 'gnus-summary-tool-bar-retro', -'gnus-group-tool-bar-retro' and 'message-tool-bar-retro', and -'gnus-summary-tool-bar-gnome', 'gnus-group-tool-bar-gnome' and -'message-tool-bar-gnome'. The "retro" tool bars have been removed (as -well as the icons used), and the "gnome" tool bars are now the only -pre-defined toolbars. - ---- -*** 'gnus-summary-up-thread' and 'gnus-summary-down-thread' bindings removed. -The 'gnus-summary-down-thread' binding to 'M-C-d' was shadowed by -'gnus-summary-read-document', and these commands are also available on -'T u' and 'T d' respectively. - ---- -*** Gnus now uses a variable-pitch font in the headers by default. -To get the monospace font back, you can put something like the -following in your ".gnus" file: - - (set-face-attribute 'gnus-header nil :inherit 'unspecified) - ---- -*** The default value of 'gnus-treat-fold-headers' is now 'head'. - ---- -*** New face 'gnus-header'. -All other 'gnus-header-*' faces inherit from this face now. - -+++ -*** New user option 'gnus-treat-emojize-symbols'. -If non-nil, symbols that have an Emoji representation will be -displayed as emojis. The default is nil. - -+++ -*** New command 'gnus-article-emojize-symbols'. -This is bound to 'W D e' and will display symbols that have Emoji -representation as Emoji. - -+++ -*** New mu backend for gnus-search. -Configuration is very similar to the notmuch and namazu backends. It -supports the unified search syntax. - ---- -*** 'gnus-html-image-cache-ttl' is now a seconds count. -Formerly it was a pair of numbers '(A B)' that represented 65536*A + B, -to cater to older Emacs implementations that lacked bignums. -The older form still works but is undocumented. - -** Rmail - ---- -*** Rmail partial summaries can now be applied one on top of the other. -You can now narrow the set of messages selected by Rmail summary's -criteria (recipients, topic, senders, etc.) by making a summary of the -already summarized messages. For example, invoking -'rmail-summary-by-senders', followed by 'rmail-summary-by-topic' will -produce a summary where both the senders and the topic are according -to your selection. The new user option -'rmail-summary-progressively-narrow' controls whether the stacking of -the filters is in effect; customize it to a non-nil value to enable -this feature. - ---- -*** New Rmail summary: by thread. -The new command 'rmail-summary-by-thread' produces a summary of -messages that belong to a single thread of discussion. - -** EIEIO - -+++ -*** 'slot-value' can now be used to access 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. - -** Help - ---- -*** New mode, 'emacs-news-view-mode', for viewing the NEWS file. -This mode is used by the 'C-h N' command, and adds buttons to manual -entries and symbol references. - ---- -*** New user option 'help-link-key-to-documentation'. -When this option is non-nil (which is the default), 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). - -** 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 - ---- -*** New user option 'term-bind-function-keys'. -If non-nil, 'term-mode' will pass the function keys on to the -underlying shell instead of using the normal Emacs bindings. - ---- -*** 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. - -** Project - -+++ -*** 'project-find-file' and 'project-or-external-find-file' can include all. -The commands 'project-find-file' and 'project-or-external-find-file' -now accept a prefix argument, which is interpreted to mean "include -all files". - -+++ -*** New command 'project-list-buffers' bound to 'C-x p C-b'. -This command displays a list of buffers from the current project. - -+++ -*** 'project-kill-buffers' can display the list of buffers to kill. -Customize the user option 'project-kill-buffers-display-buffer-list' -to enable the display of the buffer list. - -*** New user option 'project-vc-extra-root-markers'. -Use it to add detection of nested projects (inside a VCS repository), -or projects outside of VCS repositories. - -As a consequence, the 'VC project backend' is formally renamed to -'VC-aware project backend'. - -+++ -*** New user option 'project-vc-include-untracked'. -If non-nil, files untracked by a VCS are considered to be part of -the project by a VC project based on that VCS. - -** Xref - -+++ -*** New command 'xref-go-forward'. -It is bound to 'C-M-,' and jumps to the location where you previously -invoked 'xref-go-back' ('M-,', also known as 'xref-pop-marker-stack'). - -+++ -*** The depth of the Xref marker stack is now infinite. -The implementation of the Xref marker stack was changed in a way that -allows as many places to be saved on the stack as needed, limited only -by the available memory. Therefore, the variables -'find-tag-marker-ring-length' and 'xref-marker-ring-length' are now -obsolete and unused; setting them has no effect. - -+++ -*** 'xref-query-replace-in-results' prompting change. -This command no longer prompts for FROM when called without prefix -argument. This makes the most common case faster: replacing entire -matches. - -+++ -*** New command 'xref-find-references-and-replace' to rename one identifier. - ---- -*** New variable 'xref-current-item' (renamed from a private version). - ---- -*** New function 'xref-show-xrefs'. - -*** 'outline-minor-mode' is supported in Xref buffers. -You can enable outlining by adding 'outline-minor-mode' to -'xref-after-update-hook'. - -** 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 Mode - -+++ -*** New command 'image-transform-fit-to-window'. -This command fits the image to the current window by scaling down or -up as necessary. Unlike 'image-transform-fit-both', this does not -only scale the image down, but up as well. It is bound to 's w' in -Image Mode by default. - ---- -*** New command 'image-mode-wallpaper-set'. -This command sets the desktop background to the current image. It is -bound to 'W' by default. - -+++ -*** 'image-transform-fit-to-{height,width}' are now obsolete. -Use the new command 'image-transform-fit-to-window' instead. -The keybinding for 'image-transform-fit-to-width' is now 's i'. - ---- -*** User option 'image-auto-resize' can now be set to 'fit-window'. -This works like 'image-transform-fit-to-window'. - ---- -*** New user option 'image-auto-resize-max-scale-percent'. -The new 'fit-window' option will never scale an image more than this -much (in percent). It is nil by default, which means no limit. - ---- -*** New user option 'image-text-based-formats'. -This controls whether or not to show a message when opening certain -image formats saying how to edit it as text. The default is to show -this message for SVG and XPM. - -+++ -*** New command 'image-transform-set-percent'. -It allows setting the image size to a percentage of its original size, -and is bound to 's p' in Image mode. - -+++ -*** 'image-transform-original' renamed to 'image-transform-reset-to-original'. -The old name was confusing, and is now an obsolete function alias. - -+++ -*** 'image-transform-reset' renamed to 'image-transform-reset-to-initial'. -The old name was confusing, and is now an obsolete function alias. - -** Images - -+++ -** New commands 'image-crop' and 'image-cut'. -These commands allow interactively cropping/cutting the image at -point. The commands are bound to keys 'i c' and 'i x' (respectively) -in the local keymap over images. They rely on external programs, by -default "convert" from ImageMagick, to do the actual cropping/eliding -of the image file. - -+++ -*** New commands: 'image-flip-horizontally' and 'image-flip-vertically'. -These commands horizontally and vertically flip the image under point, -and are bound to 'i h' and 'i v', respectively. +** Diff Mode +++ -*** Users can now add special image conversion functions. -This is done via 'image-converter-add-handler'. - -** Image Dired +*** 'diff-ignore-whitespace-hunk' can now be applied to all hunks. +When called with a non-nil prefix argument, +'diff-ignore-whitespace-hunk' now iterates over all the hunks in the +current diff, regenerating them without whitespace changes. +++ -*** 'image-dired-image-mode' is now based on 'image-mode'. -This avoids converting images in the background, and makes Image-Dired -noticeably faster. New keybindings from 'image-mode' are now -available in the "*image-dired-display-image*" buffer; press '?' or -'h' in that buffer to see the full list. - ---- -*** Navigation and marking commands now work in image display buffer. -The following new bindings have been added: -- 'n', 'SPC' => 'image-dired-display-next' -- 'p', 'DEL' => 'image-dired-display-previous' -- 'm' => 'image-dired-mark-thumb-original-file' -- 'd' => 'image-dired-flag-thumb-original-file' -- 'u' => 'image-dired-unmark-thumb-original-file' - ---- -*** New command 'image-dired-unmark-all-marks'. -It removes all marks from all files in the thumbnail and the -associated Dired buffer, and is bound to 'U' in the thumbnail and -display buffer. - ---- -*** New command 'image-dired-do-flagged-delete'. -It deletes all flagged files, and is bound to 'x' in the thumbnail -buffer. It replaces the command 'image-dired-delete-marked', which is -now an obsolete alias. +*** New user option 'diff-ignore-whitespace-switches'. +This allows changing which type of whitespace changes are ignored when +regenerating hunks with 'diff-ignore-whitespace-hunk'. Defaults to +the previously hard-coded "-b". ---- -*** New command 'image-dired-copy-filename-as-kill'. -It copies the name of the marked or current image to the kill ring, -and is bound to 'w' in the thumbnail buffer. - ---- -*** New command 'image-dired-wallpaper-set'. -This command sets the desktop background to the image at point in the -thumbnail buffer. It is bound to 'W' by default. - ---- -*** 'image-dired-slideshow-start' is now bound to 'S'. -It is bound in both the thumbnail and display buffer, and no longer -prompts for a timeout; use a numerical prefix (e.g. 'C-u 8 S') to set -the timeout. - ---- -*** New user option 'image-dired-marking-shows-next'. -If this option is non-nil (the default), marking, unmarking or -flagging an image in either the thumbnail or display buffer shows the -next image. - ---- -*** New face 'image-dired-thumb-flagged'. -If 'image-dired-thumb-mark' is non-nil (the default), this face is -used for images that are flagged for deletion in the Dired buffer -associated with Image-Dired. - ---- -*** Image information is now shown in the header line of the thumbnail buffer. -This replaces the message that most navigation commands in the -thumbnail buffer used to show at the bottom of the screen. - ---- -*** New specifiers for 'image-dired-display-properties-format'. -This is used to format the new header line. The new specifiers are: -"%d" for the name of the directory that the file is in, "%n" for -file's number in the thumbnail buffer, and "%s" for the file size. - -The default format has been updated to use this. If you prefer the -old format, add this to your Init file: - - (setopt image-dired-display-properties-format "%b: %f (%t): %c") - ---- -*** New faces for the header line of the thumbnail buffer. -These faces correspond to different parts of the header line, as -specified in 'image-dired-display-properties-format': -- 'image-dired-thumb-header-directory-name' -- 'image-dired-thumb-header-file-name' -- 'image-dired-thumb-header-file-size' -- 'image-dired-thumb-header-image-count' - ---- -*** PDF support. -Image-Dired now displays thumbnails for PDF files. Type 'RET' on a -PDF file in the thumbnail buffer to visit the corresponding PDF. - ---- -*** Support GraphicsMagick command line tools. -Support for the GraphicsMagick command line tool ("gm") has been -added, and is used when it is available instead of ImageMagick. +** Buffer Selection --- -*** 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. +*** New user option 'bs-default-action-list'. +You can now configure how to display the "*buffer-selection*" buffer +using this new option. (Or set 'display-buffer-alist' directly.) ---- -*** Reduce dependency on external "exiftool" program. -The 'image-dired-copy-with-exif-file-name' command no longer requires -an external "exiftool" program to be available. The user options -'image-dired-cmd-read-exif-data-program' and -'image-dired-cmd-read-exif-data-options' are now obsolete. - ---- -*** 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. - ---- -*** The 'image-dired-slideshow-start' command no longer prompts. -It no longer inconveniently prompts for a number of images and a -delay: it runs indefinitely, but stops automatically on any command. -You can set the delay with a prefix argument, or a negative prefix -argument to prompt for a delay. Customize the user option -'image-dired-slideshow-delay' to change the default from 5 seconds. - -+++ -*** 'image-dired-show-all-from-dir-max-files' increased to 1000. -This user option controls asking for confirmation when starting -Image-Dired in a directory with many files. Since Image-Dired creates -thumbnails in the background in recent versions, this is not as -important as it used to be. You can now also customize this option to -nil to disable this confirmation completely. - ---- -*** 'image-dired-thumb-size' increased to 128. +** Eshell +++ -*** 'image-dired-db-file' renamed to 'image-dired-tags-db-file'. - ---- -*** 'image-dired-display-image-mode' renamed to 'image-dired-image-mode'. -The corresponding keymap is now named 'image-dired-image-mode-map'. +*** New splice operator for Eshell dollar expansions. +Dollar expansions in Eshell now let you splice the elements of the +expansion in-place using '$@expr'. This makes it easier to fill lists +of arguments into a command, such as when defining aliases. For more +information, see the "(eshell) Dollars Expansion" node in the Eshell +manual. +++ -*** Some commands have been renamed to be shorter. -- 'image-dired-display-thumbnail-original-image' has been renamed to - 'image-dired-display-this'. -- 'image-dired-display-next-thumbnail-original' has been renamed to - 'image-dired-display-next'. -- 'image-dired-display-previous-thumbnail-original' has been renamed - to 'image-dired-display-previous'. -The old names are now obsolete aliases. +*** Eshell now supports negative numbers and ranges for indices. +Now, you can retrieve the last element of a list with '$my-list[-1]' +or get a sublist of elements 2 through 4 with '$my-list[2..5]'. For +more information, see the "(eshell) Dollars Expansion" node in the +Eshell manual. --- -*** 'image-dired-thumb-{height,width}' are now obsolete. -Customize 'image-dired-thumb-size' instead, which will set both the -height and width. +*** Eshell now uses 'field' properties in its output. +In particular, this means that pressing the '<home>' key moves the +point to the beginning of your input, not the beginning of the whole +line. If you want to go back to the old behavior, add something like +this to your configuration: ---- -*** HTML image gallery generation is now obsolete. -The 'image-dired-gallery-generate' command and these user options are -now obsolete: 'image-dired-gallery-thumb-image-root-url', -'image-dired-gallery-hidden-tags', 'image-dired-gallery-dir', -'image-dired-gallery-image-root-url'. + (keymap-set eshell-mode-map "<home>" #'eshell-bol-ignoring-prompt) --- -*** 'image-dired-rotate-thumbnail-{left,right}' are now obsolete. -Instead, use commands 'image-dired-refresh-thumb' to generate a new -thumbnail, or 'image-rotate' to rotate the thumbnail without updating -the thumbnail file. +*** You can now properly unload Eshell. +Calling '(unload-feature 'eshell)' no longer signals an error, and now +correctly unloads Eshell and all of its modules. +++ -*** Some commands and user options are now obsolete. -Since 'image-dired-display-image-mode' is now based on 'image-mode', -some commands and user options are no longer needed and are now obsolete: -'image-dired-cmd-create-temp-image-options', -'image-dired-cmd-create-temp-image-program', -'image-dired-display-current-image-full', -'image-dired-display-current-image-sized', -'image-dired-display-window-height-correction', -'image-dired-display-window-width-correction', -'image-dired-temp-image-file'. - -** Exif - ---- -*** New function 'exif-field'. -This is a convenience function to extract the field data from -'exif-parse-file' and 'exif-parse-buffer'. - -** Bookmarks - ---- -*** 'list-bookmarks' now includes a type column. -Types are registered via a 'bookmark-handler-type' symbol property on -the jumping function. +*** 'eshell-read-aliases-list' is now an interactive command. +After manually editing 'eshell-aliases-file', you can use this command +to load the edited aliases. +++ -*** 'bookmark-sort-flag' can now be set to 'last-modified'. -This will display bookmark list from most recently set to least -recently set. - ---- -*** When editing a bookmark annotation, 'C-c C-k' will now cancel. -It is bound to the new command 'bookmark-edit-annotation-cancel'. +*** 'rgrep' is now a builtin command. +Running 'rgrep' in Eshell now uses the Emacs grep facility instead of +calling external rgrep. ---- -*** New user option 'bookmark-fringe-mark'. -This option controls the bitmap used to indicate bookmarks in the -fringe (or nil to disable showing this marker). - -** Xwidget - ---- -*** New user option 'xwidget-webkit-buffer-name-format'. -This option controls how xwidget-webkit buffers are named. - ---- -*** New user option 'xwidget-webkit-cookie-file'. -This option controls whether the xwidget-webkit buffers save cookies -set by web pages, and if so, in which file to save them. +** Shell Mode +++ -*** New minor mode 'xwidget-webkit-edit-mode'. -When this mode is enabled, self-inserting characters and other common -web browser shortcut keys are redefined to send themselves to the -WebKit widget. +*** New user option 'shell-get-old-input-include-continuation-lines'. +When this user option is non-nil, 'shell-get-old-input' ('C-RET') +includes multiple shell "\" continuation lines from command output. +Default is nil. -+++ -*** New minor mode 'xwidget-webkit-isearch-mode'. -This mode acts similarly to incremental search, and allows searching -the contents of a WebKit widget. In xwidget-webkit mode, it is bound -to 'C-s' and 'C-r'. +** Prog Mode +++ -*** New command 'xwidget-webkit-browse-history'. -This command displays a buffer containing the page load history of -the current WebKit widget, and allows you to navigate it. - ---- -*** On X, the WebKit inspector is now available inside xwidgets. -To access the inspector, right click on the widget and select "Inspect -Element". - ---- -*** "Open in New Window" in a WebKit widget's context menu now works. -The newly created buffer will be displayed via 'display-buffer', which -can be customized through the usual mechanism of 'display-buffer-alist' -and friends. +*** New command 'prog-fill-reindent-defun'. +This command either fills a single paragraph in a defun, such as a +docstring, or a comment, or (re)indents the surrounding defun if +point is not in a comment or a string. It is by default bound to +'M-q' in 'prog-mode' and all its descendants. ** Tramp +++ -*** New connection methods "docker", "podman" and "kubernetes". -They allow accessing containers provided by Docker and similar -programs. - ---- -*** Tramp supports abbreviating remote home directories now. -When calling 'abbreviate-file-name' on a Tramp file name, the result -will abbreviate the user's home directory, for example by abbreviating -"/ssh:user@host:/home/user" to "/ssh:user@host:~". +*** New connection method "toolbox". +This allows accessing system containers provided by Toolbox. +++ -*** New user option 'tramp-use-scp-direct-remote-copying'. -When set to non-nil, Tramp does not copy files between two remote -hosts via a local copy in its temporary directory, but lets the 'scp' -command do this job. +*** Rename 'tramp-use-ssh-controlmaster-options' to 'tramp-use-connection-share. +The old name still exists as defvaralias. This user option controls +now connection sharing for both ssh-based and plink-based methods. It +allows the values t, nil, and 'suppress'. The latter suppresses +also "ControlMaster" settings in the user's "~/.ssh/config" file, +or connection share configuration in PuTTY sessions, respectively. -+++ -*** Proper password prompts for methods "doas", "sudo" and "sudoedit". -The password prompts for these methods reflect now the credentials of -the user requesting such a connection, and not of the user who is the -target. This has always been needed, just the password prompt and the -related 'auth-sources' entry were wrong. +** EWW +++ -*** New user option 'tramp-completion-use-cache'. -During user and host name completion in the minibuffer, results from -Tramp's connection cache are taken into account. This can be disabled -by setting the user option 'tramp-completion-use-cache' to nil. - -** Browse URL +*** 'eww-open-file' can now display the file in a new buffer. +By default, the command reuses the "*eww*" buffer, but if called with +the new argument NEW-BUFFER non-nil, it will use a new buffer instead. +Interactively, invoke 'eww-open-file' with a prefix argument to +activate this behavior. ---- -*** New user option 'browse-url-default-scheme'. -This user option decides which URL scheme that 'browse-url' and -related functions will use by default. For example, you could -customize this to "https" to always prefer HTTPS URLs. - ---- -*** New user option 'browse-url-irc-function'. -This option specifies a function for opening "irc://" links. It -defaults to the new function 'browse-url-irc'. - ---- -*** New function 'browse-url-irc'. -This multipurpose autoloaded function can be used for opening "irc://" -and "ircs://" URLS by any caller that passes a URL string as an initial -arg. - ---- -*** Support for the Netscape web browser has been removed. -This support has been obsolete since Emacs 25.1. The final version of -the Netscape web browser was released in February, 2008. - ---- -*** Support for the Galeon web browser has been removed. -This support has been obsolete since Emacs 25.1. The final version of -the Galeon web browser was released in September, 2008. - ---- -*** Support for the Mozilla web browser is now obsolete. -Note that this historical web browser is different from Mozilla -Firefox; it is its predecessor. - -** Python Mode +** go-ts-mode +++ -*** Project shells and a new user option 'python-shell-dedicated'. -When called with a prefix argument, 'run-python' now offers the choice -of creating a shell dedicated to the current project. This shell runs -in the project root directory and is shared among all project buffers. +*** New command 'go-ts-mode-docstring'. +This command adds a docstring comment to the current defun. If a +comment already exists, point is only moved to the comment. It is +bound to 'C-c C-d' in 'go-ts-mode'. -Without a prefix argument, the kind of shell (buffer-dedicated, -project-dedicated or global) is specified by the new -'python-shell-dedicated' user option. - -** Ruby Mode - ---- -*** New user option 'ruby-toggle-block-space-before-parameters'. - ---- -*** Support for endless methods. - ---- -*** New user options that determine indentation logic. -'ruby-method-params-indent', 'ruby-block-indent', -'ruby-after-operator-indent', 'ruby-method-call-indent', -'ruby-parenless-call-arguments-indent'. See the docstrings for -explanations and examples. - -** Eshell - -+++ -*** New feature to easily bypass Eshell's own pipelining. -Prefixing '|', '<' or '>' with an asterisk, i.e. '*|', '*<' or '*>', -will cause the whole command to be passed to the operating system -shell. This is particularly useful to bypass Eshell's own pipelining -support for pipelines which will move a lot of data. See section -"Running Shell Pipelines Natively" in the Eshell manual, node -"(eshell) Pipelines". - -+++ -*** New module to help supplying absolute file names to remote commands. -After enabling the new 'eshell-elecslash' module, typing a forward -slash as the first character of a command line argument will -automatically insert the Tramp prefix. The automatic insertion -applies only when 'default-directory' is remote and the command is a -Lisp function. This frees you from having to keep track of whether -commands are Lisp function or external when supplying absolute file -name arguments. See the "(eshell) Electric forward slash" node in the -Eshell manual for details. - -+++ -*** Improved support for redirection operators in Eshell. -Eshell now supports a wider variety of redirection operators. For -example, you can now redirect both stdout and stderr via '&>' or -duplicate one output handle to another via 'NEW-FD>&OLD-FD'. For more -information, see the "(eshell) Redirection" node in the Eshell manual. - -+++ -*** New eshell built-in command 'doas'. -The privilege-escalation program 'doas' has been added to the existing -'su' and 'sudo' commands from the 'eshell-tramp' module. The external -command may still be accessed by using '*doas'. - -+++ -*** Double-quoting an Eshell expansion now treats the result as a single string. -If an Eshell expansion like '$FOO' is surrounded by double quotes, the -result will always be a single string, no matter the type that would -otherwise be returned. - -+++ -*** Concatenating Eshell expansions now works more similarly to other shells. -When concatenating an Eshell expansion that returns a list, "adjacent" -elements of each operand are now concatenated together, -e.g. '$(list "a" "b")c' returns '("a" "bc")'. See the "(eshell) -Expansion" node in the Eshell manual for more details. - -+++ -*** Eshell subcommands with multiline numeric output return lists of numbers. -If every line of the output of an Eshell subcommand like '${COMMAND}' -is numeric, the result will be a list of numbers (or a single number -if only one line of output). Previously, this only converted numbers -when there was a single line of output. - ---- -*** Built-in Eshell commands now follow Posix/GNU argument syntax conventions. -Built-in commands in Eshell now accept command-line options with -values passed as a single token, such as '-oVALUE' or -'--option=VALUE'. New commands can take advantage of this with the -'eshell-eval-using-options' macro. See "Defining new built-in -commands" in the "(eshell) Built-ins" node of the Eshell manual. - ---- -*** Eshell globs ending with "/" now match only directories. -Additionally, globs ending with "**/" or "***/" no longer raise an -error, and now expand to all directories recursively (following -symlinks in the latter case). +** Man-mode +++ -*** Lisp forms in Eshell now treat a nil result as a failed exit status. -When executing a command that looks like '(lisp form)' and returns -nil, Eshell will set the exit status (available in the '$?' -variable) to 2. This allows commands like that to be used in -conditionals. To change this behavior, customize the new -'eshell-lisp-form-nil-is-failure' user option. - -** Shell +*** New user option 'Man-prefer-synchronous-call'. +When this is non-nil, call the 'man' program synchronously rather than +asynchronously (which is the default behavior). ---- -*** New user option 'shell-kill-buffer-on-exit'. -Enabling this will automatically kill a "*shell*" buffer as soon as -the shell session terminates. +** DocView --- -*** New minor mode 'shell-highlight-undef-mode'. -Customize 'shell-highlight-undef-enable' to t if you want to enable -this minor mode in "*shell*" buffers. It will highlight undefined -commands with a warning face as you type. +*** New face 'doc-view-svg-face'. +This replaces 'doc-view-svg-foreground' and 'doc-view-svg-background'. -** Calc +** Shortdoc +++ -*** New user option 'calc-kill-line-numbering'. -Set it to nil to exclude line numbering from kills and copies. - -** Hierarchy +*** New function 'shortdoc-function-examples'. +This function returns examples of use of a given Emacs Lisp function +from the available shortdoc information. +++ -*** Tree Display can delay computation of children. -'hierarchy-add-tree' and 'hierarchy-add-trees' have an optional -argument which allows tree-widget display to be activated and computed -only when the user expands the node. - -** Proced - ---- -*** proced.el shows system processes of remote hosts. -When 'default-directory' is remote, and 'proced' is invoked with a -negative argument like 'C-u - proced', the system processes of that -remote host are shown. Alternatively, the user option -'proced-show-remote-processes' can be set to non-nil. -'proced-signal-function' has been marked obsolete. - ---- -*** Proced can now optionally show process details in color. -New user option 'proced-enable-color-flag' enables coloring of Proced -buffers. This option is disabled by default; customize it to a -non-nil value to enable colors. - -** Miscellaneous +*** New function 'shortdoc-help-fns-examples-function'. +This function inserts into the current buffer examples of use of a +given Emacs Lisp function, which it gleans from the shortdoc +information. If you want 'describe-function' ('C-h f') to insert +examples of using the function into regular "*Help*" buffers, add the +following to your init file: ---- -*** New user option 'webjump-use-internal-browser'. -When non-nil, WebJump will use an internal browser to open web pages, -instead of the default external browser. + (add-hook 'help-fns-describe-function-functions + #'shortdoc-help-fns-examples-function) -+++ -*** New user option 'font-lock-ignore'. -This option provides a mechanism to selectively disable font-lock -keyword-driven fontifications. +** Package --- -*** New user option 'auto-save-visited-predicate'. -This user option is a predicate function which is called by -'auto-save-visited-mode' to decide whether or not to save a buffer. -You can use it to automatically save only specific buffers, for -example buffers using a particular mode or in some directory. +*** New user option 'package-vc-register-as-project'. +When non-nil, it will automatically register every package as a +project, that you can quickly select using 'project-switch-project' +('C-x p p'). ---- -*** New user option 'remote-file-name-inhibit-auto-save-visited'. -If this user option is non-nil, 'auto-save-visited-mode' will not -auto-save remote buffers. The default is nil. +** Flymake +++ -*** New package vtable.el for formatting tabular data. -This package allows formatting data using variable-pitch fonts. -The resulting tables can display text in variable pitch fonts, text -using fonts of different sizes, and images. See the "(vtable) Top" -manual for more details. - ---- -*** New minor mode 'elide-head-mode'. -Enabling this minor mode turns on hiding header material, like -'elide-head' does; disabling it shows the header. The commands -'elide-head' and 'elide-head-show' are now obsolete. - -*** New package ansi-osc.el. -Support for OSC ("Operating System Command") escape sequences has been -extracted from comint.el in order to provide interpretation of OSC -sequences in compilation buffers. - -Adding the new function 'ansi-osc-compilation-filter' to -'compilation-filter-hook' enables interpretation of OSC escape -sequences in compilation buffers. By default, all sequences are -filtered out. - -The list of handlers (already covering OSC 7 and 8) has been extended -with a handler for OSC 2, the command to set a window title. - ---- -*** 'recentf-mode' now uses abbreviated file names by default. -This means that e.g. "/home/foo/bar" is now displayed as "~/bar". -Customize the user option 'recentf-filename-handlers' to nil to get -back the old behavior. - ---- -*** New command 'recentf-open'. -This command prompts for a recently opened file in the minibuffer, and -visits it. - ---- -*** 'ffap-machine-at-point' no longer pings hosts by default. -It will now simply look at a hostname to determine if it is valid, -instead of also trying to ping it. Customize the user option -'ffap-machine-p-known' to 'ping' to get the old behavior back. - ---- -*** The 'run-dig' command is now obsolete; use 'dig' instead. - ---- -*** Some 'bib-mode' commands and variables have been renamed. -To respect Emacs naming conventions, the variable 'unread-bib-file' -has been renamed to 'bib-unread-file'. The following commands have -also been renamed: - 'addbib' to 'bib-add' - 'return-key-bib' to 'bib-return-key' - 'mark-bib' to 'bib-mark' - 'unread-bib' to 'bib-unread' - ---- -*** 'outlineify-sticky' command is renamed to 'allout-outlinify-sticky'. -The old name is still available as an obsolete function alias. - ---- -*** The url-irc library now understands "ircs://" links. - ---- -*** New command 'world-clock-copy-time-as-kill' for 'world-clock-mode'. -It copies the current line into the kill ring. - ---- -*** 'edit-abbrevs' now uses font-locking. -The new face 'abbrev-table-name' is used to display the abbrev table -name. - ---- -*** New key binding 'O' in "*Buffer List*". -This key is now bound to 'Buffer-menu-view-other-window', which will -view this line's buffer in View mode in another window. - -** Scheme Mode - ---- -*** Auto-detection of Scheme library files. -Emacs now automatically enables the Scheme mode when opening R6RS -Scheme Library Source (".sls") files and R7RS Scheme Library -Definition (".sld") files. - ---- -*** Imenu members for R6RS and R7RS library members. -Imenu now lists the members directly nested in R6RS Scheme libraries -('library') and R7RS libraries ('define-library'). +*** New user option 'flymake-show-diagnostics-at-end-of-line'. +When non-nil, Flymake shows summarized descriptions of diagnostics at +the end of the line. Depending on your preference, this can either be +distracting and easily confused with actual code, or a significant +early aid that relieves you from moving the buffer or reaching for the +mouse to consult an error message. -* New Modes and Packages in Emacs 29.1 +* New Modes and Packages in Emacs 30.1 -+++ -** Eglot: Emacs Client for the Language Server Protocol. -Emacs now comes with the Eglot package, which enhances various Emacs -features, such as completion, documentation, error detection, etc., -based on data provided by language servers using the Language Server -Protocol (LSP). See the new Info manual "(eglot) Top" for more. Also -see "etc/EGLOT-NEWS". +** New major modes based on the tree-sitter library +++ -** use-package: Declarative package configuration. -use-package is now shipped with Emacs. It provides the 'use-package' -macro, which allows you to isolate package configuration in your init -file in a way that is declarative, tidy, and performance-oriented. -See the new Info manual "(use-package) Top" for more. - ---- -** New package 'wallpaper'. -This package provides the command 'wallpaper-set', which sets the -desktop background image. Depending on the system and the desktop, -this may require an external program (such as "swaybg", "gm", -"display" or "xloadimage"). If so, a suitable command should be -detected automatically in most cases. It can also be customized -manually if needed, using the new user options 'wallpaper-command' and -'wallpaper-command-args'. - -+++ -** New package 'oclosure'. -This allows the creation of OClosures, which are "functions with -slots" or "function objects" that expose additional information about -themselves. Use the new macros 'oclosure-define' and -'oclosure-lambda' to create OClosures. See the "(elisp) OClosures" -node for more information. - -+++ -*** New generic function 'oclosure-interactive-form'. -Used by 'interactive-form' when called on an OClosure. -This allows specific OClosure types to compute their interactive specs -on demand rather than precompute them when created. +*** New major mode 'html-ts-mode'. +An optional major mode based on the tree-sitter library for editing +HTML files. --- -** New theme 'leuven-dark'. -This is a dark version of the 'leuven' theme. - -+++ -** 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. +*** New major mode 'heex-ts-mode'. +A major mode based on the tree-sitter library for editing HEEx files. --- -** New major mode 'js-json-mode'. -This is a lightweight variant of 'js-mode' that is used by default -when visiting JSON files. - -+++ -** New major mode 'csharp-mode'. -A major mode based on CC Mode for editing programs in the C# language. -This mode is auto-enabled for files with the ".cs" extension. - -+++ -** New major modes based on the tree-sitter library. -These new major modes are available if Emacs was built with the -tree-sitter library. They provide support for font-locking, -indentation, and navigation by defuns based on parsing the buffer text -by a tree-sitter parser. Some major modes also offer support for -Imenu and 'which-func'. - -The new modes based on tree-sitter are for now entirely optional, and -you must turn them on manually, or load them in your init file, or -customize 'auto-mode-alist' to turn them on automatically for certain -files. You can also customize 'major-mode-remap-alist' to -automatically turn on some tree-sitter based modes for the same files -for which a "built-in" mode would be turned on. For example: - - (add-to-list 'major-mode-remap-alist '(ruby-mode . ruby-ts-mode)) - -If you try these modes and don't like them, you can go back to the -"built-in" modes by restarting Emacs. (If you use desktop.el to save -and restore Emacs sessions, make sure no buffer under these modes is -recorded in the desktop file, before restarting.) But please tell us -why you didn't like the tree-sitter based modes, so that we could try -improving them. - -Each major mode based on tree-sitter needs a language grammar library, -usually named "libtree-sitter-LANG.so" ("libtree-sitter-LANG.dll" on -MS-Windows), where LANG is the corresponding language name. Emacs -looks for these libraries in the following places: - - . in the directories mentioned in the list 'treesit-extra-load-path' - . in the "tree-sitter" subdirectory of your 'user-emacs-directory' - (by default, "~/.emacs.d/tree-sitter") - . in the standard system directories where other shared libraries are - usually installed - -We recommend to install these libraries in one of the standard system -locations (the last place in the above list). - -If a language grammar library required by a mode is not found in any -of the above places, the mode will display a warning when you try to -turn it on. - -+++ -*** New major mode 'typescript-ts-mode'. -A major mode based on the tree-sitter library for editing programs -in the TypeScript language. - -+++ -*** New major mode 'tsx-ts-mode'. -A major mode based on the tree-sitter library for editing programs -in the TypeScript language, with support for TSX. - -+++ -*** New major mode 'c-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the C language. - -+++ -*** New major mode 'c++-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the C++ language. - -+++ -*** New command 'c-or-c++-ts-mode'. -A command that automatically guesses the language of a header file, -and enables either 'c-ts-mode' or 'c++-ts-mode' accordingly. - -+++ -*** New major mode 'java-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the Java language. - -+++ -*** New major mode 'python-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the Python language. - -+++ -*** New major mode 'css-ts-mode'. -An optional major mode based on the tree-sitter library for editing -CSS (Cascading Style Sheets). - -+++ -*** New major mode 'json-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the JSON language. - -+++ -*** New major mode 'csharp-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the C# language. - -+++ -*** New major mode 'bash-ts-mode'. -Am optional major mode based on the tree-sitter library for editing -Bash shell scripts. - -+++ -*** New major mode 'dockerfile-ts-mode'. -A major mode based on the tree-sitter library for editing -Dockerfiles. - -+++ -*** New major mode 'cmake-ts-mode'. -A major mode based on the tree-sitter library for editing CMake files. - -+++ -*** New major mode 'toml-ts-mode'. -An optional major mode based on the tree-sitter library for editing -files written in TOML, a format for writing configuration files. - -+++ -*** New major mode 'go-ts-mode'. -A major mode based on the tree-sitter library for editing programs in -the Go language. - -+++ -*** New major mode 'go-mod-ts-mode'. -A major mode based on the tree-sitter library for editing "go.mod" +*** New major mode 'elixir-ts-mode'. +A major mode based on the tree-sitter library for editing Elixir files. -+++ -*** New major mode 'yaml-ts-mode'. -A major mode based on the tree-sitter library for editing files -written in YAML. - -+++ -*** New major mode 'rust-ts-mode'. -A major mode based on the tree-sitter library for editing programs in -the Rust language. - --- -*** New major mode 'ruby-ts-mode'. -An optional major mode based on the tree-sitter library for editing -programs in the Ruby language. +** The highly accessible Modus themes collection has six items. +The 'modus-operandi' and 'modus-vivendi' are the main themes that have +been part of Emacs since version 28. The former is light, the latter +dark. In addition to these, we now have 'modus-operandi-tinted' and +'modus-vivendi-tinted' for easier legibility, as well as +'modus-operandi-deuteranopia' and 'modus-vivendi-deuteranopia' to +cover the needs of users with red-green color deficiency. The Info +manual "(modus-themes) Top" describes the details and showcases all +their customization options. -* Incompatible Lisp Changes in Emacs 29.1 - -+++ -** The implementation of overlays has changed. -Emacs now uses an implementation of overlays that is much more -efficient than the original one, and should speed up all the -operations that involve overlays, especially when there are lots of -them in a buffer. - -As result of this, some minor incompatibilities in behavior could be -observed, as described below. Except those minor incompatibilities, -no other changes in behavior of overlays should be visible on the Lisp -or user level, with the exception of better performance and the order -of overlays returned by functions that don't promise any particular -order. - ---- -*** The function 'overlay-recenter' is now a no-op. -This function does nothing, and in particular has no effect on the -value returned by 'overlay-lists'. The purpose of 'overlay-recenter' -was to allow more efficient lookup of overlays around a certain buffer -position; however with the new implementation the lookup of overlays -is efficient regardless of their position, and there's no longer any -need to "optimize" the lookup, nor any notion of a "center" of the -overlays. - ---- -*** The function 'overlay-lists' returns one unified list of overlays. -This function used to return a cons of two lists, one with overlays -before the "center" position, the other after that "center". It now -returns a list whose 'car' is the list of all the buffer overlays, and -whose 'cdr' is always nil. - -+++ -** 'format-prompt' now uses 'substitute-command-keys'. -This means that both the prompt and 'minibuffer-default-prompt-format' -will have key definitions and single quotes handled specially. - -+++ -** New function 'substitute-quotes'. -This function works like 'substitute-command-keys' but only -substitutes quote characters. - ---- -** 'find-image' now uses 'create-image'. -This means that images found through 'find-image' also have -auto-scaling applied. (This only makes a difference on HiDPI -displays.) - -+++ -** Changes in how "raw" in-memory XBM images are specified. -Some years back Emacs gained the ability to scale images, and you -could then specify ':width' and ':height' when using 'create-image' on all -image types -- except XBM images, because this format already used the -':width' and ':height' arguments to specify the width/height of the "raw" -in-memory format. This meant that if you used these specifications -on, for instance, XBM files, Emacs would refuse to display them. This -has been changed, and ':width'/':height' now works as with all other image -formats, and the way to specify the width/height of the "raw" -in-memory format is now by using ':data-width' and ':data-height'. - -+++ -** "loaddefs.el" generation has been reimplemented. -The various "loaddefs.el" files in the Emacs tree (which contain -information about autoloads, built-in packages and package prefixes) -used to be generated by functions in autoloads.el. These are now -generated by loaddefs-gen.el instead. This leads to functionally -equivalent "loaddefs.el" files, but they do not use exactly the same -syntax, so using 'M-x update-file-autoloads' no longer works. (This -didn't work well in most files in the past, either, but it will now -signal an error in any file.) - -In addition, files are scanned in a slightly different way. -Previously, ';;;###' specs inside a top-level form (i.e., something -like '(when ... ;;;### ...)' would be ignored. They are now parsed as -usual. - ---- -** Themes have special autoload cookies. -All built-in themes are scraped for ';;;###theme-autoload' cookies -that are loaded along with the regular auto-loaded code. - -+++ -** 'buffer-modified-p' has been extended. -This function was previously documented to return only nil or t. This -has been changed to nil/'autosaved'/non-nil. The new 'autosaved' -value means that the buffer is modified, but that it hasn't been -modified since the time of last auto-save. - ---- -** 'with-silent-modifications' also restores buffer autosave status. -'with-silent-modifications' is a macro meant to be used by the font -locking machinery to allow applying text properties without changing -the modification status of the buffer. However, it didn't restore the -buffer autosave status, so applying font locking to a modified buffer -that had already been auto-saved would trigger another auto-saving. -This is no longer the case. - ---- -** 'prin1' doesn't always escape "." and "?" in symbols any more. -Previously, symbols like 'foo.bar' would be printed by 'prin1' as -"foo\.bar". This now prints as "foo.bar" instead. The Emacs Lisp -reader interprets these strings as referring to the same symbol, so -this is virtually always backwards-compatible, but there may -theoretically be code out there that expects a specific printed -representation. - -The same is the case with the "?" character: The 'foo?' symbol is now -printed as "foo?" instead of "foo\?". - -If the "." and "?" characters are the first character in the symbol, -they will still be escaped, so the '.foo' symbol is still printed as -"\.foo" and the '?bar' symbol is still printed as "\?bar". - -+++ -** Remapping 'mode-line' face no longer works as expected. -'mode-line' is now the parent face of the new 'mode-line-active' face, -and remapping parent of basic faces does not work reliably. -Instead of remapping 'mode-line', you have to remap 'mode-line-active'. - -+++ -** 'make-process' has been extended to support ptys when ':stderr' is set. -Previously, setting ':stderr' to a non-nil value would force the -process's connection to use pipes. Now, Emacs will use a pty for -stdin and stdout if requested no matter the value of ':stderr'. - ---- -** User option 'mail-source-ignore-errors' is now obsolete. -The whole mechanism for prompting users to continue in case of -mail-source errors has been removed, so this option is no longer -needed. - -** Fonts - ---- -*** Emacs now supports 'medium' fonts. -Emacs previously didn't distinguish between the 'regular'/'normal' -weight and the 'medium' weight, but it now also supports the (heavier) -'medium' weight. However, this means that if you specify a weight of -'normal' and the font doesn't have this weight, Emacs won't find the -font spec. In these cases, replacing ":weight 'normal" with ":weight -'medium" should fix the issue. - ---- -** Keymap descriptions by Help commands 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, these -functions output "[closure]"/"[lambda]". You can get back the old -behavior of including prefix commands by customizing the new option -'describe-bindings-show-prefix-commands' to a non-nil value. - ---- -** '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.) - ---- -** Functions in 'tramp-foreign-file-name-handler-alist' have changed. -Functions to determine which Tramp file name handler to use are now -passed a file name in dissected form (via 'tramp-dissect-file-name') -instead of in string form. - ---- -** '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. +* Incompatible Lisp Changes in Emacs 30.1 --- -** 'gnus-define-keys' is now obsolete. -Use 'define-keymap' instead. +** The escape sequence '\x' not followed by hex digits is now an error. +Previously, '\x' without at least one hex digit denoted character code +zero (NUL) but as this was neither intended nor documented or even +known by anyone, it is now treated as an error by the Lisp reader. --- -** 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. +** Connection-local variables are applied in buffers visiting a remote file. +This overrides possible directory-local or file-local variables with +the same name. --- -** The function 'image-dired-get-exif-data' is now obsolete. -Use 'exif-parse-file' and 'exif-field' instead. +** User option 'tramp-completion-reread-directory-timeout' has been removed. +This user option has been obsoleted in Emacs 27, use +'remote-file-name-inhibit-cache' instead. --- -** 'insert-directory' alternatives should not change the free disk space line. -This change is now applied in 'dired-insert-directory'. - ---- -** 'compilation-last-buffer' is (finally) declared obsolete. -It has been obsolete since Emacs 22.1, actually. - ---- -** Calling 'lsh' now elicits a byte-compiler warning. -'lsh' behaves in somewhat surprising and platform-dependent ways for -negative arguments, and is generally slower than 'ash', which should be -used instead. This warning can be suppressed by surrounding calls to -'lsh' with the construct '(with-suppressed-warnings ((suspicious lsh)) ...)', -but switching to 'ash' is generally much preferable. - ---- -** Some functions and variables obsolete since Emacs 24 have been removed: -'Buffer-menu-buffer+size-width', 'Electric-buffer-menu-mode', -'Info-edit-map', 'allout-abbreviate-flattened-numbering', -'allout-exposure-change-hook', 'allout-mode-deactivate-hook', -'allout-structure-added-hook', 'allout-structure-deleted-hook', -'allout-structure-shifted-hook', 'ansi-color-unfontify-region', -'archive-extract-hooks', 'auth-source-forget-user-or-password', -'auth-source-hide-passwords', 'auth-source-user-or-password', -'automatic-hscrolling', 'automount-dir-prefix', 'bibtex-complete', -'bibtex-entry-field-alist', 'buffer-has-markers-at', -'buffer-substring-filters', 'byte-compile-disable-print-circle', -'c-prepare-bug-report-hooks', 'cfengine-mode-abbrevs', -'change-log-acknowledgement', 'chart-map', -'checkdoc-comment-style-hooks', 'comint--unquote&expand-filename', -'comint-dynamic-complete', 'comint-dynamic-complete-as-filename', -'comint-dynamic-simple-complete', 'comint-unquote-filename', -'command-history-map', 'compilation-parse-errors-function', -'completion-annotate-function', 'condition-case-no-debug', -'count-lines-region', 'crisp-mode-modeline-string', -'custom-print-functions', 'cvs-string-prefix-p', 'data-debug-map', -'deferred-action-function', 'deferred-action-list', -'dired-pop-to-buffer', 'dired-shrink-to-fit', -'dired-sort-set-modeline', 'dired-x-submit-report', -'display-buffer-function', -'ediff-choose-window-setup-function-automatically', -'eieio-defgeneric', 'eieio-defmethod', 'emacs-lock-from-exiting', -'erc-complete-word', 'erc-dcc-chat-filter-hook', -'eshell-add-to-window-buffer-names', 'eshell-cmpl-suffix-list', -'eshell-for', 'eshell-remove-from-window-buffer-names', -'eshell-status-in-modeline', 'filesets-cache-fill-content-hooks', -'font-list-limit', 'font-lock-maximum-size', -'font-lock-reference-face', 'gnus-carpal', -'gnus-debug-exclude-variables', 'gnus-debug-files', -'gnus-local-domain', 'gnus-outgoing-message-group', -'gnus-registry-user-format-function-M', 'gnus-secondary-servers', -'gnus-subscribe-newsgroup-hooks', 'gud-inhibit-global-bindings', -'hangul-input-method-inactivate', 'hfy-post-html-hooks', -'image-extension-data', 'image-library-alist', -'inactivate-current-input-method-function', 'inactivate-input-method', -'inhibit-first-line-modes-regexps', -'inhibit-first-line-modes-suffixes', 'input-method-inactivate-hook', -'intdos', 'javascript-generic-mode', 'javascript-generic-mode-hook', -'latex-string-prefix-p', 'macro-declaration-function' (function), -'macro-declaration-function' (variable), 'mail-complete', -'mail-complete-function', 'mail-mailer-swallows-blank-line', -'mail-sent-via', 'make-register', 'makefile-complete', -'menu-bar-kill-ring-save', 'meta-complete-symbol', 'meta-mode-map', -'mh-kill-folder-suppress-prompt-hooks', -'minibuffer-completing-symbol', -'minibuffer-local-filename-must-match-map', 'mode25', 'mode4350', -'mpc-string-prefix-p', 'msb-after-load-hooks', -'nndiary-request-accept-article-hooks', -'nndiary-request-create-group-hooks', -'nndiary-request-update-info-hooks', 'nnimap-split-rule', -'nntp-authinfo-file', 'ns-alternatives-map', -'ns-store-cut-buffer-internal', 'package-menu-view-commentary', -'pascal-last-completions', 'pascal-show-completions', -'pascal-toggle-completions', 'pcomplete-arg-quote-list', -'pcomplete-quote-argument', 'prolog-char-quote-workaround', -'python-buffer', 'python-guess-indent', 'python-indent', -'python-info-ppss-comment-or-string-p', 'python-info-ppss-context', -'python-info-ppss-context-type', 'python-preoutput-result', -'python-proc', 'python-send-receive', 'python-send-string', -'python-use-skeletons', 'quail-inactivate', 'quail-inactivate-hook', -'query-replace-interactive', 'rcirc-activity-hooks', -'rcirc-print-hooks', 'rcirc-receive-message-hooks', -'rcirc-sentinel-hooks', 'read-filename-at-point', 'redraw-modeline', -'reftex-index-map', 'reftex-index-phrases-map', -'reftex-select-bib-map', 'reftex-select-label-map', 'reftex-toc-map', -'register-name-alist', 'register-value', 'report-emacs-bug-info', -'report-emacs-bug-pretest-address', -'rmail-default-dont-reply-to-names', 'rmail-dont-reply-to', -'rmail-dont-reply-to-names', 'robin-inactivate', -'robin-inactivate-hook', 'rst-block-face', 'rst-comment-face', -'rst-definition-face', 'rst-directive-face', 'rst-emphasis1-face', -'rst-emphasis2-face', 'rst-external-face', 'rst-literal-face', -'rst-reference-face', 'semantic-change-hooks', -'semantic-edits-delete-change-hooks', -'semantic-edits-new-change-hooks', -'semantic-edits-reparse-change-hooks', 'semantic-grammar-map', -'semantic-grammar-syntax-table', 'semantic-lex-reset-hooks', -'semanticdb-elisp-sym-function-arglist', -'semanticdb-save-database-hooks', 'set-face-underline-p', -'set-register-value', 'sh-maybe-here-document', 'speedbar-key-map', -'speedbar-syntax-table', 'starttls-any-program-available', -'strokes-modeline-string', 'strokes-report-bug', -'term-default-bg-color', 'term-default-fg-color', -'tex-string-prefix-p', 'timeclock-modeline-display', -'timeclock-modeline-display', 'timeclock-update-modeline', -'toggle-emacs-lock', 'tooltip-use-echo-area', 'turn-on-cwarn-mode', -'turn-on-iimage-mode', 'ucs-input-inactivate', 'ucs-insert', -'url-recreate-url-attributes', 'user-variable-p', -'vc-string-prefix-p', 'vc-toggle-read-only', 'view-return-to-alist', -'view-return-to-alist-update', 'w32-default-color-map' (function), -'which-func-mode' (function), 'window-system-version', -'winner-mode-leave-hook', 'x-cut-buffer-or-selection-value'. - ---- -** Some functions and variables obsolete since Emacs 23 have been removed: -'find-emacs-lisp-shadows', 'newsticker-cache-filename', -'process-filter-multibyte-p', 'redisplay-end-trigger-functions', -'set-process-filter-multibyte', 'set-window-redisplay-end-trigger', -'unify-8859-on-decoding-mode', 'unify-8859-on-encoding-mode', -'vc-arch-command', 'window-redisplay-end-trigger', 'x-selection'. - ---- -** Some functions and variables obsolete since Emacs 21 or 22 have been removed: -'c-toggle-auto-state', 'find-file-not-found-hooks', -'ls-lisp-dired-ignore-case', 'query-replace-regexp-eval'. - -+++ -** New generic function 'function-documentation'. -It can dynamically generate a raw docstring depending on the type of a -function. Used mainly for docstrings of OClosures. - -+++ -** Base64 encoding no longer tolerates latin-1 input. -The functions 'base64-encode-string', 'base64url-encode-string', -'base64-encode-region' and 'base64url-encode-region' no longer accept -characters in the range U+0080..U+00FF as substitutes for single bytes -in the range 128..255, but signal an error for all multibyte characters. -The input must be unibyte encoded text. - -+++ -** The 'clone-indirect-buffer-hook' is now run by 'make-indirect-buffer'. -It was previously only run by 'clone-indirect-buffer' and -'clone-indirect-buffer-other-window'. Since 'make-indirect-buffer' is -called by both of these, the hook is now run by all 3 of these -functions. - ---- -** '?\' at the end of a line now signals an error. -Previously, it produced a nonsense value, -1, that was never intended. - ---- -** Some libraries obsolete since Emacs 24.1 and 24.3 have been removed: -abbrevlist.el, assoc.el, complete.el, cust-print.el, -erc-hecomplete.el, mailpost.el, mouse-sel.el, old-emacs-lock.el, -patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el. - -+++ -** Many seldom-used generalized variables have been made obsolete. -Emacs has a number of rather obscure generalized variables defined, -that, for instance, allowed you to say things like: - - (setf (point-min) 4) - -These never caught on and have been made obsolete. The form above, -for instance, is the same as saying - - (narrow-to-region 4 (point-max)) - -The following generalized variables have been made obsolete: -'buffer-file-name', 'buffer-local-value', 'buffer-modified-p', -'buffer-name', 'buffer-string', 'buffer-substring', 'current-buffer', -'current-column', 'current-global-map', 'current-input-mode', -'current-local-map', 'current-window-configuration', -'default-file-modes', 'documentation-property', 'eq', 'frame-height', -'frame-width', 'frame-visible-p', 'global-key-binding', -'local-key-binding', 'mark', 'mark-marker', 'marker-position', -'mouse-position', 'point', 'point-marker', 'point-max', 'point-min', -'read-mouse-position', 'screen-height', 'screen-width', -'selected-frame', 'selected-screen', 'selected-window', -'standard-case-table', 'syntax-table', 'visited-file-modtime', -'window-height', 'window-width', and 'x-get-secondary-selection'. +** User options 'eshell-NAME-unload-hook' are now obsolete. +These hooks were named incorrectly, and so they never actually ran +when unloading the correspending feature. Instead, you should use +hooks named after the feature name, like 'esh-mode-unload-hook'. -* Lisp Changes in Emacs 29.1 - -+++ -** Interpreted closures are "safe for space". -As was already the case for byte-compiled closures, instead of capturing -the whole current lexical environment, interpreted closures now only -capture the part of the environment that they need. -The previous behavior could occasionally lead to memory leaks or -to problems where a printed closure would not be 'read'able because -of an un'read'able value in an unrelated lexical variable. - -+++ -** New accessor function 'file-attribute-file-identifier'. -It returns the list of the inode number and device identifier -retrieved by 'file-attributes'. This value can be used to identify a -file uniquely. The device identifier can be a single number or (for -remote files) a cons of 2 numbers. - -+++ -** New macro 'while-let'. -This is like 'when-let', but repeats until a binding form is nil. - -+++ -** New function 'make-obsolete-generalized-variable'. -This can be used to mark setters used by 'setf' as obsolete, and the -byte-compiler will then warn about using them. - -+++ -** New functions 'pos-eol' and 'pos-bol'. -These are like 'line-end-position' and 'line-beginning-position' -(respectively), but ignore fields (and are more efficient). - -+++ -** New function 'compiled-function-p'. -This returns non-nil if its argument is either a built-in, or a -byte-compiled, or a natively-compiled function object, or a function -loaded from a dynamic module. - ---- -** 'deactivate-mark' can have new value 'dont-save'. -This value means that Emacs should deactivate the mark as usual, but -without setting the primary selection, if 'select-active-regions' is -enabled. - -+++ -** New 'declare' form 'interactive-args'. -This can be used to specify what forms to put into 'command-history' -when executing commands interactively. - -+++ -** The FORM argument of 'time-convert' is mandatory. -'time-convert' can still be called without it, as before, but the -compiler now emits a warning about this deprecated usage. - -+++ -** Emacs now supports user-customizable and themable icons. -These can be used for buttons in buffers and the like. See the -"(elisp) Icons" and "(emacs) Icons" nodes in the manuals for details. - -+++ -** New arguments MESSAGE and TIMEOUT of 'set-transient-map'. -MESSAGE specifies a message to display after activating the transient -map, including a special formatting spec to list available keys. -TIMEOUT is the idle time after which to deactivate the transient map. -The default timeout value can be defined by the new variable -'set-transient-map-timeout'. - -+++ -** New forms 'with-restriction' and 'without-restriction'. -These forms can be used as enhanced alternatives to the -'save-restriction' form combined with, respectively, -'narrow-to-region' and 'widen'. They also accept an optional label -argument, with which labeled narrowings can be created and lifted. -See the "(elisp) Narrowing" node for details. - -** Connection Local Variables - -+++ -*** Some connection-local variables are now user options. -The variables 'connection-local-profile-alist' and -'connection-local-criteria-alist' are now user options, in order to -make it more convenient to inspect and modify them. - -+++ -*** New function 'connection-local-update-profile-variables'. -This function allows to modify the settings of an existing -connection-local profile. - -+++ -*** New macro 'with-connection-local-application-variables'. -This macro works like 'with-connection-local-variables', but it allows -to use another application but 'tramp'. This is useful when running -code in a buffer where Tramp has already set some connection-local -variables. - -+++ -*** New macro 'setq-connection-local'. -This allows dynamically setting variable values for a particular -connection within the body of 'with-connection-local-{application-}variables'. -See the "(elisp) Connection Local Variables" node in the Lisp -Reference manual for more information. - -+++ -** 'plist-get', 'plist-put' and 'plist-member' are no longer limited to 'eq'. -These function now take an optional comparison PREDICATE argument. - -+++ -** 'read-multiple-choice' can now use long-form answers. - -+++ -** 'M-s c' in 'read-regexp' now toggles case folding. - -+++ -** 'completing-read' now allows a function as its REQUIRE-MATCH argument. -This function is called to see whether what the user has typed is a -match. This is also available from functions that call -'completing-read', like 'read-file-name'. - -+++ -** 'posn-col-row' can now give position data based on windows. -Previously, it reported data only based on the frame. - -+++ -** 'file-expand-wildcards' can now also take a regexp as PATTERN argument. - ---- -** vc-mtn (the VC backend for Monotone) has been made obsolete. - -+++ -** 'gui-set-selection' can specify different values for different data types. -If DATA is a string, then its text properties are searched for values -for each specific data type while the selection is being converted. - ---- -** New eldoc function 'elisp-eldoc-var-docstring-with-value'. -This function includes the current value of the variable in eldoc display -and can be used as a more detailed alternative to 'elisp-eldoc-var-docstring'. - -+++ -** 'save-some-buffers' can now be extended to save other things. -Traditionally, 'save-some-buffers' saved buffers, and also saved -abbrevs. This has been generalized via the -'save-some-buffers-functions' variable, and packages can now register -things to be saved. - -+++ -** New function 'string-equal-ignore-case'. -This compares strings ignoring case differences. - -+++ -** 'symbol-file' can now report natively-compiled ".eln" files. -If Emacs was built with native-compilation enabled, Lisp programs can -now call 'symbol-file' with the new optional 3rd argument non-nil to -request the name of the ".eln" file which defined a given symbol. - -+++ -** New macro 'with-memoization' provides a very primitive form of memoization. - -+++ -** 'max-char' can now report the maximum codepoint according to Unicode. -When called with a new optional argument UNICODE non-nil, 'max-char' -will now report the maximum valid codepoint defined by the Unicode -Standard. - -** Seq - -+++ -*** New function 'seq-split'. -This returns a list of sub-sequences of the specified sequence. - -+++ -*** New function 'seq-remove-at-position'. -This function returns a copy of the specified sequence where the -element at a given (zero-based) index got removed. - -+++ -*** New function 'seq-positions'. -This returns a list of the (zero-based) indices of elements matching a -given predicate in the specified sequence. - -+++ -*** New function 'seq-keep'. -This is like 'seq-map', but removes all nil results from the returned -list. - -** Themes - ---- -*** New hooks 'enable-theme-functions' and 'disable-theme-functions'. -These are run after enabling and disabling a theme, respectively. - ---- -*** 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. +* Lisp Changes in Emacs 30.1 -+++ -** New hook 'display-monitors-changed-functions'. -It is called whenever the configuration of different monitors on a -display changes. +** New variable 'inhibit-auto-fill' to temporarily prevent auto-fill. -+++ -** 'prin1' and 'prin1-to-string' now take an optional OVERRIDES argument. -This argument can be used to override values of print-related settings. +** Functions and variables to transpose sexps +++ -** New minor mode 'header-line-indent-mode'. -This is meant to be used by Lisp programs that show a header line -which should be kept aligned with the buffer contents when the user -switches 'display-line-numbers-mode' on or off, and when the width of -line-number display changes. See the "(elisp) Header Lines" node in -the Emacs Lisp Reference manual for more information. +*** New helper variable 'transpose-sexps-function'. +Emacs now can set this variable to customize the behavior of the +'transpose-sexps' function. +++ -** New global minor mode 'lost-selection-mode'. -This global minor mode makes Emacs deactivate the mark in all buffers -when the primary selection is obtained by another program. +*** New function 'transpose-sexps-default-function'. +The previous implementation is moved into its own function, to be +bound by 'transpose-sexps-function'. ---- -** On X, Emacs will try to preserve selection ownership when a frame is deleted. -This means that if you make Emacs the owner of a selection, such as by -selecting some text into the clipboard or primary selection, and then -delete the current frame, you will still be able to insert the -contents of that selection into other programs as long as another -frame is open on the same display. This behavior can be disabled by -setting the user option 'x-auto-preserve-selections' to nil. +*** New function 'treesit-transpose-sexps'. +Tree-sitter now unconditionally sets 'transpose-sexps-function' for all +tree-sitter enabled modes. This functionality utilizes the new +'transpose-sexps-function'. -+++ -** New predicate 'char-uppercase-p'. -This returns non-nil if its argument its an uppercase character. +** Functions and variables to move by program statements -** Byte Compilation +*** New variable 'forward-sentence-function'. +Major modes can now set this variable to customize the behavior of the +'forward-sentence' command. ---- -*** Byte compilation will now warn about some quoting mistakes in docstrings. -When writing code snippets that contains the "'" character (APOSTROPHE), -that quote character has to be escaped to avoid Emacs displaying it as -"’" (LEFT SINGLE QUOTATION MARK), which would make code examples like +*** New function 'forward-sentence-default-function'. +The previous implementation of 'forward-sentence' is moved into its +own function, to be bound by 'forward-sentence-function'. - (setq foo '(1 2 3)) +*** New buffer-local variable 'treesit-sentence-type-regexp'. +Similarly to 'treesit-defun-type-regexp', this variable is used to +define "sentences" in tree-sitter enabled modes. -invalid. Emacs will now warn during byte compilation if it seems -something like that, and also warn about when using RIGHT/LEFT SINGLE -QUOTATION MARK directly. In both these cases, if these characters -should really be present in the docstring, they should be quoted with -"\=". +*** New function 'treesit-forward-sentence'. +All tree-sitter enabled modes that define 'treesit-sentence-type-regexp' +now set 'forward-sentence-function' to call 'treesit-forward-sentence'. ---- -*** Byte compilation will now warn about some malformed 'defcustom' types. -It is very common to write 'defcustom' types on the form: +** Functions and variables to move by program sexps - :type '(choice (const :tag "foo" 'bar)) +*** New buffer-local variable 'treesit-sexp-type-regexp'. +Similarly to 'treesit-defun-type-regexp', this variable is used to +define "sexps" in tree-sitter enabled modes. -I.e., double-quoting the 'bar', which is almost never the correct -value. The byte compiler will now issue a warning if it encounters -these forms. +*** New function 'treesit-forward-sexp'. +Tree-sitter conditionally sets 'forward-sexp-function' for major modes +that have defined 'treesit-sexp-type-regexp' to enable sexp-related +motion commands. -+++ -** 'restore-buffer-modified-p' can now alter buffer auto-save state. -With a FLAG value of 'autosaved', it will mark the buffer as having -been auto-saved since the time of last modification. +** New or changed byte-compilation warnings --- -** New minor mode 'isearch-fold-quotes-mode'. -This sets up 'search-default-mode' so that quote characters are -char-folded into each other. It is used, by default, in "*Help*" and -"*info*" buffers. +*** Warn about empty bodies for more special forms and macros. +The compiler now warns about an empty body argument to 'when', +'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to +the existing warnings for 'let' and 'let*'. Example: -+++ -** New macro 'buffer-local-set-state'. -This is a helper macro to be used by minor modes that wish to restore -buffer-local variables back to their original states when the mode is -switched off. + (when (> x 2)) ---- -** New macro 'with-buffer-unmodified-if-unchanged'. -If the buffer is marked as unmodified, and code does modifications -that, in total, means that the buffer is identical to the buffer -before, mark the buffer as unmodified again. +This warning can be suppressed using 'with-suppressed-warnings' with +the warning name 'empty-body'. --- -** New function 'malloc-trim'. -This function allows returning unused memory back to the operating -system, and is mainly meant as a debugging tool. It is currently -available only when Emacs was built with glibc as the C library. +*** Warn about quoted error names in 'condition-case' and 'ignore-error'. +The compiler now warns about quoted condition (error) names +in 'condition-case' and 'ignore-error'. Example: ---- -** 'x-show-tip' no longer hard-codes a timeout default. -The new variable 'x-show-tooltip-timeout' allows the user to alter -this for packages that don't use 'tooltip-show', but instead call the -lower level function directly. + (condition-case nil + (/ x y) + ('arith-error "division by zero")) ---- -** New function 'current-cpu-time'. -It gives access to the CPU time used by the Emacs process, for -example for benchmarking purposes. +Quoting them adds the error name 'quote' to those handled or ignored +respectively, which was probably not intended. --- -** New function 'string-edit'. -This is meant to be used when the user has to edit a (potentially) -long string. It pops up a new buffer where you can edit the string, -and a callback is called when the user types 'C-c C-c'. - -+++ -** New function 'read-string-from-buffer'. -This is a modal version of 'string-edit', and can be used as an -alternative to 'read-string'. - -+++ -** The return value of 'clear-message-function' is not ignored anymore. -If the function returns 'dont-clear-message', then the message is not -cleared, with the assumption that the function cleared it itself. - -+++ -** The local variables section now supports defining fallback modes. -This was previously only available when using a property line (i.e., -putting the modes on the first line of a file). - -+++ -** New function 'flush-standard-output'. -This enables display of lines that don't end in a newline from -batch-based Emacs scripts. - -+++ -** New convenience function 'buttonize-region'. -This works like 'buttonize', but for a region instead of a string. +*** Warn about comparison with literal constants without defined identity. +The compiler now warns about comparisons by identity with a literal +string, cons, vector, record, function, large integer or float as this +may not match any value at all. Example: -+++ -** 'macroexp-let2*' can omit TEST argument and use single-var bindings. - -+++ -** New macro-writing macros, 'cl-with-gensyms' and 'cl-once-only'. -See the "(cl) Macro-Writing Macros" manual section for descriptions. + (eq x "hello") -+++ -** New variable 'last-event-device' and new function 'device-class'. -On X Windows, 'last-event-device' specifies the input extension device -from which the last input event originated, and 'device-class' can be -used to determine the type of an input device. +Only literals for symbols and small integers (fixnums), including +characters, are guaranteed to have a consistent (unique) identity. +This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq', +'remq' and 'delq'. -+++ -** Variable 'track-mouse' can have a new value 'drag-source'. -This means the same as 'dropping', but modifies the mouse position -list in reported motion events if there is no frame underneath the -mouse pointer. +To compare by (structural) value, use 'equal', 'member', 'assoc', +'rassoc', 'remove' or 'delete' instead. Floats and bignums can also +be compared using 'eql', '=' and 'memql'. Function literals cannot be +compared reliably at all. -+++ -** New functions for dragging items from Emacs to other programs. -The new functions 'x-begin-drag', 'dnd-begin-file-drag', -'dnd-begin-drag-files', and 'dnd-direct-save' allow dragging contents -(such as files and text) from Emacs to other programs. +This warning can be suppressed using 'with-suppressed-warnings' with +the warning name 'suspicious'. --- -** New function 'ietf-drums-parse-date-string'. -This function parses RFC5322 (and RFC822) date strings, and should be -used instead of 'parse-time-string' when parsing data that's standards -compliant. - -+++ -** New macro 'setopt'. -This is like 'setq', but is meant to be used for user options instead -of plain variables, and uses 'custom-set'/'set-default' to set them. - -+++ -** New utility predicate 'mode-line-window-selected-p'. -This is meant to be used from ':eval' mode line constructs to create -different mode line looks for selected and unselected windows. - -+++ -** New variable 'messages-buffer-name'. -This variable (defaulting to "*Messages*") allows packages to override -where messages are logged. +*** Warn about 'condition-case' without handlers. +The compiler now warns when the 'condition-case' form is used without +any actual handlers, as in -+++ -** New function 'readablep'. -This function says whether an object can be written out and then -read back by the Emacs Lisp reader. - -+++ -** New variable 'print-unreadable-function'. -This variable allows changing how Emacs prints unreadable objects. + (condition-case nil (read buffer)) ---- -** The user option 'polling-period' now accepts floating point values. -This means Emacs can now poll for input during Lisp execution more -frequently than once in a second. +because it has no effect other than the execution of the body form. +In particular, no errors are caught or suppressed. If the intention +was to catch all errors, add an explicit handler for 'error', or use +'ignore-error' or 'ignore-errors'. ---- -** New function 'bidi-string-strip-control-characters'. -This utility function is meant for displaying strings when it is -essential that there's no bidirectional context. It removes all the -bidirectional formatting control characters (such as RLM, LRO, PDF, -etc.) from its argument string. The characters it removes are listed -in the value of 'bidi-control-characters'. +This warning can be suppressed using 'with-suppressed-warnings' with +the warning name 'suspicious'. --- -** The Gnus range functions have been moved to a new library, range.el. -All the old names have been made obsolete. +*** Warn about 'unwind-protect' without unwind forms. +The compiler now warns when the 'unwind-protect' form is used without +any unwind forms, as in -+++ -** New function 'function-alias-p'. -This predicate says whether an object is a function alias, and if it -is, the alias chain is returned. + (unwind-protect (read buffer)) -+++ -** New variable 'lisp-directory' holds the directory of Emacs's own Lisp files. +because the behavior is identical to that of the argument; there is +no protection of any kind. Perhaps the intended unwind forms have +been misplaced or forgotten, or the use of 'unwind-protect' could be +simplified away. -+++ -** New facility for handling session state: 'multisession-value'. -This can be used as a convenient way to store (simple) application -state, and the command 'list-multisession-values' allows users to list -(and edit) this data. - -+++ -** New function 'get-display-property'. -This is like 'get-text-property', but works on the 'display' text -property. - -+++ -** New function 'add-display-text-property'. -This is like 'put-text-property', but works on the 'display' text -property. - -+++ -** New 'min-width' 'display' property. -This allows setting a minimum display width for a region of text. - -+++ -** New 'cursor-face' text property. -This uses 'cursor-face' instead of the default face when cursor is on or -near the character and 'cursor-face-highlight-mode' is enabled. The -user option 'cursor-face-highlight-nonselected-window' is similar to -'highlight-nonselected-windows', but for this property. - -+++ -** New event type 'touch-end'. -This event is sent whenever the user's finger moves off the mouse -wheel on some mice, or when the user's finger moves off the touchpad. - -+++ -** New event type 'pinch'. -This event is sent when a user performs a pinch gesture on a touchpad, -which is comprised of placing two fingers on the touchpad and moving -them towards or away from each other. - -+++ -** New hook 'x-pre-popup-menu-hook'. -This hook, run before 'x-popup-menu', is about to display a -deck-of-cards menu on screen. - ---- -** New hook 'post-select-region-hook'. -This hook is run immediately after 'select-active-regions'. It causes -the region to be set as the primary selection. - -+++ -** New function 'buffer-match-p'. -Check if a buffer satisfies some condition. Some examples for -conditions can be regular expressions that match a buffer name, a -cons-cell like '(major-mode . shell-mode)' that matches any buffer -where 'major-mode' is 'shell-mode' or a combination with a condition -like '(and "\\`\\*.+\\*\\'" (major-mode . special-mode))'. - -+++ -** New function 'match-buffers'. -It uses 'buffer-match-p' to gather a list of buffers that match a -condition. +This warning can be suppressed using 'with-suppressed-warnings' with +the warning name 'suspicious'. --- -** New optional arguments TEXT-FACE and DEFAULT-FACE for 'tooltip-show'. -They allow changing the faces used for the tooltip text and frame -colors of the resulting tooltip frame from the default 'tooltip' face. +*** Warn about more ignored function return values. +The compiler now warns when the return value from certain functions is +ignored. Example: -** Text Security and Suspiciousness + (progn (nreverse my-list) my-list) -+++ -*** New library textsec.el. -This library contains a number of checks for whether a string is -"suspicious". This usually means that the string contains characters -that have glyphs that can be confused with other, more commonly used -glyphs, or contains bidirectional (or other) formatting characters -that may be used to confuse a user. +will elicit a warning because it is usually pointless to call +'nreverse' on a list without using the returned value. To silence the +warning, make use of the value in some way, such as assigning it to a +variable. You can also wrap the function call in '(ignore ...)'. -+++ -*** New user option 'textsec-check'. -If non-nil (which is the default), Emacs packages that are vulnerable -to attackers trying to confuse the users will use the textsec library -to mark suspicious text. For instance shr/eww will mark suspicious -URLs and links, Gnus will mark suspicious From addresses, and -Message mode will query the user if the user is sending mail to a -suspicious address. If this variable is nil, these checks are -disabled. +This warning can be suppressed using 'with-suppressed-warnings' with +the warning name 'ignored-return-value'. +++ -*** New function 'textsec-suspicious-p'. -This is the main function Emacs applications should be using to check -whether a string is suspicious. It heeds the 'textsec-check' user -option. - -** Keymaps and Key Definitions +** New function 'file-user-uid'. +This function is like 'user-uid', but is aware of file name handlers, +so it will return the remote UID for remote files (or -1 if the +connection has no associated user). +++ -*** 'where-is-internal' can now filter events marked as non key events. -If a command maps to a key binding like '[some-event]', and 'some-event' -has a symbol plist containing a non-nil 'non-key-event' property, then -that binding is ignored by 'where-is-internal'. +** 'fset', 'defalias' and 'defvaralias' now signal an error for cyclic aliases. +Previously, 'fset', 'defalias' and 'defvaralias' could be made to +build circular function and variable indirection chains as in -+++ -*** New functions for defining and manipulating keystrokes. -These all take the syntax defined by 'key-valid-p', which is basically -the same syntax as the one accepted by the 'kbd' macro. None of the -older functions have been deprecated or altered, but they are now -de-emphasized in the documentation, and we encourage Lisp programs to -switch to these new functions. + (defalias 'able 'baker) + (defalias 'baker 'able) -+++ -*** Use 'keymap-set' instead of 'define-key'. +but trying to use them would sometimes make Emacs hang. Now, an attempt +to create such a loop results in an error. -+++ -*** Use 'keymap-global-set' instead of 'global-set-key'. - -+++ -*** Use 'keymap-local-set' instead of 'local-set-key'. - -+++ -*** Use 'keymap-global-unset' instead of 'global-unset-key'. - -+++ -*** Use 'keymap-local-unset' instead of 'local-unset-key'. - -+++ -*** Use 'keymap-substitute' instead of 'substitute-key-definition'. - -+++ -*** Use 'keymap-set-after' instead of 'define-key-after'. - -+++ -*** Use 'keymap-lookup' instead of 'lookup-key' and 'key-binding'. - -+++ -*** Use 'keymap-local-lookup' instead of 'local-key-binding'. - -+++ -*** Use 'keymap-global-lookup' instead of 'global-key-binding'. - -+++ -*** 'define-key' now takes an optional REMOVE argument. -If non-nil, remove the definition from the keymap. This is subtly -different from setting a definition to nil (when the keymap has a -parent). - -+++ -*** 'read-multiple-choice' now takes an optional SHOW-HELP argument. -If non-nil, show the help buffer immediately, before any user input. - -+++ -*** New function 'key-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 'key-valid-p' predicate does a stricter check of the -syntax. - ---- -*** New function 'key-parse'. -This is like 'kbd', but only returns vectors instead of a mix of -vectors and strings. - -+++ -*** New ':type' for 'defcustom' for keys. -The new 'key' type can be used for options that should be a valid key -according to 'key-valid-p'. The type 'key-sequence' is now obsolete. - -+++ -** 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. - -** 'defvar-keymap' can specify 'repeat-mode' behavior for the keymap. -Use ':repeat t' to have all bindings be repeatable or for more -advanced usage: - - :repeat (:enter (commands ...) :exit (commands ...)) - ---- -** 'kbd' can now be used in built-in, preloaded libraries. -It no longer depends on edmacro.el and cl-lib.el. - -+++ -** New substitution in docstrings and 'substitute-command-keys'. -Use \\`KEYSEQ' to insert a literal key sequence "KEYSEQ" (for example -\\`C-k') in a docstring or when calling 'substitute-command-keys', -which will use the same face as a command substitution. This should -be used only when a key sequence has no corresponding command, for -example when it is read directly with 'read-key-sequence'. It must be -a valid key sequence according to 'key-valid-p'. - ---- -** 'lookup-key' is more permissive 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'. - -+++ -** New function 'file-name-split'. -This returns a list of all the components of a file name. - -+++ -** New function 'file-name-parent-directory'. -This returns the parent directory of a file name. - -+++ -** New macro 'with-undo-amalgamate'. -It records a particular sequence of operations as a single undo step. - -+++ -** New command 'yank-media'. -This command supports yanking non-plain-text media like images and -HTML from other applications into Emacs. It is only supported in -modes that have registered support for it, and only on capable -platforms. - -+++ -** New command 'yank-media-types'. -This command lets you examine all data in the current selection and -the clipboard, and insert it into the buffer. - -+++ -** New variable 'yank-transform-functions'. -This variable allows the user to alter the string to be inserted. - ---- -** New command 'yank-in-context'. -This command tries to preserve string/comment syntax when yanking. - ---- -** New function 'minibuffer-lazy-highlight-setup'. -This function allows setting up the minibuffer so that lazy -highlighting of its content is applied in the original window. - -+++ -** New text property 'inhibit-isearch'. -If set, 'isearch' will skip these areas, which can be useful (for -instance) when covering huge amounts of data (that has no meaningful -searchable data, like image data) with a 'display' text property. - -+++ -** 'insert-image' now takes an INHIBIT-ISEARCH optional argument. -It marks the image with the 'inhibit-isearch' text property, which -inhibits 'isearch' matching the STRING argument. - ---- -** New variable 'replace-regexp-function'. -Function to call to convert the entered FROM string to an Emacs -regexp in 'query-replace' and similar commands. It can be used to -implement a different regexp syntax for search/replace. - ---- -** New variables to customize defaults of FROM for 'query-replace*' commands. -The new variable 'query-replace-read-from-default' can be set to a -function that returns the default value of FROM when 'query-replace' -prompts for a string to be replaced. An example of such a function is -'find-tag-default'. - -The new variable 'query-replace-read-from-regexp-default' can be set -to a function (such as 'find-tag-default-as-regexp') that returns the -default value of FROM when 'query-replace-regexp' prompts for a regexp -whose matches are to be replaced. If these variables are nil (which -is the default), 'query-replace' and 'query-replace-regexp' take the -default value from the previous FROM-TO pair. - -** Lisp pretty-printer ('pp') - ---- -*** New function 'pp-emacs-lisp-code'. -'pp' formats general Lisp sexps. This function does much the same, -but applies formatting rules appropriate for Emacs Lisp code. Note -that this could currently be quite slow, and is thus appropriate only -for relatively small code fragments. - ---- -*** New user option 'pp-use-max-width'. -If non-nil, 'pp' and all 'pp-*' commands that format the results, will -attempt to limit the line length when formatting long lists and -vectors. This uses 'pp-emacs-lisp-code', and thus could be slow for -large lists. - -+++ -** 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. - -+++ -** 'abbreviate-file-name' now respects magic file name handlers. - ---- -** New function 'font-has-char-p'. -This can be used to check whether a specific font has a glyph for a -character. - -+++ -** 'window-text-pixel-size' now accepts a new argument IGNORE-LINE-AT-END. -This controls whether or not the last screen line of the text being -measured will be counted for the purpose of calculating the text -dimensions. - -+++ -** 'window-text-pixel-size' understands a new meaning of FROM. -Specifying a cons as the FROM argument allows to start measuring text -from a specified amount of pixels above or below a position. - -+++ -** 'window-body-width' and 'window-body-height' can use remapped faces. -Specifying 'remap' as the PIXELWISE argument now checks if the default -face was remapped, and if so, uses the remapped face to determine the -character width/height. - -+++ -** 'set-window-vscroll' now accepts a new argument PRESERVE-VSCROLL-P. -This means the vscroll will not be reset when set on a window that is -"frozen" due to a mini-window being resized. - -** XDG Support - ---- -*** New function 'xdg-state-home'. -It returns the new 'XDG_STATE_HOME' environment variable. It should -point to a file name that "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". -(This variable was introduced in the XDG Base Directory Specification -version 0.8 released on May 8, 2021.) - ---- -*** New function 'xdg-current-desktop'. -It returns a list of strings, corresponding to the colon-separated -list of names in the 'XDG_CURRENT_DESKTOP' environment variable, which -identify the current desktop environment. -(This variable was introduced in XDG Desktop Entry Specification -version 1.2.) - ---- -*** New function 'xdg-session-type'. -It returns the 'XDG_SESSION_TYPE' environment variable. (This is not -part of any official standard; see the man page pam_systemd(8) for -more information.) - -+++ -** 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 -if the function takes longer to execute than 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. - -** Table - ---- -*** New user option 'table-latex-environment'. -This allows switching between "table" and "tabular". - -** 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. - -+++ -** ':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, it also kills -permanent local variables. - -+++ -** Third 'mapconcat' argument SEPARATOR is now optional. -An explicit nil always meant the empty string, now it can be left out. - -+++ -** New function 'image-at-point-p'. -This function returns t if point is on a valid image, and nil -otherwise. - -+++ -** 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 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, by treating each sequence of characters composed on -display as a single unit. - -** Xwidget - -+++ -*** The function 'make-xwidget' now accepts an optional RELATED argument. -This argument is used as another widget for the newly created WebKit -widget to share settings and subprocesses with. It must be another -WebKit widget. - -+++ -*** New function 'xwidget-perform-lispy-event'. -This function allows you to send events to xwidgets. Usually, some -equivalent of the event will be sent, but there is no guarantee of -what the widget will actually receive. - -On GTK+, only key and function key events are implemented. - -+++ -*** New function 'xwidget-webkit-load-html'. -This function is used to load HTML text into WebKit xwidgets -directly, in contrast to creating a temporary file to hold the -markup, and passing the URI of the file as an argument to -'xwidget-webkit-goto-uri'. - -+++ -*** New functions for performing searches on WebKit xwidgets. -Some new functions, such as 'xwidget-webkit-search', have been added -for performing searches on WebKit xwidgets. - -+++ -*** New function 'xwidget-webkit-back-forward-list'. -This function returns the history of page-loads in a WebKit xwidget. - -+++ -*** New function 'xwidget-webkit-estimated-load-progress'. -This function returns the estimated progress of page loading in a -WebKit xwidget. - -+++ -*** New function 'xwidget-webkit-stop-loading'. -This function terminates all data transfer during page loads in a -WebKit xwidget. - -+++ -*** 'load-changed' xwidget events are now more detailed. -In particular, they can now have different arguments based on the -state of the WebKit widget. 'load-finished' is sent when a load has -completed, 'load-started' when a load first starts, 'load-redirected' -after a redirect, and 'load-committed' when the WebKit widget first -commits to the load. - -+++ -*** New event type 'xwidget-display-event'. -These events are sent whenever an xwidget requests that Emacs displays -another xwidget. The only arguments to this event are the xwidget -that should be displayed, and the xwidget that asked to display it. - -+++ -*** New function 'xwidget-webkit-set-cookie-storage-file'. -This function is used to control where and if an xwidget stores -cookies set by web pages on disk. - ---- -** New variable 'help-buffer-under-preparation'. -This variable is bound to t during the preparation of a "*Help*" buffer. - -+++ -** Timestamps like '(1 . 1000)' now work without warnings being generated. -For example, '(time-add nil '(1 . 1000))' no longer warns that the -'(1 . 1000)' acts like '(1000 . 1000000)'. This warning, which was a -temporary transition aid for Emacs 27, has served its purpose. - -+++ -** 'encode-time' now also accepts a 6-element list with just time and date. -'(encode-time (list SECOND MINUTE HOUR DAY MONTH YEAR))' is now short for -'(encode-time (list SECOND MINUTE HOUR DAY MONTH YEAR nil -1 nil))'. - -+++ -** 'date-to-time' now accepts arguments that lack month, day, or time. -The function now assumes the earliest possible values if its argument -lacks month, day, or time. For example, (date-to-time "2021-12-04") -now assumes a time of "00:00" instead of signaling an error. - -+++ -** 'format-seconds' now allows suppressing zero-value trailing elements. -The new "%x" non-printing control character will suppress zero-value -elements that appear after "%x". - -+++ -** New events for taking advantage of touchscreen devices. -The events 'touchscreen-begin', 'touchscreen-update', and -'touchscreen-end' have been added to take better advantage of -touch-capable display panels. - -+++ -** New error symbol 'permission-denied'. -This is a subcategory of 'file-error', and is signaled when some file -operation fails because the OS doesn't allow Emacs to access a file or -a directory. - -+++ -** The ':underline' face attribute now accepts a new property. -The property ':position' now specifies the position of the underline -when used as part of a property list specification for the -':underline' attribute. - -+++ -** 'defalias' records a more precise history of definitions. -This is recorded in the 'function-history' symbol property. - ---- -** New hook 'save-place-after-find-file-hook'. -This is called at the end of 'save-place-find-file-hook'. - ---- -** 'indian-tml-base-table' no longer translates digits. -Use 'indian-tml-base-digits-table' if you want digits translation. - ---- -** 'indian-tml-itrans-v5-hash' no longer translates digits. -Use 'indian-tml-itrans-digits-v5-hash' if you want digits -translation. - -+++ -** 'shell-quote-argument' has a new optional argument POSIX. -This is useful when quoting shell arguments for a remote shell -invocation. Such shells are POSIX conformant by default. - -+++ -** 'make-process' can set connection type independently for input and output. -When calling 'make-process', communication via pty can be enabled -selectively for just input or output by passing a cons cell for -':connection-type', e.g. '(pipe . pty)'. When examining a process -later, you can determine whether a particular stream for a process -uses a pty by passing one of 'stdin', 'stdout', or 'stderr' as the -second argument to 'process-tty-name'. - -+++ -** 'signal-process' now consults the list 'signal-process-functions'. -This is to determine which function has to be called in order to -deliver the signal. This allows Tramp to send the signal to remote -asynchronous processes. The hitherto existing implementation has been -moved to 'internal-default-signal-process'. - -+++ -** Some system information functions honor remote systems now. -'list-system-processes' returns remote process IDs. -'memory-info' returns memory information of remote systems. -'process-attributes' expects a remote process ID. -This happens only when the current buffer's 'default-directory' is -remote. In order to preserve the old behavior, bind -'default-directory' to a local directory, like - - (let ((default-directory temporary-file-directory)) - (list-system-processes)) - -+++ -** New functions 'take' and 'ntake'. -'(take N LIST)' returns the first N elements of LIST; 'ntake' does -the same but works by modifying LIST destructively. - ---- -** 'string-split' is now an alias for 'split-string'. - -+++ -** 'format-spec' now accepts functions in the replacement. -The function is called only when used in the format string. This is -useful to avoid side-effects such as prompting, when the value is not -actually being used for anything. - -+++ -** The variable 'max-specpdl-size' has been made obsolete. -Now 'max-lisp-eval-depth' alone is used for limiting Lisp recursion -and stack usage. 'max-specpdl-size' is still present as a plain -variable for compatibility but its limiting powers have been taken away. - -** New function 'external-completion-table'. -This function returns a completion table designed to ease -communication between Emacs's completion facilities and external tools -offering completion services, particularly tools whose full working -set is too big to transfer to Emacs every time a completion is -needed. The table uses new 'external' completion style exclusively -and cannot work with regular styles such as 'basic' or 'flex'. - -+++ -** Magic file name handlers for 'make-directory-internal' are no longer needed. -Instead, Emacs uses the already-existing 'make-directory' handlers. - -+++ -** '(make-directory DIR t)' returns non-nil if DIR already exists. -This can let a caller know whether it created DIR. Formerly, -'make-directory's return value was unspecified. +Since circular alias chains now cannot occur, 'function-alias-p', +'indirect-function' and 'indirect-variable' will never signal an error. +Their 'noerror' arguments have no effect and are therefore obsolete. -* Changes in Emacs 29.1 on Non-Free Operating Systems - -** MS-Windows - ---- -*** Emacs now supports double-buffering on MS-Windows to reduce display flicker. -(This was supported on Free systems since Emacs 26.1.) - -To disable double-buffering (e.g., if it causes display problems), set -the frame parameter 'inhibit-double-buffering' to a non-nil value. -You can do that either by adding - - '(inhibit-double-buffering . t) - -to 'default-frame-alist', or by modifying the frame parameters of the -selected frame by evaluating - - (modify-frame-parameters nil '((inhibit-double-buffering . t))) - -+++ -*** 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. - ---- -*** Emacs now uses native image APIs to display some image formats. -On Windows 2000 and later, Emacs now defaults to using the native -image APIs for displaying the BMP, GIF, JPEG, PNG, and TIFF images. -This means Emacs on MS-Windows needs no longer use external image -support libraries to display those images. Other image types -- XPM, -SVG, and WEBP -- still need support libraries for Emacs to be able to -display them. - -The use of native image APIs is controlled by the variable -'w32-use-native-image-API', whose value now defaults to t on systems -where those APIs are available. - -+++ -*** Emacs now supports display of BMP images using native image APIs. -When 'w32-use-native-image-API' is non-nil, Emacs on MS-Windows now -has built-in support for displaying BMP images. - ---- -*** GUI Yes/No dialogs now include a "Cancel" button. -The "Cancel" button is in addition to "Yes" and "No", and is intended -to allow users to quit the dialog, as an equivalent of 'C-g' when Emacs -asks a yes/no question via the echo area. This is controlled by the -new variable 'w32-yes-no-dialog-show-cancel', by default t. Set it to -nil to get back the old behavior of showing a modal dialog with only -two buttons: "Yes" and "No". - -** Cygwin - ---- -*** 'process-attributes' is now implemented. - -** macOS - -+++ -*** The 'ns-popup-font-panel' command has been removed. -Use the general command 'M-x menu-set-font' instead. +* Changes in Emacs 30.1 on Non-Free Operating Systems ---------------------------------------------------------------------- |