From 74261ff301d9dc46a4aee9878febaaaa6f574a18 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 28 Dec 2019 15:19:05 +0200 Subject: [PATCH] Rearrange NEWS, add missing documentation * etc/NEWS: Rearrange and mark entries whether documented or not. * doc/lispref/streams.texi (Output Variables): Document the new default of 'print-quoted'. * doc/lispref/keymaps.texi (Functions for Key Lookup): Document that KEYMAP arg to 'lookup-key' can also be a list. * doc/lispref/customize.texi (Variable Definitions): Document the :local keyword of 'defcustom'. * doc/lispref/numbers.texi (Float Basics): Document changes in 'logb'. * doc/lispref/hooks.texi (Standard Hooks): Document 'comint-password-function'. * doc/emacs/display.texi (Text Scale): Document text-size adjustment using the mouse wheel. * doc/emacs/frames.texi (Mouse Commands): Document image scaling with the mouse wheel. * doc/emacs/windows.texi (Window Convenience): Document 'global-tab-line-mode'. * doc/emacs/search.texi (Repeat Isearch, Symbol Search) (Isearch Yank): Document the new support for numeric arguments in Isearch commands. (Special Isearch): Document 'M-s M->' and 'M-s M-<'. (Search Customizations): Document 'isearch-lazy-count'. Improve indexing. (Not Exiting Isearch): Document the new value of 'isearch-allow-scroll'. * doc/emacs/maintaining.texi (Xref Commands): Document the new 'g' key binding. * doc/emacs/package.texi (Package Installation): Document changes in 'package-check-signature'. * doc/emacs/maintaining.texi (VC Change Log): Document 'vc-log-search'. * doc/emacs/dired.texi (Operating on Files): Document 'dired-vc-rename'. --- doc/emacs/dired.texi | 5 + doc/emacs/display.texi | 7 + doc/emacs/frames.texi | 3 + doc/emacs/maintaining.texi | 15 + doc/emacs/package.texi | 6 +- doc/emacs/search.texi | 76 +++-- doc/emacs/windows.texi | 10 + doc/lispref/customize.texi | 7 + doc/lispref/hooks.texi | 4 + doc/lispref/keymaps.texi | 2 + doc/lispref/numbers.texi | 10 +- doc/lispref/streams.texi | 3 +- etc/NEWS | 641 +++++++++++++++++++++++-------------- 13 files changed, 516 insertions(+), 273 deletions(-) diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index d1863510d45..8a4fa7e183d 100644 --- a/doc/emacs/dired.texi +++ b/doc/emacs/dired.texi @@ -720,6 +720,11 @@ should create non-existent directories in @var{new}. Dired automatically changes the visited file name of buffers associated with renamed files so that they refer to the new names. +@vindex dired-vc-rename +If the value of the variable @code{dired-vc-rename} is non-@code{nil}, +files are renamed using the commands of the underlying VCS, via +@code{vc-rename-file} (@pxref{VC Delete/Rename}). + @findex dired-do-hardlink @kindex H @r{(Dired)} @cindex hard links (in Dired) diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index cb37ef448e8..313abde6cf6 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -797,6 +797,8 @@ would be selected if you click a mouse or press @key{RET}. @kindex C-x C-- @kindex C-x C-= @kindex C-x C-0 +@kindex C-wheel-down +@kindex C-wheel-up To increase the height of the default face in the current buffer, type @kbd{C-x C-+} or @kbd{C-x C-=}. To decrease it, type @kbd{C-x C--}. To restore the default (global) face height, type @kbd{C-x @@ -804,6 +806,11 @@ C-0}. These keys are all bound to the same command, @code{text-scale-adjust}, which looks at the last key typed to determine which action to take. + Similarly, scrolling the mouse wheel with the @kbd{Ctrl} modifier +pressed, when the mouse pointer is above buffer text, will increase or +decrease the height of the default face, depending on the direction of +the scrolling. + The final key of these commands may be repeated without the leading @kbd{C-x}. For instance, @kbd{C-x C-= C-= C-=} increases the face height by three steps. Each step scales the text height by a factor diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 8ea923fccb8..560d612ed43 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -222,6 +222,9 @@ be tilted. This feature is off by default; the variable the direction of horizontal scrolling, customize the variable @code{mouse-wheel-flip-direction} to a non-@code{nil} value. +When the mouse pointer is over an image, scrolling the mouse wheel +with the @key{Ctrl} modifier scales the image under the mouse pointer. + @node Word and Line Mouse @section Mouse Commands for Words and Lines diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index fa92f568dac..6985486d09e 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -968,6 +968,9 @@ Display the changes that will be sent by the next ``push'' operation @item C-x v h Display the history of changes made in the region of file visited by the current buffer (@code{vc-region-history}). + +@item M-x vc-log-search @key{RET} +Search the change history for a specified pattern. @end table @kindex C-x v l @@ -1103,6 +1106,13 @@ defined by Diff mode (@pxref{Diff Mode}). This command is currently available only with Git and Mercurial (hg). +@findex vc-log-search +The command @code{vc-log-search} allows searching for a pattern in the +log of changes. It prompts for a pattern (a regular expression), and +displays all entries in the change history whose log messages match +the pattern. When invoked with a prefix argument, the command will +also prompt for a specific VCS shell command to run for this purpose. + @node VC Undo @subsection Undoing Version Control Actions @@ -2001,6 +2011,11 @@ Perform interactive query-replace on references that match @var{pattern} (@code{xref-query-replace-in-results}), replacing the match with @var{replacement}. @xref{Identifier Search}. +@item g +@findex xref-revert-buffer +Refresh the contents of the @file{*xref*} buffer +(@code{xref-revert-buffer}. + @findex xref-quit @item q Quit the window showing the @file{*xref*} buffer (@code{xref-quit}). diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi index 1c0f8534275..b9eb0a5852d 100644 --- a/doc/emacs/package.texi +++ b/doc/emacs/package.texi @@ -258,7 +258,11 @@ option has the value @code{allow-unsigned}, and a usable OpenPGP configuration is found, signed packages will be checked, but you can still install a package that is not signed. If you use some archives that do not sign their packages, you can add them to the list -@code{package-unsigned-archives}. +@code{package-unsigned-archives}. (If the value is +@code{allow-unsigned} and no usable OpenPGP is found, this option is +treated as if its value was @code{nil}.) If the value is @code{t}, at +least one signature must be valid; if the value is @code{all}, all of +them must be valid. For more information on cryptographic keys and signing, @pxref{Top,, GnuPG, gnupg, The GNU Privacy Guard Manual}. diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index c0aaf6eda92..aa21312039a 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -168,10 +168,14 @@ matches that begin after it. the one you expected to find: the @samp{FOO} you were aiming for occurs later in the buffer. In this event, type another @kbd{C-s} (@code{isearch-repeat-forward}) to move to the next occurrence of the -search string. You can repeat this any number of times. If you -overshoot, you can cancel some @kbd{C-s} commands with @key{DEL}. -Similarly, each @kbd{C-r} (@code{isearch-repeat-backward}) in a -backward incremental search repeats the backward search. +search string, or @kbd{C-r} (@code{isearch-repeat-backward}) to move +to the previous occurrence. You can repeat these commands any number +of times. Alternatively, you can supply a numeric prefix argument of +@var{n} to @kbd{C-s} and @kbd{C-r} to find the @var{n}th next or +previous occurrence. If you overshoot, you can cancel some @kbd{C-s} +commands with @key{DEL}. Similarly, each @kbd{C-r} +(@code{isearch-repeat-backward}) in a backward incremental search +repeats the backward search. @cindex lazy search highlighting If you pause for a little while during incremental search, Emacs @@ -251,14 +255,18 @@ that conveniently. @kbd{C-w} (@code{isearch-yank-word-or-char}) appends the next character or word at point to the search string. This is an easy way to search for another occurrence of the text at point. (The decision -of whether to copy a character or a word is heuristic.) +of whether to copy a character or a word is heuristic.) With a prefix +numeric argument of @var{n}, append the next @var{n} characters or +words. @kindex C-M-w @r{(Incremental search)} @findex isearch-yank-symbol-or-char @kbd{C-M-w} (@code{isearch-yank-symbol-or-char}) appends the next character or symbol at point to the search string. This is an easy way to search for another occurrence of the symbol at point. (The decision -of whether to copy a character or a symbol is heuristic.) +of whether to copy a character or a symbol is heuristic.) With a prefix +numeric argument of @var{n}, append the next @var{n} characters or +symbols. @kindex M-s C-e @r{(Incremental search)} @findex isearch-yank-line @@ -270,10 +278,12 @@ end of a line, it appends the next line. With a prefix argument @kindex C-M-z @r{(Incremental search)} @findex isearch-yank-until-char Similarly, @kbd{C-M-z} (@code{isearch-yank-until-char}) appends to -the search string everything from point until the next occurence of +the search string everything from point until the next occurrence of a specified character (not including that character). This is especially useful for keyboard macros, for example in programming languages or -markup languages in which that character marks a token boundary. +markup languages in which that character marks a token boundary. With +a prefix numeric argument of @var{n}, the command appends everything +from point to the @var{n}th occurrence of the specified character. @kindex C-y @r{(Incremental search)} @kindex M-y @r{(Incremental search)} @@ -481,6 +491,16 @@ remove the highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). including a list of special key bindings. These key bindings are part of the keymap @code{isearch-mode-map} (@pxref{Keymaps}). +@cindex incremental search, go to first or last occurrence +@kindex M-s M-> +@kindex M-s M-< + When incremental search is active, typing @kbd{M-s M->} will go to +the last occurrence of the search string, and @kbd{M-s M-<} will go to +the first occurrence. With a prefix numeric argument of @var{n}, +these commands will go to the @var{n}th occurrence of the search +string counting from the beginning or end of the buffer, +respectively. + @node Not Exiting Isearch @subsection Not Exiting Incremental Search @@ -530,7 +550,9 @@ commands like @kbd{C-v}, @kbd{M-v}, and @kbd{C-l} (@pxref{Scrolling}). This applies only to calling these commands via their bound key sequences---typing @kbd{M-x} will still exit the search. You can give prefix arguments to these commands in the usual way. This feature -won't let you scroll the current match out of visibility, however. +normally won't let you scroll the current match out of visibility; but +if you customize @code{isearch-allow-scroll} to the special value +@code{unlimited}, that restriction is lifted. The @code{isearch-allow-scroll} feature also affects some other commands, such as @kbd{C-x 2} (@code{split-window-below}) and @@ -739,15 +761,18 @@ Search backward for @var{symbol}, nonincrementally. @findex isearch-forward-symbol-at-point To begin a forward incremental symbol search, type @kbd{M-s _} (or @kbd{M-s .} if the symbol to search is near point). If incremental -search is not already active, this runs the command -@code{isearch-forward-symbol}. If incremental search is already -active, @kbd{M-s _} switches to a symbol search, preserving the -direction of the search and the current search string; you can disable -symbol search by typing @kbd{M-s _} again. In incremental symbol -search, while you are typing the search string, only the beginning -of the search string is required to match the beginning of a symbol, -and @samp{Pending} appears in the search prompt until you use a search -repeating key like @kbd{C-s}. +search is not already active, @kbd{M-s _} runs the command +@code{isearch-forward-symbol} and @kbd{M-s .} runs the command +@code{isearch-forward-symbol-at-point}. With a numeric prefix +argument of @var{n}, @kbd{M-s .} will search for the @var{n}the next +occurrence of the symbol at point; negative values of @var{n} search +backwards. If incremental search is already active, @kbd{M-s _} +switches to a symbol search, preserving the direction of the search +and the current search string; you can disable symbol search by typing +@kbd{M-s _} again. In incremental symbol search, while you are typing +the search string, only the beginning of the search string is required +to match the beginning of a symbol, and @samp{Pending} appears in the +search prompt until you use a search repeating key like @kbd{C-s}. To begin a nonincremental symbol search, type @kbd{M-s _ @key{RET}} for a forward search, or @kbd{M-s _ C-r @key{RET}} or a backward @@ -1955,17 +1980,32 @@ highlighting: @table @code @item lazy-highlight-initial-delay +@vindex lazy-highlight-initial-delay Time in seconds to wait before highlighting visible matches. @item lazy-highlight-interval +@vindex lazy-highlight-interval Time in seconds between highlighting successive matches. @item lazy-highlight-max-at-a-time +@vindex lazy-highlight-max-at-a-time The maximum number of matches to highlight before checking for input. A large number can take some time to highlight, so if you want to continue searching and type @kbd{C-s} or @kbd{C-r} during that time, Emacs will not respond until it finishes highlighting all those matches. Thus, smaller values make Emacs more responsive. + +@item isearch-lazy-count +@vindex isearch-lazy-count +Show the current match number and the total number of matches in the +search prompt. + +@item lazy-count-prefix-format +@itemx lazy-count-suffix-format +@vindex lazy-count-prefix-format +@vindex lazy-count-suffix-format +These two variables determine the format of showing the current and +the total number of matches for @code{isearch-lazy-count}. @end table @vindex search-nonincremental-instead diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index 53e9a4bb584..2c5a8463992 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi @@ -542,6 +542,16 @@ Reference Manual}), and cannot exceed the size of the containing frame. @node Window Convenience @section Convenience Features for Window Handling +@findex global-tab-line-mode +@cindex tab line + The command @code{global-tab-line-mode} toggles the display of a +@dfn{tab line} on the top screen line of each window. The tab line +shows special buttons (``tabs'') for each buffer that was displayed in +a window, and allows switching to any of these buffers by clicking the +corresponding button. You can add a tab by clicking on the @kbd{+} +icon and delete a tab by clicking on the @kbd{x} icon of a tab. The +mouse wheel on the tab line scrolls the tabs horizontally. + @findex winner-mode @vindex winner-dont-bind-my-keys @vindex winner-ring-size diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index 64c06c23867..b19feaf977f 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -427,6 +427,13 @@ the build-time context. This also has the side-effect that the @xref{Building Emacs}. @end table +@item :local @var{value} +@kindex local@r{, @code{defcustom} keyword} +If the @var{value} is @code{t}, mark @var{option} as automatically +buffer-local; if the value is @code{permanent}, also set @var{option}s +@code{permanent-local} property to @code{t}. @xref {Creating +Buffer-Local}. + @item :risky @var{value} @kindex risky@r{, @code{defcustom} keyword} Set the variable's @code{risky-local-variable} property to diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi index 4542db97306..26d26bed8ae 100644 --- a/doc/lispref/hooks.texi +++ b/doc/lispref/hooks.texi @@ -110,6 +110,10 @@ Function to call to quit the current buffer. @item change-major-mode-hook @xref{Creating Buffer-Local}. +@item comint-password-function +This abnormal hook permits a derived mode to supply a password for the +underlying command interpreter without prompting the user. + @item command-line-functions @xref{Command-Line Arguments}. diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index 8ff329bdacb..813bf814394 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -1171,6 +1171,8 @@ the second example. @end group @end example +The @var{keymap} argument can also be a list of keymaps. + Unlike @code{read-key-sequence}, this function does not modify the specified events in ways that discard information (@pxref{Key Sequence Input}). In particular, it does not convert letters to lower case and diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 939ad5c85a1..3127354ee2e 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -316,11 +316,11 @@ and returns the result. @var{x1} and @var{x2} must be floating point. @end defun @defun logb x -This function returns the binary exponent of @var{x}. More -precisely, if @var{x} is finite and nonzero, the value is the -logarithm base 2 of @math{|x|}, rounded down to an integer. -If @var{x} is zero, infinite, or a NaN, the value is minus infinity, -plus infinity, or a NaN respectively. +This function returns the binary exponent of @var{x}. More precisely, +if @var{x} is finite and nonzero, the value is the logarithm base 2 of +@math{|x|}, rounded down to an integer. If @var{x} is zero or +infinite, the value is infinity; if @var{x} is a NaN, the value is a +NaN. @example (logb 10) diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi index 600639f244f..08c3e519ebe 100644 --- a/doc/lispref/streams.texi +++ b/doc/lispref/streams.texi @@ -740,7 +740,8 @@ The default is @code{t}, meaning display in the echo area. @defvar print-quoted If this is non-@code{nil}, that means to print quoted forms using abbreviated reader syntax, e.g., @code{(quote foo)} prints as -@code{'foo}, and @code{(function foo)} as @code{#'foo}. +@code{'foo}, and @code{(function foo)} as @code{#'foo}. The default +is @code{t}. @end defvar @defvar print-escape-newlines diff --git a/etc/NEWS b/etc/NEWS index cdd94271c9e..e630bb71fec 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -24,12 +24,14 @@ applies, and please also update docstrings as needed. * Installation Changes in Emacs 27.1 +--- ** Emacs now uses GMP, the GNU Multiple Precision library. By default, if 'configure' does not find a suitable libgmp, it arranges for the included mini-gmp library to be built and used. The new 'configure' option '--without-libgmp' uses mini-gmp even if a suitable libgmp is available. +--- ** Emacs can now use HarfBuzz as its shaping engine. The new configure option '--with-harfbuzz' adds support for the HarfBuzz text shaping engine. It is on by default; use './configure @@ -42,48 +44,19 @@ supported ones, so the font backends that use older shaping engines enabled by default; they can be enabled via the 'font-backend' frame parameter or via X resources. -** The new configure option '--with-json' adds support for JSON using -the Jansson library. It is on by default; use './configure ---with-json=no' to build without Jansson support. The new JSON -functions 'json-serialize', 'json-insert', 'json-parse-string', and -'json-parse-buffer' are typically much faster than their Lisp -counterparts from json.el. +--- +** The new configure option '--with-json' adds native support for JSON. +This uses the Jansson library. The option is on by default; use +'./configure --with-json=no' to build without Jansson support. The +new JSON functions 'json-serialize', 'json-insert', +'json-parse-string', and 'json-parse-buffer' are typically much faster +than their Lisp counterparts from json.el. +--- ** The configure option '--with-cairo' is no longer experimental. This builds Emacs with Cairo drawing, and supports built-in printing -when Emacs is built with GTK+. - -** Emacs no longer defaults to using ImageMagick to display images, -due to security and stability concerns. To override the default, use -'configure --with-imagemagick'. - -** Several configure options now accept an option-argument 'ifavailable'. -For example, './configure --with-xpm=ifavailable' now configures Emacs -to attempt to use libxpm but to continue building even if libxpm is -absent. The other affected options are '--with-gif', '--with-gnutls', -'--with-jpeg', '--with-png', and '--with-tiff'. - -** The etags program now uses the C library's regular expression matcher -when possible, and a compatible regex substitute otherwise. This will -let developers maintain Emacs's own regex code without having to also -support other programs. The new configure option '--without-included-regex' -forces etags to use the C library's regex matcher even if the regex -substitute ordinarily would be used to work around compatibility problems. - -** Emacs has been ported to the '-fcheck-pointer-bounds' option of GCC. -This causes Emacs to check bounds of some arrays addressed by its -internal pointers, which can be helpful when debugging the Emacs -interpreter or modules that it uses. If your platform supports it you -can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2 --mmpx -fcheck-pointer-bounds"' on Intel MPX platforms. - -** Emacs now normally uses a C pointer type instead of a C integer -type to implement Lisp_Object, which is the fundamental machine word -type internal to the Emacs Lisp interpreter. This change aims to -catch typos and supports '-fcheck-pointer-bounds'. The 'configure' -option '--enable-check-lisp-object-type' is therefore no longer as -useful and so is no longer enabled by default in developer builds, -to reduce differences between developer and production builds. +when Emacs is built with GTK+. Some severe bugs in this build were +fixed, and we can therefore offer this to users without caveats. +++ ** Emacs now uses a "portable dumper" instead of unexec. @@ -100,20 +73,21 @@ non-default '.pdmp' file to load the state from; see the node "Initial Options" in the Emacs manual for more information. An Emacs started via a dump file can create a new dump file only if it -was invoked with the '-batch' option. +was invoked with the '-batch' option. (This is a temporary +limitation; we plan on lifting it in a future release.) Although the portable dumper has been tested, it may have a bug on unusual platforms. If you require traditional unexec dumping you can use the configure-time option '--with-dumping=unexec'; however, please file a bug report describing the situation, as unexec dumping is -deprecated. +deprecated, and we plan on removing it in some future release. -+++ +--- ** The new configure option '--enable-checking=structs' attempts to check that the portable dumper code has been updated to match the last change to one of the data structures that it relies on. -+++ +--- ** The configure options '--enable-checking=conslist' and '--enable-checking=xmallocoverrun' have been withdrawn. The former made Emacs irredeemably slow, and the latter made it crash. Neither @@ -121,7 +95,46 @@ option was useful with modern debugging tools such as AddressSanitizer. (See etc/DEBUG for the details of using the modern replacements of the removed configure options.) -+++ +--- +** Emacs no longer defaults to using ImageMagick to display images. +This is due to security and stability concerns with ImageMagick. To +override the default, use 'configure --with-imagemagick'. + +--- +** Several configure options now accept an option-argument 'ifavailable'. +For example, './configure --with-xpm=ifavailable' now configures Emacs +to attempt to use libxpm but to continue building even if libxpm is +absent. The other affected options are '--with-gif', '--with-gnutls', +'--with-jpeg', '--with-png', and '--with-tiff'. + +--- +** The 'etags' program now uses the C library's regular expression matcher. +If it's possible, 'etags' will use the regexp matcher from the +system's standard C library, otherwise it will be linked with a +compatible regex substitute. This lets developers maintain Emacs's +own regex code without having to also support other programs. The new +configure option '--without-included-regex' forces 'etags' to use the C +library's regex matcher even if the regex substitute ordinarily would +be used to work around compatibility problems. + +--- +** Emacs has been ported to the '-fcheck-pointer-bounds' option of GCC. +This causes Emacs to check bounds of some arrays addressed by its +internal pointers, which can be helpful when debugging the Emacs +interpreter or modules that it uses. If your platform supports it you +can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2 +-mmpx -fcheck-pointer-bounds"' on Intel MPX platforms. + +--- +** Emacs now normally uses a C pointer type instead of a C integer +type to implement Lisp_Object, which is the fundamental machine word +type internal to the Emacs Lisp interpreter. This change aims to +catch typos and supports '-fcheck-pointer-bounds'. The 'configure' +option '--enable-check-lisp-object-type' is therefore no longer as +useful and so is no longer enabled by default in developer builds, +to reduce differences between developer and production builds. + +--- ** The distribution tarball now has test cases; 'make check' runs them. This is intended mostly to help developers. @@ -129,10 +142,13 @@ This is intended mostly to help developers. ** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3 builds respectively. +--- ** New make target 'help' shows a summary of common make targets. -** Emacs now builds with dynamic module support by default. Pass -'--without-modules' to 'configure' to disable dynamic module support. +--- +** Emacs now builds with dynamic module support by default. +Pass '--without-modules' to 'configure' to disable dynamic module +support. * Startup Changes in Emacs 27.1 @@ -202,6 +218,55 @@ the new version of the file again.) * Changes in Emacs 27.1 ++++ +** Emacs now supports resizing and rotating images without ImageMagick. +All modern systems support this feature. (On GNU and Unix systems, +Cairo drawing or the XRender extension to X11 is required for this to +be available; the configure script will test for it and, if found, +enable scaling.) + +The new function 'image-transforms-p' can be used to test whether any +given frame supports these capabilities. + ++++ +** The Network Security Manager now allows more fine-grained control +of what checks to run via the 'network-security-protocol-checks' +user option. + ++++ +** TLS connections have their security tightened by default. +Most of the checks for outdated, believed-to-be-weak TLS algorithms +and ciphers are now switched on by default. (In addition, several new +TLS weaknesses are now warned about.) By default, the NSM will +flag connections using these weak algorithms and ask users whether to +allow them. To get the old behavior back (where certificates are +checked for validity, but no warnings about weak cryptography are +issued), you can either set 'network-security-protocol-checks' to nil, +or adjust the elements in that user option to only happen on the 'high' +security level (assuming you use the 'medium' level). + +--- +** New user option 'nsm-trust-local-network'. +Allows skipping Network Security Manager checks for hosts on your +local subnet(s). It defaults to nil. Usually, there should be no +need to set this non-nil, and doing that risks opening your local +network connections to attacks. So be sure you know what you are +doing before changing the value. + ++++ +** Native GnuTLS connections can now use client certificates. +Previously, this support was only available when using the external +'gnutls-cli' command. Call 'open-network-stream' with +':client-certificate t' to trigger looking up of per-server +certificates via 'auth-source'. + ++++ +** New user option 'network-stream-use-client-certificates'. +When non-nil, 'open-network-stream' performs lookups of client +certificates using 'auth-source' as if ':client-certificate t' were +specified if there is no explicit ':client-certificate' parameter. +Defaults to nil. + +++ ** 'next/previous-multiframe-window' have been renamed. The new names are as follows: @@ -215,14 +280,14 @@ compatibility. ** emacsclient +++ -*** emacsclient now supports an 'EMACS_SOCKET_NAME' environment variable. +*** emacsclient now supports the 'EMACS_SOCKET_NAME' environment variable. The command-line argument '--socket-name' overrides it. (The same behavior as for the pre-existing 'EMACS_SERVER_FILE' variable.) +++ -*** Emacs and emacsclient now default to "$XDG_RUNTIME_DIR/emacs" -as the directory for client/server sockets, if Emacs is running -on a platform or environment that sets the 'XDG_RUNTIME_DIR' +*** Emacs and emacsclient now default to "$XDG_RUNTIME_DIR/emacs". +This is used as the directory for client/server sockets, if Emacs is +running on a platform or environment that sets the 'XDG_RUNTIME_DIR' environment variable to indicate where session sockets should go. To get the old, less-secure behavior, you can set the 'EMACS_SOCKET_NAME' environment variable to an appropriate value. @@ -314,45 +379,6 @@ such as 'libxml-parse-html-region') traversal function has been added: 'dom-search', which takes a DOM and a predicate and returns all nodes that match. -+++ -** The Network Security Manager now allows more fine-grained control -of what checks to run via the 'network-security-protocol-checks' -user option. - -+++ -** TLS connections have their security tightened by default. -Most of the checks for outdated, believed-to-be-weak TLS algorithms -and ciphers are now switched on by default. (In addition, several new -TLS weaknesses are now warned about.) By default, the NSM will -flag connections using these weak algorithms and ask users whether to -allow them. To get the old behavior back (where certificates are -checked for validity, but no warnings about weak cryptography are -issued), you can either set 'network-security-protocol-checks' to nil, -or adjust the elements in that user option to only happen on the 'high' -security level (assuming you use the 'medium' level). - ---- -** New user option 'nsm-trust-local-network'. -Allows skipping Network Security Manager checks for hosts on your -local subnet(s). It defaults to nil. Usually, there should be no -need to set this non-nil, and doing that risks opening your local -network connections to attacks. So be sure you know what you are -doing before changing the value. - -+++ -** Native GnuTLS connections can now use client certificates. -Previously, this support was only available when using the external -'gnutls-cli' command. Call 'open-network-stream' with -':client-certificate t' to trigger looking up of per-server -certificates via 'auth-source'. - -+++ -** New user option 'network-stream-use-client-certificates'. -When non-nil, 'open-network-stream' performs lookups of client -certificates using 'auth-source' as if ':client-certificate t' were -specified if there is no explicit ':client-certificate' parameter. -Defaults to nil. - +++ ** New function 'fill-polish-nobreak-p', to be used in 'fill-nobreak-predicate'. It blocks line breaking after a one-letter word, also in the case when @@ -382,7 +408,8 @@ The Sami input methods include: 'norwegian-sami-prefix', 'skolt-sami-prefix', and 'kildin-sami-prefix'. +++ -** In Japanese environments that do not specify encodings and are not +** Japanese environments use UTF-8 by default. +In Japanese environments that do not specify encodings and are not based on MS-Windows, the default encoding is now utf-8 instead of japanese-iso-8bit. @@ -475,6 +502,7 @@ grep hits (this used to be controlled by 'compilation-search-path'). directories searched for byte-compiler error messages (this used to be controlled by 'compilation-search-path'). +--- ** Multicolor fonts such as "Noto Color Emoji" can be displayed on Emacs configured with Cairo drawing and linked with cairo >= 1.16.0. @@ -541,6 +569,13 @@ if so, 'backup-by-copying-when-mismatch' will be forced on. * Editing Changes in Emacs 27.1 ++++ +** When asked to visit a large file, Emacs now offers visiting it literally. +Previously, Emacs would only ask for confirmation before visiting +large files. Now it also offers a third alternative: to visit the +file literally, as in 'find-file-literally', which speeds up +navigation and editing of large files. + +++ ** 'zap-to-char' now uses history of characters you used to zap to. 'zap-to-char' uses the new 'read-char-from-minibuffer' function to allow @@ -552,6 +587,12 @@ where inputting the character again may involve many keystrokes. ** 'save-some-buffers' now has a new action in the prompt: 'C-f' will exit the command and switch to the buffer currently being asked about. +--- +** More commands support noncontiguous rectangular regions, namely +'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region', +'upcase-initials-region', 'replace-string', 'replace-regexp', and +'delimit-columns-region'. + +++ ** The new 'amalgamating-undo-limit' variable can be used to control how many changes should be amalgamated when using the 'undo' command. @@ -599,19 +640,6 @@ tables which do not have any non-system abbrevs to save. 'text-property-search-backward' have been added. These provide an interface that's more like functions like 'search-forward'. ---- -** More commands support noncontiguous rectangular regions, namely -'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region', -'upcase-initials-region', 'replace-string', 'replace-regexp', and -'delimit-columns-region'. - -+++ -** When asked to visit a large file, Emacs now offers visiting it literally. -Previously, Emacs would only ask for confirmation before visiting -large files. Now it also offers a third alternative: to visit the -file literally, as in 'find-file-literally', which speeds up -navigation and editing of large files. - --- ** 'add-dir-local-variable' now uses dotted pair notation syntax to write alists of variables to ".dir-locals.el". This is the same @@ -642,6 +670,11 @@ If the region is active, the command joins all the lines in the region. When there's no active region, the command works on the current and the previous or the next line, as before. ++++ +** You can now change the font size with the mouse wheel. +Scroling the mouse wheel with the Ctrl key pressed will now act the +same as the 'C-x C-+' and 'C-x C--' commands. + * Changes in Specialized Modes and Packages in Emacs 27.1 @@ -795,6 +828,7 @@ at the end of the active minibuffer. +++ *** 'y-or-n-p' now uses the minibuffer to read 'y' or 'n' answer. +--- *** Some commands that previously used 'read-char-choice' now read a character using the minibuffer by 'read-char-from-minibuffer'. @@ -827,9 +861,11 @@ back, customize 'follow-hide-ghost-cursors' to nil. ** Windmove -*** 'windmove-create-window' when non-nil makes a new window on moving off -the edge of the frame. +--- +*** 'windmove-create-window' when non-nil makes a new window. +This happens upon moving off the edge of the frame. +--- *** Windmove supports directional window display and selection. The new command 'windmove-display-default-keybindings' binds default keys with provided modifiers (by default, Shift-Meta) to the commands @@ -843,6 +879,7 @@ display the buffer in the same window, for example, 'S-M-0 C-h e' displays the "*Messages*" buffer in the same window. 'S-M-t C-h C-n' displays NEWS in a new tab. +--- *** Windmove also supports directional window deletion. The new command 'windmove-delete-default-keybindings' binds default keys with provided prefix (by default, 'C-x') and modifiers (by default, @@ -852,13 +889,15 @@ With a prefix arg 'C-u', also kills the buffer in that window. With 'M-0', deletes the selected window and selects the window that was in the specified direction. +--- *** New command 'windmove-swap-states-in-direction' binds default keys to the commands that swap the states of the selected window with the window in the specified direction. -*** Windmove code no longer used is now obsolete. That includes the -user option 'windmove-window-distance-delta' and the functions -'windmove-coord-add', 'windmove-constrain-to-range', +--- +*** Windmove code no longer used is now obsolete. +That includes the user option 'windmove-window-distance-delta' and the +functions 'windmove-coord-add', 'windmove-constrain-to-range', 'windmove-constrain-around-range', 'windmove-frame-edges', 'windmove-constrain-loc-for-movement', 'windmove-wrap-loc-for-movement', 'windmove-reference-loc' and 'windmove-other-window-loc'. @@ -878,9 +917,11 @@ The mode is automatically enabled in files that start with the +++ *** 'next-file' is now an obsolete alias of 'tags-next-file'. +--- *** 'tags-loop-revert-buffers' is an obsolete alias of 'fileloop-revert-buffers'. ++++ *** The 'tags-loop-continue' function along with the 'tags-loop-operate' and 'tags-loop-scan' variables are now obsolete; use the new 'fileloop-initialize' and 'fileloop-continue' functions @@ -906,9 +947,10 @@ permissions of such files with a special face 'dired-set-id'. *** New command 'dired-create-empty-file'. +++ -*** New command and keystroke 'dired-number-of-marked-files' bound to -'* N'. +*** New command 'dired-number-of-marked-files'. +It is by default bound to '* N'. +--- *** The marking commands now report how many files were marked by the command itself, not how many files are marked in total. @@ -925,19 +967,22 @@ directories in the destination. *** 'dired-dwim-target' can be customized to prefer either the next window, or one of the most recently visited windows with a Dired buffer. ++++ *** When the new user option 'dired-vc-rename-file' is non-nil, Dired performs file renaming using underlying version control system. +--- +*** Zstandard compression is now supported for 'dired-do-compress' and +'dired-do-compress-to'. + ** Find-Dired +--- *** New user option 'find-dired-refine-function'. The default value is 'find-dired-sort-by-filename'. -*** New sorting options for the user option 'find-ls-option'. - --- -*** Zstandard compression is now supported for 'dired-do-compress' and -'dired-do-compress-to'. +*** New sorting options for the user option 'find-ls-option'. ** Change Logs and VC @@ -951,11 +996,13 @@ script. The default is nil. *** New command 'log-edit-generate-changelog-from-diff', bound to 'C-c C-w'. This generates ChangeLog entries from the VC fileset diff. +--- *** 'vc-dir' now shows a button allowing you to hide the stash list. Controlled by user option 'vc-git-show-stash'. Default t means show the entire list as before. An integer value limits the list length (but still allows you to show the entire list via the button). ++++ *** Recording ChangeLog entries doesn't require an actual file. If a ChangeLog file doesn't exist, and if the new user option 'add-log-dont-create-changelog-file' is non-nil (which is the @@ -965,27 +1012,32 @@ still be used if it exists.) Set the user option to nil to get the previous behavior of always creating a buffer that visits a ChangeLog file. +--- *** New user option 'vc-find-revision-no-save'. With non-nil, 'vc-find-revision' doesn't write the created buffer to file. --- *** 'vc-dir-ignore' now takes a prefix argument to ignore all marked files. +--- *** New user option 'vc-git-grep-template'. This new user option allows customizing the default arguments passed to 'git-grep' when 'vc-git-grep' is used. +--- *** Command 'vc-git-stash' now respects marks in the "*vc-dir*" buffer. When some files are marked, only those are stashed. When no files are marked, all modified files are stashed, as before. -*** 'vc-git-stash' has now been bound to the 'C' keystroke in the -stash headers. +--- +*** 'vc-git-stash' is now bound to 'C' in the stash headers. +-- *** Some stash keybindings are now available in the stash button. 'vc-git-stash' and 'vc-git-stash-snapshot' can now be run using 'C' and 'S' respectively, including when there are no stashes. +--- *** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag. --- @@ -1013,8 +1065,8 @@ for a revision. *** 'C-u C-x v D' ('vc-root-version-diff') prompts for two revisions and compares their entire trees. -*** New user option 'vc-hg-revert-switches' specifies switches to pass -to Hg revert. +*** New user option 'vc-hg-revert-switches'. +It specifies switches to pass to Hg's 'revert' command. *** 'C-x v M D' ('vc-diff-mergebase') and 'C-x v M L' ('vc-log-mergebase') print diffs and logs between the merge base (common ancestor) of two @@ -1026,6 +1078,7 @@ buffers will delete the marked files (or if no files are marked, the file under point). This command does not notify the VC backend, and is mostly useful for unregistered files. ++++ *** New command 'vc-log-search' asks for a pattern, searches it in the revision log, and displays matched log entries in the log buffer. For example, 'M-x vc-log-search RET bug#36644 RET' @@ -1042,6 +1095,7 @@ ID, and shows its log entry together with the diffs introduced by the revision's commit. (For some less capable VCSes, only the log entry is shown.) +--- *** 'C-x v =' can now mimic Magit's diff format. Set the new user option 'diff-font-lock-prettify' to t for that, see below under "Diff mode". @@ -1072,6 +1126,7 @@ Fragments of source in Diff hunks are now by default highlighted according to the appropriate major mode. Customize the new user option 'diff-font-lock-syntax' to nil to disable this. +--- *** File headers can be shortened, mimicking Magit's diff format. To enable it, set the new user option 'diff-font-lock-prettify' to t. On GUI frames, this option also displays the insertion and deletion @@ -1093,16 +1148,20 @@ start of a sentence or at '(point-min)', else '@ref'. ** Browse-url +--- *** The function 'browse-url-emacs' can now visit a URL in selected window. It now treats the optional 2nd argument to mean that the URL should be shown in the currently selected window. +--- *** A new function, 'browse-url-add-buttons' can be used to add clickable links to most ordinary special-mode buffers that display text that have URLs embedded. 'browse-url-button-regexp' controls what's considered a button. -*** A new user option, 'browse-url-secondary-browser-function', has been added. +--- +*** New user option 'browse-url-secondary-browser-function'. +It can be set to a function that invokes an alternative browser. ** Comint @@ -1131,6 +1190,7 @@ end. *** 'comint-run' can now accept a list of switches to pass to the program. 'C-u M-x comint-run' will prompt for the switches interactively. ++++ *** Abnormal hook 'comint-password-function' has been added. This hook permits a derived mode to supply a password for the underlying command interpreter without prompting the user. For @@ -1146,6 +1206,7 @@ if it had been supplied on the command line. ** SQL +--- *** SQL Indent Minor Mode SQL Mode now supports the ELPA 'sql-indent' package for assisting sophisticated SQL indenting rules. Note, however, that SQL is not @@ -1158,16 +1219,19 @@ prefer to rely upon existing Emacs facilities for formatting code but the 'sql-indent' package provides facilities to aid more casual SQL developers layout queries and complex expressions. +--- **** 'sql-use-indent-support' (default t) enables SQL indention support. The 'sql-indent' package from ELPA must be installed to get the indentation support in 'sql-mode' and 'sql-interactive-mode'. +--- **** 'sql-mode-hook' and 'sql-interactive-mode-hook' changed. Both hook variables have had 'sql-indent-enable' added to their default values. If you have existing customizations to these variables, you should make sure that the new default entry is included. +--- *** Connection Wallet Database passwords can now by stored in NETRC or JSON data files that may optionally be encrypted. When establishing an interactive session @@ -1200,9 +1264,11 @@ emulator in line mode. You should instead set properties on known diagnostic symbols, like ':error' and ':warning', as demonstrated in the Flymake manual. ++++ *** New user option 'flymake-start-on-save-buffer'. Control whether Flymake starts checking the buffer on save. +--- *** Flymake and backend functions may exchange hints about buffer changes. This enables more efficient backends. See the docstring of 'flymake-diagnostic-functions' or the Flymake manual for details. @@ -1213,15 +1279,19 @@ use 'post-self-insert-hook' to check on newline. ** Ruby +--- *** The Rubocop Flymake diagnostic function will only run Lint cops if it can't find the config file. +--- *** Rubocop is called with 'bundle exec' if Gemfile mentions it. +--- *** New command 'ruby-find-library-file' bound to 'C-c C-f'. ** Package +--- *** Warn if "footer line" is missing, but still install package. package.el used to refuse to install a package without the so-called "footer line", which appears at the very end of the file: @@ -1236,7 +1306,8 @@ Note that versions of Emacs older than 27.1 will not only refuse to install packages without such a line -- they will be unable to parse package data. It is therefore recommended to keep this line. -*** Change of 'package-check-signature' for packages with multiple sigs ++++ +*** Change of 'package-check-signature' for packages with multiple sigs. In previous Emacsen, 't' checked that all signatures are valid. Now 't' only checks that at least one signature is valid and the new 'all' value needs to be used if you want to enforce that all signatures @@ -1248,9 +1319,11 @@ changed slightly: If a usable OpenPGP configuration can't be found (for instance, if gpg isn't installed), it now has the same meaning as nil. +--- *** New function 'package-get-version' lets packages query their own version. Example use in auctex.el: '(defconst auctex-version (package-get-version))' +--- *** New 'package-quickstart' feature. When 'package-quickstart' is non-nil, package.el precomputes a big autoloads file so that activation of packages can be done much faster, @@ -1260,6 +1333,7 @@ It also causes user options like 'package-user-dir' and is run rather than at startup so you don't need to set them in your early init file. +--- *** New function 'package-activate-all'. +++ @@ -1326,17 +1400,20 @@ where it was invoked. --- *** New xref faces 'xref-file-header', 'xref-line-number', 'xref-match'. +--- *** New user option 'xref-show-definitions-function'. It encapsulates the logic pertinent to showing the result of 'xref-find-definitions'. The user can change it to customize its behavior and the display of results. +--- *** Search results show the buffer even for one hit. The search-type Xref commands (e.g. 'xref-find-references' or 'project-find-regexp') now show the results buffer even when there is only one hit. This can be altered by changing 'xref-show-xrefs-function'. ++++ *** Xref buffers support refreshing the search results. A new command 'xref-revert-buffer' is bound to 'g'. @@ -1355,9 +1432,11 @@ completion facilities. ** Ecomplete +--- *** The ecomplete sorting has changed to a decay-based algorithm. This can be controlled by the new 'ecomplete-sort-predicate' user option. +--- *** The 'ecompleterc' file is now placed in "~/.emacs.d/ecompleterc" by default. Of course it will still find it if you have it in "~/.ecompleterc". @@ -1385,9 +1464,8 @@ deleted by any IMAP client (rather than just those that have been deleted by Gnus). +++ -*** New user option 'gnus-use-atomic-windows' makes Gnus window layouts -atomic. See the "Atomic Windows" section of the Elisp manual for -details. +*** New user option 'gnus-use-atomic-windows' makes Gnus window layouts atomic. +See the "Atomic Windows" section of the Elisp manual for details. +++ *** There's a new value for 'gnus-article-date-headers', @@ -1409,6 +1487,7 @@ server variable to non-nil. *** A prefix argument to 'gnus-summary-limit-to-score' will limit reverse. Limit to articles with score at below. +--- *** The function 'gnus-score-find-favorite-words' has been renamed from 'gnus-score-find-favourite-words'. @@ -1472,6 +1551,7 @@ The user option to use instead to alter text to be sent is now ** EUDC +--- *** XEmacs support has been removed. ** eww/shr @@ -1518,6 +1598,7 @@ of 'browse-url-secondary-browser-function'. ** Htmlfontify ++++ *** The functions 'hfy-color', 'hfy-color-vals' and 'hfy-fallback-color-values' and the variables 'hfy-fallback-color-map' and 'hfy-rgb-txt-color-map' have been renamed from names that used @@ -1533,9 +1614,11 @@ restored when the file is visited. ** Smtpmail +--- *** Authentication mechanisms can be added via external packages, by defining new 'cl-defmethod' of 'smtpmail-try-auth-method'. ++++ *** To always force smtpmail to send credentials over on the first attempt when communicating with the SMTP server(s), the 'smtpmail-servers-requiring-authorization' user option can be used. @@ -1547,7 +1630,10 @@ user option says how many times to retry. ** Footnote mode +--- *** Support Hebrew-style footnotes + +--- *** Footnote text lines are now aligned. Can be controlled via the new user option 'footnote-align-to-fn-text'. @@ -1588,7 +1674,8 @@ and 'python-nav-end-of-statement' to the inferior Python process. ** Help --- -*** Description of variables and functions give an estimated first release. +*** Descriptions of variables and functions give an estimated first release +where the variable or function appeared in Emacs. --- *** Output format of 'C-h l' ('view-lossage') has changed. @@ -1614,6 +1701,7 @@ as a single mode. ** Search and Replace ++++ *** Isearch supports a prefix argument for 'C-s' ('isearch-repeat-forward') and 'C-r' ('isearch-repeat-backward'). With a prefix argument, these commands repeat the search for the specified occurrence of the search string. @@ -1623,6 +1711,7 @@ This makes possible also to use a prefix argument for 'M-s .' Also a prefix argument is supported for 'isearch-yank-until-char', 'isearch-yank-word-or-char', 'isearch-yank-symbol-or-char'. ++++ *** To go to the first/last occurrence of the current search string is possible now with new commands 'isearch-beginning-of-buffer' and 'isearch-end-of-buffer' bound to 'M-s M-<' and 'M-s M->' in Isearch. @@ -1631,12 +1720,14 @@ counting from the beginning/end of the buffer. This complements 'C-s'/'C-r' that searches for the next Nth relative occurrence with a numeric argument. ++++ *** 'isearch-lazy-count' shows the current match number and total number of matches in the Isearch prompt. User options 'lazy-count-prefix-format' and 'lazy-count-suffix-format' define the format of the current and the total number of matches in the prompt's prefix and suffix respectively. +--- *** 'lazy-highlight-buffer' highlights matches in the full buffer. It is useful in combination with 'lazy-highlight-cleanup' customized to nil to leave matches highlighted in the whole buffer after exiting isearch. @@ -1669,6 +1760,7 @@ to extend the search string by yanking text that ends at the new position after moving point in the current buffer. 'shift' extends the search string by motion commands while holding down the shift key. ++++ *** 'isearch-allow-scroll' provides new option 'unlimited' to allow scrolling any distance off screen. @@ -1732,8 +1824,8 @@ To clear all breakpoints in the current form, the 'U' command in --- *** Re-instrumenting a function with Edebug will now try to preserve -previously-set breakpoints. If the code has changed substantially, -this may not be possible. +previously-set breakpoints. However, if the code has changed +substantially, this may not be possible. +++ *** New command 'edebug-remove-instrumentation'. @@ -1764,6 +1856,7 @@ been instrumented by Edebug. ** Enhanced xterm support +--- *** New user option 'xterm-set-window-title' controls whether Emacs sets the XTerm window title. This feature is experimental and is disabled by default. @@ -1778,6 +1871,7 @@ The abbreviation can be disabled by the new user option 'grep-find-abbreviate'. The new command 'grep-find-toggle-abbreviation' toggles it interactively. +--- *** 'grep-find-use-xargs' is now customizable with sorting options. ** ERT @@ -1797,7 +1891,7 @@ the Elisp manual for documentation of the new mode and its commands. --- *** Gamegrid now determines its default glyph size based on display dimensions, instead of always using 16 pixels. As a result, Tetris, -Snake and Pong are more playable on HiDPI displays. +Snake and Pong are better playable on HiDPI displays. --- *** 'gamegrid-add-score' can now sort scores from lower to higher. @@ -1836,6 +1930,7 @@ default, and not just the opening element. ** Eshell +--- *** TAB completion uses the standard 'completion-at-point' rather than 'pcomplete'. Its UI is slightly different but can be customized to behave similarly, e.g. Pcomplete's default cycling can be obtained @@ -1858,6 +1953,7 @@ To restore the old behavior, use *** The function 'eshell-uniquify-list' has been renamed from 'eshell-uniqify-list'. +--- *** The function 'eshell/kill' is now able to handle signal switches. Previously 'eshell/kill' would fail if provided a kill signal to send to the process. It now accepts signals specified either by name or by @@ -1890,11 +1986,13 @@ Customize the new user option 'shell-command-prompt-show-cwd' to enable it. ** Pcomplete +--- *** The 'pcomplete' command is now obsolete. The Pcomplete functionality can be obtained via 'completion-at-point' instead, by adding 'pcomplete-completions-at-point' to 'completion-at-point-functions'. +--- *** The function 'pcomplete-uniquify-list' has been renamed from 'pcomplete-uniqify-list'. @@ -1908,6 +2006,7 @@ To recover the previous behavior, set new user option --- *** The Secret Service backend supports the ':create' key now. +--- *** ".authinfo" and ".netrc" files now use a new mode: 'authinfo-mode'. This is just like 'fundamental-mode', except that it hides passwords under a "****" display property. When the cursor moves to this text, @@ -1989,18 +2088,21 @@ names of buffers shown by the windows of a window configuration. ** The options.el library has been removed. It was obsolete since Emacs 22.1, replaced by customize. +--- ** The tls.el and starttls.el libraries are now marked obsolete. Use of built-in libgnutls based functionality (described in the Emacs GnuTLS manual) is recommended instead. ** Message +--- *** Completion of email addresses can use the standard completion UI. This is controlled by 'message-expand-name-standard-ui'. With the standard UI the different sources (ecomplete, bbdb, and eudc) are matched together and try to obey 'completion-styles'. It should work for other completion front ends like Company. +--- *** 'message-mode' now supports highlighting citations of different depths. This can be customized via the new user option 'message-cite-level-function' and the new 'message-cited-text-*' faces. @@ -2053,6 +2155,7 @@ It now applies to epg functions as well as epa functions. been removed. Use 'encode-coding-string', 'decode-coding-string', and 'select-safe-coding-system' instead. +--- *** 'epg-context' structure supports now 'sender' slot. The value of the new 'sender' slot (if a string) is used to set gpg's '--sender' option. This feature is used by @@ -2067,6 +2170,7 @@ The value of the new 'sender' slot (if a string) is used to set gpg's If this option is non-nil, messages appended to an output file by the 'rmail-output' command have their Deleted flag reset. +--- *** The command 'rmail-summary-by-senders' with an empty argument selects the messages to summarize with a regexp that matches the sender of the current message. @@ -2079,7 +2183,7 @@ This is handy in Lisp programs that run on a non-main thread and want to signal the main thread, e.g., when they encounter an error. +++ -*** 'thread-join' returns the result of the finished thread now. +*** 'thread-join' now returns the result of the finished thread. +++ *** 'thread-signal' does not propagate errors to the main thread. @@ -2288,6 +2392,7 @@ name, too. ** Autorevert ++++ *** New user option 'auto-revert-avoid-polling' for saving power. When set to a non-nil value, buffers in Auto Revert mode are no longer polled for changes periodically. This reduces the power consumption @@ -2295,6 +2400,7 @@ of an idle Emacs, but may fail on some network file systems; set 'auto-revert-notify-exclude-dir-regexp' to match files where notification is not supported. The default value is nil. ++++ *** New variable 'buffer-auto-revert-by-notification' A major mode can declare that notification on the buffer's default directory is sufficient to know when updates are required, by setting @@ -2332,6 +2438,7 @@ a sensor for every decryption. *** 'bookmark-file' and 'bookmark-old-default-file' are now obsolete aliases of 'bookmark-default-file'. +--- *** New user option 'bookmark-watch-bookmark-file'. When non-nil, watch whether the bookmark file has changed on disk. @@ -2342,8 +2449,10 @@ version 19.34, released in 1996, and will no longer be automatically converted to the new bookmark file format. The following functions are now declared obsolete: -bookmark-grok-file-format-version, bookmark-maybe-upgrade-file-format, -bookmark-upgrade-file-format-from-0, bookmark-upgrade-version-0-alist +'bookmark-grok-file-format-version', +'bookmark-maybe-upgrade-file-format', +'bookmark-upgrade-file-format-from-0', and +'bookmark-upgrade-version-0-alist'. --- ** The mantemp.el library is now marked obsolete. @@ -2390,11 +2499,13 @@ and 'gravatar-force-default'. ** ada-mode +--- *** The built-in ada-mode is now deleted. The GNU ELPA package is a good replacement, even in very large source files. ** time-stamp +--- *** New '%5z' conversion for 'time-stamp-format' gives time zone offset. Specifying '%5z' in 'time-stamp-format' or 'time-stamp-pattern' expands to the time zone offset, e.g., '+0100'. The time zone used is @@ -2404,6 +2515,7 @@ Because this feature is new in Emacs 27.1, do not use it in the local variables section of any file that might be edited by an older version of Emacs. +--- *** Some conversions recommended for 'time-stamp-format' have changed. The new documented/recommended %-conversions are closer to those used by 'format-time-string' and are compatible at least as far back @@ -2426,7 +2538,10 @@ if you set 'time-stamp-format' or 'time-stamp-pattern' with a file-local variable, you may need to update the value. ** mode-local +--- *** Declare 'define-overload' and 'define-child-mode' as obsolete. + +--- *** Rename several internal functions to use a 'mode-local-' prefix. ** CC Mode @@ -2443,7 +2558,7 @@ default comment style (block or line); then set the user option ** Tab Bars +++ -*** Tab Bar mode +*** Tab Bar mode. The new command 'tab-bar-mode' enables the tab bar at the top of each frame, where you can use tabs to switch between named persistent window configurations. @@ -2466,6 +2581,7 @@ The user option 'tab-bar-position' specifies where to show the tab bar. Read the new Info node "(emacs) Tab Bars" for full description of all related features. ++++ *** Tab Line mode The new command 'global-tab-line-mode' enables the tab line above each window, which you can use to switch buffers in the window. Selecting @@ -2476,6 +2592,7 @@ a repeat count. Clicking on the plus icon adds a new buffer to the window-local tab line of buffers. Using the mouse wheel on the tab line scrolls tabs. ++++ ** fileloop.el lets one setup multifile operations like search&replace. +++ @@ -2538,9 +2655,11 @@ the hook may have specified higher/lower depths. This makes it possible to control the ordering of functions more precisely, as was already possible in 'add-function' and 'advice-add'. +--- ** In 'compilation-error-regexp-alist' the old undocumented feature where 'line' could be a function of 2 arguments has been dropped. +--- ** 'define-fringe-bitmap' is always defined, even when Emacs is built without any GUI support. @@ -2560,8 +2679,10 @@ default applied immediately. The variable 'custom--inhibit-theme-enable' controls this behavior; its default value changed in Emacs 27.1. +--- ** The REPETITIONS argument of 'benchmark-run' can now also be a variable. +--- ** Interpretation of relative 'HOME' directory has changed. If "$HOME" is set to a relative file name, 'expand-file-name' now interprets it relative to the directory where Emacs was started, not @@ -2569,17 +2690,19 @@ relative to the 'default-directory' of the current buffer. We recommend always setting "$HOME" to an absolute file name, so that its meaning is independent of where Emacs was started. +--- ** 'file-name-absolute-p' no longer considers "~foo" to be an absolute file name if there is no user named "foo". ++++ ** The FILENAME argument to 'file-name-base' is now mandatory and no longer defaults to 'buffer-file-name'. +++ ** File metadata primitives now signal an error if I/O, access, or other serious errors prevent them from determining the result. -Formerly, these functions often (though not always) returned nil. -For example, if there is an access error, I/O error or low-level +Formerly, these functions often (though not always) silently returned +nil. For example, if there is an access error, I/O error or low-level integer overflow when getting the attributes of a file F, '(file-attributes F)' now signals an error instead of returning nil. These functions still behave as before if the only problem is that the @@ -2595,19 +2718,23 @@ them through 'format' first. Even that is discouraged: for ElDoc support, you should set 'eldoc-documentation-function' instead of calling 'eldoc-message' directly. +--- ** Old-style backquotes now generate an error. They have been generating warnings for a decade. To interpret old-style backquotes as new-style, bind the new variable 'force-new-style-backquotes' to t. +--- ** Defining a Common Lisp structure using 'cl-defstruct' or 'cl-struct-define' whose name clashes with a builtin type (e.g., 'integer' or 'hash-table') now signals an error. +--- ** When formatting a floating-point number as an octal or hexadecimal integer, Emacs now signals an error if the number is too large for the implementation to format. ++++ ** 'logb' now returns infinity when given an infinite or zero argument, and returns a NaN when given a NaN. Formerly, it returned an extreme fixnum for such arguments. @@ -2652,6 +2779,7 @@ default-directory-alist, dired-default-directory, dired-default-directory-alist, dired-enable-local-variables, dired-hack-local-variables, dired-local-variables-file, dired-omit-here-always. ++++ ** Garbage collection no longer treats miscellaneous objects specially; they are now allocated like any other pseudovector. As a result, the 'garbage-collect' and 'memory-use-count' functions no longer return a @@ -2682,6 +2810,7 @@ The global value of 'indent-line-function', which defaults to To get back the old behavior, add a function to 'text-mode-hook' which performs '(setq-local indent-line-function #'indent-relative)'. +--- ** 'make-process' no longer accepts a non-nil ':stop' key. This has never worked reliably, and now causes an error. @@ -2719,6 +2848,7 @@ pointer is over. To change this behavior, you can customize the user option 'mouse-wheel-follow-mouse'. Note that this will also affect scrolling. ++++ ** Mouse scroll up and down with control key modifier also works on images where it scales the image under the mouse pointer. @@ -2729,102 +2859,6 @@ position pointed to by the argument POS) is not in a symbol. * Lisp Changes in Emacs 27.1 -+++ -** New macro 'benchmark-progn'. -This macro works like 'progn', but messages how long it takes to -evaluate the body forms. The value of the last form is the return -value. - -+++ -** New function 'read-char-from-minibuffer'. -This function works like 'read-char', but uses 'read-from-minibuffer' -to read a character, so it maintains a history that can be navigated -via usual minibuffer keystrokes 'M-p'/'M-n'. - -** New variables 'set-message-function' and 'clear-message-function' -can be used to specify functions to show and clear messages that -normally are displayed in the echo area. - -** 'setq-local' can now set an arbitrary number of variables, which -makes the syntax more like 'setq'. - -** 'reveal-mode' can now also be used for more than to toggle between -invisible and visible: It can also toggle 'display' properties in -overlays. This is only done on 'display' properties that have the -'reveal-toggle-invisible' property set. - -+++ -** 'process-contact' now takes an optional NO-BLOCK argument to allow -not waiting for a process to be set up. - ---- -** New variable 'read-process-output-max' controls sub-process throughput. -This variable determines how many bytes can be read from a sub-process -in one read operation. The default, 4096 bytes, was previously a -hard-coded constant. Setting it to a larger value might enhance -throughput of reading from sub-processes that produces vast -(megabytes) amounts of data in one go. - -+++ -** The new user option 'quit-window-hook' is now run first when -executing the 'quit-window' command. - -** The user options 'help-enable-completion-auto-load', -'help-enable-auto-load' and 'vhdl-project-auto-load', as well as the -function 'vhdl-auto-load-project' have been renamed to have "autoload" -without the hyphen in their names. Obsolete aliases from the old -names have been added. - -+++ -** Buttons (created with 'make-button' and related functions) can -now use the 'button-data' property. If present, the data in this -property will be passed on to the 'action' function instead of the -button itself in 'button-activate'. - -** 'defcustom' now takes a ':local' keyword that can be either t or -'permanent', which mean that the variable should be automatically -buffer-local. 'permanent' also sets the variable's 'permanent-local' -property. - -+++ -** The new macro 'with-suppressed-warnings' can be used to suppress -specific byte-compile warnings. - -+++ -** The new macro 'ignore-error' is like 'ignore-errors', but takes a -specific error condition, and will only ignore that condition. (This -can also be a list of conditions.) - ---- -** The new function 'byte-compile-info-message' can be used to output -informational messages that look pleasing during the Emacs build. - ---- -** New 'help-fns-describe-variable-functions' hook. -Makes it possible to add metadata information to 'describe-variable'. - -** i18n (internationalization) - -*** ngettext can be used now to return the right plural form -according to the given numeric value. - -+++ -** 'inhibit-null-byte-detection' is renamed to 'inhibit-nul-byte-detection'. - -+++ -** 'self-insert-command' takes the char to insert as (optional) argument. - -** 'lookup-key' can take a list of keymaps as argument. - -+++ -** 'condition-case' now accepts 't' to match any error symbol. - -+++ -** New function 'proper-list-p'. -Given a proper list as argument, this predicate returns its length; -otherwise, it returns nil. 'format-proper-list-p' is now an obsolete -alias for the new function. - +++ ** Emacs Lisp integers can now be of arbitrary size. Emacs uses the GNU Multiple Precision (GMP) library to support @@ -2936,6 +2970,117 @@ doing computations on a decoded time structure), 'make-decoded-time' filled out), and 'encoded-time-set-defaults' (which fills in nil elements as if it's midnight January 1st, 1970) have been added. ++++ +*** In the DST slot, 'encode-time' and 'parse-time-string' now return -1 +if it is not known whether daylight saving time is in effect. +Formerly they were inconsistent: 'encode-time' returned t in this +situation, whereas 'parse-time-string' returned nil. Now they +consistently use use nil to mean that DST is not in effect, and use -1 +to mean that it is not known whether DST is in effect. + ++++ +** New macro 'benchmark-progn'. +This macro works like 'progn', but messages how long it takes to +evaluate the body forms. The value of the last form is the return +value. + ++++ +** New function 'read-char-from-minibuffer'. +This function works like 'read-char', but uses 'read-from-minibuffer' +to read a character, so it maintains a history that can be navigated +via usual minibuffer keystrokes 'M-p'/'M-n'. + +--- +** New variables 'set-message-function' and 'clear-message-function' +can be used to specify functions to show and clear messages that +normally are displayed in the echo area. + ++++ +** 'setq-local' can now set an arbitrary number of variables, which +makes the syntax more like 'setq'. + +--- +** 'reveal-mode' can now also be used for more than to toggle between +invisible and visible: It can also toggle 'display' properties in +overlays. This is only done on 'display' properties that have the +'reveal-toggle-invisible' property set. + ++++ +** 'process-contact' now takes an optional NO-BLOCK argument to allow +not waiting for a process to be set up. + +--- +** New variable 'read-process-output-max' controls sub-process throughput. +This variable determines how many bytes can be read from a sub-process +in one read operation. The default, 4096 bytes, was previously a +hard-coded constant. Setting it to a larger value might enhance +throughput of reading from sub-processes that produces vast +(megabytes) amounts of data in one go. + ++++ +** The new user option 'quit-window-hook' is now run first when +executing the 'quit-window' command. + +** The user options 'help-enable-completion-auto-load', +'help-enable-auto-load' and 'vhdl-project-auto-load', as well as the +function 'vhdl-auto-load-project' have been renamed to have "autoload" +without the hyphen in their names. Obsolete aliases from the old +names have been added. + ++++ +** Buttons (created with 'make-button' and related functions) can +now use the 'button-data' property. If present, the data in this +property will be passed on to the 'action' function instead of the +button itself in 'button-activate'. + ++++ +** 'defcustom' now takes a ':local' keyword that can be either t or +'permanent', which mean that the variable should be automatically +buffer-local. 'permanent' also sets the variable's 'permanent-local' +property. + ++++ +** The new macro 'with-suppressed-warnings' can be used to suppress +specific byte-compile warnings. + ++++ +** The new macro 'ignore-error' is like 'ignore-errors', but takes a +specific error condition, and will only ignore that condition. (This +can also be a list of conditions.) + +--- +** The new function 'byte-compile-info-message' can be used to output +informational messages that look pleasing during the Emacs build. + +--- +** New 'help-fns-describe-variable-functions' hook. +Makes it possible to add metadata information to 'describe-variable'. + +** i18n (internationalization) + +--- +*** ngettext can be used now to return the right plural form +according to the given numeric value. + ++++ +** 'inhibit-null-byte-detection' is renamed to 'inhibit-nul-byte-detection'. + ++++ +** 'self-insert-command' takes the char to insert as (optional) argument. + ++++ +** 'lookup-key' can take a list of keymaps as argument. + ++++ +** 'condition-case' now accepts 't' to match any error symbol. + ++++ +** New function 'proper-list-p'. +Given a proper list as argument, this predicate returns its length; +otherwise, it returns nil. 'format-proper-list-p' is now an obsolete +alias for the new function. + +--- ** 'define-minor-mode' automatically documents the meaning of ARG. +++ @@ -3013,7 +3158,7 @@ See the section "(elisp) Window Hooks" in the Elisp manual for a detailed explanation of the new behavior. +++ -** Making scroll bar and fringe settings persistent for windows. +** Scroll bar and fringe settings can now be made persistent for windows. The functions 'set-window-scroll-bars' and 'set-window-fringes' now have a new optional argument that makes the settings they produce reliably survive subsequent invocations of 'set-window-buffer'. @@ -3056,6 +3201,7 @@ A 'window' entry can now also specify a reference window for ** New function 'string-distance' to calculate the Levenshtein distance between two strings. ++++ ** 'print-quoted' now defaults to t, so if you want to see '(quote x)' instead of 'x you will have to bind it to nil where applicable. @@ -3081,12 +3227,14 @@ titled "Allow '&rest' or '&optional' without following variable (Bug#29165)" for a full listing of which arglists are accepted across versions. +--- ** Internal parsing commands now use 'syntax-ppss' and disregard 'open-paren-in-column-0-is-defun-start'. This affects mostly things like 'forward-comment', 'scan-sexps', and 'forward-sexp' when parsing backward. The new variable 'comment-use-syntax-ppss' can be set to nil to recover the old behavior if needed. +--- ** The 'server-name' and 'server-socket-dir' variables are set when a socket has been passed to Emacs. @@ -3131,6 +3279,7 @@ depending on X's significand. If the optional third argument is non-nil, 'make-string' will produce a multibyte string even if its second argument is an ASCII character. +--- ** '(format "%d" X)' no longer mishandles a floating-point number X that does not fit in a machine integer. @@ -3139,14 +3288,7 @@ does not fit in a machine integer. This is the International EBCDIC encoding, also available as aliases 'ebcdic-int' and 'cp038'. -+++ -** In the DST slot, 'encode-time' and 'parse-time-string' now return -1 -if it is not known whether daylight saving time is in effect. -Formerly they were inconsistent: 'encode-time' returned t in this -situation, whereas 'parse-time-string' returned nil. Now they -consistently use use nil to mean that DST is not in effect, and use -1 -to mean that it is not known whether DST is in effect. - +--- ** New JSON parsing and serialization functions 'json-serialize', 'json-insert', 'json-parse-string', and 'json-parse-buffer'. These are implemented in C using the Jansson library. @@ -3174,6 +3316,7 @@ into the buffer. It's a simple convenience function for looking up MIME types based on file name extensions. +--- *** The default way the list of possible external viewers for MIME types is sorted and chosen has changed. Earlier, the most specific viewer was chosen, even if there was a general override in "~/.mailcap". @@ -3185,6 +3328,7 @@ method back, set 'mailcap-prefer-mailcap-viewers' to nil. ** URL +--- *** The 'file:' handler no longer looks for "index.html" in directories if you ask it for a "file:///dir" URL. Since this is a low-level library, such decisions (if they are to be made at all) are @@ -3197,15 +3341,18 @@ web browser Netscape, and is no longer relevant. ** Image mode +--- *** New library Exif. An Exif library has been added that can parse JPEG files and output data about creation times and orientation and the like. 'exif-parse-file' and 'exif-parse-buffer' are the main interface functions. +--- *** 'image-mode' now uses this library to automatically rotate images according to the orientation in the Exif data, if any. +--- *** New library image-converter. If you need to view exotic image formats for which Emacs doesn't have native support, customize the new user option @@ -3213,10 +3360,12 @@ native support, customize the new user option GraphicsMagick, ImageMagick or 'ffmpeg' installed, they will then be used to convert images automatically before displaying them. +--- *** 'auto-mode-alist' now includes many of the types typically supported by the external image converters, like WEPB, BMP and ICO. These now default to using 'image-mode'. +--- *** 'imagemagick-types-inhibit' disables using ImageMagick by default. 'image-mode' started using ImageMagick by default for all images some years back. It now respects 'imagemagick-types-inhibit' as a way @@ -3242,20 +3391,25 @@ With a prefix argument, 'image-rotate' now rotates the image at point ** Modules +--- *** The function 'load' now behaves correctly when loading modules. Specifically, it puts the module name into 'load-history', prints loading messages if requested, and protects against recursive loads. ++++ *** New module environment function 'process_input' to process user input while module code is running. ++++ *** New module environment functions 'make_time' and 'extract_time' to convert between timespec structures and Emacs Lisp time values. ++++ *** New module environment functions 'make_big_integer' and 'extract_big_integer' to create and extract arbitrary-size integer values. ++++ *** emacs-module.h now defines a macro 'EMACS_MAJOR_VERSION' that expands to the major version of the latest Emacs supported by the header. @@ -3280,16 +3434,6 @@ that is non-nil, it will look for a file name handler for the current buffer's 'default-directory' and invoke that file name handler to make the process. That way 'make-process' can start remote processes. -+++ -** Emacs now supports resizing and rotating images without ImageMagick. -All modern systems support this feature. (On GNU and Unix systems, -Cairo drawing or the XRender extension to X11 is required for this to -be available; the configure script will test for it and, if found, -enable scaling.) - -The new function 'image-transforms-p' can be used to test whether any -given frame supports these capabilities. - +++ ** '(locale-info 'paper)' now returns the paper size on systems that support it. This is currently supported on GNUish hosts and on modern versions of @@ -3308,6 +3452,7 @@ returns a regexp that never matches anything, which is an identity for this operation. Previously, the empty string was returned in this case. ++++ ** New constant 'regexp-unmatchable' contains a never-matching regexp. It is a convenient and readable way to specify a regexp that should not match anything, and is as fast as any such regexp can be. -- 2.39.2