commit 3a0bce8f0283a7f095cfd66a1c7b6b2c35e2eaaf Author: Eli Zaretskii Date: Sun May 31 08:47:02 2026 +0300 ; Fix a recent change * doc/misc/Makefile.in (DOCMISC_W32_TARGET): Define. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index a9c4ac537a8..bb09f15f65a 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -74,6 +74,7 @@ lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(LANG)/ ## On MS Windows, efaq-w32; otherwise blank. DOCMISC_W32 = @DOCMISC_W32@ +DOCMISC_W32_TARGET = efaq-w32 ## Info files to build and install on all platforms. include $(srcdir)/../translations/$(LANG)/info_common.mk @@ -84,7 +85,7 @@ INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) ## Info files to build on current platform. ## This is all of them, even though they might not all get installed, ## because the info files are pre-built in release tarfiles. -INFO_TARGETS = $(INFO_COMMON) efaq-w32 +INFO_TARGETS = $(INFO_COMMON) $(DOCMISC_W32_TARGET) ## Some manuals have their source in .org format. ## This is discouraged because the .texi files it generates commit c4803e57c8c00ea7dac35f8ed3232d08737e3a24 Author: Eli Zaretskii Date: Sun May 31 08:41:59 2026 +0300 ; * doc/translations/fr/info_common.mk: Fix typos. diff --git a/doc/translations/fr/info_common.mk b/doc/translations/fr/info_common.mk index e72440fe69a..9db4f4f540f 100644 --- a/doc/translations/fr/info_common.mk +++ b/doc/translations/fr/info_common.mk @@ -1,8 +1,8 @@ -## Info files to build and install on all platforms (onl ses has been -## translated to Frenchj) +## Info files to build and install on all platforms (only ses has been +## translated to French) INFO_COMMON = ses -## efac-w32 has not been translated to French +## efaq-w32 has not been translated to French DOCMISC_W32:=# DOCMISC_W32_TARGET:=# commit 085eeb1bddea742d1454c07c4c9bba16ef4ba880 Author: Eli Zaretskii Date: Sun May 31 08:28:25 2026 +0300 Fix rules in doc/misc/Makefile.in * doc/misc/Makefile.in (INFO_TARGETS): Always build efaq-w32.info. (info_template): Remove unnecessary extra prerequisite for $$(buildinfodir)/$(1)$$(lang_suffix).info, which repeats an existing pattern rule and causes ccmode.info be constantly regenerated. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 41ec7aa4566..a9c4ac537a8 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -84,7 +84,7 @@ INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) ## Info files to build on current platform. ## This is all of them, even though they might not all get installed, ## because the info files are pre-built in release tarfiles. -INFO_TARGETS = $(INFO_COMMON) $(DOCMISC_W32_TARGET) +INFO_TARGETS = $(INFO_COMMON) efaq-w32 ## Some manuals have their source in .org format. ## This is discouraged because the .texi files it generates @@ -164,8 +164,6 @@ ${buildinfodir}/%$(lang_suffix).info: ${srcdir}/$(lang_subdir)%$(lang_suffix).te define info_template ## patsubst as "info" is already taken. $$(patsubst info, info-doc, $(1)): $$(buildinfodir)/$(1)$$(lang_suffix).info - -$$(buildinfodir)/$(1)$$(lang_suffix).info: $$(srcdir)/$$(lang_subdir)$(1)$$(lang_suffix).texi $$(gfdl) $$(style) endef $(foreach ifile,$(INFO_TARGETS),$(eval $(call info_template,$(ifile)))) commit d70c646894addec51b4948425b4a3779f761317f Merge: a2379402fc9 72d890c43e7 Author: Eli Zaretskii Date: Sat May 30 07:43:08 2026 -0400 Merge from origin/emacs-31 72d890c43e7 ; Update the documentation of 'debug' 69fd4b87f4d Don't make buffer read-only when reverting if 'view-mode'... 2955b51e80c ; * etc/NEWS: Document the change in mode-line faces. # Conflicts: # etc/NEWS commit 72d890c43e70477d496a9a0ef36a61357dde1023 Author: Eli Zaretskii Date: Sat May 30 13:41:22 2026 +0300 ; Update the documentation of 'debug' diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi index 8d498608da4..48f3c3f8257 100644 --- a/doc/lispref/debugging.texi +++ b/doc/lispref/debugging.texi @@ -638,11 +638,9 @@ debugger, etc.), and fills it with information about the stack of Lisp function calls. It then enters a recursive edit, showing the backtrace buffer in Debugger mode. In batch mode (more generally, when @code{noninteractive} is non-@code{nil}, @pxref{Batch Mode}), -this function shows the Lisp backtrace on the standard error stream, -and then kills Emacs, causing it to exit with a non-zero exit code -(@pxref{Killing Emacs}). Binding -@code{backtrace-on-error-noninteractive} to @code{nil} suppresses the -backtrace in batch mode, see below. +this function shows the Lisp backtrace on the standard error stream. +Binding @code{backtrace-on-error-noninteractive} to @code{nil} +suppresses the backtrace in batch mode, see below. The Debugger mode @kbd{c}, @kbd{d}, @kbd{j}, and @kbd{r} commands exit the recursive edit; then @code{debug} switches back to the previous diff --git a/etc/NEWS b/etc/NEWS index acc156ea80e..95bc966d47d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -4222,6 +4222,11 @@ 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. ++++ +** Calling 'debug' in batch sessions no longer kills Emacs. +If you want Emacs to exit, your program will now have to call +'kill-emacs' explicitly. + * Lisp Changes in Emacs 31.1 commit 69fd4b87f4db6acfb3f207db3f1673a5b6866d70 Author: Eli Zaretskii Date: Sat May 30 13:17:00 2026 +0300 Don't make buffer read-only when reverting if 'view-mode' was disabled * lisp/view.el (view--disable): Reset 'read-only-mode--state'. (Bug#81149) diff --git a/lisp/view.el b/lisp/view.el index ec69699108a..4e2e1f54c76 100644 --- a/lisp/view.el +++ b/lisp/view.el @@ -464,6 +464,10 @@ Entry to view-mode runs the normal hook `view-mode-hook'." ;; so that View mode stays off if read-only-mode is called. (if (local-variable-p 'view-read-only) (kill-local-variable 'view-read-only)) + ;; Reset the read-only state memory as well, so that 'revert-buffer' + ;; won't make the buffer read-only again. + (if (local-variable-p 'read-only-mode--state) + (setq-local read-only-mode--state nil)) (if buffer-read-only (setq buffer-read-only view-old-buffer-read-only))) commit 2955b51e80c189d9a9de47ff27fa16f08671dcb8 Author: Eli Zaretskii Date: Sat May 30 11:13:08 2026 +0300 ; * etc/NEWS: Document the change in mode-line faces. diff --git a/etc/NEWS b/etc/NEWS index 7fc998ff547..acc156ea80e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -572,6 +572,14 @@ ID. When called interactively, both functions prompt for an ID. ** Mode Line +--- +*** 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 +previous visuals for these two faces, customize them to have the colors +"grey75" and "grey40", respectively, regardless of the background mode. + +++ *** New user option 'mode-line-collapse-minor-modes'. If non-nil, minor mode lighters on the mode line are collapsed into a commit a2379402fc9d4aed342d85c171cbddea8be37862 Author: Stefan Monnier Date: Fri May 29 17:36:06 2026 -0400 (reftex-isearch-minor-mode): A few more simplifications * lisp/textmodes/reftex-global.el (reftex-isearch-minor-mode): Simplify docstring. Remove redundant `setq`s and mode line update. diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el index 54c5c97be01..8f6f0a1445a 100644 --- a/lisp/textmodes/reftex-global.el +++ b/lisp/textmodes/reftex-global.el @@ -478,14 +478,10 @@ Also checks if buffers visiting the files are in read-only mode." (define-minor-mode reftex-isearch-minor-mode "When on, isearch searches the whole document, not only the current file. This minor mode allows isearch to search through all the files of -the current TeX document. - -With no argument, this command toggles -`reftex-isearch-minor-mode'. With a prefix argument ARG, turn -`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off. -This behaviour is derived from `define-minor-mode'." +the current TeX document." :lighter "/I" :global t + :group 'reftex (if reftex-isearch-minor-mode (progn (dolist (crt-buf (buffer-list)) @@ -501,8 +497,7 @@ This behaviour is derived from `define-minor-mode'." (setq-local isearch-push-state-function #'reftex-isearch-push-state-function) (setq-local isearch-next-buffer-function - #'reftex-isearch-switch-to-next-file)) - (setq reftex-isearch-minor-mode t)))) + #'reftex-isearch-switch-to-next-file))))) (add-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)) (dolist (crt-buf (buffer-list)) (with-current-buffer crt-buf @@ -512,11 +507,8 @@ This behaviour is derived from `define-minor-mode'." (kill-local-variable 'isearch-wrap-function) (kill-local-variable 'isearch-search-fun-function) (kill-local-variable 'isearch-push-state-function) - (kill-local-variable 'isearch-next-buffer-function)) - (setq reftex-isearch-minor-mode nil)))) - (remove-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)) - ;; Force mode line redisplay. - (set-buffer-modified-p (buffer-modified-p))) + (kill-local-variable 'isearch-next-buffer-function))))) + (remove-hook 'reftex-mode-hook #'reftex-isearch-minor-mode))) commit 36c6908616562201f87fbbe4f0f5556baa5eeac7 Author: Luniya DW Date: Tue May 26 22:39:05 2026 +0200 Refactor reftex-isearch-minor-mode to use define-minor-mode See L88 in etc/TODO. * lisp/textmodes/reftex-global.el (reftex-isearch-minor-mode): Use `define-minor-mode`. * lisp/textmodes/reftex.el (reftex-isearch-minor-mode): Remove redundant variable definition. diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el index e9acf91c824..54c5c97be01 100644 --- a/lisp/textmodes/reftex-global.el +++ b/lisp/textmodes/reftex-global.el @@ -440,7 +440,7 @@ Also checks if buffers visiting the files are in read-only mode." (t (setq nxt-buff (funcall isearch-next-buffer-function - (current-buffer))) + (current-buffer))) (if (not nxt-buff) (progn (error "Wrap backward")) @@ -475,54 +475,51 @@ Also checks if buffers visiting the files are in read-only mode." ;; NB this is a global autoload - see reftex.el. ;;;###autoload -(defun reftex-isearch-minor-mode (&optional arg) +(define-minor-mode reftex-isearch-minor-mode "When on, isearch searches the whole document, not only the current file. This minor mode allows isearch to search through all the files of the current TeX document. With no argument, this command toggles `reftex-isearch-minor-mode'. With a prefix argument ARG, turn -`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off." - (interactive "P") - (let ((old-reftex-isearch-minor-mode reftex-isearch-minor-mode)) - (setq reftex-isearch-minor-mode - (not (or (and (null arg) reftex-isearch-minor-mode) - (<= (prefix-numeric-value arg) 0)))) - (unless (eq reftex-isearch-minor-mode old-reftex-isearch-minor-mode) - (if reftex-isearch-minor-mode - (progn - (dolist (crt-buf (buffer-list)) - (with-current-buffer crt-buf - (when reftex-mode - (if (boundp 'multi-isearch-next-buffer-function) - (setq-local multi-isearch-next-buffer-function - #'reftex-isearch-switch-to-next-file) - (setq-local isearch-wrap-function - #'reftex-isearch-wrap-function) - (setq-local isearch-search-fun-function - (lambda () #'reftex-isearch-isearch-search)) - (setq-local isearch-push-state-function - #'reftex-isearch-push-state-function) - (setq-local isearch-next-buffer-function - #'reftex-isearch-switch-to-next-file)) - (setq reftex-isearch-minor-mode t)))) - (add-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)) +`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off. +This behaviour is derived from `define-minor-mode'." + :lighter "/I" + :global t + (if reftex-isearch-minor-mode + (progn (dolist (crt-buf (buffer-list)) (with-current-buffer crt-buf (when reftex-mode (if (boundp 'multi-isearch-next-buffer-function) - (kill-local-variable 'multi-isearch-next-buffer-function) - (kill-local-variable 'isearch-wrap-function) - (kill-local-variable 'isearch-search-fun-function) - (kill-local-variable 'isearch-push-state-function) - (kill-local-variable 'isearch-next-buffer-function)) - (setq reftex-isearch-minor-mode nil)))) - (remove-hook 'reftex-mode-hook #'reftex-isearch-minor-mode))) - ;; Force mode line redisplay. - (set-buffer-modified-p (buffer-modified-p)))) - -(add-minor-mode 'reftex-isearch-minor-mode "/I" nil nil - 'reftex-isearch-minor-mode) + (setq-local multi-isearch-next-buffer-function + #'reftex-isearch-switch-to-next-file) + (setq-local isearch-wrap-function + #'reftex-isearch-wrap-function) + (setq-local isearch-search-fun-function + (lambda () #'reftex-isearch-isearch-search)) + (setq-local isearch-push-state-function + #'reftex-isearch-push-state-function) + (setq-local isearch-next-buffer-function + #'reftex-isearch-switch-to-next-file)) + (setq reftex-isearch-minor-mode t)))) + (add-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)) + (dolist (crt-buf (buffer-list)) + (with-current-buffer crt-buf + (when reftex-mode + (if (boundp 'multi-isearch-next-buffer-function) + (kill-local-variable 'multi-isearch-next-buffer-function) + (kill-local-variable 'isearch-wrap-function) + (kill-local-variable 'isearch-search-fun-function) + (kill-local-variable 'isearch-push-state-function) + (kill-local-variable 'isearch-next-buffer-function)) + (setq reftex-isearch-minor-mode nil)))) + (remove-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)) + ;; Force mode line redisplay. + (set-buffer-modified-p (buffer-modified-p))) + + + ;;; reftex-global.el ends here diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 4e2c89e87dc..c0533ada842 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -2180,8 +2180,6 @@ fonts. Currently it is only used for reftex-label-face." ;; Define a menu for the menu bar if Emacs is running under X -(defvar-local reftex-isearch-minor-mode nil) - (easy-menu-define reftex-mode-menu reftex-mode-map "Menu used in RefTeX mode." `("Ref" commit 31ee3253523dd0c068ee5cc12c30454d4fed3961 Author: Andreas Schwab Date: Fri May 29 15:51:58 2026 +0200 Fix build outside source directory diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 10b6326a7a0..41ec7aa4566 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -65,7 +65,7 @@ MAKEINFO_OPTS = --force -I$(emacsdir) ifeq ($(LANG),) LANG:=default -else ifeq ($(wildcard ../translations/$(LANG)/info_common.mk),) +else ifeq ($(wildcard $(srcdir)/../translations/$(LANG)/info_common.mk),) LANG:=default endif @@ -76,7 +76,7 @@ lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(LANG)/ DOCMISC_W32 = @DOCMISC_W32@ ## Info files to build and install on all platforms. -include ../translations/$(LANG)/info_common.mk +include $(srcdir)/../translations/$(LANG)/info_common.mk ## Info files to install on current platform. INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) commit 5c36f6c2283590d30b36f04d0e66eb2a9aacf32b Author: Andreas Schwab Date: Fri May 29 15:41:58 2026 +0200 Fix overquoting in gl_SET_MAKEINFO diff --git a/m4/texinfo.m4 b/m4/texinfo.m4 index e5316d5b590..251d039df2c 100644 --- a/m4/texinfo.m4 +++ b/m4/texinfo.m4 @@ -17,9 +17,9 @@ AC_DEFUN([gl_SET_MAKEINFO],[dnl [## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals. : ${MAKEINFO:=makeinfo} case `($MAKEINFO --version) 2>/dev/null` in - *' (GNU texinfo) '4.1[[3-9]]* | \ - *' (GNU texinfo) '[[5-9]]* | \ - *' (GNU texinfo) '[[1-9][0-9]]* ) ;; + *' (GNU texinfo) '4.1[3-9]* | \ + *' (GNU texinfo) '[5-9]* | \ + *' (GNU texinfo) '[1-9][0-9]* ) ;; *) MAKEINFO=no;; esac commit ee1092aaace1dfa18597be2c2d8a90911d5cbc23 Merge: 00771a87c3b 24879846852 Author: Sean Whitton Date: Fri May 29 11:01:26 2026 +0100 Merge from origin/emacs-31 24879846852 * lisp/shell.el (shell): Fix typo: use process-live-p (bu... 545bbc6ebe8 widget-image-find: Use 'image-load-path' (bug#81140) 69286be27db ; Fix an overwide docstring line. commit 00771a87c3bd42f497412c3420fac79be6fcab38 Merge: c7167f2a1e9 d8933b9f074 Author: Sean Whitton Date: Fri May 29 11:01:26 2026 +0100 ; Merge from origin/emacs-31 The following commit was skipped: d8933b9f074 Fix the MSDOS build commit c7167f2a1e9dd45603e349bb2b6ea88dca07282e Merge: 4870bc06fa3 c3babe4b896 Author: Sean Whitton Date: Fri May 29 11:01:25 2026 +0100 Merge from origin/emacs-31 c3babe4b896 Fix lax whitespace highlight during query-replace 2e70b88623e Fix fill-paragraph combining text with preceding comment ea54c33950f ; * etc/PROBLEMS: Link to bug#81124. 02897e208d0 emacsclient quote_argument is void c6181780663 ; Mark process-test-stderr-buffer as :unstable when runni... 2c1b45f5c56 ; Improve documentation of 'vc-dir-auto-hide-up-to-date' 768c8bf0045 Revert "* admin/notes/documentation: Recommend not using ... a7414f18598 native--compile-skip-on-battery-p: Try to fix ?b, ?B cond... 7cee526a8cc Save and restore original local keymap in grep-edit-mode 4d87d203cfb Fix display of inline SVG images in Rmail 4c55d04ebe3 Add treesit-ready-p check back to tree-sitter major modes... 7892ae5eaf4 Fix pathological slowness in flex completion 12eec781ed6 No longer raise error on HTTP 402 (Payment Required) (bug... 1800350b186 Avoid compilation-mode matching rust as gnu commit 24879846852a577a348eb45c935ac2b31b632d94 Author: Augusto Stoffel Date: Fri May 29 09:46:40 2026 +0200 * lisp/shell.el (shell): Fix typo: use process-live-p (bug#81145). diff --git a/lisp/shell.el b/lisp/shell.el index 2730c417b49..acaa8e1f860 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -996,7 +996,7 @@ Make the shell buffer the current buffer, and return it. (lambda (proc event) (when sentinel (funcall sentinel proc event)) - (unless (buffer-live-p proc) + (unless (process-live-p proc) (kill-buffer buffer)))))) buffer) commit 4870bc06fa36125ff7cb323a17dc67689f6d4109 Author: Vincent Belaïche Date: Thu May 14 13:12:37 2026 +0200 ses doc, add comment how to compile individually the manuals. diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi index 3e6fbed95bb..3c11d8a17c0 100644 --- a/doc/misc/ses.texi +++ b/doc/misc/ses.texi @@ -9,6 +9,13 @@ @syncodeindex vr cp @syncodeindex ky cp @c %**end of header +@c compile info with +@c make -C doc/misc ../../info/ses.info +@c or just +@c make -C doc/misc ses +@c compile pdf with +@c make -C doc/misc ses.pdf + @copying This file documents @acronym{SES}: the Simple Emacs Spreadsheet. diff --git a/doc/translations/fr/misc/ses-fr.texi b/doc/translations/fr/misc/ses-fr.texi index 10bb20420a9..4e204ad94e5 100644 --- a/doc/translations/fr/misc/ses-fr.texi +++ b/doc/translations/fr/misc/ses-fr.texi @@ -10,6 +10,12 @@ @syncodeindex vr cp @syncodeindex ky cp @c %**end of header +@c compiler info avec +@c make -C doc/misc ../../info/ses-fr.info LANG=fr +@c ou juste +@c make -C doc/misc ses LANG=fr +@c compiler pdf avec +@c make -C doc/misc ses-fr.pdf LANG=fr @copying Ce fichier documente @acronym{SES} : le tableur simple d’Emacs (Simple commit 02c806cb4747692a27e85341ee8c1c6de12b5852 Author: Vincent Belaïche Date: Sat May 2 23:54:39 2026 +0200 Use a shell function to delay message. Do not insert a message between AC_MSG_CHECKING and AC_MSG_RESULT. diff --git a/m4/texinfo.m4 b/m4/texinfo.m4 index 53d9bb35103..e5316d5b590 100644 --- a/m4/texinfo.m4 +++ b/m4/texinfo.m4 @@ -68,15 +68,18 @@ dnl See texinfo version 836b8924560. m4_define([gl_TEXINFO_TEX_MINVER],[[20260426.12]])dnl m4_define([gl_TEXINDEX_MINVER],[[7.1]])dnl m4_define([gl_TEXINFO_INDEXING_IS_LOCALE_DEPENDANT],[dnl -[DOCLANGS='default'] -AC_MSG_WARN([texinfo.tex/texindex versions suggest that indexing is locale dependant, manual compilation is restricted to lang 'default', override this by setting DOCLANGS in the environment]) -])dnl +[DOCLANGS='default' +gl_fn_doclangs_info () {] + AC_MSG_WARN([texinfo.tex/texindex versions suggest that indexing is locale dependant, manual compilation is restricted to lang 'default', override this by setting DOCLANGS in the environment]) +[}]])dnl m4_define([gl_GET_TEXINFO_TEX_VER],[dnl [texinfo_tex_ver=`tex -jobname=conftest '\nonstopmode\input texinfo.tex @typeout{TEXINFO_TEX_VER=@texinfoversion}@bye' | awk 'BEGIN{R=1;FS="="};]gl_dollar[1=="TEXINFO_TEX_VER" { gsub("-","");print ]gl_dollar[2; R=0; exit}; END{ exit R}'` if test $? -ne 0; then - texinfo_tex_ver_ver=0.0] - AC_MSG_WARN([Can't find texinfo.tex version, check tex and texinfo.tex are installed.]) -[fi + texinfo_tex_ver_ver=0.0 + gl_fn_doclangs_info () {] + AC_MSG_WARN([Can't find texinfo.tex version, check tex and texinfo.tex are installed.]) +[ } +fi ]])dnl m4_define([gl_GET_TEXINDEX_VER],[dnl [texindex_ver=`texindex --version | awk 'BEGIN { R=1};NR==1 && ]gl_dollar[1 == "texindex"{ print $NF; R=0; exit}; {exit}; END { exit R}'` @@ -95,15 +98,19 @@ AC_DEFUN([gl_SET_DOCLANGS],[dnl AC_REQUIRE([gl_TEXINFO_VERSION_COMPARE]) AC_ARG_VAR([DOCLANGS],[languages for which manuals are compiled, languages supported: ]gl_DOCLANGS_FULL()[, list is space separated]) AC_MSG_CHECKING([for DOCLANGS derivation from texinfo.tex/texindex versions]) +dnl By default nothing to inform about +[gl_fn_doclangs_info () { :; }] gl_GET_TEXINFO_TEX_VER() gl_GET_TEXINDEX_VER() gl_TEXINFO_VERSION_COMPARE([$texinfo_tex_ver],[gl_TEXINFO_TEX_MINVER()],[dnl gl_TEXINFO_VERSION_COMPARE([$texindex_ver],[gl_TEXINDEX_MINVER()],[dnl - [DOCLANGS=']gl_DOCLANGS_FULL()['] - AC_MSG_NOTICE([texinfo.tex/texindex versions suggest that indexing is not locale dependant, setting DOCLANGS to ']gl_DOCLANGS_FULL()[']) - ]) + [DOCLANGS=']gl_DOCLANGS_FULL()[' + gl_fn_doclangs_info () {] + AC_MSG_NOTICE([texinfo.tex/texindex versions suggest that indexing is not locale dependant]) + [}]]) ]) AC_MSG_RESULT([[']$DOCLANGS[']]) +gl_fn_doclangs_info AC_SUBST([DOCLANGS]) ]) dnl commit 5eaacff65b7c2dbce8c0493a3a8dbdf3243fe2d7 Author: Vincent Belaïche Date: Sat May 2 20:27:48 2026 +0200 Add a checking/result message for DOCLANGS derivation. diff --git a/m4/texinfo.m4 b/m4/texinfo.m4 index d7fecfec73b..53d9bb35103 100644 --- a/m4/texinfo.m4 +++ b/m4/texinfo.m4 @@ -94,6 +94,7 @@ dnl gl_SET_DOCLANGS AC_DEFUN([gl_SET_DOCLANGS],[dnl AC_REQUIRE([gl_TEXINFO_VERSION_COMPARE]) AC_ARG_VAR([DOCLANGS],[languages for which manuals are compiled, languages supported: ]gl_DOCLANGS_FULL()[, list is space separated]) +AC_MSG_CHECKING([for DOCLANGS derivation from texinfo.tex/texindex versions]) gl_GET_TEXINFO_TEX_VER() gl_GET_TEXINDEX_VER() gl_TEXINFO_VERSION_COMPARE([$texinfo_tex_ver],[gl_TEXINFO_TEX_MINVER()],[dnl @@ -102,6 +103,7 @@ gl_TEXINFO_VERSION_COMPARE([$texinfo_tex_ver],[gl_TEXINFO_TEX_MINVER()],[dnl AC_MSG_NOTICE([texinfo.tex/texindex versions suggest that indexing is not locale dependant, setting DOCLANGS to ']gl_DOCLANGS_FULL()[']) ]) ]) +AC_MSG_RESULT([[']$DOCLANGS[']]) AC_SUBST([DOCLANGS]) ]) dnl commit e3b2d6f862913e30c33f9b3b5789e4cf0c844f27 Author: Vincent Belaïche Date: Sat May 2 19:19:58 2026 +0200 Set DOCLANGS with autoconf depending on texinfo.tex/texindex versions. diff --git a/Makefile.in b/Makefile.in index d5a78c1d694..b9164afa55d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -115,8 +115,7 @@ HAVE_GSETTINGS = @HAVE_GSETTINGS@ ANDROID = @ANDROID@ -# TODO : make a configure option to keep only desired languages -DOCLANGS?=default fr +DOCLANGS?=@DOCLANGS@ # ==================== Where To Install Things ==================== diff --git a/m4/texinfo.m4 b/m4/texinfo.m4 index 66e8abd8602..d7fecfec73b 100644 --- a/m4/texinfo.m4 +++ b/m4/texinfo.m4 @@ -9,6 +9,7 @@ dnl AC_DEFUN([gl_TEXINFO],[dnl AC_REQUIRE([gl_SET_MAKEINFO]) AC_REQUIRE([gl_SET_DOCMISC_W32]) +AC_REQUIRE([gl_SET_DOCLANGS]) ]) dnl dnl gl_FIND_MAKEINFO @@ -56,3 +57,51 @@ fi ]AC_SUBST([DOCMISC_W32]) ]) dnl +dnl gl_dollar is needed for $1, $2 etc. in AWK snippets not to be intepreted by +dnl M4 as macros arguments. +m4_define([gl_dollar],[m4_quote([$])])dnl +m4_define([gl_DOCLANGS_FULL],[[default fr]])dnl +dnl This is minimal texinfo.tex version with "-" removed from the ISO date +dnl part from which there is no issue with index key sorting when document +dnl language/encoding corresponding locale is not installer nor active. +dnl See texinfo version 836b8924560. +m4_define([gl_TEXINFO_TEX_MINVER],[[20260426.12]])dnl +m4_define([gl_TEXINDEX_MINVER],[[7.1]])dnl +m4_define([gl_TEXINFO_INDEXING_IS_LOCALE_DEPENDANT],[dnl +[DOCLANGS='default'] +AC_MSG_WARN([texinfo.tex/texindex versions suggest that indexing is locale dependant, manual compilation is restricted to lang 'default', override this by setting DOCLANGS in the environment]) +])dnl +m4_define([gl_GET_TEXINFO_TEX_VER],[dnl +[texinfo_tex_ver=`tex -jobname=conftest '\nonstopmode\input texinfo.tex @typeout{TEXINFO_TEX_VER=@texinfoversion}@bye' | awk 'BEGIN{R=1;FS="="};]gl_dollar[1=="TEXINFO_TEX_VER" { gsub("-","");print ]gl_dollar[2; R=0; exit}; END{ exit R}'` +if test $? -ne 0; then + texinfo_tex_ver_ver=0.0] + AC_MSG_WARN([Can't find texinfo.tex version, check tex and texinfo.tex are installed.]) +[fi +]])dnl +m4_define([gl_GET_TEXINDEX_VER],[dnl +[texindex_ver=`texindex --version | awk 'BEGIN { R=1};NR==1 && ]gl_dollar[1 == "texindex"{ print $NF; R=0; exit}; {exit}; END { exit R}'` +if test $? -ne 0; then + texindex_ver=0.0] + AC_MSG_WARN([Can't find texindex version, check texindex is installed.]) +[fi +] +])dnl +AC_DEFUN([gl_TEXINFO_VERSION_COMPARE],[dnl +AC_REQUIRE([AS_VERSION_COMPARE]) +AS_VERSION_COMPARE([$1],[$2],[gl_TEXINFO_INDEXING_IS_LOCALE_DEPENDANT()],[$3],[$3])dnl +])dnl +dnl gl_SET_DOCLANGS +AC_DEFUN([gl_SET_DOCLANGS],[dnl +AC_REQUIRE([gl_TEXINFO_VERSION_COMPARE]) +AC_ARG_VAR([DOCLANGS],[languages for which manuals are compiled, languages supported: ]gl_DOCLANGS_FULL()[, list is space separated]) +gl_GET_TEXINFO_TEX_VER() +gl_GET_TEXINDEX_VER() +gl_TEXINFO_VERSION_COMPARE([$texinfo_tex_ver],[gl_TEXINFO_TEX_MINVER()],[dnl + gl_TEXINFO_VERSION_COMPARE([$texindex_ver],[gl_TEXINDEX_MINVER()],[dnl + [DOCLANGS=']gl_DOCLANGS_FULL()['] + AC_MSG_NOTICE([texinfo.tex/texindex versions suggest that indexing is not locale dependant, setting DOCLANGS to ']gl_DOCLANGS_FULL()[']) + ]) +]) +AC_SUBST([DOCLANGS]) +]) +dnl commit 2455b32dd31689e75bd34101431c9410297e5aca Author: Vincent Belaïche Date: Sat May 2 14:50:17 2026 +0200 Move Texinfo related autoconf code to a new separate texinfo.m4 file. diff --git a/configure.ac b/configure.ac index ef64ef5918d..7e85646bd4c 100644 --- a/configure.ac +++ b/configure.ac @@ -2107,44 +2107,7 @@ if test $opsys = darwin; then AC_PATH_PROG([HAVE_MACPORTS], [port]) fi -## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals. -: ${MAKEINFO:=makeinfo} -case `($MAKEINFO --version) 2>/dev/null` in - *' (GNU texinfo) '4.1[[3-9]]* | \ - *' (GNU texinfo) '[[5-9]]* | \ - *' (GNU texinfo) '[[1-9][0-9]]* ) ;; - *) MAKEINFO=no;; -esac - -## Makeinfo is unusual. For a released Emacs, the manuals are -## pre-built, and not deleted by the normal clean rules. makeinfo is -## therefore in the category of "special tools" not normally required, which -## configure does not have to check for (eg autoconf itself). -## In a repository checkout on the other hand, the manuals are not included. -## So makeinfo is a requirement to build from the repository, and configure -## should test for it as it does for any other build requirement. -## We use the presence of $srcdir/info/emacs to distinguish a release, -## with pre-built manuals, from a repository checkout. -if test "$MAKEINFO" = "no"; then - MAKEINFO=makeinfo - if test ! -e "$srcdir/info/emacs" && test ! -e "$srcdir/info/emacs.info"; then - AC_MSG_ERROR( [You do not seem to have makeinfo >= 4.13, and your -source tree does not seem to have pre-built manuals in the 'info' directory. -Please install a suitable version of makeinfo.] ) - else - AC_MSG_WARN( [You do not seem to have makeinfo >= 4.13. -You will not be able to rebuild the manuals if you delete them or change -their sources.] ) - fi -fi -AC_SUBST([MAKEINFO]) - -if test $opsys = mingw32; then - DOCMISC_W32=efaq-w32 -else - DOCMISC_W32= -fi -AC_SUBST([DOCMISC_W32]) +gl_TEXINFO dnl Add our options to ac_link now, after it is set up. diff --git a/m4/texinfo.m4 b/m4/texinfo.m4 new file mode 100644 index 00000000000..66e8abd8602 --- /dev/null +++ b/m4/texinfo.m4 @@ -0,0 +1,58 @@ +# texinfo.m4 +dnl Copyright (C) 2026 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl This file is offered as-is, without any warranty. +dnl +dnl +AC_DEFUN([gl_TEXINFO],[dnl +AC_REQUIRE([gl_SET_MAKEINFO]) +AC_REQUIRE([gl_SET_DOCMISC_W32]) +]) +dnl +dnl gl_FIND_MAKEINFO +AC_DEFUN([gl_SET_MAKEINFO],[dnl +[## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals. +: ${MAKEINFO:=makeinfo} +case `($MAKEINFO --version) 2>/dev/null` in + *' (GNU texinfo) '4.1[[3-9]]* | \ + *' (GNU texinfo) '[[5-9]]* | \ + *' (GNU texinfo) '[[1-9][0-9]]* ) ;; + *) MAKEINFO=no;; +esac + +## Makeinfo is unusual. For a released Emacs, the manuals are +## pre-built, and not deleted by the normal clean rules. makeinfo is +## therefore in the category of "special tools" not normally required, which +## configure does not have to check for (eg autoconf itself). +## In a repository checkout on the other hand, the manuals are not included. +## So makeinfo is a requirement to build from the repository, and configure +## should test for it as it does for any other build requirement. +## We use the presence of $srcdir/info/emacs to distinguish a release, +## with pre-built manuals, from a repository checkout. +if test "$MAKEINFO" = "no"; then + MAKEINFO=makeinfo + if test ! -e "$srcdir/info/emacs" && test ! -e "$srcdir/info/emacs.info"; then + ]AC_MSG_ERROR( [You do not seem to have makeinfo >= 4.13, and your +source tree does not seem to have pre-built manuals in the 'info' directory. +Please install a suitable version of makeinfo.] )[ + else + ]AC_MSG_WARN( [You do not seem to have makeinfo >= 4.13. +You will not be able to rebuild the manuals if you delete them or change +their sources.] )[ + fi +fi +]AC_SUBST([MAKEINFO]) +]) +dnl +dnl gl_SET_DOCMISC_W32 +AC_DEFUN([gl_SET_DOCMISC_W32],[dnl +[if test $opsys = mingw32; then + DOCMISC_W32=efaq-w32 +else + DOCMISC_W32= +fi +]AC_SUBST([DOCMISC_W32]) +]) +dnl commit ca346be53c7063f0d0a13c9f04fdea541da0fae2 Author: Vincent Belaïche Date: Thu Apr 16 23:04:05 2026 +0200 Handle the info duplicate target issue as close as possible to the conflict. The problems are: - filtering out the info from info making templates misses some dependencies. - naming PHONY target info.info is misleading, as there is also an info.info in the info build directory diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index ca11dd9fbc8..10b6326a7a0 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -1,4 +1,3 @@ - ### @configure_input@ # Copyright (C) 1994, 1996-2026 Free Software Foundation, Inc. @@ -96,8 +95,7 @@ TEXI_FROM_ORG = ${ORG_SRC:.org=.texi} # There are some naming differences between the info targets and the other # targets, so let's resolve them here. -TARGETS_1 = $(INFO_INSTALL:ccmode=cc-mode) -TARGETS = $(TARGETS_1:info.info=info) +TARGETS = $(INFO_INSTALL:ccmode=cc-mode) # Sources are also suffixed, this is useless as they are in different # directories, but some people argued that there should not be @@ -124,15 +122,15 @@ ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ gfdl = ${srcdir}/doclicense.texi style = ${emacsdir}/docstyle.texi -.PHONY: info dvi html pdf ps echo-info echo-sources $(INFO_TARGETS) +.PHONY: info dvi html pdf ps echo-info echo-sources $(patsubst info, info-doc, $(INFO_TARGETS)) ## Prevent implicit rule triggering for foo.info. .SUFFIXES: ## Disable implicit rules. %.texi: ; -# Default. -info: $(INFO_TARGETS) +# Default. patsubst as "info" is already taken. +info: $(patsubst info, info-doc,$(INFO_TARGETS)) ## Used by top-level Makefile. ## Base file names of output info files. @@ -164,15 +162,13 @@ ${buildinfodir}/%$(lang_suffix).info: ${srcdir}/$(lang_subdir)%$(lang_suffix).te ## The short aliases, eg efaq = $(buildinfodir)/efaq.info. define info_template - $(1): $$(buildinfodir)/$(1)$$(lang_suffix).info +## patsubst as "info" is already taken. +$$(patsubst info, info-doc, $(1)): $$(buildinfodir)/$(1)$$(lang_suffix).info $$(buildinfodir)/$(1)$$(lang_suffix).info: $$(srcdir)/$$(lang_subdir)$(1)$$(lang_suffix).texi $$(gfdl) $$(style) endef -## "info" is already taken. -info.info: $(buildinfodir)/info.info - -$(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_template,$(ifile)))) +$(foreach ifile,$(INFO_TARGETS),$(eval $(call info_template,$(ifile)))) %$(lang_suffix).dvi: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} diff --git a/doc/translations/default/info_common.mk b/doc/translations/default/info_common.mk index 9c09f5a0cec..56c505c8b10 100644 --- a/doc/translations/default/info_common.mk +++ b/doc/translations/default/info_common.mk @@ -2,7 +2,7 @@ INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \ ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \ emacs-mime epa erc ert eshell eudc eww flymake forms gnus \ - htmlfontify idlwave ido info.info mairix-el message mh-e \ + htmlfontify idlwave ido info mairix-el message mh-e \ modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \ rcirc reftex remember sasl sc semantic ses sieve smtpmail \ speedbar srecode todo-mode tramp transient url use-package \ commit 0275b41d1c6107de8eb6632c7912212f725b3db9 Author: Vincent Belaïche Date: Sun Dec 31 17:37:09 2023 +0100 Generate manual for other languages than default. * doc/translations/fr/info_common.mk: * doc/translations/default/info_common.mk: New file. * doc/misc/Makefile.in: Get INFO_COMMON from language respective info_common.mk helper script. (INFO_TARGETS): Make it depend from info_common.mk settings. (ORG_SETUP, ORG_SRC): Make it point at language specific sub-directory. (texi_sources, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS) (PS_TARGETS, echo-info, info_template,efaq%$(lang_suffix).dvi) (efaq%$(lang_suffix).pdf, efaq%$(lang_suffix).texi) (efaq%$(lang_suffix).html): Make it use language specific suffix. (${buildinfodir}/%$(lang_suffix).info, %$(lang_suffix).dvi) (%$(lang_suffix).pdf, %$(lang_suffix).html, %$(lang_suffix).ps): Make it use language specific suffix/subdirectory. * Makefile.in (DOCLANGS): New variable, list of languages. (install-info, uninstall): List targets into 'info_misc' for all languages. (TAGS tags): Make tags for all languages. ($(DOCS)): Create target for all languages. (texi_misc_fr, texi_misc_default): Set macro for all languages. (srcdir_doc_info_dir_inputs): Macro concatenate texi_misc_lll for all language lll. diff --git a/Makefile.in b/Makefile.in index 698895b79d1..d5a78c1d694 100644 --- a/Makefile.in +++ b/Makefile.in @@ -115,6 +115,9 @@ HAVE_GSETTINGS = @HAVE_GSETTINGS@ ANDROID = @ANDROID@ +# TODO : make a configure option to keep only desired languages +DOCLANGS?=default fr + # ==================== Where To Install Things ==================== # Location to install Emacs.app under GNUstep / macOS. @@ -794,7 +797,7 @@ install-info: info [ -f "$(DESTDIR)${infodir}/dir" ] || \ [ ! -f ${srcdir}/info/dir ] || \ ${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \ - info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \ + info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc LANG=$(lang) echo-info`)"; \ cd ${srcdir}/info ; \ for elt in ${INFO_NONMISC} $${info_misc}; do \ for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ @@ -944,7 +947,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas done -rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}" thisdir=`pwd -P`; \ - (info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \ + (info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc LANG=$(lang) echo-info`)"; \ if cd "$(DESTDIR)${infodir}"; then \ for elt in ${INFO_NONMISC} $${info_misc}; do \ (cd "$${thisdir}"; \ @@ -1122,7 +1125,7 @@ TAGS tags: lib lib-src # src $(MAKE) -C doc/emacs tags $(MAKE) -C doc/lispintro tags $(MAKE) -C doc/lispref tags - $(MAKE) -C doc/misc tags + $(foreach LANG,$(DOCLANGS),$(MAKE) -C doc/misc LANG=$(LANG) tags;) CHECK_TARGETS = check check-maybe check-expensive check-all check-byte-compile .PHONY: $(CHECK_TARGETS) @@ -1143,8 +1146,12 @@ PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf PSS = lispref-ps lispintro-ps emacs-ps misc-ps DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS) -$(DOCS): - $(MAKE) -C doc/$(subst -, ,$@) +define MAKE_DOC +$(1): + $(foreach lang,$(DOCLANGS),$$(MAKE) -C doc/$$(subst -, LANG=$(lang) ,$$@);) + +endef +$(foreach doc,$(DOCS),$(eval $(call MAKE_DOC,$(doc)))) .PHONY: $(DOCS) docs pdf ps .PHONY: info dvi dist html info-dir check-info @@ -1168,13 +1175,18 @@ misc-dvi misc-html misc-pdf misc-ps: src info-dir: ${srcdir}/info/dir -texi_misc = $(shell MAKEFLAGS= ${MAKE} --no-print-directory -s -C doc/misc echo-sources) +define set_texi_misc +texi_misc_$(1) = $$(shell MAKEFLAGS= $${MAKE} --no-print-directory -s -C doc/misc LANG=$(1) echo-sources) + +endef + +$(foreach lang,$(DOCLANGS),$(eval $(call set_texi_misc,$(lang)))) srcdir_doc_info_dir_inputs = \ ${srcdir}/doc/emacs/emacs.texi \ ${srcdir}/doc/lispintro/emacs-lisp-intro.texi \ ${srcdir}/doc/lispref/elisp.texi \ - $(addprefix ${srcdir}/doc/misc/,${texi_misc}) + $(foreach lang,$(DOCLANGS),$(addprefix ${srcdir}/doc/misc/$(filter-out ../translations/default/misc/,../translations/$(lang)/misc/),$(texi_misc_$(lang)) )) info_dir_inputs = \ ../build-aux/dir_top \ $(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs}) diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 83f5d9fe135..ca11dd9fbc8 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -64,18 +64,20 @@ INSTALL_DATA = @INSTALL_DATA@ MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I$(emacsdir) +ifeq ($(LANG),) +LANG:=default +else ifeq ($(wildcard ../translations/$(LANG)/info_common.mk),) +LANG:=default +endif + +lang_suffix:=$(filter-out -default,-$(LANG)) +lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(LANG)/misc/) + ## On MS Windows, efaq-w32; otherwise blank. DOCMISC_W32 = @DOCMISC_W32@ ## Info files to build and install on all platforms. -INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \ - ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \ - emacs-mime epa erc ert eshell eudc eww flymake forms gnus \ - htmlfontify idlwave ido info.info mairix-el message mh-e \ - modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \ - rcirc reftex remember sasl sc semantic ses sieve smtpmail \ - speedbar srecode todo-mode tramp transient url use-package \ - vhdl-mode viper vtable widget wisent woman +include ../translations/$(LANG)/info_common.mk ## Info files to install on current platform. INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) @@ -83,13 +85,13 @@ INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) ## Info files to build on current platform. ## This is all of them, even though they might not all get installed, ## because the info files are pre-built in release tarfiles. -INFO_TARGETS = $(INFO_COMMON) efaq-w32 +INFO_TARGETS = $(INFO_COMMON) $(DOCMISC_W32_TARGET) ## Some manuals have their source in .org format. ## This is discouraged because the .texi files it generates ## are not as well formatted as handwritten ones. -ORG_SETUP = $(wildcard ${srcdir}/*-setup.org) -ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/*.org)) +ORG_SETUP = $(wildcard ${srcdir}/$(lang_subdir)*-setup.org) +ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/$(lang_subdir)*.org)) TEXI_FROM_ORG = ${ORG_SRC:.org=.texi} # There are some naming differences between the info targets and the other @@ -97,15 +99,18 @@ TEXI_FROM_ORG = ${ORG_SRC:.org=.texi} TARGETS_1 = $(INFO_INSTALL:ccmode=cc-mode) TARGETS = $(TARGETS_1:info.info=info) -texi_sources = $(addsuffix .texi,${TARGETS}) +# Sources are also suffixed, this is useless as they are in different +# directories, but some people argued that there should not be +# different files with same name in the repo. +texi_sources = $(addsuffix $(lang_suffix).texi,${TARGETS}) texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources}) texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen} SOURCES = $(sort ${texi_and_org}) -DVI_TARGETS = $(TARGETS:=.dvi) -HTML_TARGETS = $(TARGETS:=.html) -PDF_TARGETS = $(TARGETS:=.pdf) -PS_TARGETS = $(TARGETS:=.ps) +DVI_TARGETS = $(TARGETS:=$(lang_suffix).dvi) +HTML_TARGETS = $(TARGETS:=$(lang_suffix).html) +PDF_TARGETS = $(TARGETS:=$(lang_suffix).pdf) +PS_TARGETS = $(TARGETS:=$(lang_suffix).ps) TEXI2DVI = texi2dvi TEXI2PDF = texi2pdf @@ -133,7 +138,7 @@ info: $(INFO_TARGETS) ## Base file names of output info files. INFO_BASES = $(patsubst %.info,%,$(notdir $(INFO_INSTALL))) echo-info: - @: $(info $(addsuffix .info,$(INFO_BASES))) + @: $(info $(addsuffix $(lang_suffix).info,$(INFO_BASES))) echo-sources: @: $(info $(SOURCES)) @@ -153,15 +158,15 @@ ${buildinfodir}: EXTRA_OPTS = -${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} ${style} | ${buildinfodir} +${buildinfodir}/%$(lang_suffix).info: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} | ${buildinfodir} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) \ -o $@ $< ## The short aliases, eg efaq = $(buildinfodir)/efaq.info. define info_template - $(1): $$(buildinfodir)/$(1).info + $(1): $$(buildinfodir)/$(1)$$(lang_suffix).info -$$(buildinfodir)/$(1).info: $$(srcdir)/$(1).texi $$(gfdl) $$(style) +$$(buildinfodir)/$(1)$$(lang_suffix).info: $$(srcdir)/$$(lang_subdir)$(1)$$(lang_suffix).texi $$(gfdl) $$(style) endef ## "info" is already taken. @@ -170,17 +175,17 @@ info.info: $(buildinfodir)/info.info $(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_template,$(ifile)))) -%.dvi: ${srcdir}/%.texi ${gfdl} ${style} +%$(lang_suffix).dvi: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} $(ENVADD) $(TEXI2DVI) $< -%.pdf: ${srcdir}/%.texi ${gfdl} ${style} +%$(lang_suffix).pdf: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} $(ENVADD) $(TEXI2PDF) $< -%.html: ${srcdir}/%.texi ${gfdl} ${style} +%$(lang_suffix).html: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) \ -o $@ $< -%.ps: %.dvi +%$(lang_suffix).ps: %$(lang_suffix).dvi $(DVIPS) -o $@ $< @@ -207,16 +212,16 @@ ${buildinfodir}/ccmode.info: \ ## efaq, efaq_w32 do not depend on gfdl. ## Maybe we can use .SECONDEXPANSION for this. -${buildinfodir}/efaq%.info: ${srcdir}/efaq%.texi ${style} | ${buildinfodir} +${buildinfodir}/efaq%$(lang_suffix).info: ${srcdir}/efaq%$(lang_suffix).texi ${style} | ${buildinfodir} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $< -efaq%.dvi: ${srcdir}/efaq%.texi +efaq%$(lang_suffix).dvi: ${srcdir}/efaq%$(lang_suffix).texi $(ENVADD) $(TEXI2DVI) $< -efaq%.pdf: ${srcdir}/efaq%.texi +efaq%$(lang_suffix).pdf: ${srcdir}/efaq%$(lang_suffix).texi $(ENVADD) $(TEXI2PDF) $< -efaq%.html: ${srcdir}/efaq%.texi +efaq%$(lang_suffix).html: ${srcdir}/efaq%$(lang_suffix).texi $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $< ${buildinfodir}/emacs-mime.info emacs-mime.html: EXTRA_OPTS = --enable-encoding @@ -251,7 +256,10 @@ emacs = "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefe # things like org-setup's "version" macro work. Sigh. define org_template $(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el - $${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \ + $${AM_V_GEN}cd "$${srcdir}" && $${emacs} \ + --eval '(add-to-list (quote load-path) "$(abspath ${top_srcdir}/lisp/org)")' \ + --eval '(setq org--inhibit-version-check t)' \ + -l ox-texinfo \ --eval '(setq gc-cons-threshold 50000000)' \ --eval '(setq org-confirm-babel-evaluate nil)' \ --eval '(setq org-id-track-globally nil)' \ diff --git a/doc/translations/default/info_common.mk b/doc/translations/default/info_common.mk new file mode 100644 index 00000000000..9c09f5a0cec --- /dev/null +++ b/doc/translations/default/info_common.mk @@ -0,0 +1,9 @@ +## Info files to build and install on all platforms. +INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \ + ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \ + emacs-mime epa erc ert eshell eudc eww flymake forms gnus \ + htmlfontify idlwave ido info.info mairix-el message mh-e \ + modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \ + rcirc reftex remember sasl sc semantic ses sieve smtpmail \ + speedbar srecode todo-mode tramp transient url use-package \ + vhdl-mode viper vtable widget wisent woman diff --git a/doc/translations/fr/info_common.mk b/doc/translations/fr/info_common.mk new file mode 100644 index 00000000000..e72440fe69a --- /dev/null +++ b/doc/translations/fr/info_common.mk @@ -0,0 +1,8 @@ +## Info files to build and install on all platforms (onl ses has been +## translated to Frenchj) +INFO_COMMON = ses + +## efac-w32 has not been translated to French +DOCMISC_W32:=# + +DOCMISC_W32_TARGET:=# commit 3621ef5c4205cdeb30c3a1a24088e68831bd7d09 Author: Vincent Belaïche Date: Thu Apr 16 19:11:13 2026 +0200 Add dependance of info file on source. Suppress also superfluous exta .info extension of info.info. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 5eee5023f54..83f5d9fe135 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -1,3 +1,4 @@ + ### @configure_input@ # Copyright (C) 1994, 1996-2026 Free Software Foundation, Inc. @@ -159,6 +160,8 @@ ${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} ${style} | ${buildinfodir} ## The short aliases, eg efaq = $(buildinfodir)/efaq.info. define info_template $(1): $$(buildinfodir)/$(1).info + +$$(buildinfodir)/$(1).info: $$(srcdir)/$(1).texi $$(gfdl) $$(style) endef ## "info" is already taken. commit 545bbc6ebe819144c179bbef347016488c339fc8 Author: David Ponce Date: Thu May 28 11:55:12 2026 +0200 widget-image-find: Use 'image-load-path' (bug#81140) * lisp/wid-edit.el (widget-image-find): Use 'image-load-path' (bug#81140). diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 353d546fce4..3871d0f64c4 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -868,7 +868,8 @@ extension (xpm, xbm, gif, jpg, or png) located in image) ((stringp image) ;; A string. Look it up in relevant directories. - (let* ((load-path (cons widget-image-directory load-path)) + (let* ((image-load-path (cons widget-image-directory + image-load-path)) specs) (dolist (elt widget-image-conversion) (dolist (ext (cdr elt)) commit 69286be27db320a03e787edb5d2cc483f0f64f66 Author: Sean Whitton Date: Thu May 28 10:19:02 2026 +0100 ; Fix an overwide docstring line. diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index c79ac50cfc3..98c69b48691 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -161,7 +161,7 @@ proceed to mark and unmark other entries, without asking." :version "31.1") (defcustom vc-dir-auto-hide-up-to-date nil - "Whether VC-Dir automatically removes \\+`up-to-date'/\\+`ignored' files from display. + "Whether VC-Dir auto-removes \\+`up-to-date'/\\+`ignored' files from display. If the value is nil, files shown in the VC-Dir buffer will remain on display if they become \\+`up-to-date' or \\+`ignored'. commit d8933b9f074776fb3a48d3a30f549448a31e0fca Author: Po Lu Date: Thu May 28 13:07:32 2026 +0800 Fix the MSDOS build * msdos/sedlibmk.inp (GL_GNULIB_MEMEQ, GL_GNULIB_STREQ) (GL_GNULIB_STRNUL): New substitutions, replacing that of GL_GNULIB_STRINGEQ. * src/term.c (init_tty) [MSDOS]: Assign appropriate value to tty->TN_max_colors. Do not merge to master. diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp index d29fc6ebca7..439f9dfbb95 100644 --- a/msdos/sedlibmk.inp +++ b/msdos/sedlibmk.inp @@ -183,13 +183,15 @@ s/@PACKAGE@/emacs/ /^GL_GNULIB_GETRANDOM *=/s/@GL_GNULIB_GETRANDOM@/1/ /^GL_GNULIB_UNISTD_H_GETOPT *=/s/@GL_GNULIB_UNISTD_H_GETOPT@/1/ /^GL_GNULIB_LCHMOD *=/s/@GL_GNULIB_LCHMOD@/1/ +/^GL_GNULIB_MEMEQ *=/s/@GL_GNULIB_MEMEQ@/1/ /^GL_GNULIB_MEMMEM *=/s/@GL_GNULIB_MEMMEM@/1/ /^GL_GNULIB_MEMRCHR *=/s/@GL_GNULIB_MEMRCHR@/1/ /^GL_GNULIB_MEMPCPY *=/s/@GL_GNULIB_MEMPCPY@/1/ /^GL_GNULIB_MKOSTEMP *=/s/@GL_GNULIB_MKOSTEMP@/1/ /^GL_GNULIB_MKTIME *=/s/@GL_GNULIB_MKTIME@/1/ /^GL_GNULIB_SIGDESCR_NP *=/s/@GL_GNULIB_SIGDESCR_NP@/1/ -/^GL_GNULIB_STRINGEQ *=/s/@GL_GNULIB_STRINGEQ@/1/ +/^GL_GNULIB_STREQ *=/s/@GL_GNULIB_STREQ@/1/ +/^GL_GNULIB_STRNUL *=/s/@GL_GNULIB_STRNUL@/1/ /^GL_GNULIB_TIME_R *=/s/@GL_GNULIB_TIME_R@/1/ /^GL_GNULIB_TIMEGM *=/s/@GL_GNULIB_TIMEGM@/1/ /^GL_GNULIB_TIME_RZ *=/s/@GL_GNULIB_TIME_RZ@/1/ diff --git a/src/term.c b/src/term.c index 354375085e2..52ae4f61814 100644 --- a/src/term.c +++ b/src/term.c @@ -4751,6 +4751,7 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\ FrameCols (tty) = width; FrameRows (tty) = height; tty->char_ins_del_ok = 0; + tty->TN_max_colors = 16; /* Must be non-zero for tty-display-color-p. */ init_baud_rate (fileno (tty->input)); } #endif /* MSDOS */ commit c3babe4b8966c3ada6305b2af85e24398190a14f Author: Zhengyi Fu Date: Wed May 27 10:03:36 2026 +0800 Fix lax whitespace highlight during query-replace * lisp/replace.el (query-replace-read-args): Add :lax-whitespace to minibuffer-lazy-highlight-setup, so lazy highlight during query-replace respects replace-lax-whitespace and replace-regexp-lax-whitespace (bug#81131). Copyright-paperwork-exempt: yes diff --git a/lisp/replace.el b/lisp/replace.el index 48e158de531..4bb91fbd6a0 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -369,6 +369,8 @@ should a regexp." (replace--region-filter (funcall region-extract-function 'bounds))) :highlight (and query-replace-lazy-highlight (not no-highlight)) + :lax-whitespace (if regexp-flag replace-regexp-lax-whitespace + replace-lax-whitespace) :regexp regexp-flag :regexp-function (or replace-regexp-function delimited-flag commit 2e70b88623ed4506c4334f8b9e73651f7d21ade7 Author: Juri Linkov Date: Wed May 27 18:32:40 2026 +0300 Fix fill-paragraph combining text with preceding comment * lisp/textmodes/fill.el (fill-paragraph): Handle the case when a non-comment line follows a comment line with non-nil 'fill-paragraph-handle-comment' (bug#80449). Skip such a comment line before filling a non-comment line. * test/lisp/textmodes/fill-tests.el (fill-test-fill-paragraph-handle-comment): Add new test. * test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts: New file. diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index c1ccdf2ec5f..270cb388971 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -911,6 +911,7 @@ region, instead of just filling the current paragraph." (fill-comment-paragraph justify))) ;; 4. If it all fails, default to the good ol' text paragraph filling. (let ((before (point)) + (paragraph-start-orig paragraph-start) (paragraph-start paragraph-start) ;; Fill prefix used for filling the paragraph. fill-pfx) @@ -933,6 +934,18 @@ region, instead of just filling the current paragraph." (setq fill-pfx "") (let ((end (point)) (beg (progn (fill-forward-paragraph -1) (point)))) + ;; If the paragraph starts with a comment line preceding point + ;; on a non-comment line, skip such comment lines, so they + ;; are not filled together (bug#80449). + (when (and fill-paragraph-handle-comment comment-start-skip + (< beg before)) + (save-excursion + (goto-char beg) + (when (looking-at paragraph-start-orig) + (goto-char (1+ (match-end 0)))) + (when (looking-at comment-start-skip) + (forward-line 1) + (setq beg (point))))) (goto-char before) (setq fill-pfx (if use-hard-newlines diff --git a/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts b/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts new file mode 100644 index 00000000000..c7c9e96ea50 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts @@ -0,0 +1,37 @@ +Point-Char: | + +Name: fill-paragraph-handle-comment - non-comment line before comment line +Code: + (lambda () + (setq-local comment-start "# ") + (setq-local fill-paragraph-handle-comment t) + (setq-local fill-column 42) + (fill-paragraph)) + +=-= + +this is not part of the comment this is not part of the comment| +# this is a comment this is a comment this is a comment + +=-= + +this is not part of the comment this is +not part of the comment +# this is a comment this is a comment this is a comment + +=-=-= + +Name: fill-paragraph-handle-comment - non-comment line after comment line + +=-= + +# this is a comment this is a comment this is a comment +this is not part of the comment this is not part of the comment| + +=-= + +# this is a comment this is a comment this is a comment +this is not part of the comment this is +not part of the comment + +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 2bb9d3ea163..c37a879b4b2 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -163,6 +163,10 @@ eius. Foo"))) (skip-unless (functionp 'markdown-mode)) (ert-test-erts-file (ert-resource-file "fill-paragraph-semlf-markdown-mode.erts"))) +(ert-deftest fill-test-fill-paragraph-handle-comment () + "Test the `fill-paragraph-handle-comment' variable." + (ert-test-erts-file (ert-resource-file "fill-paragraph-handle-comment.erts"))) + (provide 'fill-tests) ;;; fill-tests.el ends here commit ea54c33950f5a360b08040a1412da36ffb14e704 Author: Sean Whitton Date: Wed May 27 13:16:12 2026 +0100 ; * etc/PROBLEMS: Link to bug#81124. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index b619c6e7f37..655bfd6c173 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -136,6 +136,9 @@ result in an endless loop. If you need Emacs to be able to recover from closing displays, compile it with the Lucid toolkit instead of GTK. +One possible mitigation for the problem is described in +https://debbugs.gnu.org/81124 + ** Emacs compiled with GTK+ 3 crashes when run under some X servers. This happens when the X server does not provide certain display features that the underlying GTK+ 3 toolkit assumes. For example, this commit 02897e208d005956f84aa228f4f298f260133896 Author: Paul Eggert Date: Tue May 26 18:25:13 2026 -0700 emacsclient quote_argument is void * lib-src/emacsclient.c (quote_argument): Don’t use ‘return E;’ in a function returning void. Problem found by Oracle Developer Studio 12.6. diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 0769c94a89d..9df20d8524b 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -902,7 +902,7 @@ quote_argument_len (HSOCKET s, const char *str, ptrdiff_t len) static void quote_argument (HSOCKET s, const char *str) { - return quote_argument_len (s, str, strlen (str)); + quote_argument_len (s, str, strlen (str)); } /* The inverse of quote_argument. Remove quoting in string STR by commit c6181780663a32729e150c8d57222a6579691af6 Author: Michael Albinus Date: Mon May 25 08:44:42 2026 +0200 ; Mark process-test-stderr-buffer as :unstable when running on emba * test/src/process-tests.el (process-test-stderr-buffer): Mark as :unstable when running on emba. (Bug#80166) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 55657a23fa9..ad6cb924943 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -89,6 +89,7 @@ process to complete." (should (string= (buffer-string) "arg1=\"x &y\", arg2=\n")))))) (ert-deftest process-test-stderr-buffer () + :tags (if (getenv "EMACS_EMBA_CI") '(:unstable)) (skip-unless (executable-find "bash")) (with-timeout (60 (ert-fail "Test timed out")) (let* ((stdout-buffer (generate-new-buffer "*stdout*")) commit 2c1b45f5c56254a7699a92b619eb6ebf3b3571c8 Author: Eli Zaretskii Date: Sun May 24 14:44:07 2026 +0300 ; Improve documentation of 'vc-dir-auto-hide-up-to-date' * lisp/vc/vc-dir.el (vc-dir-auto-hide-up-to-date): Doc fix. * doc/emacs/maintaining.texi (VC Directory Buffer): Document 'vc-dir-auto-hide-up-to-date'. (Bug#81033) diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index a1825c5e515..b5f7c362a91 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -1523,10 +1523,11 @@ on the current line if no files are marked. and their version control statuses. It lists files in the current directory (the one specified when you called @kbd{C-x v d}) and its subdirectories, but only those with a noteworthy status. Files -that are up-to-date (i.e., the same as in the repository) are -omitted. If all the files in a subdirectory are up-to-date, the +that are up-to-date (i.e., the same as in the repository) or ignored +are omitted. If all the files in a subdirectory are up-to-date, the subdirectory is not listed either. As an exception, if a file has -become up-to-date as a direct result of a VC command, it is listed. +become up-to-date as a direct result of a VC command, it is listed by +default. Here is an example of a VC Directory buffer listing: @@ -1565,6 +1566,16 @@ systems can show other statuses. For instance, CVS shows the been applied to the work file. RCS and SCCS show the name of the user locking a file as its status. +@vindex vc-dir-auto-hide-up-to-date + As mentioned above, by default files and directories which become +up-to-date or ignored after the VC Directory buffer is first displayed +stay displayed. To automatically remove such files from display, +customize the variable @code{vc-dir-auto-hide-up-to-date} to the value +@code{t}. You can also customize it to the value @code{revert}, in +which case such files will be removed only when you refresh the VC +Directory display, e.g., by typing @kbd{g} (@pxref{VC Directory +Commands}). + @ifnottex On CVS, the @code{vc-dir} command normally contacts the repository, which may be on a remote machine, to check for updates. If you change @@ -1595,7 +1606,7 @@ cases Emacs must occasionally fetch from the remote repository in order to determine the count. If your connection to the remote repository is slow then this may cause unacceptable slowdowns in refreshing the VC Directory buffer. If this affects you, you can customize -@code{vc-dir-show-outgoing-count} to nil to disable the unpushed +@code{vc-dir-show-outgoing-count} to @code{nil} to disable the unpushed revisions count altogether. You can also set this on a per-repository basis using directory local variables (@pxref{Directory Variables}). @@ -1674,9 +1685,6 @@ the VC Directory buffer (@code{vc-dir-root-next-action}). This is like @w{@kbd{C-x v v}} (@pxref{Basic VC Editing}) except that it ignores any marks and the position of point. -@item q -Quit the VC Directory buffer, and bury it (@code{quit-window}). - @item u Unmark the file or directory on the current line. If the region is active, unmark all the files in the region (@code{vc-dir-unmark}). @@ -1691,6 +1699,12 @@ files and directories. Hide files with @samp{up-to-date} or @samp{ignored} status (@code{vc-dir-hide-up-to-date}). With a prefix argument, hide items whose state is that of the item at point. + +@item g +Refresh the VC Directory buffer display (@code{revert-buffer}). + +@item q +Quit the VC Directory buffer, and bury it (@code{quit-window}). @end table @findex vc-dir-mark diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 2d6f8ee97d0..c79ac50cfc3 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -161,17 +161,23 @@ proceed to mark and unmark other entries, without asking." :version "31.1") (defcustom vc-dir-auto-hide-up-to-date nil - "If non-nil, VC-Dir automatically hides \\+`up-to-date' and \\+`ignored' items. + "Whether VC-Dir automatically removes \\+`up-to-date'/\\+`ignored' files from display. + +If the value is nil, files shown in the VC-Dir buffer will remain on +display if they become \\+`up-to-date' or \\+`ignored'. +If the value is t, files are automatically removed from display when +they become \\+`up-to-date' or \\+`ignored'. +If the value is the symbol `revert', any displayed files that +are \\+`up-to-date' or \\+`ignored' are removed from display +by \\\\[revert-buffer], but they are not automatically removed +when they become \\+`up-to-date' or \\+`ignored'. That is, +refreshing the VC-Dir buffer hides \\+`up-to-date' and \\+`ignored' +files when the value is the symbol `revert'. +Any other value is treated as t. + +VC-Dir never shows \\+`up-to-date' and \\+`ignored' files when the +directory is first displayed. -If the value of this variable is the symbol `revert', \ -\\\\[revert-buffer] in VC-Dir -buffers also does \\[vc-dir-hide-up-to-date]. \ -That is, refreshing the VC-Dir buffer also hides -\\+`up-to-date' and \\+`ignored' items. - -If the value of this variable is any other non-nil value, then in -addition, hide items whenever their state would change to -\\+`up-to-date' or \\+`ignored'. You can still use `vc-dir-show-fileentry' to manually add an entry for an \\+`up-to-date' or \\+`ignored' file." :type 'boolean commit 768c8bf004556c6594133b8f625757f052e7f067 Author: Sean Whitton Date: Sun May 24 11:49:50 2026 +0100 Revert "* admin/notes/documentation: Recommend not using "it's"." diff --git a/admin/notes/documentation b/admin/notes/documentation index d355ad06412..f6fa321b217 100644 --- a/admin/notes/documentation +++ b/admin/notes/documentation @@ -106,7 +106,7 @@ For instance, this anywhere in sight is too confusing. may not need mentioning, because --daemon will give an error message -saying it is not implemented, and other cases aren't affected. +saying it's not implemented, and other cases aren't affected. The kind of change for which the user really needs help from Antinews is where a feature works _differently_ in the previous version. @@ -164,5 +164,3 @@ like subr.el, which are not quoted. Call 'emacs-news-view-mode'. Lisp symbols and Info manual links shall be decorated, and clicking on them shall lead to the respective Help buffer or Info node. - -*** Do not use "it's", "you're" and alike. commit a7414f18598bab861f3fef307efd0b8e15cb6ebe Author: Sean Whitton Date: Sun May 24 11:46:47 2026 +0100 native--compile-skip-on-battery-p: Try to fix ?b, ?B conditions * lisp/emacs-lisp/comp-run.el (native--compile-skip-on-battery-p): Don't skip charging because the battery is charging, and don't look for "discharging", at least for now (bug#80922). Thanks to David Koppelman for the report. diff --git a/lisp/emacs-lisp/comp-run.el b/lisp/emacs-lisp/comp-run.el index f329d627392..64e20327906 100644 --- a/lisp/emacs-lisp/comp-run.el +++ b/lisp/emacs-lisp/comp-run.el @@ -203,9 +203,10 @@ LOAD and SELECTOR work as described in `native--compile-async'." ;; because power users often configure their batteries ;; to stop charging at less than 100% as a way to ;; extend the lifetime of their battery hardware. - (string= (cdr (assq ?b res)) "+") - (member (cdr (assq ?B res)) '("charging" "pending-charge")) - (not (string= (cdr (assq ?B res)) "discharging"))))))) + ;; Further discussion in bug#80922. + (and (not (equal (cdr (assq ?b res)) "+")) + (not (member (cdr (assq ?B res)) + '("charging" "pending-charge"))))))))) (defvar comp-files-queue () "List of Emacs Lisp files to be compiled.") commit 7cee526a8cc44dd7166108ec2718a4ca0d1ad1f1 Author: Zhengyi Fu Date: Thu May 21 22:08:39 2026 +0800 Save and restore original local keymap in grep-edit-mode * lisp/progmodes/grep.el (grep-edit-original-mode-map): New variable. (grep-change-to-grep-edit-mode): Save the current local map before switching to grep-edit-mode-map. (grep-edit-save-changes): Restore the saved local map instead of assuming grep-mode-map (bug#81090). Copyright-paperwork-exempt: yes diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 72a05a082bb..a5ba32d26e8 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -1120,6 +1120,8 @@ list is empty)." (defvar grep-edit-mode-hook nil "Hooks run when changing to Grep-Edit mode.") +(defvar grep-edit-original-mode-map nil) + (defun grep-edit-mode () "Major mode for editing *grep* buffers. In this mode, changes to the *grep* buffer are applied to the @@ -1140,6 +1142,7 @@ The only editable texts in a Grep-Edit buffer are the match results." (error "Not a Grep buffer")) (when (get-buffer-process (current-buffer)) (error "Cannot switch when grep is running")) + (setq-local grep-edit-original-mode-map (current-local-map)) (use-local-map grep-edit-mode-map) (grep-edit--prepare-buffer) (setq buffer-read-only nil) @@ -1159,7 +1162,7 @@ The only editable texts in a Grep-Edit buffer are the match results." (unless (derived-mode-p 'grep-edit-mode) (error "Not a Grep-Edit buffer")) (remove-hook 'after-change-functions #'occur-after-change-function t) - (use-local-map grep-mode-map) + (use-local-map grep-edit-original-mode-map) (setq buffer-read-only t) (setq major-mode 'grep-mode) (setq mode-name "Grep") commit 4d87d203cfb9c407930332d53b8198328236fe9b Author: Eli Zaretskii Date: Sun May 24 09:41:26 2026 +0300 Fix display of inline SVG images in Rmail * lisp/mail/rmailmm.el (rmail-mime-set-bulk-data): Support Content-type of "svg+xml" if SVG images are supported, diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el index 9226976c114..e70f96cb2f8 100644 --- a/lisp/mail/rmailmm.el +++ b/lisp/mail/rmailmm.el @@ -842,8 +842,11 @@ directly." ((string-match "text/" content-type) (setq type 'text)) ((string-match "image/\\(.*\\)" content-type) - (setq type (image-supported-file-p - (concat "." (match-string 1 content-type)))) + (let ((fnext (match-string 1 content-type))) + ;; Ask about SVG support when Content-type is image/svg+xml. + (if (equal fnext "svg+xml") + (setq fnext "svg")) + (setq type (image-supported-file-p (concat "." fnext)))) (when (and type rmail-mime-show-images (not (eq rmail-mime-show-images 'button)) commit 4c55d04ebe31f2a84273dfa2f765ca02e18ffb9d Author: Yuan Fu Date: Mon May 18 20:56:10 2026 -0700 Add treesit-ready-p check back to tree-sitter major modes (bug#80909) * lisp/progmodes/c-ts-mode.el (c-ts-mode): (c++-ts-mode): * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode): * lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode): * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): * lisp/progmodes/go-ts-mode.el (go-ts-mode): (go-mod-ts-mode): (go-work-ts-mode): * lisp/progmodes/heex-ts-mode.el (heex-ts-mode): * lisp/progmodes/js.el (js-ts-mode): * lisp/progmodes/lua-ts-mode.el (lua-ts-mode): * lisp/progmodes/python.el (python-ts-mode): * lisp/progmodes/rust-ts-mode.el (rust-ts-mode): * lisp/progmodes/sh-script.el (bash-ts-mode): * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode): (tsx-ts-mode): * lisp/textmodes/css-mode.el (css-ts-mode): * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode): * lisp/textmodes/toml-ts-mode.el (toml-ts-mode): * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): * lisp/treesit-x.el (treesit-generic-mode-setup): Add the check. diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index c8120d5752c..d08615446a1 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -1475,7 +1475,9 @@ in your init files, or customize `treesit-enabled-modes'." :group 'c :after-hook (c-ts-mode-set-modeline) - (when (treesit-ensure-installed 'c) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'c) + (treesit-ready-p 'c)) ;; Create an "for-each" parser, see `c-ts-mode--emacs-set-ranges' ;; for more. (when c-ts-mode-emacs-sources-support @@ -1554,7 +1556,9 @@ recommended to enable `electric-pair-mode' with this mode." :group 'c++ :after-hook (c-ts-mode-set-modeline) - (when (treesit-ensure-installed 'cpp) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'cpp) + (treesit-ready-p 'cpp)) (let ((primary-parser (treesit-parser-create 'cpp))) ;; Syntax. diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el index d8873191d61..6abd92b5e1a 100644 --- a/lisp/progmodes/cmake-ts-mode.el +++ b/lisp/progmodes/cmake-ts-mode.el @@ -220,7 +220,9 @@ Return nil if there is no name or if NODE is not a defun node." :group 'cmake :syntax-table cmake-ts-mode--syntax-table - (when (treesit-ensure-installed 'cmake) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'cmake) + (treesit-ready-p 'cmake)) (setq treesit-primary-parser (treesit-parser-create 'cmake)) ;; Comments. diff --git a/lisp/progmodes/dockerfile-ts-mode.el b/lisp/progmodes/dockerfile-ts-mode.el index 1d42c239b84..b97ec89b99a 100644 --- a/lisp/progmodes/dockerfile-ts-mode.el +++ b/lisp/progmodes/dockerfile-ts-mode.el @@ -167,7 +167,9 @@ Return nil if there is no name or if NODE is not a stage node." :group 'dockerfile :syntax-table dockerfile-ts-mode--syntax-table - (when (treesit-ensure-installed 'dockerfile) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'dockerfile) + (treesit-ready-p 'dockerfile)) (setq treesit-primary-parser (treesit-parser-create 'dockerfile)) ;; Comments. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 9514d6bdc91..9bda7f0046f 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -737,7 +737,9 @@ Return nil if NODE is not a defun node or doesn't have a name." (add-hook 'post-self-insert-hook #'elixir-ts--electric-pair-string-delimiter 'append t) - (when (treesit-ensure-installed 'elixir) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'elixir) + (treesit-ready-p 'elixir)) (setq-local treesit-primary-parser (treesit-parser-create 'elixir)) @@ -762,7 +764,9 @@ Return nil if NODE is not a defun node or doesn't have a name." (setq-local treesit-defun-name-function #'elixir-ts--defun-name) ;; Embedded Heex. - (when (treesit-ensure-installed 'heex) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'heex) + (treesit-ready-p 'heex)) (require 'heex-ts-mode) (treesit-parser-create 'heex) diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index 76de7c9b41b..8de6d0e0700 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -287,7 +287,9 @@ :group 'go :syntax-table go-ts-mode--syntax-table - (when (treesit-ensure-installed 'go) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'go) + (treesit-ready-p 'go)) (setq treesit-primary-parser (treesit-parser-create 'go)) ;; Comments. @@ -608,7 +610,9 @@ what the parent of the node would be if it were a node." :group 'go :syntax-table go-mod-ts-mode--syntax-table - (when (treesit-ensure-installed 'gomod) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'gomod) + (treesit-ready-p 'gomod)) (setq treesit-primary-parser (treesit-parser-create 'gomod)) ;; Comments. @@ -712,7 +716,9 @@ what the parent of the node would be if it were a node." "Major mode for editing go.work files, powered by tree-sitter." :group 'go - (when (treesit-ensure-installed 'gowork) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'gowork) + (treesit-ready-p 'gowork)) (setq treesit-primary-parser (treesit-parser-create 'gowork)) ;; Comments. diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index d756224f371..e8fec8b0469 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -201,7 +201,9 @@ Return nil if NODE is not a defun node or doesn't have a name." "Major mode for editing HEEx, powered by tree-sitter." :group 'heex-ts - (when (treesit-ensure-installed 'heex) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'heex) + (treesit-ready-p 'heex)) (setq treesit-primary-parser (treesit-parser-create 'heex)) ;; Comments @@ -236,7 +238,9 @@ Return nil if NODE is not a defun node or doesn't have a name." (setq-local treesit-font-lock-feature-list heex-ts--font-lock-feature-list) - (when (treesit-ensure-installed 'elixir) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'elixir) + (treesit-ready-p 'elixir)) (require 'elixir-ts-mode) (treesit-parser-create 'elixir) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index e7e5bd901e1..3f2deca317c 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4041,7 +4041,9 @@ See `treesit-thing-settings' for more information.") \\" :group 'js :syntax-table js-mode-syntax-table - (when (treesit-ensure-installed 'javascript) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'javascript) + (treesit-ready-p 'javascript)) ;; Borrowed from `js-mode'. (setq-local prettify-symbols-alist js--prettify-symbols-alist) (setq-local parse-sexp-ignore-comments t) @@ -4073,7 +4075,9 @@ See `treesit-thing-settings' for more information.") (setq-local treesit-font-lock-settings (js--treesit-font-lock-settings)) (setq-local treesit-font-lock-feature-list js--treesit-font-lock-feature-list) - (when (treesit-ensure-installed 'jsdoc) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'jsdoc) + (treesit-ready-p 'jsdoc)) (setq-local treesit-range-settings (treesit-range-rules :embed 'jsdoc diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index 8d726b9b15b..2963d5a96af 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -675,7 +675,9 @@ Calls REPORT-FN directly." :syntax-table lua-ts--syntax-table (use-local-map lua-ts-mode-map) - (when (treesit-ensure-installed 'lua) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'lua) + (treesit-ready-p 'lua)) (setq treesit-primary-parser (treesit-parser-create 'lua)) ;; Comments. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index ad0e84bf74f..86336979067 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -7477,9 +7477,11 @@ implementations: `python-mode' and `python-ts-mode'." \\{python-ts-mode-map}" :syntax-table python-mode-syntax-table - (when (if (fboundp 'treesit-ensure-installed) ; Emacs 31 - (treesit-ensure-installed 'python) - (treesit-ready-p 'python)) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (if (fboundp 'treesit-ensure-installed) ; Emacs 31 + (treesit-ensure-installed 'python) + t) + (treesit-ready-p 'python)) (setq treesit-primary-parser (treesit-parser-create 'python)) (setq-local treesit-font-lock-feature-list '(( comment definition) diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index 9bc4324ff66..dee82f934ce 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -557,7 +557,9 @@ See `prettify-symbols-compose-predicate'." :group 'rust :syntax-table rust-ts-mode--syntax-table - (when (treesit-ensure-installed 'rust) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'rust) + (treesit-ready-p 'rust)) (setq treesit-primary-parser (treesit-parser-create 'rust)) ;; Syntax. diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 8479c3cfd9a..4d025eeb18d 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1583,7 +1583,9 @@ with your script for an edit-interpret-debug cycle." This mode automatically falls back to `sh-mode' if the buffer is not written in Bash or sh." :syntax-table sh-mode-syntax-table - (when (treesit-ensure-installed 'bash) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'bash) + (treesit-ready-p 'bash)) (sh-set-shell "bash" nil nil) (add-hook 'flymake-diagnostic-functions #'sh-shellcheck-flymake nil t) (add-hook 'hack-local-variables-hook diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index c9d1d1eff4d..61e281310aa 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -701,7 +701,9 @@ This mode is intended to be inherited by concrete major modes." :group 'typescript :syntax-table typescript-ts-mode--syntax-table - (when (treesit-ensure-installed 'typescript) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'typescript) + (treesit-ready-p 'typescript)) (setq treesit-primary-parser (treesit-parser-create 'typescript)) ;; Indent. @@ -757,7 +759,9 @@ at least 3 (which is the default value)." :group 'typescript :syntax-table typescript-ts-mode--syntax-table - (when (treesit-ensure-installed 'tsx) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'tsx) + (treesit-ready-p 'tsx)) (setq treesit-primary-parser (treesit-parser-create 'tsx)) ;; Comments. diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index 355555df090..12632e24e0e 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -1888,7 +1888,9 @@ can also be used to fill comments. \\{css-mode-map}" :syntax-table css-mode-syntax-table - (when (treesit-ensure-installed 'css) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'css) + (treesit-ready-p 'css)) ;; Borrowed from `css-mode'. (setq-local syntax-propertize-function css-syntax-propertize-function) diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index 2a1c62b87e4..d53d74e220a 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -511,7 +511,9 @@ Powered by tree-sitter." ;; jsdoc is not mandatory for js-ts-mode, so we respect this by ;; adding jsdoc range rules only when jsdoc is available. - (when (treesit-ensure-installed 'jsdoc) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'jsdoc) + (treesit-ready-p 'jsdoc)) (setq-local c-ts-common--comment-regexp js--treesit-jsdoc-comment-regexp)) diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el index d3f09526b90..63e3f60edd9 100644 --- a/lisp/textmodes/toml-ts-mode.el +++ b/lisp/textmodes/toml-ts-mode.el @@ -138,7 +138,9 @@ Return nil if there is no name or if NODE is not a defun node." :group 'toml-mode :syntax-table toml-ts-mode--syntax-table - (when (treesit-ensure-installed 'toml) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'toml) + (treesit-ready-p 'toml)) (setq treesit-primary-parser (treesit-parser-create 'toml)) ;; Comments diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el index c1521c82c22..5afd4d2d111 100644 --- a/lisp/textmodes/yaml-ts-mode.el +++ b/lisp/textmodes/yaml-ts-mode.el @@ -262,7 +262,9 @@ Calls REPORT-FN directly." :group 'yaml :syntax-table yaml-ts-mode--syntax-table - (when (treesit-ensure-installed 'yaml) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed 'yaml) + (treesit-ready-p 'yaml)) (setq treesit-primary-parser (treesit-parser-create 'yaml)) ;; Comments. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 9d0541b458c..86eb417c7b5 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -142,7 +142,9 @@ of `define-treesit-generic-mode'. ;;;###autoload (defun treesit-generic-mode-setup (lang) "Go into the treesit generic mode MODE." - (when (treesit-ensure-installed lang) + ;; `treesit-ready-p' also checks for buffer size. + (when (and (treesit-ensure-installed lang) + (treesit-ready-p lang)) (setq treesit-primary-parser (treesit-parser-create lang)) (when-let* ((query (treesit-generic-mode-font-lock-query lang))) commit 7892ae5eaf4c22a3209a8c44c6267004653c5691 Author: João Távora Date: Sun May 24 03:26:19 2026 +0100 Fix pathological slowness in flex completion The 'completion-regexp-list' optimization in completion--flex-all-completions-1, a cheap pre-filter via a trivial regexp, performs very poorly for longer patterns and strings, so drop it. That alone recovers fairly decent performance for the flex completion when compared to the 'hotfuzz' point of reference. We then recover the cheap rejection with an O(N+M) pre-check in the Fcompletion__flex_cost_gotoh C scorer. This kicks in the common case (completion-ignore-case is nil) and pays off especially when the table is already a list and 'all-completions' needn't cons. See: https://lists.gnu.org/archive/html/emacs-devel/2026-04/msg01081.html https://lists.gnu.org/archive/html/emacs-devel/2026-05/msg00519.html * lisp/minibuffer.el (completion--flex-all-completions-1): Remove regexp pre-filter. * src/minibuf.c (Fcompletion__flex_cost_gotoh): Add subsequence pre-check. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index e8fb479bc85..a24b92cdae8 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -4982,11 +4982,6 @@ usual. Returns (ALL PAT PREFIX SUFFIX)." (prefix (substring beforepoint 0 (car bounds))) (suffix (substring afterpoint (cdr bounds))) (pat2 (substring pat (car bounds) (+ point (cdr bounds)))) - (completion-regexp-list - (cons (mapconcat (lambda (c) (regexp-quote (char-to-string c))) - pat2 - ".*") - completion-regexp-list)) (all (all-completions prefix table pred)) (all (if (zerop (length pat2)) all diff --git a/src/minibuf.c b/src/minibuf.c index c716ac0d811..745a71a63fc 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -2364,6 +2364,22 @@ STR the i-th character of PAT matched. */) if (patlen == 0 || strlen == 0 || size > FLEX_MAX_MATRIX_SIZE) return Qnil; + /* Also bail if PAT is not a subsequence of STR so bail "cheaply" + before the O(N*M) DP algorithm. Walking both strings + byte-by-byte for this purpose (and only for case-sensitive common + case) should be valid even for multibyte strings. */ + if (!completion_ignore_case) + { + const unsigned char *p = SDATA (pat); + const unsigned char *s = SDATA (str); + int pi = 0; + for (int si = 0; si < strlen && pi < patlen; si++) + if (s[si] == p[pi]) + pi++; + if (pi < patlen) + return Qnil; + } + /* Initialize M and D with positive infinity... */ for (int j = 0; j < size; j++) M[j] = D[j] = pos_inf; commit 12eec781ed69c4fc7611e8c9a1953ad33da98a0c Author: Amin Bandali Date: Fri May 22 10:26:37 2026 -0400 No longer raise error on HTTP 402 (Payment Required) (bug#81101) * lisp/url/url-http.el (url-http-parse-headers): Return t instead of raising an error, to give the user a chance to interact with the page. diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index ce512c6db33..0be1b326d6c 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -826,9 +826,12 @@ should be shown to the user." ;; Authorization header field. (url-http-handle-authentication nil)) ('payment-required ; 402 - ;; This code is reserved for future use - (url-mark-buffer-as-dead buffer) - (error "Somebody wants you to give them money")) + ;; This code is "reserved for future use", but in the + ;; mean time websites have been seen to use it, for + ;; instance anti-bot challenges requiring the "payment" + ;; of a click of a button to prove the visitor is human, + ;; so we no longer raise an `error' here. + t) ('forbidden ; 403 ;; The server understood the request, but is refusing to ;; fulfill it. Authorization will not help and the request commit 1800350b186864130e16c8618cbcb072c564637e Author: Thomas Mühlbacher Date: Tue May 19 11:18:36 2026 +0000 Avoid compilation-mode matching rust as gnu * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist): Put 'rust' before 'gnu' to avoid a mismatch since the " |" has become optional (bug#81075). Copyright-paperwork-exempt: yes diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index aaad8622c95..fbcdc6b5124 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -421,6 +421,20 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1)) nil (1 compilation-error-face)) + ;; This must precede the `gnu' rule or the latter would match instead. + (rust + ,(rx bol (or (group-n 1 "error") (group-n 2 "warning") (group-n 3 "note")) + (? "[" (+ (in "A-Z" "0-9")) "]") ":" (* nonl) + "\n" (+ " ") "-->" + " " (group-n 4 (+ nonl)) ; file + ":" (group-n 5 (+ (in "0-9"))) ; line + ":" (group-n 6 (+ (in "0-9")))) ; column + 4 5 6 (2 . 3) + nil + (1 compilation-error-face) + (2 compilation-warning-face) + (3 compilation-info-face)) + ;; Tested with Lua 5.1, 5.2, 5.3, 5.4, and LuaJIT 2.1. (lua ,(rx bol @@ -582,19 +596,6 @@ during global destruction\\.$\\)" 1 2) "\\(?:Parse\\|Fatal\\) error: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)" 2 3 nil nil) - (rust - ,(rx bol (or (group-n 1 "error") (group-n 2 "warning") (group-n 3 "note")) - (? "[" (+ (in "A-Z" "0-9")) "]") ":" (* nonl) - "\n" (+ " ") "-->" - " " (group-n 4 (+ nonl)) ; file - ":" (group-n 5 (+ (in "0-9"))) ; line - ":" (group-n 6 (+ (in "0-9")))) ; column - 4 5 6 (2 . 3) - nil - (1 compilation-error-face) - (2 compilation-warning-face) - (3 compilation-info-face)) - (rxp "^\\(?:Error\\|Warnin\\(g\\)\\):.*\n.* line \\([0-9]+\\) char\ \\([0-9]+\\) of file://\\(.+\\)"