From 13842157d2961978e36614bee8fb145894bfa98f Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 7 Jun 2026 13:27:27 +0200 Subject: [PATCH 1/6] ; * etc/NEWS: Presentational fixes and improvements. --- etc/NEWS | 160 +++++++++++++++++++++++++------------------------------ 1 file changed, 74 insertions(+), 86 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 0aaeb547f06..25ab2d3ac18 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -113,9 +113,9 @@ Previously, such characters would be rendered as, e.g., white boxes. that are used for borders around child frames and menu separators on TTY frames. -Call the function 'standard-display-unicode-special-glyphs' to set up +Call the command 'standard-display-unicode-special-glyphs' to set up the 'standard-display-table's extra slots with Unicode characters. -Please see the documentation of that function to see which slots of the +Please see the documentation of that command to see which slots of the display table it changes. +++ @@ -208,7 +208,7 @@ you type if the completion property 'eager-update', set by the completion table, is non-nil. This property can be overridden for different completion categories by customizing 'completion-category-overrides'. Alternatively, the new user option -'completion-eager-update can be set to t to make "*Completions*" always +'completion-eager-update' can be set to t to make "*Completions*" always be updated as you type, or nil to suppress this always. Note that for large or inefficient completion tables this can slow down typing. @@ -404,10 +404,10 @@ further destiny of any window showing the buffer to be killed. +++ *** 'split-window' can optionally resurrect deleted windows. -A new argument REFER of 'split-window' makes it possible to, instead of -making a new window object, reuse an existing, deleted one. This can be -used to preserve the identity of windows when swapping or transposing -them. +A new optional argument REFER of 'split-window' makes it possible to, +instead of making a new window object, reuse an existing, deleted one. +This can be used to preserve the identity of windows when swapping or +transposing them. +++ *** New window parameter 'quit-restore-prev'. @@ -450,11 +450,11 @@ option to 'vertical'. The value 'horizontal' always prefers the horizontal split. --- -The default value of 'split-width-threshold' is changed from 160 to 150. +*** The default value of 'split-width-threshold' is changed from 160 to 150. After splitting it is still comfortable to read text filled to 75 columns. +++ -*** New argument INDIRECT for 'get-buffer-window-list'. +*** New optional argument INDIRECT for 'get-buffer-window-list'. With this argument non-nil, 'get-buffer-window-list' will include in the return value windows whose buffers share their text with BUFFER-OR-NAME. @@ -518,7 +518,7 @@ single frame can be excluded, for example, the selected frame. *** After deleting, 'delete-frame' now selects the most recently used frame. Previously, after deleting a specified frame, 'delete-frame' would select the oldest visible frame on the same terminal. To revert to the -old behavior, set the new variable 'after-delete-frame-select-mru-frame' +old behavior, set the new user option 'after-delete-frame-select-mru-frame' to nil. +++ @@ -581,7 +581,7 @@ ID. When called interactively, both functions prompt for an ID. ** Mode Line --- -*** New definitions for mode-line faces under dark background mode. +*** New definitions for mode line faces under dark background mode. The faces 'mode-line' and 'mode-line-highlight' now have separate definitions for the dark background mode. Previously, these two faces looked the same in both the light and dark background modes. To get the @@ -704,7 +704,7 @@ on the tab lines are now these two: the selected window uses ** IDLWAVE has been moved to GNU ELPA. The version bundled with Emacs is out-of-date, and is now marked as -obsolete. Use 'M-x list-packages' to install the 'idlwave' package from +obsolete. Use 'list-packages' to install the 'idlwave' package from GNU ELPA instead. +++ @@ -821,8 +821,8 @@ See the file "etc/ORG-NEWS" for user-visible changes in Org. compile.el will now use paths specified in both 'compilation-search-extra-path' and 'compilation-search-path', when doing search. 'compilation-search-extra-path' is consulted first. -One possible use case of this option is to customize add new search -paths on a per-project basis with directory-local variables. +One possible use case of this option is to add new search paths on a +per-project basis with directory-local variables. * Editing Changes in Emacs 31.1 @@ -932,7 +932,7 @@ useful for enabling or disabling the features of 'delete-selection-mode' based on the state of the buffer, such as for the different states of modal editing packages. -** New user variable 'exchange-point-and-mark-highlight-region'. +** New user option 'exchange-point-and-mark-highlight-region'. When set to nil, this modifies 'exchange-point-and-mark' so that it doesn't activate the mark if it is not already active. The default value is t, which retains the old behavior. @@ -1063,12 +1063,12 @@ buffer named "*name-of-project-shell<2>*". By comparison, a plain universal argument as in 'C-u C-x p s' always creates a new session. --- -*** 'project-switch-buffer' re-uniquifies buffer names while prompting. -When 'uniquify-buffer-name-style' is non-nil, 'project-switch-buffer' +*** 'project-switch-to-buffer' re-uniquifies buffer names while prompting. +When 'uniquify-buffer-name-style' is non-nil, 'project-switch-to-buffer' changes the buffer names to only make them unique within the given project, during completion. That makes some items shorter. -*** 'project-switch-buffer' uses 'project-buffer' as completion category. +*** 'project-switch-to-buffer' uses 'project-buffer' as completion category. The category defaults are the same as for 'buffer' but any user customizations would need to be re-added. @@ -1080,7 +1080,7 @@ local files. *** The "VC-aware" project backend caches the current project and its name. The duration for which the values are cached depends on whether it is -called from 'non-essential' context, and it determined by variables +called from 'non-essential' context, and it is determined by variables 'project-vc-cache-timeout' and 'project-vc-non-essential-cache-timeout'. ** Network Security Manager (NSM) @@ -1122,11 +1122,11 @@ to call 'editorconfig-apply'. +++ *** Non-existing or empty files are ignored in 'auth-sources'. -File-based data stores are ignored in ‘auth-sources’, if the underlying +File-based data stores are ignored in 'auth-sources', if the underlying data file does not exist. This is relevant, if a new secret is stored -in such a file; the first usable entry of ‘auth-sources’ is selected as +in such a file; the first usable entry of 'auth-sources' is selected as target. If you want also not existing files to be selected, set the -user option ‘auth-source-ignore-non-existing-file’ to nil. +user option 'auth-source-ignore-non-existing-file' to nil. --- *** 'auth-sources' set to nil means using the password cache only. @@ -1143,7 +1143,7 @@ with finer grained control. ** Register +++ -*** New functions 'buffer-to-register' and 'file-to-register'. +*** New commands 'buffer-to-register' and 'file-to-register'. These allow users to interactively store files and buffers in registers. Killed buffers stored in a register using 'buffer-to-register' are automatically converted to a file-query value if the buffer was visiting @@ -1179,8 +1179,9 @@ to install the language grammar when 'treesit-auto-install-grammar' is 'ask', 'ask-dir' or 'always'. *** 'treesit-language-source-alist' supports keywords. -The language and URL are mandatory, but remaining data can use keywords: -'(json "https://github.com/tree-sitter/tree-sitter-json" :commit "4d770d3")'. +The language and URL are mandatory, but remaining data can use keywords like + + (json "https://github.com/tree-sitter/tree-sitter-json" :commit "4d770d3") *** The file treesit-x.el defines a number of simple tree-sitter modes. Using the new macro 'define-treesit-generic-mode', generic modes are @@ -1194,14 +1195,14 @@ It cycles the type of navigation for commands that move across sexp's and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', 'treesit-down-list', and 'treesit-up-list'. The type can be either 'list', the default, or 'sexp'. -With the default 'list' type these commands move using syntax tables for +With the default 'list' type, these commands move using syntax tables for symbols and using the thing 'list' for lists. -With the 'sexp' type these commands move across nodes defined by +With the 'sexp' type, these commands move across nodes defined by the tree-sitter thing 'sexp' in 'treesit-thing-settings'. +++ *** Indirect buffers can have their own parser list. -Before, indirect buffers share their base buffer’s parser list and +Before, indirect buffers share their base buffer's parser list and parsers. Now they can have their own parser list. +++ @@ -1225,7 +1226,7 @@ and 'treesit-font-lock-setting-override'. *** New tree-sitter thing 'list'. Unlike the existing thing 'sexp' that defines both lists and atoms, 'list' defines only lists to be navigated by 'forward-sexp'. -The new function 'treesit-forward-sexp-list' uses 'list' +The new command 'treesit-forward-sexp-list' uses 'list' to move across lists. But to move across atoms inside the list it uses 'forward-sexp-default-function'. @@ -1365,7 +1366,7 @@ newer tree-sitter libraries mandate query predicates to end with a question mark. Emacs will transparently convert ':equal', ':match', and ':pred' to ':eq?', ':match?', and ':pred?', respectively, so existing queries still work fine with the latest tree-sitter library. The -predicate ':equal' is changed to ':eq?' to better follow tree-sitter’s +predicate ':equal' is changed to ':eq?' to better follow tree-sitter's convention. Also, the ':match?' predicate can now take the regexp as either the first or second argument, so it works with both tree-sitter convention (regexp arg second) and Emacs convention (regexp arg first). @@ -1389,7 +1390,7 @@ This command hides or shows all the blocks in the current buffer. --- *** 'hs-hide-level' no longer hides all the blocks in the current buffer. -If 'hs-hide-level' was not inside a code block it would hide all the +If 'hs-hide-level' was not inside a code block, it would hide all the blocks in the buffer like 'hs-hide-all'. Now it should only hide all the second level blocks. @@ -1511,7 +1512,7 @@ blocks are syntax-highlighted if the Doxygen grammar library is available. --- -*** New user option 'java-ts-mode-method-chaining-indent-offset'. +*** New user option 'java-ts-method-chaining-indent-offset'. Now method chaining is indented by 8 spaces rather than 4, and this option controls how much is indented for method chaining. @@ -1526,7 +1527,7 @@ kill-ring, formatted for use with the 'jq' utility. --- *** 'php-ts-mode' now depends on 'mhtml-ts-mode'. The direct dependency on 'js-ts-mode', 'css-ts-mode' and 'html-ts-mode' -has now been replaced by ‘mhtml-ts-mode’. Navigation, Outline and Imenu +has now been replaced by 'mhtml-ts-mode'. Navigation, Outline and Imenu work for all languages, and code maintenance is easier. --- @@ -1611,11 +1612,10 @@ converted to '1', etc. Companion commands 'halfwidth-region' and ** Texinfo mode --- -*** texinfo-mode now can auto-close the ``'' pairs. +*** Texinfo mode now can auto-close the ``'' pairs. Now inserting `` in 'texinfo-mode' will close it by inserting its respective '', if 'electric-pair-mode' is enabled. - ** ASM mode --- @@ -1647,7 +1647,7 @@ content. --- *** New Ibuffer-dedicated faces. New faces 'ibuffer-marked', 'ibuffer-deletion', 'ibuffer-title', and -'ibuffer-filter-group-name'. By default they inherit from the +'ibuffer-filter-group-name'. By default, they inherit from the general-purpose faces Ibuffer previously used, to preserve previous behavior. @@ -1691,7 +1691,7 @@ automatically wraps at the right margin: When auto-margins is disabled, characters that would go beyond the right margin are discarded, which matches the behavior of physical terminals and other -terminal emulators. Control sequences and escape sequences are still processed +terminal emulators. Control sequences and escape sequences are still processed correctly regardless of margin position. --- @@ -1744,7 +1744,7 @@ a web browser to load them. For example, it could be used like this: (add-to-list 'browse-url-transform-alist '("www.google.com" . "www.duckduckgo.com")) -*** New function 'browse-url-qutebrowser' for Qutebrowser. +*** New command 'browse-url-qutebrowser' for Qutebrowser. For better integration with Qutebrowser, set 'browse-url(-secondary)-browser-function' to 'browse-url-qutebrowser'. @@ -1774,8 +1774,6 @@ one of these found on your system. +++ *** Derived types (i.e. 'cl-deftype') can now be used as method specializers. -As part of this new support, the new function 'cl-types-of' returns -the list of types to which a value belongs. +++ *** Some cl-lib functions and macros are now built-in. @@ -1948,7 +1946,7 @@ a horizontal shift of text on display, and thus could be annoying). The "In-Reply-To" header created when replying to a message now contains only the originating message's id, conforming to RFC 5322. The previous behavior included additional information about the originating message. -The new variable 'message-header-use-obsolete-in-reply-to', nil by +The new user option 'message-header-use-obsolete-in-reply-to', nil by default, can be set to a non-nil value to restore the previous behavior. +++ @@ -1996,7 +1994,7 @@ Gnus, see "(gnus) Symbolic Prefixes" in the Gnus manual. *** System sleep integration is now independent of D-Bus. The system sleep integration previously provided by customizing the variable 'gnus-dbus-close-on-sleep' is now deprecated. A new system -using the builtin 'system-sleep' library is now available by customizing +using the builtin system-sleep.el library is now available by customizing 'gnus-close-on-sleep'. This will work on all systems that the 'system-sleep' library supports. @@ -2187,7 +2185,7 @@ non-nil; customize to nil to disable the check. ** Sendmail --- -*** Sending an email via 'sendmail' checks for suspicious addressees. +*** Sending an email via sendmail.el checks for suspicious addressees. The command 'mail-send', used to send email in Mail mode, now checks the addressees for suspicious email addresses. If such addresses are found, the command will show them and the reason they are considered @@ -2242,7 +2240,7 @@ HTML 'doctype' declaration to have context-type "text/html". When there is no EWW buffer, 'eww-switch-to-buffer' falls back to calling 'eww'. -** Url Queue +** URL Queue --- *** 'url-queue-retrieve' now makes use of some url request variables. @@ -2290,7 +2288,7 @@ explicitly only support Emacs 30.1 or later, as specified in the packages that support earlier versions of Emacs is that package.el in those versions can't install packages where that line is missing. -This change affects both 'M-x checkdoc' and the corresponding flymake +This change affects both 'checkdoc' and the corresponding flymake backend. --- @@ -2343,23 +2341,23 @@ inside an sexp typing 'RET' inserts a newline, and otherwise Emacs proceeds with evaluating the expression. This is useful when 'electric-pair-mode', or a similar automatic pairing mode, is enabled. -** DocView +** Doc View --- *** Dedicated buffer for plain text contents. When switching to the plain text contents with 'doc-view-open-text', -DocView now creates a dedicated buffer to display it. 'C-c C-c' gets you -back to the real DocView buffer if it still exists. +Doc View now creates a dedicated buffer to display it. 'C-c C-c' gets you +back to the real Doc View buffer if it still exists. +++ *** New commands to save and restore pages in buffer-local registers. -Docview can store the current page to buffer-local registers with the new +Doc View can store the current page to buffer-local registers with the new command 'doc-view-page-to-register' (bound to 'm'), and later the stored page can be restored with 'doc-view-jump-to-register' (bound to '''). +++ -*** Docview can generate imenu indices for DjVu and ODF documents. -When the 'djvused' program is available, Docview can now generate an imenu +*** Doc View can generate imenu indices for DjVu and ODF documents. +When the 'djvused' program is available, Doc View can now generate an imenu index for DjVu files from its outline. Indices for Open Document Format (ODF) files as used by OpenOffice and LibreOffice are generated using the 'mutool' program after their initial conversion to PDF format. The @@ -2690,8 +2688,7 @@ with a file-local variable, you may be asked to update the value. *** New Xref backend for TeX modes. The new backend ('tex-etags') is on by default, and improves the functionality of the standard 'xref' commands in TeX buffers. You can -restore the standard 'etags' backend with the 'M-x xref-etags-mode' -toggle. +restore the standard 'etags' backend with the 'xref-etags-mode' toggle. ** BibTeX mode @@ -3182,7 +3179,7 @@ already have, consider replacing the default global bindings, like this: This command is Diff mode's specialized 'narrow-to-region'. 'narrow-to-region' has long been disabled by default, so for consistency, 'diff-restrict-view' is now too. -To enable it again, use 'M-x enable-command'. +To enable it again, use 'enable-command'. --- *** 'C-x v !' has its own input history. @@ -3199,7 +3196,7 @@ This was already in place for Mercurial. --- *** 'vc-hg-working-revision' now returns changeset hashes. -Previously it returned local revision numbers, but hashes are more +Previously, it returned local revision numbers, but hashes are more robust for how this function is typically used. ** Package @@ -3461,7 +3458,7 @@ New faces have been added to 'icomplete-vertical-mode': - 'icomplete-vertical-unselected-prefix-indicator-face' controls the appearance of unselected candidate prefixes. -** Customize +** Custom +++ *** New function 'custom-initialize-after-file-load'. @@ -3471,7 +3468,7 @@ functions defined later than the variable, as is common for minor modes. ':init-value' is non-nil. --- -*** New major mode 'Customize-dirlocals-mode'. +*** New major mode 'Custom-dirlocals-mode'. This is intended for customizing directory-local variables in the current directory's ".dir-locals.el" file. @@ -3569,7 +3566,7 @@ This function flashes the current echo area briefly. It is intended to be used in 'ring-bell-function'. --- -*** New user option 'flash-face-duration'. +*** New user option 'pulse-face-duration'. This option controls the flash duration for 'flash-face-bell-function' and 'flash-echo-area-bell-function'. @@ -3578,7 +3575,7 @@ and 'flash-echo-area-bell-function'. This option tells 'flash-face-bell-function' which faces should flash. --- -*** New user option 'flash-face-attributes' +*** New user option 'flash-face-attributes'. This option tells 'flash-face-bell-function' and 'flash-echo-area-bell-function' which face attributes should be used for flash. @@ -3619,7 +3616,7 @@ is still available on 'v'. --- ** Flymake -*** Enhanced 'flymake-show-diagnostics-at-end-of-line' +*** Enhanced 'flymake-show-diagnostics-at-end-of-line'. The new value 'fancy' allowed for this user option will attempt to layout diagnostics below the affected line using unicode graphics to point to diagnostic locus. @@ -3661,7 +3658,7 @@ provide more accurate warnings from byte compilation. +++ *** SQLite databases can now be opened in read-only mode. -The new optional argument READONLY to 'sqlite-open' function allows to +The new optional argument READONLY of function 'sqlite-open' allows to open an existing database only for reading. +++ @@ -3678,7 +3675,7 @@ DISABLE-URI non-nil. +++ *** 'pdb', 'perldb', and 'guiler' suggest debugging the current file via 'M-n'. -When starting these debuggers (e.g., 'M-x pdb') while visiting a file, +When starting these debuggers (e.g., 'pdb') while visiting a file, pressing 'M-n' in the command prompt suggests a command line including the file name, using the minibuffer's "future history". @@ -3707,7 +3704,7 @@ changing the marking state in the calendar buffer. *** New library for iCalendar data. A new library has been added to the calendar for handling iCalendar -(RFC5545) data. The library is designed for reuse in other parts of +(RFC 5545) data. The library is designed for reuse in other parts of Emacs and in third-party packages. Package authors can find the new library in the Emacs distribution under "lisp/calendar/icalendar-*.el". @@ -3725,7 +3722,7 @@ Lisp functions. Its value is a pseudo-pattern of the same type as in entries from the calendar, or when importing them from other formats. +++ -*** New library 'diary-icalendar'. +*** New library diary-icalendar.el. This library reimplements features previously provided by icalendar.el: import from iCalendar format to the diary, and export from the diary to iCalendar. It also adds the ability to include iCalendar files in the @@ -3795,7 +3792,7 @@ is actually about Org (in which case users should use the Org-specific command for reporting bugs). --- -** The elint package is now obsolete. +** The elint.el package is now obsolete. Use the byte-compiler instead; it provides more and more useful warnings. ** Newsticker @@ -3867,8 +3864,8 @@ it will begrudgingly use the scratch buffer. +++ *** You can now enable Abbrev mode by default using Easy Customization. -Customize the variable 'abbrev-mode' to non-nil to enable Abbrev mode by -default in all buffers. +Customize the user option 'abbrev-mode' to non-nil to enable Abbrev mode +by default in all buffers. ** Antlr mode @@ -3882,7 +3879,7 @@ value "java org.antlr.Tool") when 'antlr-tool-version' has the value *** Command 'antlr-mode' now also works on ANTLR v3 or v4 grammars. If the variable 'antlr-tool-version' is not set locally, e.g., by the -file’s local variables specs, the command sets its local value to +file's local variables specs, the command sets its local value to 'antlr-v2' if a keyword "class" or "header" appears at the beginning of the source, or to 'antlr-v3' otherwise. @@ -3939,7 +3936,7 @@ were created. This has been disabled, and the new user option * New Modes and Packages in Emacs 31.1 ** New major mode 'icalendar-mode'. -A major mode for displaying and editing iCalendar (RFC5545) data. This +A major mode for displaying and editing iCalendar (RFC 5545) data. This mode handles line unfolding and fontification, including highlighting syntax errors in invalid data. @@ -4112,7 +4109,7 @@ single binding syntax, which we'd kept only for backwards compatibility. --- ** The Eshell 'pwd' command now expands the directory name on all systems. This ensures that user directories are properly expanded to their full -name. Previously, Eshell only did this for MS-Windows systems. To +name. Previously, Eshell only did this for MS-Windows systems. To restore the old behavior, you can set 'eshell-pwd-convert-function' to 'identity'. @@ -4218,8 +4215,8 @@ modification takes place inside 'with-help-window' or ** Xref commands don't automatically suggest to visit a tags table anymore. When no tags file is loaded, symbol completion just won't provide any suggestions. So the 'M-?' command now works without a tags table. And -the 'M-.' will show a message describing the several built-in options -that will provide an Xref backend when used. +the 'M-.' command will show a message describing the several built-in +options that will provide an Xref backend when used. +++ ** Calling 'debug' in batch sessions no longer kills Emacs. @@ -4251,7 +4248,7 @@ without performing a collection. +++ ** Improve 'replace-region-contents' to accept more forms of sources. -It has been promoted from 'subr-x' to the C code. +It has been promoted from subr-x.el to the C code. You can now directly pass it a string or a buffer rather than a function. Actually passing it a function is now deprecated. @@ -4619,17 +4616,8 @@ When the theme is set on PGTK, Android, or MS-Windows systems, variable 'toolkit-theme' as either symbol 'dark' or 'light', but may be extended to encompass other toolkit-specific symbols in the future. -** Progress reporter - +++ -*** Progress reporter callbacks. -'make-progress-reporter' now accepts optional arguments UPDATE-CALLBACK, -called on progress steps, and DONE-CALLBACK, called when the progress -reporter is done. See the 'make-progress-reporter' docstring for a full -specification of these new optional arguments. - -+++ -*** Progress reporter context. +** Progress reporter context. 'make-progress-reporter' now accepts the optional argument CONTEXT, which if it is the symbol 'async', inhibits updates in the echo area when it is busy. This is useful, for example, if you want to monitor progress @@ -4725,8 +4713,8 @@ Note: Accepting this permission allows the use of system APIs, which may send user data to Apple's speech recognition servers. --- -** Re-introduced dictation, lost in Emacs v30 (macOS). -We lost macOS dictation in v30 when migrating to NSTextInputClient. +** Re-introduced dictation, lost in Emacs 30 (macOS). +We lost macOS dictation in Emacs 30 when migrating to NSTextInputClient. Implemented 'selectedRange' in 'nsterm.m' to enable in new subsystem. You may notice a slight change in dictation UI provided by macOS. @@ -4747,7 +4735,7 @@ supported. As on X, the user options 'dnd-scroll-margin' and --- ** Emacs on MS-Windows now supports color fonts. -On Windows 8.1 and later versions Emacs now uses DirectWrite to draw +On Windows 8.1 and later versions, Emacs now uses DirectWrite to draw text, which supports color fonts. This can be disabled by setting the variable 'w32-inhibit-dwrite' to t. Also see 'w32-dwrite-available' and 'w32-dwrite-reinit' to check availability and to configure the From 2755f171fcc2845cb1dee352ae909de90bc63d8a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 7 Jun 2026 16:33:32 +0300 Subject: [PATCH 2/6] ; Document new features and update NEWS * etc/NEWS: Mark unmarked entries. * doc/emacs/display.texi (Useless Whitespace): Document 'delete-trailing-whitespace-mode'. * doc/emacs/text.texi (Foldout): Document negative argument of 'foldout-exit-fold'. * doc/emacs/search.texi (Query Replace): Document 'd' in query-replace. * doc/emacs/frames.texi (Text-Only Mouse): 'xterm-mouse-mode' is now ON by default. (Mouse Commands): Document 'mouse-shift-adjust-mode'. * doc/lispref/commands.texi (Event Mod): Document new command 'key-translate' and 'key-translate-remove'. * doc/lispref/processes.texi (Output from Processes): Update default value of 'process-adaptive-read-buffering'. * doc/lispref/frames.texi (Frame Size): Document 'set-frame-size-and-position' and 'set-frame-size-and-position-pixelwise'. * doc/lispref/minibuf.texi (Multiple Queries): 'map-y-or-n-p' now uses the minibuffer. --- doc/emacs/display.texi | 6 +- doc/emacs/frames.texi | 15 ++++- doc/emacs/search.texi | 4 ++ doc/emacs/text.texi | 3 +- doc/lispref/commands.texi | 15 +++-- doc/lispref/frames.texi | 22 ++++++ doc/lispref/minibuf.texi | 5 +- doc/lispref/processes.texi | 5 +- etc/NEWS | 135 ++++++++++++++++++++++++++++++++----- 9 files changed, 182 insertions(+), 28 deletions(-) diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index a64c009f2d9..a0e59d6bda0 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -1640,12 +1640,16 @@ present. @findex delete-trailing-whitespace @vindex delete-trailing-lines +@findex delete-trailing-whitespace-mode Type @kbd{M-x delete-trailing-whitespace} to delete all trailing whitespace. This command deletes all extra spaces at the end of each line in the buffer, and all empty lines at the end of the buffer; to ignore the latter, change the variable @code{delete-trailing-lines} to @code{nil}. If the region is active, the command instead deletes -extra spaces at the end of each line in the region. +extra spaces at the end of each line in the region. If you enable the +buffer-local mode @code{delete-trailing-whitespace-mode}, Emacs will +automatically invoke @code{delete-trailing-whitespace} each time you +save the buffer. @vindex indicate-empty-lines @cindex unused lines diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 7375396c054..2cce638aecb 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -82,6 +82,9 @@ Move point to where you click (@code{mouse-set-point}). Activate the region around the text selected by dragging, and put the text in the primary selection (@code{mouse-set-region}). +@item S-mouse-1 +Adjust already selected region. + @item mouse-2 Move point to where you click, and insert the contents of the primary selection there (@code{mouse-yank-primary}). @@ -134,6 +137,12 @@ is less than a half a character, you'd normally get the empty string in your kill ring, but with @code{non-empty}, this short mouse drag won't affect the kill ring. +@findex mouse-shift-adjust-mode + If you activate the Mouse-Shift-Adjust minor mode, clicking the left +mouse button with the @kbd{Shift} modifier (@kbd{S-down-mouse-1}) +adjusts (extends or shrinks, depending on where you click) the already +selected region. + @vindex mouse-scroll-min-lines If you move the mouse off the top or bottom of the window while dragging, the window scrolls at a steady rate until you move the mouse @@ -1918,6 +1927,7 @@ in the mode line when the frame is selected. Some text terminals support mouse clicks in the terminal window. @cindex xterm +@findex xterm-mouse-mode In a terminal emulator which is compatible with @command{xterm}, you can use @kbd{M-x xterm-mouse-mode} to give Emacs control over simple uses of the mouse---basically, only non-modified single clicks are @@ -1925,8 +1935,9 @@ supported. Newer versions of @command{xterm} also support mouse-tracking. The normal @command{xterm} mouse functionality for such clicks is still available by holding down the @key{SHIFT} key when you press the mouse button. Xterm Mouse mode is a global minor -mode (@pxref{Minor Modes}). Repeating the command turns the mode off -again. +mode (@pxref{Minor Modes}), which is turned on by default if Emacs +detects at start time that the terminal supports it. Repeating the +command turns the mode off again. @findex gpm-mouse-mode In the console on GNU/Linux, you can use @kbd{M-x gpm-mouse-mode} to diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 5f7aa1f1ef5..314f1de8e83 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -1937,6 +1937,10 @@ case. I.e., if you have a @code{query-replace} from @samp{foo} to @samp{Bar}. Use this command to do the current replacement with exact case. +@item d +to show the replacement of the current match as a buffer of diffs +between the original text and text with the match replaced. + @item C-l to redisplay the screen. Then you must type another character to specify what to do with this occurrence. diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index b4f0d6f64bc..803ff81eca0 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi @@ -1408,7 +1408,8 @@ particular chapter or section of your document. This hides all the text and subheadings under the top-level heading and returns you to the previous view of the buffer. Specifying a numeric argument exits that many levels of folds. Specifying a zero argument -exits all folds. +exits all folds. Specifying a negative argument (so that the exited +fold remains visible) preserves the position of point and window view. To cancel the narrowing of a fold without hiding the text and subheadings, specify a negative argument. For example, @w{@kbd{M--2 C-c diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index df3752e7aff..76a3db1947b 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -3777,14 +3777,15 @@ supplied to input methods (@pxref{Input Methods}). Use if you want to translate characters after input methods operate. @end defvar -@defun key-translate from to -This function modifies @code{keyboard-translate-table} to translate -character code @var{from} into character code @var{to}. It creates the +@deffn Command key-translate from to +This command modifies @code{keyboard-translate-table} to translate +character code @var{from} into character code @var{to}. Interactively, +it prompts for @var{from} and @var{to}. It creates the keyboard translate table if necessary. Both @var{from} and @var{to} should be strings that satisfy @code{key-valid-p} (@pxref{Key Sequences}). If @var{to} is @code{nil}, the function removes any existing translation for @var{from}. -@end defun +@end deffn Here's an example of using the @code{keyboard-translate-table} to make @kbd{C-x}, @kbd{C-c} and @kbd{C-v} perform the cut, copy and paste @@ -3812,6 +3813,12 @@ input events that are not characters (i.e., @code{characterp} returns @code{nil} for them), you must use the event translation mechanism described there. +@deffn Command key-translate-remove from +This command prompts for a key @var{from} and its translation, and +removes the translation from the translation table. When calling from +Lisp, specify just the key @var{from}, without its translation. +@end deffn + @node Invoking the Input Method @subsection Invoking the Input Method @cindex invoking input method diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index a3be6cc2bfc..8535cb6ec08 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1303,6 +1303,28 @@ The default is @code{inhibit} on NS builds and @code{nil} everywhere else. @end defopt +@defun set-frame-size-and-position &optional frame width height left top +This function sets the new size and position of @var{frame} in a single +step; @var{frame} defaults to the selected frame. The size and position +are specified as with the corresponding frame parameters @code{width}, +@code{height}, @code{left}, and @code{top} (@pxref{Size Parameters}, and +@pxref{Position Parameters}). If any of these 4 arguments is omitted or +@code{nil}, that means not to change the corresponding parameter of +@var{frame}. +@end defun + +@cindex gravity of frame +@defun set-frame-size-and-position-pixelwise frame width height x y &optional gravity +This function sets the new size and position of a frame, similarly to +@code{set-frame-size-and-position}, but in pixel units. The optional +argument @var{gravity} specified the new @dfn{gravity} of a frame and +must be a value between 0 and 10; it defaults to 1. The gravity +determines how a window or its contents adjust when resized or +positioned. The interpretation is specific to each window-system; for +example, GTK uses window gravity to define which point of the window +remains fixed during resizing. +@end defun + @cindex tracking frame size changes The abnormal hook @code{window-size-change-functions} (@pxref{Window Hooks}) tracks all changes of the inner size of a frame including those diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 9d73aa89b2d..44cd74b7011 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -2380,9 +2380,12 @@ asking each question individually. This gives the user certain convenient facilities such as the ability to answer the whole series at once. +@vindex read-char-choice-use-read-key@r{, and} map-y-or-n-p @defun map-y-or-n-p prompter actor list &optional help action-alist no-cursor-in-echo-area This function asks the user a series of questions, reading a -single-character answer in the echo area for each one. +single-character answer in the minibuffer for each one. However, if +@code{read-char-choice-use-read-key} is non-@code{nil} (@pxref{Reading +One Event}), it reads single keys from the echo area. The value of @var{list} specifies the objects to ask questions about. It should be either a list of objects or a generator function. If it diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 829735b3c95..b340067592f 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1670,9 +1670,10 @@ On some systems, when Emacs reads the output from a subprocess, the output data is read in very small blocks, potentially resulting in very poor performance. This behavior can be remedied to some extent by setting the variable @code{process-adaptive-read-buffering} to a -non-@code{nil} value (the default), as it will automatically delay reading +non-@code{nil} value, as it will automatically delay reading from such processes, thus allowing them to produce more output before -Emacs tries to read it. +Emacs tries to read it. The default is @code{nil}, since a +non-@code{nil} value reduces performance. @end defvar @menu diff --git a/etc/NEWS b/etc/NEWS index 25ab2d3ac18..f5011312e03 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -51,6 +51,7 @@ systemd is installed; default is '${prefix}/usr/lib/systemd/user'. * Startup Changes in Emacs 31.1 ++++ ** In compatible terminals, 'xterm-mouse-mode' is turned on by default. For these terminals the mouse will work by default. A compatible terminal is one that supports Emacs setting and getting the OS selection @@ -319,10 +320,12 @@ is still waiting for input. It still can use 'read-key' when the variable 'read-char-choice-use-read-key' is non-nil. ++++ *** 'map-y-or-n-p' now uses the minibuffer to read a character. It still can use 'read-key' when the variable 'y-or-n-p-use-read-key' is non-nil. +--- *** 'flex' completion style rewritten to be faster and more accurate. Completion and highlighting use a new superior algorithm. For example, pattern "scope" now ranks 'elisp-scope-*' functions well above @@ -331,6 +334,7 @@ pattern "scope" now ranks 'elisp-scope-*' functions well above ** Mouse ++++ *** New mode 'mouse-shift-adjust-mode' extends selection with 'S-'. When enabled, you can use the left mouse button with the '' modifier to extend the boundaries of the active region by dragging the mouse pointer. @@ -474,6 +478,7 @@ helps to restore window buffers across Emacs sessions. You can use this in 'display-buffer-alist' to match buffers displayed during the execution of particular commands. +--- *** New command 'other-window-backward' ('C-x O'). This moves in the opposite direction of 'other-window' and is for its default keybinding consistent with 'repeat-mode'. @@ -537,6 +542,7 @@ either resize the frame and change the fullscreen status accordingly or keep the frame size unchanged. The value t means to first reset the fullscreen status and then resize the frame. ++++ *** New functions to set frame size and position in one compound step. 'set-frame-size-and-position' sets the new size and position of a frame in one compound step. Both, size and position, can be specified as with @@ -544,6 +550,7 @@ the corresponding frame parameters 'width', 'height', 'left' and 'top'. 'set-frame-size-and-position-pixelwise' is similar but has a more restricted set of values for specifying size and position. +--- *** New commands 'split-frame' and 'merge-frames'. 'split-frame' moves a specified number of windows from an existing frame to a newly-created frame. 'merge-frames' merges all windows from two @@ -566,6 +573,7 @@ These are useful if you need to detect a cloned frame or undeleted frame in hooks like 'after-make-frame-functions' and 'server-after-make-frame-hook'. ++++ *** Frames now have unique ids and the new function 'frame-id'. Each non-tooltip frame is assigned a unique integer id. This allows you to unambiguously identify frames even if they share the same name or @@ -573,6 +581,7 @@ title. When 'undelete-frame-mode' is enabled, each deleted frame's id is stored for resurrection. The function 'frame-id' returns a frame's id (in C, use the frame struct member 'id'). ++++ *** New commands 'select-frame-by-id', 'undelete-frame-by-id'. The command 'select-frame-by-id' selects a frame by ID and undeletes it if deleted. The command 'undelete-frame-by-id' undeletes a frame by its @@ -595,6 +604,7 @@ single button. The value could also be a list to specify minor mode lighters to hide or show. The default value is nil, which retains the previous behavior of showing all minor mode lighters. +--- *** New user option 'mode-line-modes-delimiters'. This option allows changing or removing the delimiters shown around the major mode and list of minor modes in the mode line. The default @@ -702,6 +712,7 @@ on the tab lines are now these two: the selected window uses +++ *** New keybinding 'C-h u' for 'apropos-user-option'. +--- ** IDLWAVE has been moved to GNU ELPA. The version bundled with Emacs is out-of-date, and is now marked as obsolete. Use 'list-packages' to install the 'idlwave' package from @@ -713,8 +724,10 @@ These inherit from the 'header-line' face, but the faces actually used on the header lines are now these two: the selected window uses 'header-line-active', non-selected windows use 'header-line-inactive'. +--- ** In 'customize-face', the "Font family" attribute now supports completion. ++++ ** 'process-adaptive-read-buffering' is now nil by default. Setting this variable to a non-nil value reduces performance and leads to wrong results in some cases. We believe that it is no longer useful; @@ -746,6 +759,7 @@ setting is an alternative to 'help-at-pt-display-when-idle'. Customize this to nil to disable starting new asynchronous native compilations while AC power is not connected. ++++ ** New user option 'show-paren-not-in-comments-or-strings'. If this option is non-nil, it tells 'show-paren-mode' not to highlight the parens that are inside comments and strings. If set to 'all', @@ -760,6 +774,7 @@ If this option is non-nil, the lossage buffer in 'view-lossage' will be refreshed automatically for each new input keystroke and command performed. +--- ** Change in SVG foreground color handling. SVG images no longer have the 'fill' attribute set to the value of ':foreground' or the current text foreground color. The 'currentcolor' @@ -813,6 +828,7 @@ mode in most cases in which Emacs would by default enter that mode. This can make things work better for some cases of X forwarding; see the docstring for the new option. ++++ ** Emacs now comes with Org v9.8. See the file "etc/ORG-NEWS" for user-visible changes in Org. @@ -827,11 +843,13 @@ per-project basis with directory-local variables. * Editing Changes in Emacs 31.1 ++++ ** Commands for keyboard translation. 'key-translate' is now interactive. It prompts for a key to translate from, and another to translate to, and sets 'keyboard-translate-table'. The new command 'key-translate-remove' prompts for a key/translation -pair with 'completing-read', and removes it from the translation table. +pair, with 'completing-read', and removes the translation from the +translation table. ** Internationalization @@ -926,12 +944,14 @@ Typing 'M-~' while saving some buffers means not to save the buffer and also to mark it as unmodified. This is an alternative way to mark a buffer as unmodified which doesn't require switching to that buffer. ++++ ** New minor mode 'delete-selection-local-mode'. This mode sets 'delete-selection-mode' buffer-locally. This can be useful for enabling or disabling the features of 'delete-selection-mode' based on the state of the buffer, such as for the different states of modal editing packages. +--- ** New user option 'exchange-point-and-mark-highlight-region'. When set to nil, this modifies 'exchange-point-and-mark' so that it doesn't activate the mark if it is not already active. @@ -977,6 +997,7 @@ These commands did not previously accept a prefix argument. Now a numeric prefix argument specifies a repeat count, just like it already did for 'undo'. +--- ** New minor mode 'center-line-mode'. This mode keeps modified lines centered horizontally according to the value of 'fill-column', by calling 'center-line' on each non-empty line @@ -1068,6 +1089,7 @@ When 'uniquify-buffer-name-style' is non-nil, 'project-switch-to-buffer' changes the buffer names to only make them unique within the given project, during completion. That makes some items shorter. +--- *** 'project-switch-to-buffer' uses 'project-buffer' as completion category. The category defaults are the same as for 'buffer' but any user customizations would need to be re-added. @@ -1078,6 +1100,7 @@ If the value of 'project-mode-line' is 'non-remote', project name and the Project menu will be shown on the mode line only for projects with local files. +--- *** The "VC-aware" project backend caches the current project and its name. The duration for which the values are cached depends on whether it is called from 'non-essential' context, and it is determined by variables @@ -1085,9 +1108,11 @@ called from 'non-essential' context, and it is determined by variables ** Network Security Manager (NSM) +--- *** NSM warns about TLS 1.1 by default. It has been deprecated by RFC 8996, published in 2021. +--- *** NSM warns about DHE and RSA key exchange by default. Emacs now warns about ephemeral Diffie-Hellman key exchange, and static RSA key exchange, also when 'network-security-level' is customized to @@ -1106,6 +1131,7 @@ tables for files in which no tags were found. ** Delete Selection mode +--- *** New face 'delete-selection-replacement' for the replacement text. This comes with a change to how we track what is considered "the replacement text", which should be more robust now, and is made @@ -1168,21 +1194,25 @@ Depending on customization, it modifies the variable 'treesit-major-mode-remap-alist' prepared by tree-sitter based mode packages. +--- *** New user option 'treesit-auto-install-grammar'. It controls the automatic installation of tree-sitter grammar libraries needed for tree-sitter based modes, if these grammar libraries are not available when such modes are turned on. +--- *** 'treesit-extra-load-path' now is a customizable user option. The first directory in the list is used as the default directory to install the language grammar when 'treesit-auto-install-grammar' is 'ask', 'ask-dir' or 'always'. +--- *** 'treesit-language-source-alist' supports keywords. The language and URL are mandatory, but remaining data can use keywords like (json "https://github.com/tree-sitter/tree-sitter-json" :commit "4d770d3") +--- *** The file treesit-x.el defines a number of simple tree-sitter modes. Using the new macro 'define-treesit-generic-mode', generic modes are defined including, but not limited to, 'gitattributes-generic-ts-mode'. @@ -1190,6 +1220,7 @@ Visiting a file in such mode asks for confirmation before installing its tree-sitter grammar. Then it highlights the visited file according to the syntax defined by the grammar. +--- *** New command 'treesit-cycle-sexp-thing'. It cycles the type of navigation for commands that move across sexp's and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', @@ -1223,6 +1254,7 @@ override flag by 'treesit-font-lock-setting-query', 'treesit-font-lock-setting-feature', 'treesit-font-lock-setting-enable', and 'treesit-font-lock-setting-override'. +--- *** New tree-sitter thing 'list'. Unlike the existing thing 'sexp' that defines both lists and atoms, 'list' defines only lists to be navigated by 'forward-sexp'. @@ -1230,6 +1262,7 @@ The new command 'treesit-forward-sexp-list' uses 'list' to move across lists. But to move across atoms inside the list it uses 'forward-sexp-default-function'. +--- *** New tree-sitter based functions for moving by lists. If a major mode defines 'list' in 'treesit-thing-settings', tree-sitter setup for these modes sets 'forward-list-function' to @@ -1238,15 +1271,18 @@ tree-sitter setup for these modes sets 'forward-list-function' to 'forward-list', 'up-list', and 'down-list' motion commands for those modes. +--- *** Tree-sitter enabled modes now properly support 'show-paren-mode'. They do that by letting 'show-paren-mode' use the results of parsing by the tree-sitter library. The new function 'treesit-show-paren-data' is used to communicate the tree-sitter parsing results to 'show-paren-mode'. +--- *** Tree-sitter enabled modes now properly support 'hs-minor-mode'. All commands from hideshow.el can selectively display blocks defined by the new tree-sitter thing 'list'. +--- *** New tree-sitter thing 'comment'. The new variable 'forward-comment-function' is set to the new function 'treesit-forward-comment' if a major mode defines the thing 'comment'. @@ -1266,12 +1302,14 @@ language symbol. For example, 'cpp' is translated to "C++". A new variable 'treesit-language-display-name-alist' holds the translations of language symbols where that translation is not trivial. +--- *** New function 'treesit-merge-font-lock-feature-list'. This function merges two tree-sitter font-lock feature lists. It returns a new font-lock feature list with no duplicates in the same level. It can be used to merge font-lock feature lists in a multi-language major mode. +--- *** New function 'treesit-replace-font-lock-feature-settings'. Given two tree-sitter font-lock settings, it replaces the feature in the second font-lock settings with the same feature in the first font-lock @@ -1279,6 +1317,7 @@ settings. In a multi-language major mode it is sometimes necessary to replace features from one of the major modes with others, that are better suited to the new multilingual context. +--- *** New function 'treesit-simple-indent-modify-rules'. Given two tree-sitter indent rules, it replaces, adds, or prepends rules in the old rules with new ones, then returns the modified rules. In a @@ -1294,10 +1333,12 @@ This variable allows major modes to setup Imenu for multiple languages. This variable allows major modes to setup 'outline-minor-mode' for multiple languages. +--- *** New function 'treesit-simple-indent-add-rules'. This new function makes it easier to customize indent rules for tree-sitter modes. +--- *** New variable 'treesit-simple-indent-override-rules'. Users can customize this variable to add simple custom indentation rules for tree-sitter major modes. @@ -1405,6 +1446,7 @@ This user option determines if Hideshow should display indicators to show and toggle the block hiding. If non-nil, the indicators are enabled. By default this is disabled. ++++ *** New user option 'hs-indicator-maximum-buffer-size'. This user option limits the display of Hideshow indicators to buffers that are not too large. By default, buffers larger than 2MB have the @@ -1469,6 +1511,7 @@ available. ** Csharp-ts mode +--- *** Renamed feature in 'treesit-font-lock-feature-list'. The feature 'property' has been renamed to 'attribute', since this is what it is called in the general C# community. @@ -1518,6 +1561,7 @@ option controls how much is indented for method chaining. ** JSON-ts mode +--- *** New command 'json-ts-jq-path-at-point'. This command copies the path of the JSON element at point to the kill-ring, formatted for use with the 'jq' utility. @@ -1682,6 +1726,7 @@ default is nil, which retains the old format. ** Term +--- *** The terminal emulator now supports auto-margins control. Term mode now handles DECAWM escape sequences that control whether text automatically wraps at the right margin: @@ -1689,26 +1734,30 @@ automatically wraps at the right margin: - \e[?7h enables auto-margins (default) - \e[?7l disables auto-margins -When auto-margins is disabled, characters that would go beyond the right margin -are discarded, which matches the behavior of physical terminals and other -terminal emulators. Control sequences and escape sequences are still processed -correctly regardless of margin position. +When auto-margins is disabled, characters that would go beyond the right +margin are discarded, which matches the behavior of physical terminals +and other terminal emulators. Control sequences and escape sequences +are still processed correctly regardless of margin position. --- ** SMerge mode +--- *** New 'repeat-map' for SMerge conflict resolution commands. With 'repeat-mode' enabled, after invoking an SMerge command (for example, 'C-c ^ n'), you can repeat further SMerge commands by typing just the final key (for example, 'n', 'p', 'u', 'l'). +--- *** New command 'smerge-extend' extends a conflict over surrounding lines. +--- *** New command 'smerge-refine-exchange-point' to jump to the other side. When used inside a refined chunk, it jumps to the matching position in the "other" side of the refinement: if you are in the new text, it jumps to the corresponding position in the old text and vice versa. +--- *** New user option 'smerge-refine-shadow-cursor'. When 'smerge-refine' shows the conflict diffs at word granularity, a "shadow cursor" is now displayed in the "lower" version when point @@ -1717,6 +1766,7 @@ just the character corresponding to the position where 'smerge-refine-exchange-point' would jump, shown in a new distinct face 'smerge-refine-shadow-cursor', by default a box face. +--- *** 'smerge-refine-regions' can compare regions in different buffers. ** Cursor Sensor mode @@ -1726,10 +1776,12 @@ face 'smerge-refine-shadow-cursor', by default a box face. ** Image Dired +--- *** 'image-dired-show-all-from-dir' takes the same first argument as 'dired'. This allows passing a string with wildcards, or a cons cell where the first element is a list and the rest is a list of files. +--- *** Bound unused letters in 'image-dired-thumbnail-mode-map'. For a more comfortable navigation experience (as in, no modifier keys), the keys 'f', 'b', 'n', 'p', 'a' and 'e' are now bound to the @@ -1737,6 +1789,7 @@ same functions as their 'C-' counterparts. ** Browse URL +--- *** New user option 'browse-url-transform-alist'. This user option is an alist that allows transforming URLs before asking a web browser to load them. For example, it could be used like this: @@ -1744,10 +1797,12 @@ a web browser to load them. For example, it could be used like this: (add-to-list 'browse-url-transform-alist '("www.google.com" . "www.duckduckgo.com")) +--- *** New command 'browse-url-qutebrowser' for Qutebrowser. For better integration with Qutebrowser, set 'browse-url(-secondary)-browser-function' to 'browse-url-qutebrowser'. +--- *** New GTK-native launch mode. For better Wayland support, the pgtk toolkit exposes a new 'x-gtk-launch-uri' browse-url handler and uses it by default when URLs @@ -1755,15 +1810,18 @@ are browsed from a PGTK frame. For other frames, we fall back to the default URL launch function. This change allows us to properly raise browser windows under Wayland using the xdg_activation_v1 protocol. +--- *** 'RET' can visit URLs in read-only buffers. In some keymaps such as 'ansi-osc-hyperlink-map', 'browse-url-button-map', 'goto-address-highlight-keymap', 'bug-reference-map' it is possible now to visit URLs by typing just 'RET' instead of 'C-c RET' in read-only buffers. +--- *** Removed support for some obsolete web browsers. Conkeror (obsolete since Emacs 28.1), gnome-moz-remote (obsolete since Emacs 25.1), and gnudoit (obsolete since Emacs 25.1). +--- *** 'browse-url-firefox-program' now supports LibreWolf and Zen Browser. LibreWolf, Floorp and Zen Browser, three popular Firefox forks, have been added to the programs that are automatically recognizable as Firefox @@ -2321,6 +2379,7 @@ positives. It checks the buffer in batch mode, prints all found errors and signals the first found error. +--- *** New file-local variable 'lisp-indent-local-overrides'. This variable can be used to locally override the indent specification of symbols. @@ -2480,6 +2539,7 @@ started inside Emacs. ** Isearch and Replace ++++ *** Typing 'd' during 'query-replace' shows the diff buffer with replacements. ** Diff @@ -2610,6 +2670,7 @@ Without 'dired-hide-details-hide-absolute-location': When 'dired-make-directory-clickable' is non-nil, clicking on the base name of the directory now reverts the Dired buffer. +--- *** 'dired-copy-filename-as-kill' supports project-relative names. With a new value of the prefix argument (1), this command copies file names relative to the root directory of the current project. @@ -2727,6 +2788,7 @@ mode. Now, one needs to say '(midnight-mode +1)' instead. ** Python mode +--- *** New 'repeat-map' for Python indentation commands. The commands 'python-indent-shift-left' and 'python-indent-shift-right' can now be repeated using 'repeat-mode'. With 'repeat-mode' enabled, @@ -2784,6 +2846,7 @@ string instead of prepending it and 'tmm-mid-prompt' to said entry. ** Foldout ++++ *** Improved behavior of 'foldout-exit-fold' with negative prefix argument. When 'foldout-exit-fold' is called with a negative argument (so that the exited fold remains visible), the position of point and window view are @@ -2932,6 +2995,7 @@ from the history of the current branch, though without undoing the changes made by those revisions to the working tree. 'X' is similar except that it does remove the changes from the working tree. +--- *** New command 'log-edit-done-strip-cvs-lines'. This command strips all lines beginning with "CVS:" from the buffer. It is intended to be added to the 'log-edit-done-hook' so that @@ -3364,7 +3428,7 @@ implementations to suppress messages in Auto Revert modes, for example. ** Strokes --- +--- *** 'strokes-mode' no longer demands the presence of a mouse. 'strokes-mode' now permits itself to be enabled if no mouse is connected, to facilitate enabling 'strokes-mode' in sessions where the @@ -3424,6 +3488,7 @@ Meant to be given a global binding convenient to the user. Example: ** Icomplete +--- *** Change in meaning of 'icomplete-show-matches-on-no-input' (again). For Emacs 28 to Emacs 30, when 'icomplete-show-matches-on-no-input' was non-nil, 'RET' had special behavior when the minibuffer's contents was @@ -3438,6 +3503,7 @@ You can opt back in to the special behavior of 'RET' like this: icomplete-minibuffer-map " " #'icomplete-ret) +--- *** New user options for 'icomplete-vertical-mode'. New user options have been added to enhance 'icomplete-vertical-mode': @@ -3450,6 +3516,7 @@ New user options have been added to enhance 'icomplete-vertical-mode': - 'icomplete-vertical-unselected-prefix-indicator' specifies the prefix string for unselected candidates. +--- *** New faces for 'icomplete-vertical-mode'. New faces have been added to 'icomplete-vertical-mode': @@ -3484,7 +3551,7 @@ text field for other values). ** Pulse --- +--- *** New function 'pulse-faces'. This function pulses a specified list of faces. The pulse duration is determined by the new user option 'pulse-face-duration'. @@ -3616,11 +3683,13 @@ is still available on 'v'. --- ** Flymake ++++ *** Enhanced 'flymake-show-diagnostics-at-end-of-line'. The new value 'fancy' allowed for this user option will attempt to layout diagnostics below the affected line using unicode graphics to point to diagnostic locus. +--- *** Enhanced 'flymake-show-buffer-diagnostics'. The command 'flymake-show-buffer-diagnostics' is now capable of highlighting a nearby diagnostic in the resulting listing. Additionally, @@ -3628,25 +3697,30 @@ it is bound to mouse clicks on fringe and margin indicators, operating on the diagnostics of the corresponding line. The user may bind it in other situations such as the diagnostic overlay map. ++++ *** More powerful 'flymake-make-diagnostic' API. Flymake backends can now specify origin and code attributes, allowing Flymake and other extensions to segregate diagnostics based on this extended information. ++++ *** New user option 'flymake-diagnostic-format-alist'. This provides fine-grained control over diagnostic formatting across different contexts, allowing you to specify which components (origin, code, message or one-liner message) appear in each output destination. +--- *** Dynamic column sizing in diagnostic listings. The tabulated listings produced by 'flymake-show-buffer-diagnostics' and 'flymake-show-project-diagnostics' now automatically adjust their column widths based on content, optimizing display space and readability. +--- *** New value 'auto' of user option 'flymake-indicator-type'. This value (set by default) tries to use fringes if possible, otherwise falls back to margins. +--- *** New user option 'elisp-flymake-byte-compile-executable'. This allows customizing the Emacs executable used for Flymake byte compilation in 'emacs-lisp-mode'. This option should be set when editing @@ -3692,6 +3766,7 @@ You can now use the mouse wheel to scroll the calendar by 3 months. With the shift modifier, it scrolls by one month. With the meta modifier, it scrolls by year. ++++ *** Simpler key bindings for navigation in calendar by months and by years. The month and year navigation key bindings 'M-}', 'M-{', 'C-x ]' and 'C-x [' now have the alternative keys '}', '{', ']' and '['. @@ -3702,6 +3777,7 @@ The user options 'calendar-mark-holidays-flag' and 'calendar-mark-diary-entries-flag' are not modified anymore when changing the marking state in the calendar buffer. +--- *** New library for iCalendar data. A new library has been added to the calendar for handling iCalendar (RFC 5545) data. The library is designed for reuse in other parts of @@ -3715,6 +3791,7 @@ features from icalendar.el; see below. ** Diary +--- *** New user option 'diary-date-insertion-form'. This user option determines how dates are inserted into the diary by Lisp functions. Its value is a pseudo-pattern of the same type as in @@ -3746,6 +3823,7 @@ The old names are kept as obsolete aliases. ** Calc ++++ *** New user option 'calc-string-maximum-character'. Previously, the 'calc-display-strings', 'string', and 'bstring' functions only considered integer vectors whose elements are all in the @@ -3761,6 +3839,7 @@ default value is nil to preserve the existing behavior. ** Time +--- *** New user option 'world-clock-sort-order'. This option controls the order of timezone entries in the 'world-clock'. By default, no sorting is done, and entries appear in the same order as @@ -3814,11 +3893,13 @@ or obsolete. ** CPerl mode +--- *** Syntax of Perl up to version 5.42 is supported. CPerl mode creates imenu entries for ":writer" generated accessors and recognizes the new functions "all" and "any". See https://perldoc.perl.org/5.42.0/perldelta for details. +--- ** Zone Zone can scramble multiple windows across multiple frames; it may also @@ -3867,6 +3948,7 @@ it will begrudgingly use the scratch buffer. Customize the user option 'abbrev-mode' to non-nil to enable Abbrev mode by default in all buffers. +--- ** Antlr mode *** Variable 'antlr-tool-version' is no user option anymore. @@ -3909,6 +3991,7 @@ If an active region exists, the commands 'hi-lock-line-face-buffer' and 'hi-lock-face-phrase-buffer' now use its contents as their default value. Previously, only 'hi-lock-face-buffer' supported this. +--- ** Shadowfile *** 'shadow-info-buffer' and 'shadow-todo-buffer' use ephemeral buffer names now. @@ -3926,6 +4009,7 @@ percentage, or presence in the bay changes. ** Etags Regen mode +--- *** Tags table is not created during completion anymore. Previously, when there was no tags table loaded and the default completion function was called, 'etags-regen-mode' ensured that tags @@ -3935,20 +4019,24 @@ were created. This has been disabled, and the new user option * New Modes and Packages in Emacs 31.1 +--- ** New major mode 'icalendar-mode'. A major mode for displaying and editing iCalendar (RFC 5545) data. This mode handles line unfolding and fontification, including highlighting syntax errors in invalid data. ++++ ** New minor mode 'delete-trailing-whitespace-mode'. A simple buffer-local mode that runs 'delete-trailing-whitespace' before saving the buffer. +--- ** New major mode 'conf-npmrc-mode'. A major mode based on 'conf-mode' for editing ".npmrc" files. ** New major modes based on the tree-sitter library +--- *** New major mode 'mhtml-ts-mode'. An optional major mode based on the tree-sitter library for editing HTML files. This mode handles indentation, fontification, and commenting for @@ -3960,9 +4048,11 @@ A major mode based on the tree-sitter library for editing "go.work" files. If tree-sitter is properly set-up by the user, it can be enabled for files named "go.work". +--- ** New package 'lua-mode'. The 'lua-mode' package from NonGNU ELPA is now included in Emacs. +--- ** New library 'timeout'. This library provides functions to throttle or debounce Emacs Lisp functions. This is useful for corralling overeager code that is slow @@ -4035,16 +4125,6 @@ modes used 'FOO-mode-indent-offset' instead of the previous conventional 'go-ts-indent-offset', 'csharp-ts-indent-offset', 'cmake-ts-indent-offset', 'c-ts-indent-offset'. -** Files loaded from '-x' and '--script' now use lexical binding. -If you don't have time to adapt your script's code to the lexical -binding dialect (see "(elisp) Converting to Lexical Binding"), you can -wrap your code in: - - #!/usr/bin/env -S emacs --batch --script - (eval - '(progn - YOUR CODE HERE)) - +++ ** String mutation has been restricted further. 'aset' on unibyte strings now requires the new character to be a single @@ -4075,6 +4155,7 @@ may return either nil or t. --- ** The obsolete variable 'redisplay-dont-pause' has been removed. +--- ** The 'rx' category name 'chinese-two-byte' must now be spelled correctly. An old alternative name (without the first 'e') has been removed. @@ -4095,6 +4176,7 @@ All the characters that belong to the 'symbol' script (according to 'char-script-table') now have the 'symbol' category, whose mnemonic is '5'. +--- ** Some libraries obsolete since Emacs 24.4 and 24.5 have been removed: cc-compat.el, info-edit.el, meese.el, otodo-mode.el, rcompile.el, sup-mouse.el, terminal.el, vi.el, vip.el, ws-mode.el, and yow.el. @@ -4299,6 +4381,17 @@ change it globally with: --- *** Loading a file displays a warning if there is no 'lexical-binding' cookie. +--- +** Files loaded from '-x' and '--script' now use lexical binding. +If you don't have time to adapt your script's code to the lexical +binding dialect (see "(elisp) Converting to Lexical Binding"), you can +wrap your code in: + + #!/usr/bin/env -S emacs --batch --script + (eval + '(progn + YOUR CODE HERE)) + --- ** New function 'set-local'. This is the buffer-local equivalent of the function 'set'. @@ -4352,6 +4445,7 @@ construct '(any ...)' is unrelated and not obsolete. ** ERT +--- *** Some experimental ERT macros are now considered stable. The following macros, previously only available in the experimental 'ert-x' module, are now considered stable and have been moved to 'ert': @@ -4431,6 +4525,7 @@ functions 'dbus--fd-open', 'dbus--fd-close' and 'dbus--registered-fds' implement managing these file descriptors. See the Info node "(dbus) File Descriptors" for details. +--- ** The customization group 'wp' has been removed. It has been obsolete since Emacs 26.1. Use the group 'text' instead. @@ -4515,6 +4610,7 @@ the 'repeat-continue' property of each command in that list. The 'use-package' and 'bind-keys' macros support a similar keyword ':continue-only'. ++++ ** New function 'completion-table-with-metadata'. It offers a more concise way to create a completion table with metadata. @@ -4560,6 +4656,7 @@ This function inserts the special EVENT into the input event queue. This event is sent when the device running Emacs enters or leaves the sleep state. +--- ** Function aliases obsolete since Emacs 23.2 have been removed: 'advertised-undo', 'advertised-widget-backward', and 'dired-advertised-find-file'. @@ -4570,6 +4667,7 @@ sleep state. and set the top-level buffer-local value of a variable. A top-level value is the one that variable has outside of any let-bindings. ++++ ** New function 'exec-suffixes'. This function by default returns the value of the corresponding user option, but can optionally return the equivalent of 'exec-suffixes' from @@ -4623,10 +4721,12 @@ which if it is the symbol 'async', inhibits updates in the echo area when it is busy. This is useful, for example, if you want to monitor progress of an inherently asynchronous command such as 'compile'. ++++ ** Binary format specifications '%b' and '%B' added. These produce the binary representation of a number. '%#b' and '%#B' prefix the bits with '0b' and '0B', respectively. +--- ** 'pp-eval-expression' can now insert results into the current buffer. With a prefix argument, 'pp-eval-expression' inserts the result into the current buffer, just like 'eval-expression' already did. @@ -4639,6 +4739,7 @@ safe to run the command multiple times on subsequent partitions of the list of arguments. The variable 'command-line-max-length' controls the partitioning. ++++ ** New function 'ensure-proper-list'. This function is a variation on 'ensure-list' that checks if an object is a proper list, in which case the list will be returned as is, From 9e37c94079c7db1543dbae00415165841c10359a Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Sun, 7 Jun 2026 21:56:47 +0300 Subject: [PATCH 3/6] Read a key sequence instead of a single key in 'map-y-or-n-p' This is necessary to correctly read keys like 'M-~' used by 'save-some-buffers' that is two keys 'ESC ~' on a tty. * doc/lispref/minibuf.texi (Multiple Queries): Index 'y-or-n-p-use-read-key' for 'map-y-or-n-p'. Mention using a key sequence instead of single keys. * lisp/emacs-lisp/map-ynp.el (map-y-or-n-p): In the 'y-or-n-p-use-read-key' cond-branch, use 'read-key-sequence-vector' instead of 'read-key'. In the default cond-branch, use 'this-command-keys-vector' instead of 'last-command-event'. In both cond-branches use 'key-description' instead of 'single-key-description' (bug#81168). Instead of '(eq def nil)' check if chars are either nil or an empty vector in noninteractive mode (bug#67836). * test/lisp/emacs-lisp/map-ynp-tests.el (test-map-ynp-kmacro): Test separately nil/non-nil 'y-or-n-p-use-read-key'. (test-map-ynp-keys): New test for complete coverage of 'map-y-or-n-p'. --- doc/lispref/minibuf.texi | 6 +-- lisp/emacs-lisp/map-ynp.el | 47 ++++++++-------- test/lisp/emacs-lisp/map-ynp-tests.el | 78 ++++++++++++++++++++++++++- 3 files changed, 105 insertions(+), 26 deletions(-) diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 44cd74b7011..6b914da9a86 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -2380,12 +2380,12 @@ asking each question individually. This gives the user certain convenient facilities such as the ability to answer the whole series at once. -@vindex read-char-choice-use-read-key@r{, and} map-y-or-n-p +@vindex y-or-n-p-use-read-key@r{, and} map-y-or-n-p @defun map-y-or-n-p prompter actor list &optional help action-alist no-cursor-in-echo-area This function asks the user a series of questions, reading a single-character answer in the minibuffer for each one. However, if -@code{read-char-choice-use-read-key} is non-@code{nil} (@pxref{Reading -One Event}), it reads single keys from the echo area. +@code{y-or-n-p-use-read-key} is non-@code{nil} (@pxref{Key Sequence +Input}), it reads a key sequence from the echo area. The value of @var{list} specifies the objects to ask questions about. It should be either a list of objects or a generator function. If it diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el index 7522d465d61..d4191e3c8cb 100644 --- a/lisp/emacs-lisp/map-ynp.el +++ b/lisp/emacs-lisp/map-ynp.el @@ -105,7 +105,7 @@ function is used instead. The function's value is the number of actions taken." (let* ((actions 0) (msg (current-message)) - user-keys mouse-event map prompt char elt def + user-keys mouse-event map prompt chars elt def ;; Non-nil means we should use mouse menus to ask. use-menus delayed-switch-frame @@ -174,14 +174,15 @@ The function's value is the number of actions taken." 'quit))) (y-or-n-p-use-read-key ;; Prompt in the echo area using `read-key'. - (let ((cursor-in-echo-area (not no-cursor-in-echo-area))) - (message "%s" (substitute-command-keys - (format - (apply #'propertize - "%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') " - minibuffer-prompt-properties) - prompt user-keys - (help-key)))) + (let ((cursor-in-echo-area (not no-cursor-in-echo-area)) + (full-prompt + (substitute-command-keys + (format + (apply #'propertize + "%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') " + minibuffer-prompt-properties) + prompt user-keys + (help-key))))) (if minibuffer-auto-raise (raise-frame (window-frame (minibuffer-window)))) (unwind-protect @@ -196,8 +197,8 @@ The function's value is the number of actions taken." ;; Do NOT use read-event here. That ;; function does not consult ;; input-decode-map (bug#75886). - (setq char (read-key)) - (when (eq char ?\C-g) + (setq chars (read-key-sequence-vector full-prompt)) + (when (member chars '([?\C-g] [?\C-\[ ?\C-\[ ?\C-\[])) (signal 'quit nil))) (when (fboundp 'set-text-conversion-style) (set-text-conversion-style text-conversion-style))) @@ -207,10 +208,10 @@ The function's value is the number of actions taken." "%s(\\`y', \\`n', \\`!', \\`.', \\`q', %sor \\`%s') %s" prompt user-keys (help-key) - (if (equal char -1) + (if (equal chars [-1]) "[end-of-keyboard-macro]" - (single-key-description char)))))) - (setq def (lookup-key map (vector char)))) + (key-description chars)))))) + (setq def (and chars (lookup-key map chars)))) (t ;; Read from the minibuffer. (let* ((full-prompt @@ -224,7 +225,7 @@ The function's value is the number of actions taken." (cmd-char (lambda () (interactive) - (setq char last-command-event) + (setq chars (this-command-keys-vector)) (exit-minibuffer))) (cmd-help (lambda () @@ -250,8 +251,8 @@ The function's value is the number of actions taken." (read-from-minibuffer full-prompt nil remap nil (or y-or-n-p-history-variable t)) - (message "%s%s" full-prompt (single-key-description char))) - (setq def (lookup-key map (vector char))))) + (message "%s%s" full-prompt (key-description chars))) + (setq def (and chars (lookup-key map chars))))) (cond ((eq def 'exit) (setq next (lambda () nil))) ((eq def 'act) @@ -318,12 +319,16 @@ Type \\`SPC' or \\`y' to %s the current %s; (setq actions (1+ actions)) ;; Regurgitated; try again. (funcall try-again))) - ((and (consp char) - (eq (car char) 'switch-frame)) + ((eq chars '[switch-frame]) ;; switch-frame event. Put it off until we're done. - (setq delayed-switch-frame char) + (setq delayed-switch-frame chars) (funcall try-again)) - ((eq def nil) ;; Special case for bug#67836 + ((and noninteractive (member chars '(nil []))) + ;; Special case for kmacro in batch mode (bug#67836). + ;; When 'y-or-n-p-use-read-key' is non-nil, + ;; 'read-key-sequence-vector' returns []. + ;; When 'y-or-n-p-use-read-key' is nil, + ;; 'chars' is nil. (error "Can't use in a kmacro in batch mode")) (t ;; Random char. diff --git a/test/lisp/emacs-lisp/map-ynp-tests.el b/test/lisp/emacs-lisp/map-ynp-tests.el index bf89e972d8b..6f4f1cd2d75 100644 --- a/test/lisp/emacs-lisp/map-ynp-tests.el +++ b/test/lisp/emacs-lisp/map-ynp-tests.el @@ -31,8 +31,7 @@ (defun map-ynp-tests-simple-call () (map-y-or-n-p "" #'ignore '(1))) -(ert-deftest test-map-ynp-kmacro () - "Test that `map-y-or-n-p' in a kmacro terminates on end of input." +(defun test-map-ynp-kmacro-1 () (let ((eval-expression-debug-on-error nil)) ;; bug#67836 (execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET y")) (should-error @@ -43,5 +42,80 @@ (should-error (execute-kbd-macro (read-kbd-macro "M-: (map-ynp-tests-simple-call) RET"))))))) +(ert-deftest test-map-ynp-kmacro () + "Test that `map-y-or-n-p' in a kmacro terminates on end of input." + (let ((y-or-n-p-use-read-key nil)) + (test-map-ynp-kmacro-1)) + (let ((y-or-n-p-use-read-key t)) + (test-map-ynp-kmacro-1))) + +(defvar map-ynp-tests-result nil) + +(defvar-keymap map-ynp-tests-map + "C-x s" 'map-ynp-tests-command) + +(defun map-ynp-tests-command-symbol (obj) + (interactive) + (push obj map-ynp-tests-result)) + +(defun map-ynp-tests-command () + (interactive) + (should (equal (map-y-or-n-p + "Prompt " + (lambda (obj) + (push obj map-ynp-tests-result)) + '(1 2 3 4) + nil + `((?\C-r map-ynp-tests-command-symbol "C-r") + (?\M-~ ,(lambda (obj) + (push obj map-ynp-tests-result)) + "M-~"))) + (length map-ynp-tests-result)))) + +(defun map-ynp-tests-run (keys result) + (setq map-ynp-tests-result nil) + (execute-kbd-macro (read-kbd-macro (concat "C-x s " keys))) + (should (equal (nreverse map-ynp-tests-result) result))) + +(defun test-map-ynp-keys-1 () + (with-temp-buffer + (save-window-excursion + ;; `execute-kbd-macro' applied to window only + (set-window-buffer nil (current-buffer)) + (use-local-map map-ynp-tests-map) + + (map-ynp-tests-run "y Y SPC n" '(1 2 3)) + (map-ynp-tests-run "n N DEL y" '(4)) + (map-ynp-tests-run "n !" '(2 3 4)) + (map-ynp-tests-run "." '(1)) + (map-ynp-tests-run "y q" '(1)) + (map-ynp-tests-run "y RET" '(1)) + (map-ynp-tests-run "C-r M-~ ESC ~ q" '(1 2 3)) + + (map-ynp-tests-run "x q" nil) ;; x - random char + + (kill-buffer (help-buffer)) + (if y-or-n-p-use-read-key + (map-ynp-tests-run "? q" nil) + (map-ynp-tests-run "C-h q" nil)) + (should (get-buffer (help-buffer))) + + (should (equal 'quit + (condition-case err + (map-ynp-tests-run "C-g" nil) + (quit (car err))))) + + (should (equal 'quit + (condition-case err + (map-ynp-tests-run "ESC ESC ESC" nil) + (quit (car err)))))))) + +(ert-deftest test-map-ynp-keys () + "Test keys for `map-y-or-n-p'." + (let ((y-or-n-p-use-read-key nil)) + (test-map-ynp-keys-1)) + (let ((y-or-n-p-use-read-key t)) + (test-map-ynp-keys-1))) + (provide 'map-ynp-tests) ;;; map-ynp-tests.el ends here From df9b97e5164e0f0c5610d093ea1a89d10a36d0ff Mon Sep 17 00:00:00 2001 From: Corwin Brust Date: Sun, 7 Jun 2026 21:09:01 -0500 Subject: [PATCH 4/6] ; update README for windows binaries --- admin/nt/dist-build/README-windows-binaries | 23 +++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/admin/nt/dist-build/README-windows-binaries b/admin/nt/dist-build/README-windows-binaries index 50b2244147c..d901c9b00fa 100644 --- a/admin/nt/dist-build/README-windows-binaries +++ b/admin/nt/dist-build/README-windows-binaries @@ -21,7 +21,6 @@ Making a link to our copy of the source is NOT sufficient, since we might upgrade to a new version while you are still distributing the old binaries. - Windows Binaries ================ @@ -62,18 +61,34 @@ intended that these will be updated after that point. Source for Emacs itself is found in the directory above. +Emacs binaries are normally built using MSYS2/MINGW64 and include a full +"Ahead of Time" (AOT) build of provided elisp. Other binaries for a +given version of Emacs, if any, that have been created from atypical +compilation environments or built using alternative (e.g. "noaot") +settings may include architecture (e.g. "i668") and or other "tags" +following the version identifier (for example: +emacs-X.Y.Z-i686-notreesitter-nognutls.zip). + Snapshots ========= We also distribute "snapshots" of Emacs built at points throughout the development cycle, for those interested in following this cycle. They are not recommended for normal users; however, they are useful for -people who want to report bugs against the current master. +people who want to report bugs against the current master, to help in +"pretesting" new release versions, and so on. The files follow the same naming convention, but also include a date -(and sometimes information about their branch). The Emacs source at -the time of these builds is also distributed. +(and sometimes information about their branch) or they may releate to a +sepecific pretest or release candidate for an "uncut" Emacs. Emacs +sources are distributed along with each dated snapshot. Sources are +provided for the pretest and release candidate Emacs versions here, as +for release builds, are found in the directory (or directories) above. +Meta +==== + +You can find a copy this file, along with other programs used to build Emacs as a native windows program using the MSYS2 toolchain, within the emacs source tree, see: https://git.savannah.gnu.org/cgit/emacs.git/tree/admin/nt/dist-build LICENSE ====== From 912c8e36915de656be1927b84736dadc619f3ee7 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Mon, 8 Jun 2026 08:45:40 +0200 Subject: [PATCH 5/6] Ensure Tramp backward compatibility * lisp/net/tramp.el (tramp-local-environment-variable-p): Use `tramp-compat-funcall'. --- lisp/net/tramp.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 044580bac07..75a8eb16621 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5478,8 +5478,10 @@ should be set connection-local.") "Return non-nil if ARG exists in default `process-environment'. Tramp does not propagate local environment variables in remote processes." - (or (ignore-error void-variable - (member arg (buffer-local-toplevel-value 'process-environment))) + (or ;; `buffer-local-toplevel-value' has been defined in Emacs 31.1. + (ignore-error (void-variable void-function) + (member arg (tramp-compat-funcall 'buffer-local-toplevel-value + 'process-environment))) (member arg (default-toplevel-value 'process-environment)))) (defun tramp-handle-make-process (&rest args) From fff343c332bbf32bc662b0ba5b6322c15a504617 Mon Sep 17 00:00:00 2001 From: William Theesfeld Date: Fri, 5 Jun 2026 15:41:38 -0400 Subject: [PATCH 6/6] ; Fix typos in iCalendar macro and recurrence docstrings * lisp/calendar/icalendar-macs.el (ical:with-node-value) (ical:with-property, ical:with-param, ical:with-child-of): "evalutes" -> "evaluates". * lisp/calendar/icalendar-recur.el (icr:tz--get-updated-in): "occurence" -> "occurrence". Copyright-paperwork-exempt: yes --- lisp/calendar/icalendar-macs.el | 8 ++++---- lisp/calendar/icalendar-recur.el | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/calendar/icalendar-macs.el b/lisp/calendar/icalendar-macs.el index b216d8dc141..43903ddd1d0 100644 --- a/lisp/calendar/icalendar-macs.el +++ b/lisp/calendar/icalendar-macs.el @@ -989,7 +989,7 @@ Each binding in BINDINGS should be a list of one of the following forms: "Execute BODY with bindings in BINDINGS taken from NODE and its children. NODE should be an iCalendar syntax node representing a property or -parameter. If NODE is not a syntax node, this form evalutes to nil +parameter. If NODE is not a syntax node, this form evaluates to nil without binding the variables in BINDINGS and without executing BODY. Within BODY, if NODE's value is itself a syntax node, the symbol @@ -1044,7 +1044,7 @@ available in BODY; see its docstring for their form." "Execute BODY with BINDINGS taken from the value and parameters in NODE. NODE should be an iCalendar syntax node representing a property. If NODE -is not a syntax node, this form evalutes to nil without binding the +is not a syntax node, this form evaluates to nil without binding the variables in BINDINGS and without executing BODY. Within BODY, if NODE's value is itself a syntax node, the symbol @@ -1067,7 +1067,7 @@ available in BODY; see its docstring for their form.") "Bind the value in PARAMETER and execute BODY. PARAMETER should be an iCalendar syntax node representing a -parameter. If PARAMETER is nil, this form evalutes to nil without +parameter. If PARAMETER is nil, this form evaluates to nil without executing BODY. Within BODY, if PARAMETER's value is a syntax node, the symbol @@ -1087,7 +1087,7 @@ bound to nil." Find the first child node of type TYPE in NODE, bind that child node's value and any of its children in BINDINGS and execute BODY -with these bindings. If there is no such node, this form evalutes to +with these bindings. If there is no such node, this form evaluates to nil without executing BODY. Within BODY, the symbols `value-node', `value-type', and `value' will be diff --git a/lisp/calendar/icalendar-recur.el b/lisp/calendar/icalendar-recur.el index b6c766962c9..fbbfb209ca7 100644 --- a/lisp/calendar/icalendar-recur.el +++ b/lisp/calendar/icalendar-recur.el @@ -1644,7 +1644,7 @@ with the UTC offset in effect prior to the OBS-ONSET of OBSERVANCE (see RFC5545 Section 3.3.5). So e.g. at the switch from Standard to Daylight in US Eastern, 2:30AM EST (a nonexistent time) becomes 3:30AM EDT, and at the switch from Daylight to Standard, 1:30AM (which occurs twice) -becomes 1:30AM EDT, the first occurence." +becomes 1:30AM EDT, the first occurrence." (ical:with-component observance ((ical:tzoffsetfrom :value offset-from) (ical:tzoffsetto :value offset-to))