From: Eli Zaretskii Date: Tue, 25 Apr 2023 13:57:23 +0000 (-0400) Subject: Merge from origin/emacs-29 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=095ec506d03b76155b399fd7b23554279b2cfee0;p=emacs.git Merge from origin/emacs-29 524e161a536 Followup to addition of TUTORIAL.fa 76f50df1539 Add Farsi/Persian translation of the tutorial 8eacfaea6d8 Add Mongolian language environments fe8efbb8f75 Document the 'end-session' event on MS-Windows d80f959bede Update to Org 9.6.4-9-g8eb209 98c6cfcbe4a Don't support versioned grammar libraries on MS-Windows 8f71c1546df Accept versioned tree-sitter language grammar files 99add09d5e1 tab-bar-new-tab: inhibit side-window checks 087e8181947 * etc/NEWS: Fix outline level. (Bug#63042) d7f38558c4c ; Improve font selection for Traditional Mongolian 965c5e0231c Fix rendering of Traditional Mongolian script 9a0f10b5f88 Fix line-number-at-pos when POSITION is out of narrowing 4e0f4292aaf ; * etc/tutorials/TUTORIAL: Fix punctuation. dec2ac0c657 Fix exiting Emacs after saving a tutorial # Conflicts: # etc/NEWS --- 095ec506d03b76155b399fd7b23554279b2cfee0 diff --cc etc/NEWS.29 index 62d2fdcd3a4,00000000000..0eb5940dbca mode 100644,000000..100644 --- a/etc/NEWS.29 +++ b/etc/NEWS.29 @@@ -1,4968 -1,0 +1,4976 @@@ +GNU Emacs NEWS -- history of user-visible changes. + +Copyright (C) 2021-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. + +See file HISTORY for a list of GNU Emacs versions and release dates. +See files NEWS.28, NEWS.27, ..., NEWS.18, and NEWS.1-17 for changes +in older Emacs versions. + +You can narrow news to a specific version by calling 'view-emacs-news' +with a prefix argument or by typing 'C-u C-h C-n'. + +Temporary note: ++++ indicates that all relevant manuals in doc/ have been updated. +--- means no change in the manuals is needed. +When you add a new item, use the appropriate mark if you are sure it +applies, and please also update docstrings as needed. + + +* Installation Changes in Emacs 29.1 + +--- +** 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-.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. + + +* 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'. + + +* Incompatible changes in Emacs 29.1 + ++++ +** The image commands have changed key bindings. +In previous Emacs versions, the '+', '-' and 'r' keys were bound when +point was over an image. In Emacs 29.1, additional commands have been +added, and this made it more likely that users would trigger the image +commands by mistake. To avoid this, all image commands have been +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 you can rotate an image twice by saying 'i r r', for instance. + ++++ +** 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 '' and ''. +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 '' 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 were made obsolete in Emacs 25.1 by +'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 + +*** 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. + +--- +*** '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. + ++++ +*** 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 '' function key +(a.k.a. ''). When invoked without a prefix argument or +with a positive prefix numeric argument, the command will now delete +complete grapheme clusters produced by character composition. For +example, if point is before an Emoji sequence, pressing '' +will delete the entire sequence, not just a single character at its +beginning. + ++++ +** 'load-history' does not treat autoloads specially any more. +An autoload definition appears just as a '(defun . NAME)' and the +'(t . NAME)' entries are not generated any more. + +--- +** 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. + ++++ +** 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 the 'image-dired' command 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 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. + +--- +** 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. + + +* 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') instead of 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'. +This allows you to disable the default behavior of consecutive single +quotes being replaced with a double quote. + +--- +** 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 should 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". ++** New X resource "borderThickness". +This controls the thickness of the external borders of the menu bars +and pop-up menus. + ++++ - ** New X resource: "inputStyle". ++** 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". ++** 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. Defaults to nil. + ++++ +** 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 and insert an 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 to insert. + +--- +*** New command 'emoji-recent' (bound to 'C-x 8 e r'). +This command lets you choose among the Emoji you have recently +inserted and insert it. + ++++ +*** 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 an 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 , C-x C-f, . + +This has been changed to: + + It is bound to 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 was 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. + +--- +*** 'describe-keymap' now considers the symbol at point. +If the symbol at point is a keymap, 'describe-keymap' suggests it as +the default candidate. + +--- +*** 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 "etc/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 specifying which frames 'display-buffer' should consider +when using a window that shows another buffer. It is interpreted as +per the ALL-FRAMES argument of 'get-lru-window'. + ++++ +*** New buffer display action alist entry 'lru-time'. +'display-buffer' will ignore windows with a use time higher than this +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 specifying a preferred minimum width of the window used to +display a buffer. + +--- +*** You can specify on which window 'scroll-other-window' operates. +This is controlled by the new 'other-window-scroll-default' variable, +which should be set to a function that returns a window. When this +variable is nil, 'next-window' is used. + +** 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 ' and 'C-c ' to browse +the history of tab window configurations back and forward. + +--- +** Better detection of text suspiciously reordered on display. +The function 'bidi-find-overridden-directionality' has been extended +to detect reordering effects produced by embeddings and isolates +(started by directional formatting control characters such as RLO and +LRI). The new command 'highlight-confusing-reorderings' finds and +highlights segments of buffer text whose reordering for display is +suspicious and could be malicious. + +** Emacs Server and Client + ++++ +*** 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 determined by the argument to +'server-stop-automatically', which can be 'empty', 'delete-frame' or +'kill-terminal'. + +** Rcirc + ++++ +*** New command 'rcirc-when'. +This shows the reception time of the message at point (if available). + ++++ +*** New user option 'rcirc-cycle-completion-flag'. +Rcirc now uses 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 {john} I am not on IRC + +to be reformatted into + + 09:47 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 ''. 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 '' 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 + ++ Mongolian-traditional script and language environment ++ ++ Mongolian-cyrillic 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 Ukrainian translation of the Emacs tutorial. ++ ++--- ++*** New Farsi/Persian 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. ++Cyrillic script. It is the default input method for the new ++Mongolian-cyrillic language environment, see above. + + +* 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. + +--- +*** New user option 'ecomplete-filter-regexp'. +If non-nil, this user option describes what entries not to add to the +database stored on disk. + +** Auth Source + ++++ +*** 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. + ++++ +*** '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, and is bound to 'b' in the "*Packages*" buffer. + ++++ +*** New user option 'package-vc-selected-packages'. +By customizing this user option you can specify specific packages to +install. + +--- +*** New user option 'package-install-upgrade-built-in'. +When enabled, 'package-install' will include in the list of +upgradeable packages those built-in packages (like Eglot and +use-package, for example) for which a newer version is available in +package archives, and will allow installing those newer versions. By +default, this is disabled; however, if 'package-install' is invoked +with a prefix argument, it will act as if this new option were +enabled. + +If you customize this option, we recommend you place its non-default +setting in your early-init file. + +** 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. + +** Compile + ++++ +*** New user option 'compilation-hidden-output'. +This regular expression 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-' or +'M-' 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-' and 'M-' 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 ') is like 'minibuffer-complete' +but completes on the history items instead of the default completion +table. 'minibuffer-complete-defaults' ('C-x ') 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-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'. + +** 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. + +** 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 of producing 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. Only the attributes 'email', 'name', and +'firstname' are supported. + +** 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