Merge branch 'savannah/master' into feature/igc3

This commit is contained in:
Pip Cet 2026-06-06 14:34:54 +00:00
commit 540dbab6b1
146 changed files with 3054 additions and 719 deletions

File diff suppressed because it is too large Load diff

View file

@ -115,6 +115,8 @@ HAVE_GSETTINGS = @HAVE_GSETTINGS@
ANDROID = @ANDROID@
DOCLANGS?=@DOCLANGS@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS.
@ -795,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 DOCLANG=$(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 \
@ -945,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 DOCLANG=$(lang) echo-info`)"; \
if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \
(cd "$${thisdir}"; \
@ -1123,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 DOCLANG,$(DOCLANGS),$(MAKE) -C doc/misc DOCLANG=$(DOCLANG) tags;)
CHECK_TARGETS = check check-maybe check-expensive check-all check-byte-compile
.PHONY: $(CHECK_TARGETS)
@ -1144,8 +1146,21 @@ 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_FOR_DOCLANG
$(1)-DOCLANG-$(2): $(1)-common
$$(MAKE) -C doc/$$(subst -, DOCLANG=$(2) ,$(1))
endef
define MAKE_DOC
# Define a target to which dependencies common to all of the doc files
# in this directory may be assigned.
$(1)-common:
$(1): $$(addprefix $(1)-DOCLANG-,$(DOCLANGS))
$$(foreach lang,$(DOCLANGS),$$(eval $$(call MAKE_DOC_FOR_DOCLANG,$(1),$$(lang))))
endef
$(foreach doc,$(DOCS),$(eval $(call MAKE_DOC,$(doc))))
.PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist html info-dir check-info
@ -1162,20 +1177,25 @@ ps: $(PSS)
# Depending on src is sufficient, but ends up being slow, since the
# uncompiled lisp/org/*.el files are used to build the .texi files
# (which can be slow even with the elc files).
misc-info: lisp
misc-info-common: lisp
# Using src rather than lisp because one is less likely to get unnecessary
# rebuilds of stuff that is not strictly necessary for generating manuals.
misc-dvi misc-html misc-pdf misc-ps: src
misc-dvi-common misc-html-common misc-pdf-common misc-ps-common: 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})

View file

@ -13,29 +13,22 @@ Preparations:
Steps to take before starting on the first pretest in any release sequence:
0. The release branch (e.g. emacs-28) should already have been made
0. The release branch (e.g. emacs-31) should already have been made
and you should use it for all that follows. Diffs from this
branch should be going to the emacs-diffs mailing list.
1. Decide on versions of m4 and autoconf, and ensure you will
have them available for the duration of the release process.
2. Consider increasing the value of the variable
'customize-changed-options-previous-release' in cus-edit.el to
refer to a newer version of Emacs. (This is now done when cutting
the release branch, see admin/release-branch.txt, but it can't
hurt to double check its value.) Commit cus-edit.el if changed.
3. Remove any old pretests from <https://alpha.gnu.org/gnu/emacs/pretest>.
2. Remove any old pretests from <https://alpha.gnu.org/gnu/emacs/pretest>.
You can use 'gnupload --delete' (see below for more gnupload details).
(We currently don't bother with this.)
4. Check that all new Lisp libraries belong to sensible packages.
3. Check that all new Lisp libraries belong to sensible packages.
Run "make -C lisp finder-data" and check the diff of the generated
file against the previously released Emacs version to see what has
changed.
5. If this is an emergency release without a prior pretest, inform the
4. If this is an emergency release without a prior pretest, inform the
maintainers of the bundled packages which are developed separately
to make sure they install adjustments required for an official
release. Currently, these packages include:
@ -70,7 +63,7 @@ General steps (for each step, check for possible errors):
"M-x emacs-news-delete-temporary-markers" command to delete any
left-over "---" and "+++" markers from etc/NEWS, as well as the
"Temporary note" section at the beginning of that file, and commit
etc/NEWS if it was modified. For a bug fix release (e.g. 28.2),
etc/NEWS if it was modified. For a bug fix release (e.g. 31.2),
delete any empty headlines too.
2. Regenerate the versioned ChangeLog.N and etc/AUTHORS files.
@ -268,30 +261,33 @@ General steps (for each step, check for possible errors):
9. You can now tag the release/pretest and push it together with the
last commit:
cd EMACS_ROOT_DIR && git tag -a TAG -m "Emacs TAG"
cd EMACS_ROOT_DIR && git tag -s TAG -m "Emacs STR"
git push
git push --tags
Here TAG is emacs-XX.Y.ZZ for a pretest, emacs-XX.Y for a release.
For a release, if you are producing a release candidate first, use
emacs-XX.Y-rcN (N = 1, 2, ...) when you tar the RC, and add the
actual release tag later, when the official release tarball is
uploaded to ftp.gnu.org. When adding a tag later, it is safer to
use the SHA1 of the last commit which went into the release
For STR see below. For a release, if you are producing a release
candidate first, use emacs-XX.Y-rcN (N = 1, 2, ...) when you tar the
RC, and add the actual release tag later, when the official release
tarball is uploaded to ftp.gnu.org. When adding a tag later, it is
safer to use the SHA1 of the last commit which went into the release
tarball, in case there were some intervening commits since then:
git tag -a TAG -m "Emacs TAG" SHA1
git tag -s TAG -m "Emacs TAG STR" SHA1
git push --tags
In the past, we were not always consistent with the annotation
(i.e. -m "Emacs TAG"). The preferred format is like this for a
pretest, release candidate and final release:
git tag -a emacs-28.0.90 -m "Emacs 28.0.90 pretest"
git tag -a emacs-28.1-rc1 -m "Emacs 28.1 RC1"
git tag -a emacs-28.1 -m "Emacs 28.1 release"
git tag -s emacs-31.0.90 -m "Emacs 31.0.90 pretest"
git tag -s emacs-31.1-rc1 -m "Emacs 31.1 RC1"
git tag -s emacs-31.1 -m "Emacs 31.1 release"
10. Decide what compression schemes to offer.
10. Merge the release branch to master, checking you skip the right
commits.
11. Decide what compression schemes to offer.
For a release, at least gz and xz:
gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
xz -c emacs-NEW.tar > emacs-NEW.tar.xz
@ -300,7 +296,9 @@ General steps (for each step, check for possible errors):
Now you should upload the files to the GNU FTP server; your
GPG key must already be accepted as described above.
The simplest method of uploading is with the gnulib
<https://www.gnu.org/s/gnulib/> script "build-aux/gnupload":
<https://www.gnu.org/s/gnulib/> script "build-aux/gnupload"
(/usr/share/gnulib/build-aux/gnupload on Debian and its derivatives
with the 'gnulib' and 'ncftp' packages installed):
For a pretest or release candidate:
gnupload [--user your@gpg.key.email] --to alpha.gnu.org:emacs/pretest \
@ -333,14 +331,14 @@ General steps (for each step, check for possible errors):
For a pretest, place the files in /incoming/alpha instead, so that
they appear on <https://alpha.gnu.org/>.
11. After five minutes, verify that the files are visible at
12. After five minutes, verify that the files are visible at
<https://alpha.gnu.org/gnu/emacs/pretest/> for a pretest, or
<https://ftp.gnu.org/gnu/emacs/> for a release.
Download them and check the signatures and SHA1/SHA256 checksums.
Check they build (./configure --with-native-compilation).
12. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
13. Send an announcement to: emacs-devel, and bcc: info-gnu-emacs@gnu.org.
For a pretest, also bcc: platform-testers@gnu.org.
For a release, also bcc: info-gnu@gnu.org.
(The reason for using bcc: is to make it less likely that people
@ -354,19 +352,19 @@ General steps (for each step, check for possible errors):
because replies that invariably are not announcements also get
sent out as if they were.)
To create the included SHA1 and SHA256 checksums, run:
To create the included SHA256 and SHA512 checksums, run:
sha1sum emacs-NEW.tar.xz
sha256sum emacs-NEW.tar.xz
sha512sum emacs-NEW.tar.xz
You can optionally sign the announcement email using
the same PGP key that you used for signing the tarball.
(Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
an email.)
13. After a release, update the Emacs pages as described below.
14. After a release, update the Emacs pages as described below.
14. After a release, bump the Emacs version on the release branch.
15. After a release, bump the Emacs version on the release branch.
There is no need to bump the version after a pretest; the version
is bumped before the next pretest or release instead.
@ -396,7 +394,7 @@ like this:
<div class="release-banner">
<div class="container">
<h2><em>Emacs 28.1 is out</em>, download it <a href="download.html">here</a>!</h2>
<h2><em>Emacs 31.1 is out</em>, download it <a href="download.html">here</a>!</h2>
</div>
</div>

View file

@ -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.

View file

@ -2127,44 +2127,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.
@ -5253,25 +5216,7 @@ if test "$with_features" = "no" \
with_native_compilation=no
fi
if test "${with_native_compilation}" = "default"; then
# Check if libgccjit is available.
AC_CHECK_LIB([gccjit], [gcc_jit_context_acquire],
[], [libgccjit_not_found])
AC_CHECK_HEADERS([libgccjit.h], [], [libgccjit_dev_not_found])
if test "${with_native_compilation}" != "no"; then
# Check if libgccjit really works.
AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken])
fi
fi
if test "${with_native_compilation}" != "no"; then
if test "${HAVE_ZLIB}" = no; then
AC_MSG_ERROR(['--with-native-compilation' requires zlib])
fi
SAVE_CFLAGS=$CFLAGS
SAVE_LIBS=$LIBS
if test "${opsys}" = "darwin"; then
# Ensure libgccjit installed by Homebrew or macports can be found.
if test -n "$BREW"; then
@ -5308,15 +5253,39 @@ if test "${with_native_compilation}" != "no"; then
fi
fi
# In the default case we already checked
if test "${with_native_compilation}" != "default"; then
# Check if libgccjit is available.
AC_CHECK_LIB([gccjit], [gcc_jit_context_acquire],
[], [libgccjit_not_found_err])
AC_CHECK_HEADERS([libgccjit.h], [], [libgccjit_dev_not_found_err])
# Check if libgccjit is available.
AC_CHECK_LIB([gccjit], [gcc_jit_context_acquire], [],
[if test "${with_native_compilation}" = "default"; then
libgccjit_not_found
else
libgccjit_not_found_err
fi])
# `libgcc_not_found' may set `with_native_compilation' to `no'.
AS_IF([test "$with_native_compilation" != "no"],
[AC_CHECK_HEADERS([libgccjit.h], [],
[if test "${with_native_compilation}" = "default"; then
libgccjit_dev_not_found
else
libgccjit_dev_not_found_err
fi])])
if test "${with_native_compilation}" != "no"; then
# Check if libgccjit really works.
AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken_err])
AC_RUN_IFELSE([libgccjit_smoke_test], [],
[if test "${with_native_compilation}" = "default"; then
libgccjit_broken
else
libgccjit_broken_err
fi])
fi
fi
if test "${with_native_compilation}" != "no"; then
if test "${HAVE_ZLIB}" = no; then
AC_MSG_ERROR(['--with-native-compilation' requires zlib])
fi
SAVE_CFLAGS=$CFLAGS
SAVE_LIBS=$LIBS
HAVE_NATIVE_COMP=yes
case "${opsys}" in
# mingw32 loads the library dynamically.

View file

@ -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

View file

@ -52,15 +52,15 @@ Here is an example:
@group
(defun silly-loop (n)
"Return the time, in seconds, to run N iterations of a loop."
(let ((t1 (float-time)))
(let ((t1 (current-time)))
(while (> (setq n (1- n)) 0))
(- (float-time) t1)))
(float-time (time-since t1))))
@result{} silly-loop
@end group
@group
(silly-loop 50000000)
@result{} 5.200886011123657
(silly-loop 100000000)
@result{} 2.236908583
@end group
@group
@ -69,13 +69,13 @@ Here is an example:
@end group
@group
(silly-loop 50000000)
@result{} 0.6239290237426758
(silly-loop 100000000)
@result{} 0.374873305
@end group
@end example
In this example, the interpreted code required more than 5 seconds to run,
whereas the byte-compiled code required less than 1 second. These
In this example, the interpreted code was about six times slower
than the byte-compiled code. These
results are representative, but actual results may vary.
@node Compilation Functions

View file

@ -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

View file

@ -3527,6 +3527,7 @@ non-selected window, Emacs applies the @code{mode-line-inactive} face.
For a header line, Emacs applies the @code{header-line} face.
For a tab line, Emacs applies the @code{tab-line} face.
@cindex @code{margin} face, and face merging
@item
If the text comes from an overlay string via @code{before-string} or
@code{after-string} properties (@pxref{Overlay Properties}), or from a
@ -3535,13 +3536,14 @@ contain a @code{face} or @code{mouse-face} property, or these
properties leave some face attributes undefined, but the buffer text
affected by the overlay/display property does define a face or those
attributes, Emacs applies the face attributes of the ``underlying''
buffer text. Note that this is so even if the overlay or display
string is displayed in the display margins (@pxref{Display Margins}).
buffer text. However, this does not apply to strings displayed in the
display margins, which use the @code{margin} face as the base instead
(@pxref{Display Margins}).
@item
If the text is to be shown in the display margins, and any given
attribute has not been specified during the preceding steps, Emacs
applies the attribute of the @code{margin} face.
If the text is to be shown in the display margins, Emacs uses the
@code{margin} face as the base, so any attribute not specified by the
string's own face is taken from the @code{margin} face.
@item
If any given attribute has not been specified during the preceding
@ -3804,29 +3806,42 @@ The default face, whose attributes are all specified. All other faces
implicitly inherit from it: any unspecified attribute defaults to the
attribute on this face (@pxref{Face Attributes}).
@vindex mode-line @r{faces}
@item mode-line-active
@itemx mode-line-inactive
@itemx header-line
@itemx tab-line
Basic faces used for the mode line, header line, and tab line.
@vindex tool-bar @r{face}
@item tool-bar
@vindex tab-bar @r{face}
@itemx tab-bar
@vindex fringe @r{face}
@itemx fringe
@vindex scroll-bar @r{face}
@itemx scroll-bar
@vindex window-divider @r{face}
@itemx window-divider
@vindex border @r{face}
@itemx border
@vindex child-frame-border @r{face}
@itemx child-frame-border
Basic faces used for the corresponding decorations of GUI frames.
@vindex cursor @r{face}
@item cursor
The basic face used for the text cursor.
@vindex margin @r{face}
@item margin
The basic face used for window margins, both on the left and on the
right. It is commonly used to customize the background of the empty
areas of the margins. It inherits from the @code{default} face.
areas of the margins, and it also provides the base attributes for
strings displayed in the margins (@pxref{Display Margins}). It
inherits from the @code{default} face.
@vindex mouse @r{face}
@item mouse
The basic face used for displaying mouse-sensitive text when the mouse
pointer is on that text.
@ -3842,6 +3857,7 @@ These have the attributes indicated by their names (e.g., @code{bold}
has a bold @code{:weight} attribute), with all other attributes
unspecified (and so given by @code{default}).
@vindex shadow @r{face}
@item shadow
For dimmed-out text. For example, it is used for the ignored
part of a filename in the minibuffer (@pxref{Minibuffer File,,
@ -3857,15 +3873,21 @@ For stretches of text that should temporarily stand out. For example,
it is commonly assigned to the @code{mouse-face} property for cursor
highlighting (@pxref{Special Properties}).
@vindex match @r{face}
@item match
@vindex isearch @r{face}
@itemx isearch
@vindex lazy-highlight @r{face}
@itemx lazy-highlight
For text matching (respectively) permanent search matches, interactive
search matches, and lazy highlighting other matches than the current
interactive one.
@vindex error @r{face}
@item error
@vindex warning @r{face}
@itemx warning
@vindex success @r{face}
@itemx success
For text concerning errors, warnings, or successes. For example,
these are used for messages in @file{*Compilation*} buffers.
@ -5921,12 +5943,9 @@ the before-string.
Note that if the string to be displayed in the margin doesn't fully
specify its face, the nonspecified attributes are inherited from the
@code{margin} face (@pxref{Basic Faces}). The face merging mechanism
ensures that the margin background remains consistent when margin
annotations specify only a foreground color. If you want a margin
string to have a specific appearance independent of the @code{margin}
face, make sure the string has a face specifying all required
attributes.
@code{margin} face (@pxref{Basic Faces}). If you want a margin string
to have a specific appearance independent of the @code{margin} face,
make sure the string has a face specifying all required attributes.
Before the display margins can display anything, you must give
them a nonzero width. The usual way to do that is to set these

View file

@ -2694,10 +2694,9 @@ The color to use for the background of characters. It is equivalent to
the @code{:background} attribute of the @code{default} face.
@vindex mouse-color@r{, a frame parameter}
@vindex mouse@r{, a face}
@item mouse-color
The color for the mouse pointer. It is equivalent to the @code{:background}
attribute of the @code{mouse} face.
attribute of the @code{mouse} face (@pxref{Basic Faces}).
@vindex cursor-color@r{, a frame parameter}
@item cursor-color

View file

@ -2040,6 +2040,7 @@ system.
@defun format-seconds format-string seconds
This function converts its argument @var{seconds} into a string of
years, days, hours, etc., according to @var{format-string}. The
argument @var{seconds} is a time value (@pxref{Time of Day}). The
argument @var{format-string} may contain @samp{%}-sequences which
control the conversion. Here is a table of what the
@samp{%}-sequences mean:

View file

@ -2625,7 +2625,8 @@ avoid calling @code{widen} in their indentation code and obey
@defvar prog-indentation-context
This variable, when non-@code{nil}, holds the indentation context for
the sub-mode's indentation engine provided by the superior major mode.
The value should be a list of the form @code{(@var{first-column} . @var{rest}}.
The value should be a list of the form @w{@code{(@var{first-column}
. @var{rest})}}.
The members of the list have the following meaning:
@table @var
@ -4870,6 +4871,24 @@ Therefore, all else being equal, it is preferable to pass a buffer than
a string as @var{source} argument.
@end defun
Sometimes @code{replace-region-contents} is unable to understand the
nature of the change in which case information such as overlays and
markers will not be preserved as well as we would like. If this is
important and you have enough knowledge about the change, you can
preserve this information manually. For example, when sorting the lines
of a region, you can start by collecting all the overlays and markers in
the affected region using @code{overlays-in} and @code{markers-in} as
well as recording a description of the line on which they were found.
After inserting the sorted lines, you can then move the objects back to
their rightful position.
@defun markers-in &optional beg end
Return a list of all the markers found between @var{beg} and @var{end}
in the current buffer. @var{beg} defaults the @code{point-min} and
@var{end} defaults to @code{point-max}. Do not rely on the order of the
markers in the list, because it is unspecified.
@end defun
@node Decompression
@section Dealing With Compressed Data

View file

@ -63,18 +63,22 @@ INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = @MAKEINFO@
MAKEINFO_OPTS = --force -I$(emacsdir)
ifeq ($(DOCLANG),)
DOCLANG:=default
else ifeq ($(wildcard $(srcdir)/../translations/$(DOCLANG)/info_common.mk),)
$(error No manual language $(DOCLANG) found)
DOCLANG:=default
endif
lang_suffix:=$(filter-out -default,-$(DOCLANG))
lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(DOCLANG)/misc/)
## 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.
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 $(srcdir)/../translations/$(DOCLANG)/info_common.mk
## Info files to install on current platform.
INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
@ -82,29 +86,31 @@ 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
# 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)
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
@ -118,21 +124,21 @@ 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.
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))
@ -152,32 +158,30 @@ ${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
## patsubst as "info" is already taken.
$$(patsubst info, info-doc, $(1)): $$(buildinfodir)/$(1)$$(lang_suffix).info
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))))
%.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 $@ $<
@ -204,16 +208,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
@ -248,7 +252,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)' \

View file

@ -1340,9 +1340,20 @@ keyword @code{:session}.
D-Bus object path, @var{service} is registered at. @var{interface} is
an interface offered by @var{service}. It must provide @var{method}.
@var{handler} is a Lisp function, which is called when the
corresponding return message arrives. If @var{handler} is @code{nil},
no return message will be expected.
@var{handler} is a Lisp function, which is called when the corresponding
return message has arrived. It uses the returned values from the
@var{method} call as arguments. These are the same arguments which are
returned when @code{dbus-call-method} is invoked instead,
@pxref{Synchronous Methods}. If @var{handler} is @code{nil}, no return
message will be expected.
@var{handler} can also be the cons cell @code{(@var{handler}
. @var{error-handler})}. In this case, @var{error-handler} will be
called in case an error is returned from D-Bus. It uses the returned
D-Bus error as argument.
Neither the return value of @var{handler} nor the return value of
@var{error-handler} is used.
If the parameter @code{:timeout} is given, the following integer
@var{timeout} specifies the maximum number of milliseconds before a
@ -1366,19 +1377,40 @@ arguments. They are converted into D-Bus types as described in
If @var{handler} is a Lisp function, the function returns a key into
the hash table @code{dbus-registered-objects-table}. The
corresponding entry in the hash table is removed, when the return
message arrives, and @var{handler} is called. Example:
message arrives, and @var{handler} is called. Examples:
The return value of @samp{org.freedesktop.portal.Settings.ReadOne} is a variant.
@lisp
(dbus-call-method-asynchronously
:system "org.freedesktop.Hal"
"/org/freedesktop/Hal/devices/computer"
"org.freedesktop.Hal.Device" "GetPropertyString"
(lambda (msg) (message "%s" msg))
"system.kernel.machine")
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadOne"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
@print{} i686
@print{} Method handler (0)
@result{} (:serial :system 2)
@result{} (:serial :session 4)
@end lisp
There does not exist a method @samp{org.freedesktop.portal.Settings.ReadTwo}.
@lisp
(dbus-call-method-asynchronously
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadTwo"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
@print{} Error handler
(dbus-error "org.freedesktop.DBus.Error.UnknownMethod
No such method "ReadTwo")
@result{} (:serial :session 5)
@end lisp
@end defun

View file

@ -996,6 +996,17 @@ same language server. That file is still outside your project
will consider it to be part of the workspace. The default is
@code{nil}.
@cindex markdown renderer
@item eglot-documentation-renderer
This variable controls how Eglot renders at-point documentation imported
from the server (@pxref{Eglot Features}). The default value is
@code{nil}, meaning Eglot selects a suitable Markdown renderer on each
use---for example, @code{gfm-view-mode} from @code{markdown-mode} on
NonGNU ELPA, which enhances documentation through fontification and
other formatting. If you set it to @code{t}, plain text is requested
from the server and no rendering is attempted. See docstring for more
options.
@item eglot-mode-map
This variable is the keymap for binding Eglot-related command. It is in
effect only as long as the buffer is managed by Eglot. By default, it

View file

@ -933,8 +933,8 @@ that start with a space are part of the value).
@example
Name: foo
Code: (indent-region
(point-min) (point-max))
Code: (lambda ()
(indent-region (point-min) (point-max)))
@end example
@table @samp

View file

@ -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.

View file

@ -7,7 +7,7 @@
@c In the Tramp GIT, the version number and the bug report address
@c are auto-frobbed from configure.ac.
@set trampver 2.8.2-pre
@set trampver 2.8.2
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 28.1

View file

@ -1,3 +1,19 @@
* Translated Emacs manuals
** Translations available
Translations for language _doclang_ can be found under directory
doc/translations/_doclang_.
** Compiling a manual translation
For the info output, and, say, SES manual in French:
make -C doc/misc ses DOCLANG=fr
For the pdf output:
make -C doc/misc ses-fr.pdf DOCLANG=fr
* Translating the Emacs manuals
** Copyright assignment

View file

@ -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 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

View file

@ -0,0 +1,8 @@
## Info files to build and install on all platforms (only ses has been
## translated to French)
INFO_COMMON = ses
## efaq-w32 has not been translated to French
DOCMISC_W32:=#
DOCMISC_W32_TARGET:=#

View file

@ -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 DOCLANG=fr
@c ou juste
@c make -C doc/misc ses DOCLANG=fr
@c compiler pdf avec
@c make -C doc/misc ses-fr.pdf DOCLANG=fr
@copying
Ce fichier documente @acronym{SES} : le tableur simple dEmacs (Simple

View file

@ -87,6 +87,8 @@ Agustín Martín: changed ispell.el flyspell.el fixit.texi
Ahmed Khanzada: changed gtkutil.c battery.el frame.c frame.el gtkutil.h
nsterm.m w32fns.c w32term.c w32term.h xsettings.c xsettings.h
Aidan Coyle: changed eww.el
Aidan Gauland: wrote em-tramp.el
and changed eshell.texi em-term.el em-unix.el erc-match.el em-cmpl.el
em-dirs.el em-ls.el em-script.el esh-proc.el eshell-tests.el
@ -157,7 +159,7 @@ Aleksey Kladov: changed eglot.el
Alexander Adolf: wrote eudc-capf.el eudcb-ecomplete.el
eudcb-macos-contacts.el eudcb-mailabbrev.el
and changed eudc.texi message.el eudc-vars.el ecompleterc eudc-tests.el
eudc.el mailrc
eudc.el mailrc vc.el
Alexander Becher: changed vc-annotate.el
@ -288,7 +290,7 @@ Amin Bandali: changed erc.el erc.texi erc-backend.el erc-button.el
erc-compat.el erc-track.el erc-dcc.el erc-desktop-notifications.el
erc-match.el erc-services.el erc-speedbar.el erc-status-sidebar.el
erc-autoaway.el erc-fill.el erc-goodies.el erc-ibuffer.el erc-imenu.el
erc-join.el erc-lang.el erc-list.el erc-log.el and 13 other files
erc-join.el erc-lang.el erc-list.el erc-log.el and 15 other files
Amos Bird: changed xfns.c
@ -309,7 +311,7 @@ and changed nsterm.m nsfns.m nsmenu.m nsterm.h font-lock.el nsimage.m
Anders Waldenborg: changed emacsclient.c
Andrea Alberti: changed dispextern.h faces.el xdisp.c xfaces.c
Andrea Alberti: changed xdisp.c dispextern.h faces.el xfaces.c
Andrea Corallo: wrote [native compilation of Emacs Lisp] comp-common.el
comp-cstr-tests.el comp-cstr.el comp-run.el comp-tests.el comp.c
@ -583,7 +585,7 @@ and changed progmodes/python.el eglot.el isearch.el comint.el eldoc.el
progmodes/compile.el project.el README.md bookmark.el dired.el
dockerfile-ts-mode.el files.el font-lock.el glasses.el gnutls.el man.el
message.el message.texi misc.texi modes.texi outline.el
and 16 other files
and 17 other files
Aurélien Aptel: changed alloc.c emacs-module.h lisp.h Makefile
configure.ac cus-face.el data.c dispextern.h display.texi dynlib.c
@ -1542,7 +1544,7 @@ David Ponce: wrote bovine/grammar.el cedet.el comp.el java-tags.el
semantic/java.el semantic/wisent.el senator.el tree-widget.el
wisent/grammar.el wisent/wisent.el
and co-wrote util-modes.el
and changed subr-x.el wid-edit.el image.el w32menu.c w32term.c
and changed wid-edit.el subr-x.el image.el w32menu.c w32term.c
cl-extra.el cl-types.el close.png close.xpm cus-edit.el empty.png
empty.xpm end-guide.png end-guide.xpm files.el guide.png guide.xpm
handle.png handle.xpm keyboard.c leaf.png and 36 other files
@ -1670,7 +1672,8 @@ Dionisio E Alonso: changed eglot.el
Dirk Herrmann: co-wrote bibtex.el
Dirk-Jan C. Binnema: changed configure.ac org-agenda.el xwidget.c
Dirk-Jan C. Binnema: changed xwidget.c configure.ac org-agenda.el
process.c process.h
Dirk Ullrich: changed ispell.el
@ -1809,9 +1812,9 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c]
chartab-tests.el coding-tests.el etags-tests.el rxvt.el tty-colors.el
and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c simple.el w32fns.c
files.el fileio.c keyboard.c configure.ac emacs.c text.texi w32term.c
dispnew.c frames.texi files.texi w32proc.c xfaces.c process.c window.c
dispextern.h and 1451 other files
files.el fileio.c keyboard.c configure.ac emacs.c text.texi dispnew.c
w32term.c frames.texi files.texi w32proc.c xfaces.c process.c window.c
dispextern.h and 1453 other files
Eliza Velasquez: changed server.el simple.el
@ -2093,8 +2096,8 @@ Filipp Gunbin: changed ldap.el compilation.txt progmodes/compile.el
Filippo Argiolas: changed eglot.el eglot.texi c-ts-common.el
F. Jason Park: changed erc.el erc-tests.el erc-backend.el erc-common.el
erc-stamp.el erc-fill.el erc.texi erc-goodies.el erc-button.el
F. Jason Park: changed erc.el erc-tests.el erc-backend.el erc-stamp.el
erc-common.el erc-fill.el erc.texi erc-goodies.el erc-button.el
erc-fill-tests.el erc-networks.el foonet.eld erc-compat.el erc-match.el
erc-speedbar.el erc-dcc.el erc-scenarios-common.el erc-sasl.el
erc-networks-tests.el erc-track.el erc-goodies-tests.el
@ -2648,6 +2651,8 @@ Iwamuro Motonori: changed gnus-kill.el
Jaap-Henk Hoepman: changed mm-decode.el
Jacek Migacz: changed gnus-msg.el
Jacek Świerk: changed compilation.txt compile-tests.el
progmodes/compile.el
@ -2849,9 +2854,9 @@ Jay Sachs: changed gnus-score.el gnus-win.el
J.D. Smith: co-wrote idlw-help.el idlw-shell.el idlwave.el
and changed idlw-rinfo.el comint.el idlwave.texi loaddefs-gen.el vc.el
bibtex.el byte-run.el cl-generic.el easy-mmode.el eglot.el files.texi
functions.texi hideshow.el inline.el loading.texi misc.texi mouse.el
os.texi pcase.el repeat.el shr.el and 9 other files
bibtex.el byte-run.el cl-generic.el configure.ac easy-mmode.el eglot.el
files.texi functions.texi hideshow.el inline.el loading.texi misc.texi
mouse.el os.texi pcase.el repeat.el and 10 other files
Jean Abou Samra: changed scheme.el
@ -3054,11 +3059,11 @@ João P. L. De Carvalho: changed sh-script.el
João Távora: wrote eglot-tests.el eglot.el elec-pair.el electric-tests.el
flymake-cc.el jsonrpc-tests.el jsonrpc.el message-tests.el
shorthands.el
and changed flymake.el icomplete.el EGLOT-NEWS README.md eldoc.el
and changed flymake.el EGLOT-NEWS icomplete.el README.md eldoc.el
eglot.texi minibuffer.el flymake-proc.el flymake.texi elisp-mode.el
flymake-tests.el flymake-elisp.el electric.el elisp-mode-tests.el
lread.c text.texi Makefile flymake-ui.el progmodes/python.el project.el
xref.el and 74 other files
xref.el and 77 other files
Jochen Hein: changed gnus-art.el
@ -3314,6 +3319,8 @@ Josh Huber: changed mml-sec.el mml.el message.el gnus-msg.el mml2015.el
Joshua Datko: changed fortune.el
Joshua Murphy: changed newst-treeview.el
Joshua Varner: changed intro.texi
Jostein Kjønigsen: changed csharp-mode.el typescript-ts-mode.el eglot.el
@ -3391,7 +3398,7 @@ Juri Linkov: wrote compose.el emoji.el files-x.el misearch.el
and changed isearch.el simple.el replace.el info.el dired.el treesit.el
minibuffer.el dired-aux.el window.el outline.el progmodes/grep.el
subr.el diff-mode.el repeat.el vc.el mouse.el files.el image-mode.el
menu-bar.el project.el display.texi and 526 other files
menu-bar.el project.el display.texi and 528 other files
Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
w32console.c w32heap.c w32inevt.c w32term.h
@ -3877,9 +3884,9 @@ Lin Jian: changed Makefile.in subr.el
Lin Sun: changed python-tests.el cedet/semantic.el ediff-util.el
package.el progmodes/python.el autorevert-tests.el autorevert.el
bovine/make.el calc.el esh-mode.el eww.el find-func.el html.el
java-tags.el javascript.el lread.c ls-lisp-tests.el ls-lisp.el
master.el package-test-server.py package-tests.el and 5 other files
bovine/make.el calc.el esh-mode.el eww.el find-func.el hideshow.el
html.el java-tags.el javascript.el lread.c ls-lisp-tests.el ls-lisp.el
master.el package-test-server.py and 6 other files
Lin Zhou: changed w32fns.c w32term.h
@ -3972,7 +3979,7 @@ Manuel Giraud: changed image-dired.el xdisp.c tmm.el calendar.el
doc-view.el image.c vc.el ox-html.el bookmark.el diary-lib.el
find-dired.el gnus.el image-dired-util.el keyboard.c longlines.el
midnight.el ox-publish.el simple.el smtpmail.el buff-menu.el
cal-hebrew.el and 68 other files
cal-hebrew.el and 69 other files
Manuel Gómez: changed speedbar.el
@ -4583,9 +4590,10 @@ Mohsin Kaleem: changed cus-face.el dispextern.h eglot.el term.c
Mon Key: changed animate.el imap.el syntax.el
Morgan Smith: changed doc-view.el image-dired.el window.el battery.el
dbus.texi esh-var-tests.el esh-var.el eshell.texi gnus-group-tests.el
minibuffer-tests.el minibuffer.el url-vars.el vc-git.el
Morgan Smith: changed doc-view.el gnus-dbus.el image-dired.el window.el
battery.el dbus.texi esh-var-tests.el esh-var.el eshell.texi
gnus-group-tests.el gnus-start.el gnus.texi minibuffer-tests.el
minibuffer.el url-vars.el vc-git.el
Morgan Willcock: changed tempo.el electric.el ert-font-lock.el imenu.el
modes.texi progmodes/python.el smie.el speedbar-tests.el speedbar.el
@ -5140,7 +5148,7 @@ Philip Kaludercic: wrote epa-ks.el newcomers-presets-theme.el
and co-wrote compat.el
and changed package.el rcirc.el package.texi rcirc.texi vc.el
sgml-mode.el vc-git.el project.el which-key.el package-autosuggest.eld
package-activate.el message.el startup.el subr.el custom.texi eglot.el
package-activate.el startup.el message.el subr.el custom.texi eglot.el
simple.el bytecomp.el cus-edit.el custom.el help.el and 94 other files
Philippe Altherr: changed sh-script.el sh-script-tests.el shell.sh
@ -5232,7 +5240,7 @@ Pip Cet: wrote image-circular-tests.el
and changed pdumper.c comp.c lisp.h xdisp.c alloc.c xterm.c fns.c
configure.ac emacs.c eval.c image.c comp.el frame.c print.c
src/Makefile.in byte-opt.el conf_post.h data.c doc.c ftcrfont.c
gtkutil.c and 116 other files
gtkutil.c and 119 other files
Platon Pronko: changed tramp.el
@ -5299,8 +5307,8 @@ Raffael Mancini: changed misc.el
Raffael Stocker: changed w32.c w32console.c w32fns.c w32term.h w32xfns.c
Rahul Martim Juliato: changed markdown-ts-mode.el icomplete.el
markdown-ts-mode-x.el newst-backend.el
Rahul Martim Juliato: changed markdown-ts-mode.el markdown-ts-mode-x.el
icomplete.el newst-backend.el
Raimon Grau: changed thingatpt.el calc-fin.el eww.el replace.el
thingatpt-tests.el
@ -5430,11 +5438,11 @@ Richard Lawrence: wrote calendar-tests.el diary-icalendar.el
icalendar-ast.el icalendar-macs.el icalendar-mode.el
icalendar-parser.el icalendar-recur.el icalendar-shortdoc.el
icalendar-utils.el
and changed calendar.el icalendar.el calendar.texi
diary-icalendar-tests.el icalendar-recur-tests.el diary-lib.el
icalendar-tests.el .gitattributes cal-dst.el cal-move.el cond-star.el
diary-icalendar-resources emacs.texi gnus-icalendar-tests.el
gnus-icalendar.el icalendar-ast-tests.el icalendar-parser-tests.el
and changed calendar.el diary-icalendar-tests.el icalendar-recur-tests.el
icalendar.el calendar.texi diary-lib.el gnus-icalendar.el
icalendar-parser-tests.el icalendar-tests.el .gitattributes cal-dst.el
cal-move.el cond-star.el diary-icalendar-resources emacs.texi
gnus-icalendar-tests.el icalendar-ast-tests.el
import-legacy-function.ics import-legacy-vars.ics
import-non-recurring-all-day.ics import-rrule-anniversary.ics
and 8 other files
@ -5761,7 +5769,7 @@ and co-wrote vc-tests.el
and changed vc.el vc-git.el vc-dispatcher.el vc-hg.el vc-dir.el
diff-mode.el vc-hooks.el vc1-xtra.texi log-view.el maintaining.texi
subr.el project.el log-edit.el files.texi server.el simple.el window.el
cond-star.el dired-aux.el keyboard.c vc/vc-bzr.el and 329 other files
cond-star.el dired-aux.el keyboard.c vc/vc-bzr.el and 333 other files
Sebastian Fieber: changed gnus-art.el mm-decode.el mm-view.el
@ -6007,7 +6015,7 @@ and co-wrote font-lock.el gitmerge.el pcvs.el visual-wrap.el
and changed subr.el simple.el cl-macs.el bytecomp.el files.el keyboard.c
lisp.h vc.el eval.c xdisp.c alloc.c help-fns.el buffer.c sh-script.el
package.el tex-mode.el progmodes/compile.el lread.c keymap.c window.c
easy-mmode.el and 1744 other files
easy-mmode.el and 1745 other files
Stefano Facchini: changed gtkutil.c
@ -6035,9 +6043,9 @@ Stéphane Boucher: changed replace.el
Stephane Marks: wrote savehist-tests.el system-sleep.el system-taskbar.el
and changed frame.el frames.texi nsfns.m tab-bar.el bookmark.el frame.c
nsterm.m project.el recentf.el savehist.el subr.el vtable.el w32fns.c
display.texi ibuf-macs.el os.texi saveplace.el shell.el vtable-tests.el
androidfns.c ansi-osc.el and 32 other files
nsterm.m markdown-ts-mode.el project.el recentf.el savehist.el subr.el
vtable.el w32fns.c display.texi ibuf-macs.el os.texi saveplace.el
shell.el treesit.el vtable-tests.el and 32 other files
Stephane Zermatten: changed term-tests.el term.el ansi-osc.el
@ -6330,6 +6338,8 @@ Thomas Link: wrote filesets.el
Thomas Morgan: changed org-habit.el forms.el select.el
Thomas Mühlbacher: changed progmodes/compile.el
Thomas Neumann: co-wrote make-mode.el
and changed makefile.el
@ -6929,8 +6939,8 @@ Your Name: changed configure.ac
Yuan Fu: changed treesit.el treesit.c c-ts-mode.el parsing.texi
treesit-tests.el progmodes/python.el modes.texi js.el c-ts-common.el
typescript-ts-mode.el indent.erts treesit.h java-ts-mode.el
rust-ts-mode.el css-mode.el go-ts-mode.el sh-script.el configure.ac
csharp-mode.el treesit-admin.el cmake-ts-mode.el and 88 other files
rust-ts-mode.el css-mode.el go-ts-mode.el sh-script.el cmake-ts-mode.el
configure.ac csharp-mode.el treesit-admin.el and 89 other files
Yuanle Song: changed rng-xsd.el
@ -6997,7 +7007,8 @@ Zhang Weize: wrote ob-plantuml.el
Zhehao Lin: changed xfaces.c
Zhengyi Fu: changed bookmark.el executable.el
Zhengyi Fu: changed bookmark.el executable.el progmodes/grep.el
replace.el
Zhiwei Chen: changed hideif.el

View file

@ -32,11 +32,13 @@ New key bindings: 'k' shuts down, 'r' reconnects, 'e' visits the events
buffer, 'w' shows workspace configuration, and 'RET' invokes
'eglot-describe-connection'.
** Eglot uses new built-in 'markdown-ts-mode' of Emacs 31 (bug#80127)
** New variable 'eglot-documentation-renderer' (bug#80127)
This means that on newer versions of Emacs the external
'markdown-mode.el' package does not need to be installed to render
Markdown content.
The variable 'eglot-documentation-renderer' replaces the now-obsolete
'eglot-prefer-plaintext' and offers more control over what major mode is
used to render markdown snippets. By default, the variable is nil and
'gfm-view-mode' from NonGNU ELPA's markdown-mode package is used if
found. See docstring for more details.
* Changes in Eglot 1.23 (2/4/2026)

View file

@ -37,6 +37,18 @@ exit status to 256 if sending input to that process returned EPIPE.
Now when this happens, Emacs closes the file descriptor to write to the
child process, but allows it to continue execution as normal.
---
** New variable 'tty-cursor-movement-use-TAB'.
If this is set to the nil value, Emacs will not use TABs to optimize
cursor motion on text-mode terminals. This is for the rare cases where
the hardware tabs of the terminal were set to a non-default value by the
'tabs' command or similar, or if using TABs for cursor movement has any
other undesired effects. The default is t, which preserves past
behavior.
If this variable is nil, 'tty-cursor-movement-use-TAB-BS' has no effect,
and Emacs will never use TABs for any cursor-movement sequences.
* Editing Changes in Emacs 32.1
@ -53,15 +65,34 @@ package with the same version. This is useful if you have started
making local changes to your tarball installation, and then decided to
check out the repository to prepare a patch for the package maintainer.
** Compilation mode
---
*** Messages from Ansible are now recognized.
* New Modes and Packages in Emacs 32.1
** New major modes based on the tree-sitter library
*** New major mode 'markdown-ts-mode'.
A major mode based on the tree-sitter library for editing Markdown
files. Markdown files are visited using this mode when the required
tree-sitter grammars ('markdown' and 'markdown-inline') are available,
or when the user has opted in via 'treesit-enabled-modes'. Otherwise,
Markdown files fall back to 'text-mode'.
To install the grammars, use 'M-x markdown-ts-mode-install-parsers'.
* Incompatible Lisp Changes in Emacs 32.1
* Lisp Changes in Emacs 32.1
+++
** The new function 'markers-in' returns the set of markers in a region.
---
** New variable 'completion-frontend-properties'.
This variable generalizes the 'completion-lazy-hilit' variable added in
@ -69,6 +100,14 @@ Emacs 30. It allows Lisp programs that present completion candidates
("completion frontends") to provide additional information which can be
used to adjust or optimize completion candidates computation.
** D-Bus
+++
*** Support error handler in asynchronous method calls.
The HANDLER argument of 'dbus-call-method-asynchronously' can be a cons
cell '(HANDLER . ERROR-HANDLER)'. ERROR-HANDLER is invoked if the
method call returns with a D-Bus error; the error is passed as argument.
* Changes in Emacs 32.1 on Non-Free Operating Systems

View file

@ -93,7 +93,15 @@ below the line, which allows for vertically centering text.
A new basic face 'margin' is used by default for text displayed in the
left and right margin areas, which are used by various packages for
per-line annotations. Its background defaults to the frame default, so
existing behavior is unchanged for users who do not customize it.
existing behavior is unchanged for users who do not customize this new
face.
Display strings shown in the margins now inherit the unspecified face
attributes from the 'margin' face, if the string itself does not fully
specify its face. If your code relied on the face of the underlying
buffer text to serve as default for the unspecified face attributes of
strings displayed in the margin, you must now set those face attributes
in the margin string itself via 'propertize'.
+++
** 'prettify-symbols-mode' attempts to ignore undisplayable characters.
@ -572,6 +580,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
@ -2997,7 +3013,7 @@ In addition, the Git backend has been fixed to display missing files as
There is still some further work to do to rationalize VC's handling of
file removal.
---
+++
*** New user option 'vc-dir-auto-hide-up-to-date'.
If you customize this option to 'revert', the 'g' command to refresh
the VC Directory buffer also has the effect of the 'x' command.
@ -3936,15 +3952,6 @@ A major mode based on 'conf-mode' for editing ".npmrc" files.
** New major modes based on the tree-sitter library
*** New major mode 'markdown-ts-mode'.
A major mode based on the tree-sitter library for editing Markdown
files. Markdown files are visited using this mode when the required
tree-sitter grammars ('markdown' and 'markdown-inline') are available,
or when the user has opted in via 'treesit-enabled-modes'. Otherwise,
Markdown files fall back to 'text-mode'.
To install the grammars, use 'M-x markdown-ts-mode-install-parsers'.
*** 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
@ -4214,6 +4221,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

View file

@ -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
@ -3643,6 +3646,41 @@ file; for example:
"/usr/local/opt/libgccjit/lib/gcc/11"
"/usr/local/opt/gcc/lib/gcc/11/gcc/x86_64-apple-darwin20/11.2.0") ":"))
** Stuttering and missed keypresses during Native Compilation on macOS
Natively compiled modules are validated by macOS the first time that
they are loaded. On some machines, this can cause Emacs to be
temporarily less responsive while a large number of '*.eln' files are
being compiled and loaded.
One can force the first load of the module to happen in the async
compilation worker by adding this to their early-init.el:
(setq native-comp-async-env-modifier-form
'(progn
(defun c/native-comp--preload-eln-after-compile
(compile function-or-file &optional with-late-load output)
"Preload async native-comp output in the compiler child."
(prog1 (funcall compile function-or-file with-late-load output)
(when (and (stringp function-or-file) with-late-load)
(with-demoted-errors "Async native .eln preload: %S"
(let ((eln-file (comp-el-to-eln-filename function-or-file)))
(when (file-exists-p eln-file)
(native-elisp-load eln-file t)))))))
(advice-add 'comp--native-compile
:around #'c/native-comp--preload-eln-after-compile)))
Alternatively, if one is willing to accept the associated security
risks, one could disable library validation on their Emacs binary:
codesign --force --sign - \
--entitlements macos-disable-library-validation.entitlements \
src/emacs
Disabling validation might expose you to security risks, so please
consider that before using this recipe.
** Text dictation doesn't work on macOS
The indication is that the macOS keyboard shortcut for dictation is ignored.

View file

@ -41,6 +41,24 @@ symbol: aix
****** Error number 140 in line 8 of file errors.c ******
* Ansible
symbols: ansible-error ansible-fatal ansible-warning
ansible-included ansible-origin
[ERROR]: couldn't resolve module/action 'shelll'. This often indicates a misspelling, missing collection, or incorrect module path.
Origin: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml:19:3
[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg.
[DEPRECATION WARNING]: Importing 'to_bytes' from 'ansible.module_utils._text' is deprecated. This feature will be removed from ansible-core version 2.24. Use ansible.module_utils.common.text.converters instead.
included: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml for localhost => (item={'name': 'adb', 'start': '04157df41d46b840'})
fatal: [localhost]: FAILED! => {
"assertion": "message == []",
"changed": false,
"evaluated_to": false,
"msg": "Assertion failed"
}
* Ant Java: works at least for jikes and javac
symbol: ant
@ -161,7 +179,7 @@ cucumber foo/cucumber.feature:15 # Scenario: deep backtrace in step definition
* EDG C/C++
symbol: edg-1 edg-2
symbols: edg-1 edg-2
build/intel/debug/../../../struct.cpp(42): error: identifier "foo" is undefined
build/intel/debug/../../../struct.cpp(44): warning #1011: missing return statement at end of ...
@ -178,7 +196,7 @@ Error 24 at (2:progran.f90) : syntax error
* Fortran checker
symbols: ftnchek
symbol: ftnchek
Dummy arg W in module SUBA line 8 file arrayclash.f is array
L4 used at line 55 file test/assign.f; never set
@ -336,7 +354,7 @@ boost/container/detail/flat_tree.hpp:589:25: [ skipping 5 instantiation contex
* Guile backtrace, 2.0.11
symbols: guile-file, guile-line
symbols: guile-file guile-line
Backtrace:
In ice-9/boot-9.scm:
@ -356,6 +374,8 @@ In /home/janneke/vc/guile/examples/gud-break.scm:
* Lua 5.1, 5.2, 5.3, 5.4, and LuaJIT 2.1
symbols: lua lua-stack
/usr/bin/lua: database.lua:31: assertion failed!
stack traceback:
[C]: in function 'assert'
@ -490,7 +510,7 @@ Fatal error: Call to undefined function: mysql_pconnect() in db.inc on line 66
* Rust
symbol: rust rust-panic
symbols: rust rust-panic
error[E0277]: `Foo` is not an iterator
--> src/main.rs:4:16
@ -612,7 +632,7 @@ bloofle defined( /users/wolfgang/foo.c(4) ), but never used
* GCOV (test coverage program)
symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
symbols: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
-: 0:Source:foo.c
-: 0:Object:foo.bb

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{9.8.3}
\def\orgversionnumber{9.8.5}
\def\versionyear{2026} % latest update
\input emacsver.tex

View file

@ -74,6 +74,7 @@ char *w32_getenv (const char *);
#include <pwd.h>
#include <signal.h>
#include <stdarg.h>
#include <stdckdint.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
@ -146,8 +147,9 @@ static char const *socket_name;
/* If non-NULL, the filename of the authentication file. */
static char const *server_file;
/* Seconds to wait before timing out (0 means wait forever). */
static uintmax_t timeout;
/* Seconds to wait before timing out. Negative means no --timeout so
use DEFAULT_TIMEOUT, 0 means wait forever. */
static intmax_t timeout = -1;
/* If non-NULL, the tramp prefix emacs must use to find the files. */
static char const *tramp_prefix;
@ -539,10 +541,8 @@ decode_options (int argc, char **argv)
break;
case 'w':
timeout = strtoumax (optarg, &endptr, 10);
if (timeout <= 0 ||
((timeout == INTMAX_MAX || timeout == INTMAX_MIN)
&& errno == ERANGE))
timeout = strtoimax (optarg, &endptr, 10);
if (timeout < 0 || endptr == optarg || *endptr)
{
fprintf (stderr, "Invalid timeout: \"%s\"\n", optarg);
exit (EXIT_FAILURE);
@ -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
@ -1952,28 +1952,30 @@ start_daemon_and_retry_set_socket (void)
return emacs_socket;
}
/* Set SOCKET's timeout to SECONDS.
If SECONDS is zero or out of range, do not set the timeout.
Silently ignore errors, as POSIX says it is implementation-defined as
to whether SO_RCVTIMEO works. Although we could fall back on
non-blocking I/O if setsockopt fails, it's not worth the trouble. */
static void
set_socket_timeout (HSOCKET socket, int seconds)
set_socket_timeout (HSOCKET socket, intmax_t seconds)
{
int ret;
if (seconds <= 0)
return;
#ifndef WINDOWSNT
struct timeval timeout;
timeout.tv_sec = seconds;
if (ckd_add (&timeout.tv_sec, seconds, 0))
return;
timeout.tv_usec = 0;
ret = setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof timeout);
setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof timeout);
#else
DWORD timeout;
if (seconds > INT_MAX / 1000)
timeout = INT_MAX;
else
timeout = seconds * 1000;
ret = setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, (char *) &timeout, sizeof timeout);
if (ckd_mul (&timeout, seconds, 1000))
return;
setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO, (char *) &timeout, sizeof timeout);
#endif
if (ret < 0)
sock_err_message ("setsockopt");
}
static bool
@ -2210,7 +2212,7 @@ main (int argc, char **argv)
}
fflush (stdout);
set_socket_timeout (emacs_socket, timeout > 0 ? timeout : DEFAULT_TIMEOUT);
set_socket_timeout (emacs_socket, timeout < 0 ? DEFAULT_TIMEOUT : timeout);
bool saw_response = false;
ptrdiff_t nrecv = 0;
@ -2236,7 +2238,7 @@ main (int argc, char **argv)
if (timeout > 0)
{
/* Don't retry if we were given a --timeout flag. */
fprintf (stderr, "\nServer not responding; timed out after %ju seconds",
fprintf (stderr, "\nServer not responding; timed out after %jd seconds",
timeout);
retry = false;
}

View file

@ -267,7 +267,7 @@ If DATE is malformed, return a time value of zero."
;;;###autoload
(defun format-seconds (string seconds)
"Use format control STRING to format the number SECONDS.
"Use format control STRING to format the time value SECONDS.
The valid format specifiers are:
%y is the number of (365-day) years.
%d is the number of days.
@ -325,13 +325,14 @@ right of \"%x\", trailing zero units are not output."
(push match usedunits)))
(when (and zeroflag larger)
(error "Units are not in decreasing order of size"))
(unless (numberp seconds)
(setq seconds (float-time seconds)))
(setq minus (when (< seconds 0) "-") ; Treat -0.0 like 0.0.
seconds (abs seconds)
seconds (let ((s (floor seconds)))
(setq fraction (- seconds s))
s))
(unless seconds
(setq seconds (current-time)))
(let ((negative (time-less-p seconds 0)))
(setq minus (when negative "-") ; Treat -0.0 like 0.0.
seconds (if negative (time-subtract 0 seconds) seconds)
seconds (let ((s (time-convert seconds 'integer)))
(setq fraction (time-subtract seconds s))
s)))
(dolist (u units)
(setq spec (car u)
name (cadr u)
@ -352,9 +353,8 @@ right of \"%x\", trailing zero units are not output."
;; Cf article-make-date-line in gnus-art.
(setq num (floor seconds unit)
seconds (- seconds (* num unit)))
(let ((is-zero (zerop (if (= unit 1)
(+ num fraction)
num))))
(let ((is-zero (and (zerop num)
(or (/= unit 1) (time-equal-p 0 fraction)))))
;; Start position of the first non-zero unit.
(when (and (not leading-zeropos)
(not is-zero))
@ -379,7 +379,9 @@ right of \"%x\", trailing zero units are not output."
"f%s")
(concat "%" (match-string 1 string) "d%s"))
(if (= unit 1)
(+ num fraction)
;; 'float-time' rounds, then 'format' rounds.
;; Oh well.
(float-time (time-add num fraction))
num)
(if (string-equal (match-string 3 string) spec)
"" ; lower-case, no unit-name

View file

@ -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.")

View file

@ -1,4 +1,4 @@
;;; elisp-scope.el --- Semantic analysis for Elisp symbols -*- lexical-binding: t; -*-
;;; elisp-scope.el --- Semantic analysis for Emacs Lisp symbols -*- lexical-binding: t; -*-
;; Copyright (C) 2025-2026 Free Software Foundation, Inc.

View file

@ -1,4 +1,4 @@
;;; timeout.el --- Throttle or debounce Elisp functions -*- lexical-binding: t; -*-
;;; timeout.el --- Throttle or debounce Emacs Lisp functions -*- lexical-binding: t; -*-
;; Copyright (C) 2023-2026 Free Software Foundation, Inc.

View file

@ -49,10 +49,9 @@
(let ((time (timer--time timer)))
(format "%12s"
(format-seconds "%dd %hh %mm %z%,1ss"
(float-time
(if (timer--idle-delay timer)
time
(time-subtract time nil))))))
(if (timer--idle-delay timer)
time
(time-subtract time nil)))))
'help-echo "Time until next invocation")
;; Repeat.
,(let ((repeat (timer--repeat-delay timer)))

View file

@ -194,7 +194,7 @@ KEYS is a list of `epa-ks-key' structures, as parsed by
(if (epa-ks-key-expires key)
(let* ((date (epa-ks-key-expires key))
(str (format-time-string "%F" date)))
(when (< 0 (time-to-seconds (time-since date)))
(when (time-less-p date nil)
(setq str (propertize str 'face
'font-lock-warning-face)))
str)

View file

@ -399,16 +399,18 @@ This module is local to individual buffers."
(progn
(erc--restore-initialize-priors erc-keep-place-indicator-mode
erc--keep-place-indicator-overlay (make-overlay 0 0))
(when-let* (((memq erc-keep-place-indicator-style '(t arrow)))
(ov-property (if (zerop (fringe-columns 'left))
'after-string
'before-string))
(display (if (zerop (fringe-columns 'left))
`((margin left-margin) ,overlay-arrow-string)
'(left-fringe right-triangle
erc-keep-place-indicator-arrow)))
(bef (propertize " " 'display display)))
(overlay-put erc--keep-place-indicator-overlay ov-property bef))
(when (memq erc-keep-place-indicator-style '(t arrow))
(overlay-put
erc--keep-place-indicator-overlay
(if (zerop (fringe-columns 'left)) 'after-string 'before-string)
(propertize " " 'display
(if (zerop (fringe-columns 'left))
`((margin left-margin)
,(propertize overlay-arrow-string
'font-lock-face
'erc-keep-place-indicator-arrow))
'(left-fringe right-triangle
erc-keep-place-indicator-arrow)))))
(when (memq erc-keep-place-indicator-style '(t face))
(overlay-put erc--keep-place-indicator-overlay 'face
'erc-keep-place-indicator-line)))

View file

@ -478,7 +478,7 @@ and `erc-stamp--margin-left-p', before activating the mode."
(defun erc-stamp--display-prompt-in-left-margin ()
"Show prompt in the left margin with padding."
(when (or (not erc-stamp--last-prompt) (functionp erc-prompt)
(when (or (null erc-stamp--last-prompt) (functionp erc-prompt)
(> (string-width erc-stamp--last-prompt) left-margin-width))
(let ((s (buffer-substring erc-insert-marker (1- erc-input-marker))))
;; Prevent #("abc" n m (display ((...) #("abc" p q (display...))))
@ -489,7 +489,9 @@ and `erc-stamp--margin-left-p', before activating the mode."
;; This papers over a subtle off-by-1 bug here.
(unless (equal sm s)
(setq s (concat sm (substring s -1))))))
(setq erc-stamp--last-prompt (string-pad s left-margin-width nil t))))
(setq erc-stamp--last-prompt
(propertize (string-pad s left-margin-width nil t)
'font-lock-face 'erc-prompt-face))))
(put-text-property erc-insert-marker (1- erc-input-marker)
'display `((margin left-margin) ,erc-stamp--last-prompt))
erc-stamp--last-prompt)
@ -505,12 +507,15 @@ and `erc-stamp--margin-left-p', before activating the mode."
(&context (erc-stamp--display-margin-mode (eql t))
(erc-stamp--margin-left-p (eql t))
(erc-stamp--skip-left-margin-prompt-p null))
(when-let* (((null erc--hidden-prompt-overlay))
(prompt (string-pad erc-prompt-hidden left-margin-width nil 'start))
(ov (make-overlay erc-insert-marker (1- erc-input-marker)
nil 'front-advance)))
(overlay-put ov 'display `((margin left-margin) ,prompt))
(setq erc--hidden-prompt-overlay ov)))
(unless erc--hidden-prompt-overlay
(let ((ov (make-overlay erc-insert-marker (1- erc-input-marker)
nil 'front-advance)))
(overlay-put ov 'display
`((margin left-margin)
,(propertize (string-pad erc-prompt-hidden
left-margin-width nil 'start)
'font-lock-face 'erc-prompt-face)))
(setq erc--hidden-prompt-overlay ov))))
(defun erc-insert-timestamp-left (string)
"Insert timestamps at the beginning of the line."

View file

@ -257,10 +257,8 @@ If it is down, start it up (again)."
(goto-char (point-max))
(insert (format-time-string "%H:%M:%S")
(format " %.2fs %s %S\n"
(if (numberp gnus-backend-trace-elapsed)
(float-time
(time-since gnus-backend-trace-elapsed))
0)
(float-time
(time-since gnus-backend-trace-elapsed))
type form))
(setq gnus-backend-trace-elapsed (float-time)))))

View file

@ -2217,6 +2217,8 @@ see `message-narrow-to-headers-or-head'."
(beginning-of-line)
(while (looking-at "[ \t]")
(forward-line -1))
;; `syntax-propertize' can't widen so make sure it won't need to (bug#81035).
(syntax-propertize (point))
(narrow-to-region
(point)
(progn
@ -8659,6 +8661,9 @@ From headers in the original article."
(save-excursion
(goto-char end-of-headers)
(insert-before-markers header))))))))
;; `syntax-propertize' can't widen so make sure it won't need to
;; (bug#81035).
(syntax-propertize end-of-headers)
(narrow-to-region end-of-headers (point-max)))))
(defun message-hide-header-p (regexps)

View file

@ -157,7 +157,8 @@ coding system names is determined from `latex-inputenc-coding-alist'."
nil t)
(match-string 2)
(or (and (bound-and-true-p TeX-master)
(stringp TeX-master))
(stringp TeX-master)
TeX-master)
(bound-and-true-p tex-main-file)))))
(dolist (ext `("" ,(if (boundp 'TeX-default-extension)
(concat "." TeX-default-extension)

View file

@ -473,6 +473,7 @@ and send the mail again%s."
;; questions about From header validity if the user is going to
;; use mailclient, anyway.
(when (or (and (derived-mode-p 'message-mode)
(not message-server-alist)
(eq (message-default-send-mail-function) 'sendmail-query-once))
(and (not (derived-mode-p 'message-mode))
(eq send-mail-function 'sendmail-query-once)))

View file

@ -843,8 +843,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))

View file

@ -5005,11 +5005,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

View file

@ -539,6 +539,7 @@ Some context functions add menu items below the separator."
(cdr mode))))
menu)
(autoload 'send-to--resolve-handler "send-to")
(defun context-menu-send-to (menu _click)
"Add a \"Send to...\" context MENU entry on supported platforms."
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)

View file

@ -2570,6 +2570,9 @@ If stopped, start playback."
(t (mpc-proc-cmd "previous")))
(mpc-status-refresh)))
;; FIXME - mpc-last-seek-time and mpc--faster are no longer used;
;; remove them?
(defvar mpc-last-seek-time '(0 . 0))
(defun mpc--faster (event speedup step)

View file

@ -317,7 +317,8 @@ Defaults to the value of `browse-url-mozilla-arguments' at the time
"zen")
"firefox")
"The name by which to invoke Firefox or a variant of it."
:type 'string)
:type 'string
:version "31.1")
(defcustom browse-url-firefox-arguments nil
"A list of strings to pass to Firefox (or variant) as arguments."
@ -1214,8 +1215,9 @@ used instead of `browse-url-new-window-flag'."
;;;###autoload
(defun browse-url-firefox (url &optional new-window)
"Ask the Firefox WWW browser to load URL.
Defaults to the URL around or before point. Passes the strings
in the variable `browse-url-firefox-arguments' to Firefox.
Defaults to the URL around or before point. Invokes the program
specified by `browse-url-firefox-program'. Passes the strings
in the variable `browse-url-firefox-arguments' to that program.
Interactively, if the variable `browse-url-new-window-flag' is non-nil,
loads the document in a new Firefox window. A non-nil prefix argument
@ -1246,9 +1248,9 @@ instead of `browse-url-new-window-flag'."
;;;###autoload
(defun browse-url-chromium (url &optional _new-window)
"Ask the Chromium WWW browser to load URL.
Default to the URL around or before point. The strings in
variable `browse-url-chromium-arguments' are also passed to
Chromium.
Default to the URL around or before point. Invokes the program
specified by `browse-url-chromium-program'. Passes the strings in
variable `browse-url-chromium-arguments' to that program.
The optional argument NEW-WINDOW is not used."
(interactive (browse-url-interactive-arg "URL: "))
(setq url (browse-url-encode-url url))
@ -1264,9 +1266,9 @@ The optional argument NEW-WINDOW is not used."
(defun browse-url-chrome (url &optional _new-window)
"Ask the Google Chrome WWW browser to load URL.
Default to the URL around or before point. The strings in
variable `browse-url-chrome-arguments' are also passed to
Google Chrome.
Default to the URL around or before point. Invokes the program
specified by `browse-url-chrome-program'. Passes to that program
the strings in variable `browse-url-chrome-arguments'.
The optional argument NEW-WINDOW is not used."
(interactive (browse-url-interactive-arg "URL: "))
(setq url (browse-url-encode-url url))
@ -1282,8 +1284,9 @@ The optional argument NEW-WINDOW is not used."
(defun browse-url-epiphany (url &optional new-window)
"Ask the GNOME Web (Epiphany) WWW browser to load URL.
Default to the URL around or before point. The strings in variable
`browse-url-epiphany-arguments' are also passed to GNOME Web.
Default to the URL around or before point. Invokes the program
specified by `browse-url-epiphany-program'. Passes the strings
in variable `browse-url-epiphany-arguments' to that program.
When called interactively, if variable `browse-url-new-window-flag' is
non-nil, load the document in a new GNOME Web window, otherwise use a
@ -1353,7 +1356,9 @@ used instead of `browse-url-new-window-flag'."
(defun browse-url-qutebrowser (url &optional new-window)
"Ask the Qutebrowser WWW browser to load URL.
Default to the URL around or before point.
Default to the URL around or before point. Invokes the program
specified by `browse-url-qutebrowser-program'. Passes the strings
in the variable `browse-url-qutebrowser-arguments' to that program.
When called interactively, if variable `browse-url-new-window-flag' is
non-nil, load the document in a new Qutebrowser window, otherwise use a

View file

@ -445,8 +445,17 @@ object path SERVICE is registered at. INTERFACE is an interface
offered by SERVICE. It must provide METHOD.
HANDLER is a Lisp function, which is called when the corresponding
return message has arrived. If HANDLER is nil, no return message
will be expected.
return message has arrived. It uses the returned values from the METHOD
call as arguments. These are the same arguments which are returned when
`dbus-call-method' is invoked instead. If HANDLER is nil, no return
message will be expected.
HANDLER can also be the cons cell `(HANDLER . ERROR-HANDLER)'. In this
case, ERROR-HANDLER will be called in case an error is returned from
D-Bus. It uses the returned D-Bus error as argument.
Neither the return value of HANDLER nor the return value of
ERROR-HANDLER is used.
If the parameter `:timeout' is given, the following integer
TIMEOUT specifies the maximum number of milliseconds before the
@ -477,18 +486,37 @@ about type keywords, see Info node `(dbus)Type Conversion'.
If HANDLER is a Lisp function, the function returns a key into the
hash table `dbus-registered-objects-table'. The corresponding entry
in the hash table is removed, when the return message arrives,
and HANDLER is called.
and HANDLER is called. Examples:
Example:
The return value of \"org.freedesktop.portal.Settings.ReadOne\" is a variant.
\(dbus-call-method-asynchronously
:system \"org.freedesktop.Hal\" \"/org/freedesktop/Hal/devices/computer\"
\"org.freedesktop.Hal.Device\" \"GetPropertyString\" #\\='message
\"system.kernel.machine\")
:session \"org.freedesktop.portal.Desktop\"
\"/org/freedesktop/portal/desktop\"
\"org.freedesktop.portal.Settings\" \"ReadOne\"
\\='((lambda (msg) (message \"Method handler %s\" msg)) .
(lambda (err) (message \"Error handler %s\" err)))
\"org.freedesktop.appearance\" \"color-scheme\")
-| i686
-| Method handler (0)
=> (:serial :system 2)"
=> (:serial :session 4)
There does not exist a method \"org.freedesktop.portal.Settings.ReadTwo\".
\(dbus-call-method-asynchronously
:session \"org.freedesktop.portal.Desktop\"
\"/org/freedesktop/portal/desktop\"
\"org.freedesktop.portal.Settings\" \"ReadTwo\"
\\='((lambda (msg) (message \"Method handler %s\" msg)) .
(lambda (err) (message \"Error handler %s\" err)))
\"org.freedesktop.appearance\" \"color-scheme\")
-| Error handler
(dbus-error org.freedesktop.DBus.Error.UnknownMethod
No such method \"ReadTwo\")
=> (:serial :session 5)"
(or (featurep 'dbusbind)
(signal 'dbus-error (list "Emacs not compiled with dbus support")))
@ -504,6 +532,7 @@ Example:
(or (stringp method)
(signal 'wrong-type-argument (list 'stringp method)))
(or (null handler) (functionp handler)
(and (listp handler) (functionp (car handler)) (functionp (cdr handler)))
(signal 'wrong-type-argument (list 'functionp handler)))
(apply #'dbus-message-internal dbus-message-type-method-call
@ -1111,9 +1140,11 @@ INTERFACE and MEMBER denote the message which has been sent.
When TYPE is `dbus-message-type-error', MEMBER is the error name.
HANDLER is the function which has been registered for this
message. ARGS are the typed arguments as returned from the
message. They are passed to HANDLER without type information,
when it is called during event handling in `dbus-handle-event'.
message. It can also be a cons cell (HANDLER . ERROR-HANDLER).
ARGS are the typed arguments as returned from the message. They are
passed to HANDLER without type information, when it is called during
event handling in `dbus-handle-event'.
This function signals a `dbus-error' if the event is not well
formed."
@ -1150,7 +1181,10 @@ formed."
(or (= dbus-message-type-method-return (nth 2 event))
(stringp (nth 8 event)))
;; Handler.
(functionp (nth 9 event))
(or (functionp (nth 9 event))
(and (consp (nth 9 event))
(functionp (car (nth 9 event)))
(functionp (cdr (nth 9 event)))))
;; Arguments.
(listp (nthcdr 10 event)))
(signal 'dbus-error (list "Not a valid D-Bus event" event))))
@ -1207,10 +1241,17 @@ If the HANDLER returns a `dbus-error', it is propagated as return message."
(setq result (dbus-ignore-errors (apply (nth 9 event) args)))
;; Error messages must be propagated. The error name is in
;; the member slot.
(when (= dbus-message-type-error (nth 2 event))
(signal 'dbus-error (cons (nth 8 event) args)))
;; Apply the handler.
(setq result (apply (nth 9 event) args))
(let* ((handler (nth 9 event))
(error-handler (if (functionp handler) #'signal
(prog1 (cdr handler)
(setq handler (car handler))))))
(setq result
(if (= dbus-message-type-error (nth 2 event))
(funcall
error-handler
(cons 'dbus-error (cons (nth 8 event) args)))
;; Apply the handler.
(apply handler args))))
;; Return an (error) message when it is a message call.
(when (= dbus-message-type-method-call (nth 2 event))
(dbus-ignore-errors

View file

@ -1771,7 +1771,10 @@ just re-display the HTML already fetched."
(put-text-property start (point) 'keymap eww-submit-map)
;; Pretend to touch-screen.el that this is a button.
(put-text-property start (point) 'button t)
(insert " ")))
(insert " ")
(put-text-property start (1+ start) 'help-echo "Button")
;; Mark this as an element we can TAB to.
(put-text-property start (1+ start) 'shr-tab-stop t)))
(defun eww-form-checkbox (dom)
(let ((start (point)))
@ -1991,7 +1994,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
:value (or (dom-attr dom 'value) "")))))))
(t
(eww-form-text dom)))
(unless (= start (point))
(unless (or (= start (point))
(equal type "submit"))
(put-text-property start (1+ start) 'help-echo "Input field")
;; Mark this as an element we can TAB to.
(put-text-property start (1+ start) 'shr-tab-stop t))))

View file

@ -3081,7 +3081,7 @@ will be used."
;; We discard hops, if existing, that's why we cannot use
;; `file-remote-p'.
(prompt (format "PS1=%s %s"
(tramp-make-tramp-file-name v)
(tramp-make-tramp-file-name v 'noloc)
tramp-initial-end-of-output))
;; We use as environment the difference to toplevel
;; `process-environment'.

View file

@ -801,19 +801,23 @@ The regexp should match at end of buffer."
(? "/[fingerprint]") ")?"
(* blank))
"Regular expression matching all yes/no queries which need to be confirmed.
The confirmation should be done with yes or no.
The confirmation should be done with \"yes\" or \"no\".
The regexp should match at end of buffer.
See also `tramp-yn-prompt-regexp'."
:type 'regexp)
(defcustom tramp-yn-prompt-regexp
(rx (| (: "Store key in cache? (y/n" (* nonl) ")")
"Update cached key? (y/n, Return cancels connection)")
"Update cached key? (y/n, Return cancels connection)"
;; distrobox.
(: "Error: no such container \"" (+ nonl) "\"\n"
"Create it now, out of image " (+ nonl) "? [Y/n]:"))
(* blank))
"Regular expression matching all y/n queries which need to be confirmed.
The confirmation should be done with y or n.
The confirmation should be done with \"y\" or \"n\".
The regexp should match at end of buffer.
See also `tramp-yesno-prompt-regexp'."
:version "31.1"
:type 'regexp)
;;;###tramp-autoload
@ -5474,7 +5478,9 @@ 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."
(member arg (default-toplevel-value 'process-environment)))
(or (ignore-error void-variable
(member arg (buffer-local-toplevel-value 'process-environment)))
(member arg (default-toplevel-value 'process-environment))))
(defun tramp-handle-make-process (&rest args)
"An alternative `make-process' implementation for Tramp files."

View file

@ -7,7 +7,7 @@
;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
;; Keywords: comm, processes
;; Package: tramp
;; Version: 2.8.2-pre
;; Version: 2.8.2
;; Package-Requires: ((emacs "28.1"))
;; Package-Type: multi
;; URL: https://www.gnu.org/software/tramp/
@ -40,7 +40,7 @@
;; ./configure" to change them.
;;;###tramp-autoload
(defconst tramp-version "2.8.2-pre"
(defconst tramp-version "2.8.2"
"This version of Tramp.")
;;;###tramp-autoload
@ -76,7 +76,7 @@
;; Check for Emacs version.
(let ((x (if (not (string-version-lessp emacs-version "28.1"))
"ok"
(format "Tramp 2.8.2-pre is not fit for %s"
(format "Tramp 2.8.2 is not fit for %s"
(replace-regexp-in-string "\n" "" (emacs-version))))))
(unless (string-equal "ok" x) (error "%s" x)))
@ -109,7 +109,8 @@
("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2") ("2.5.4" . "28.3")
("2.6.0.29.1" . "29.1") ("2.6.2.29.2" . "29.2") ("2.6.3-pre" . "29.3")
("2.6.3" . "29.4")
("2.7.1.30.1" . "30.1") ("2.7.3.30.2" . "30.2")))
("2.7.1.30.1" . "30.1") ("2.7.3.30.2" . "30.2")
("2.8.2" . "31.1")))
(add-hook 'tramp-unload-hook
(lambda ()

View file

@ -7875,7 +7875,7 @@ in the agenda."
"Rebuild possibly ALL agenda view(s) in the current buffer."
(interactive "P")
(defvar org-agenda-tag-filter-while-redo) ;FIXME: Where is this var used?
(let* ((p (or (and (looking-at "\\'") (1- (point))) (point)))
(let* ((p (or (and (/= 1 (point)) (looking-at "\\'") (1- (point))) (point)))
(cpa (unless (eq all t) current-prefix-arg))
(org-agenda-doing-sticky-redo org-agenda-sticky)
(org-agenda-sticky nil)

View file

@ -1207,9 +1207,9 @@ to be CLOCKED OUT."))))
(read-number "Keep how many minutes: " default))
(and (memq ch '(?t ?T))
(floor
(/ (float-time
(time-subtract (org-read-date t t) last-valid))
60)))))
(float-time
(time-subtract (org-read-date t t) last-valid))
60))))
(gotback
(and (memq ch '(?g ?G))
(read-number "Got back how many minutes ago: " default)))
@ -1991,13 +1991,15 @@ Optional argument N tells to change by that many units."
(user-error "No active clock"))
(save-excursion ; Do not replace this with `with-current-buffer'.
(with-no-warnings (set-buffer (org-clocking-buffer)))
(goto-char org-clock-marker)
(if (looking-back (concat "^[ \t]*" org-clock-string ".*")
(line-beginning-position))
(progn (delete-region (1- (line-beginning-position)) (line-end-position))
(org-remove-empty-drawer-at (point)))
(message "Clock gone, cancel the timer anyway")
(sit-for 2)))
(save-restriction
(widen)
(goto-char org-clock-marker)
(if (looking-back (concat "^[ \t]*" org-clock-string ".*")
(line-beginning-position))
(progn (delete-region (1- (line-beginning-position)) (line-end-position))
(org-remove-empty-drawer-at (point)))
(message "Clock gone, cancel the timer anyway")
(sit-for 2))))
(move-marker org-clock-marker nil)
(move-marker org-clock-hd-marker nil)
(setq org-clock-current-task nil)

View file

@ -3,6 +3,7 @@
;; Copyright (C) 2004-2026 Free Software Foundation, Inc.
;; Author: Carsten Dominik <carsten.dominik@gmail.com>
;; Maintainer: Slawomir Grochowski <slawomir.grochowski@gmail.com>
;; Keywords: outlines, hypermedia, calendar, text
;; URL: https://orgmode.org
;;

View file

@ -2953,6 +2953,8 @@ known that the table will be realigned a little later anyway."
(log-first-time (current-time))
(log-last-time log-first-time)
(cnt 0)
(table-beg org-table-current-begin-pos)
(table-end (org-table-end))
beg end eqlcol eqlfield)
;; Insert constants in all formulas.
(when eqlist
@ -2989,8 +2991,8 @@ existing formula for column %s"
;; Get the correct line range to process.
(if all
(progn
(setq end (copy-marker (org-table-end)))
(goto-char (setq beg org-table-current-begin-pos))
(setq end (copy-marker table-end))
(goto-char (setq beg table-beg))
(cond
((re-search-forward org-table-calculate-mark-regexp end t)
;; This is a table with marked lines, compute selected
@ -3005,7 +3007,7 @@ existing formula for column %s"
(t nil)))
(setq beg (line-beginning-position)
end (copy-marker (line-beginning-position 2))))
(org-combine-change-calls beg end
(org-combine-change-calls table-beg table-end
(goto-char beg)
;; Mark named fields untouchable. Also check if several
;; field/range formulas try to set the same field.

View file

@ -388,10 +388,7 @@ VALUE can be `on', `off', or `paused'."
"No timer set"
(format-seconds
"%m minute(s) %s seconds left before next time out"
;; Note: Once our minimal require is Emacs 27, we can drop this
;; org-time-convert-to-integer call.
(org-time-convert-to-integer
(time-subtract (timer--time org-timer-countdown-timer) nil))))))
(time-subtract (timer--time org-timer-countdown-timer) nil)))))
;;;###autoload
(defun org-timer-set-timer (&optional opt)
@ -436,7 +433,7 @@ using three \\[universal-argument] prefix arguments."
(and (not (equal opt '(64)))
effort-minutes
(number-to-string effort-minutes))
(and (consp opt) default-timer)
(and (consp opt) (not (equal opt '(64))) default-timer)
(and (stringp opt) opt)
(read-from-minibuffer
"How much time left? (minutes or h:mm:ss) "

View file

@ -5,13 +5,13 @@
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
(let ((org-release "9.8.3"))
(let ((org-release "9.8.5"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
(let ((org-git-version "release_9.8.3"))
(let ((org-git-version "release_9.8.5"))
org-git-version))
(provide 'org-version)

View file

@ -9,7 +9,7 @@
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "28.2"))
;; Version: 9.8.3
;; Version: 9.8.5
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,6 @@
;; Alan Schmitt <alan.schmitt AT polytechnique DOT org>
;; Viktor Rosenfeld <listuser36 AT gmail DOT com>
;; Rasmus Pank Roulund <emacs AT pank DOT eu>
;; Maintainer: Marco Wahl <marcowahlsoft@gmail.com>
;; Keywords: org, text, tex
;; This file is part of GNU Emacs.

View file

@ -3,7 +3,7 @@
;; Copyright (C) 2011-2026 Free Software Foundation, Inc.
;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
;; Maintainer: Daniel Fleischer <danflscr@gmail.com>
;; Maintainer: Pedro A. Aranda<paaguti aT gmail DoT com>
;; Keywords: outlines, hypermedia, calendar, text
;; This file is part of GNU Emacs.

View file

@ -2869,7 +2869,7 @@ Style is a symbol among `quoted', `centered' and nil."
(org-element-lineage
paragraph
'(center-block quote-block section)))
(center-block 'center)
(center-block 'centered)
(quote-block 'quoted)))
(defun org-odt--format-paragraph (paragraph contents info default center quote)

View file

@ -7137,7 +7137,7 @@ appropriate for `tabulated-list-print'."
;; Age.
(let ((info (nth 2 entry)))
(if (processp info) (symbol-name (process-status info))
(format-seconds "%h:%.2m" (float-time (time-since info)))))
(format-seconds "%h:%.2m" (time-since info))))
;; Source.
(if (stringp source) source (buffer-name source))))))
org-export-stack-contents)))

View file

@ -272,9 +272,14 @@ It is the default value of `show-paren-data-function'."
(save-restriction
;; Determine the range within which to look for a match.
(when blink-matching-paren-distance
(narrow-to-region
(max (point-min) (- (point) blink-matching-paren-distance))
(min (point-max) (+ (point) blink-matching-paren-distance))))
(let ((beg (max (point-min)
(- (point) blink-matching-paren-distance))))
;; `syntax-propertize' can't widen so make sure it won't
;; need to (bug#81035).
(syntax-propertize beg)
(narrow-to-region
beg
(min (point-max) (+ (point) blink-matching-paren-distance)))))
;; Scan across one sexp within that range.
;; Errors or nil mean there is a mismatch.
(condition-case ()

View file

@ -1606,7 +1606,7 @@ Hack on previous word, setting global variable DOCTOR-OWNER to correct result."
(setq doctor--suicide-flag t)
(doctor-type '( If you are really suicidal\, you might
want to contact the Samaritans via
e-mail: jo@samaritans.org \.
https://www.samaritans.org/how-we-can-help/contact-samaritan/ \.
or find a Befrienders crisis center at
https://www.befrienders.org/\ \.
you can also find other suicide crisis lines at

View file

@ -478,7 +478,7 @@ perform a match."
(when match
(setq plist (cdr entry))
(while plist
(if (string-match "\\`:secret-" (symbol-name (car plist)))
(if (plstore--has-secret-keys plist)
(setq decrypt t
plist nil))
(setq plist (nthcdr 2 plist)))
@ -503,7 +503,7 @@ Return nil if there is none."
plist)
(setq plist (cdr entry))
(while plist
(if (string-match "\\`:secret-" (symbol-name (car plist)))
(if (plstore--has-secret-keys plist)
(progn
(plstore--decrypt plstore)
(setq entry (assoc name (plstore--get-merged-alist plstore))
@ -550,23 +550,36 @@ SECRET-KEYS is a plist containing secret data."
(cons (cons name secret-plist) (plstore--get-secret-alist plstore)))))
(plstore--merge-secret plstore)))
(defun plstore--has-secret-keys (plist)
"Return t if PLIST of a plstore entry has secret keys."
(string-match-p "\\`:secret-" (symbol-name (car plist))))
(defun plstore-delete (plstore name)
"Delete the first entry named NAME from PLSTORE."
(let ((entry (assoc name (plstore--get-alist plstore))))
(if entry
(plstore--set-alist
plstore
(delq entry (plstore--get-alist plstore))))
(setq entry (assoc name (plstore--get-secret-alist plstore)))
(if entry
(plstore--set-secret-alist
plstore
(delq entry (plstore--get-secret-alist plstore))))
(setq entry (assoc name (plstore--get-merged-alist plstore)))
(if entry
(plstore--set-merged-alist
plstore
(delq entry (plstore--get-merged-alist plstore))))))
(when-let* ((entry (assoc name (plstore--get-alist plstore)))
(plist (cdr entry)))
(when (plstore--has-secret-keys plist)
(plstore--decrypt plstore)
(setq entry (assoc name (plstore--get-alist plstore))))
(plstore--set-alist
plstore
(delq entry (plstore--get-alist plstore))))
(when-let* ((entry (assoc name (plstore--get-secret-alist plstore)))
(plist (cdr entry)))
(when (plstore--has-secret-keys plist)
(plstore--decrypt plstore)
(setq entry (assoc name (plstore--get-secret-alist plstore))))
(plstore--set-secret-alist
plstore
(delq entry (plstore--get-secret-alist plstore))))
(when-let* ((entry (assoc name (plstore--get-merged-alist plstore)))
(plist (cdr entry)))
(when (plstore--has-secret-keys plist)
(plstore--decrypt plstore)
(setq entry (assoc name (plstore--get-merged-alist plstore))))
(plstore--set-merged-alist
plstore
(delq entry (plstore--get-merged-alist plstore)))))
(defvar pp-escape-newlines)
(defun plstore--insert-buffer (plstore)
@ -650,7 +663,7 @@ GnuPG key, silently save with symmetric encryption." ; (FIXME)
(let ((merged-plist (cdr (assoc (car entry) merged-alist)))
(plist (cdr entry)))
(while plist
(if (string-match "\\`:secret-" (symbol-name (car plist)))
(if (plstore--has-secret-keys plist)
(setcar (cdr plist)
(plist-get
merged-plist
@ -678,7 +691,7 @@ some plstore."
(error "Invalid plstore format %s" string))
(setq plist (cdr (car pointer)))
(while plist
(when (string-match "\\`:secret-" (symbol-name (car plist)))
(when (plstore--has-secret-keys plist)
(setq entry (assoc (car (car pointer)) secret-alist))
(unless entry
(setq entry (list (car (car pointer)))

View file

@ -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.

View file

@ -11687,34 +11687,37 @@ This function might do hidden buffer changes."
(forward-char)
(c-forward-syntactic-ws)
(setq cast-end (point))
(and (looking-at c-primary-expr-regexp)
(progn
(setq pos (match-end 0))
(or
;; Check if the expression begins with a prefix keyword.
(match-beginning 2)
(if (match-beginning 1)
;; Expression begins with an ambiguous operator.
(cond
((match-beginning c-per-&*+--match)
(memq at-type '(t known found)))
((match-beginning c-per-++---match)
t)
((match-beginning c-per-\(-match)
(or
(memq at-type '(t known found))
(not inside-macro)))
(t nil))
;; Unless it's a keyword, it's the beginning of a primary
;; expression.
(not (looking-at c-keywords-regexp)))))
;; If `c-primary-expr-regexp' matched a nonsymbol token, check
;; that it matched a whole one so that we don't e.g. confuse
;; the operator '-' with '->'. It's ok if it matches further,
;; though, since it e.g. can match the float '.5' while the
;; operator regexp only matches '.'.
(or (not (looking-at c-nonsymbol-token-regexp))
(<= (match-end 0) pos))))
(or
(and (looking-at c-primary-expr-regexp)
(progn
(setq pos (match-end 0))
(or
;; Check if the expression begins with a prefix keyword.
(match-beginning 2)
(if (match-beginning 1)
;; Expression begins with an ambiguous operator.
(cond
((match-beginning c-per-&*+--match)
(memq at-type '(t known found)))
((match-beginning c-per-++---match)
t)
((match-beginning c-per-\(-match)
(or
(memq at-type '(t known found))
(not inside-macro)))
(t nil))
;; Unless it's a keyword, it's the beginning of a primary
;; expression.
(not (looking-at c-keywords-regexp)))))
;; If `c-primary-expr-regexp' matched a nonsymbol token,
;; check that it matched a whole one so that we don't
;; e.g. confuse the operator '-' with '->'. It's ok if it
;; matches further, though, since it e.g. can match the float
;; '.5' while the operator regexp only matches '.'.
(or (not (looking-at c-nonsymbol-token-regexp))
(<= (match-end 0) pos)))
(and (eq (char-after) ?\{)
(not (eq (c-looking-at-statement-block-1) t)))))
;; There should either be a cast before it or something that isn't an
;; identifier or close paren.

View file

@ -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.

View file

@ -229,6 +229,19 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
(aix
" in line \\([0-9]+\\) of file \\([^ \n]+[^. \n]\\)\\.? " 2 1)
(ansible-fatal
"^fatal: .*: FAILED!" nil nil nil 2 0 (0 compilation-error-face))
(ansible-error
"^\\[ERROR\\]:"
nil nil nil 2 0 (0 compilation-error-face))
(ansible-warning
"^\\[\\(?:DEPRECATION \\)?WARNING\\]:"
nil nil nil 1 0 (0 compilation-warning-face))
(ansible-included "^included: \\([^[:space:]]+\\)" 1 nil nil 0 1)
(ansible-origin
"^Origin: \\([^[:space:]]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)"
1 2 3 0 1)
;; Checkstyle task may report its own severity level: "[checkstyle] [ERROR] ..."
;; (see AuditEventDefaultFormatter.java in checkstyle sources).
(ant
@ -421,6 +434,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 +609,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://\\(.+\\)"

View file

@ -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.

View file

@ -149,6 +149,8 @@
'eglot-managed-mode-hook "1.6")
(define-obsolete-variable-alias 'eglot-confirm-server-initiated-edits
'eglot-confirm-server-edits "1.16")
(define-obsolete-variable-alias 'eglot-prefer-plaintext
'eglot-documentation-renderer "1.24")
(make-obsolete-variable 'eglot-events-buffer-size
'eglot-events-buffer-config "1.16")
(define-obsolete-function-alias 'eglot--uri-to-path #'eglot-uri-to-path "1.16")
@ -535,10 +537,16 @@ or file operation kinds not in the alist."
"If non-nil, activate Eglot in cross-referenced non-project files."
:type 'boolean)
(defcustom eglot-prefer-plaintext nil
"If non-nil, always request plaintext responses to hover requests."
:type 'boolean
:package-version '(Eglot . "1.17.30"))
(defcustom eglot-documentation-renderer nil
"Controls rendering of LSP documentation fragments.
If set to a major mode symbol like `gfm-view-mode', or the experimental
`markdown-ts-view-mode', request markdown snippets and use that mode to
render them. If t, request and render plain text instead. If nil,
request markdown snippets and select a renderer dynamically."
:type '(choice (const :tag "Plain text" t)
(const :tag "Auto-detect" nil)
(function :tag "Renderer"))
:package-version '(Eglot . "1.24"))
(defcustom eglot-report-progress t
"If non-nil, show progress of long running LSP server work.
@ -727,16 +735,11 @@ This can be useful when using docker to run a language server.")
(declare-function treesit-grammar-location "treesit.c")
(defun eglot--builtin-mdown-p ()
(and (fboundp 'markdown-ts-view-mode)
(fboundp 'treesit-grammar-location)
(treesit-grammar-location 'markdown)))
(defun eglot--accepted-formats ()
(if (and (not eglot-prefer-plaintext)
(or (fboundp 'gfm-view-mode) (eglot--builtin-mdown-p)))
["markdown" "plaintext"]
["plaintext"]))
(if (or (eq t eglot-documentation-renderer)
(not (or eglot-documentation-renderer (fboundp 'gfm-view-mode))))
["plaintext"]
["markdown" "plaintext"]))
(defconst eglot--uri-path-allowed-chars
(let ((vec (copy-sequence url-path-allowed-chars)))
@ -2263,12 +2266,13 @@ If MODE, force MODE to be used for fontifying MARKUP."
finally return (buffer-string)))
(calc2 (forced-mode)
(cond
(forced-mode `(,forced-mode))
((eglot--builtin-mdown-p) `(,#'markdown-ts-view-mode))
((fboundp 'gfm-view-mode) `(,#'gfm-view-mode ,#'gfm-extract))
(t `(#'text-mode))))
(forced-mode forced-mode)
((fboundp eglot-documentation-renderer) eglot-documentation-renderer)
((fboundp 'gfm-view-mode) #'gfm-view-mode)
(t #'text-mode)))
(calc (s &optional (forced-mode mode) &aux (x (calc2 forced-mode)))
(setq string s render (car x) extract (or (cadr x) #'buffer-string))))
(setq string s render x
extract (if (eq x 'gfm-view-mode) #'gfm-extract #'buffer-string))))
(cond ((stringp markup) (calc markup)) ; plain string
((setq lang (plist-get markup :language)) ; deprecated MarkedString
(calc (format "```%s\n%s\n```" lang (plist-get markup :value))))

View file

@ -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)

View file

@ -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.

View file

@ -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")

View file

@ -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)

View file

@ -4041,7 +4041,9 @@ See `treesit-thing-settings' for more information.")
\\<js-ts-mode-map>"
: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

View file

@ -1,4 +1,4 @@
;;; lua-mode.el --- Major-mode for editing Lua files -*- lexical-binding: t -*-
;;; lua-mode.el --- Major mode for editing Lua files -*- lexical-binding: t -*-
;; Copyright (C) 2025-2026 Free Software Foundation, Inc.

View file

@ -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.

View file

@ -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)

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -1,4 +1,4 @@
;;; ring-bell-fns.el --- Collection of functions for ring-bell -*- lexical-binding: t; -*-
;;; ring-bell-fns.el --- Collection of functions for ring-bell-function -*- lexical-binding: t; -*-
;; Copyright (C) 2025-2026 Free Software Foundation, Inc.

View file

@ -152,6 +152,7 @@ explicitly overridden."
(forward-line 1))))
filenames)))
;;;###autoload
(defun send-to--resolve-handler ()
"Return first supported handler from `send-to-handlers'."
(seq-find (lambda (handler)
@ -221,7 +222,7 @@ From any other buffer, either of these two, in order of preference:
(region-beginning)
(region-end))))
((thing-at-point 'existing-filename)
(thing-at-point 'existing-filename))
(list (thing-at-point 'existing-filename)))
((buffer-file-name)
(list (buffer-file-name)))))

View file

@ -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)

View file

@ -7125,8 +7125,7 @@ REPORTER is the result of a call to `make-progress-reporter'.
STATE can be one of:
- A float representing the percentage complete in the range 0.0-1.0
for a numeric reporter.
- An integer representing the index which cycles through the range 0-3
for a pulsing reporter.
- A monotonically increasing integer for a pulsing reporter.
- The symbol `done' to indicate that the progress reporter is complete.")
(defsubst progress-reporter-update (reporter &optional value suffix)
@ -7141,7 +7140,7 @@ MIN-VALUE and MAX-VALUE.
Optional argument SUFFIX is a string to be displayed after REPORTER's
main message and progress text. If REPORTER is a non-numerical
reporter, then VALUE should be nil, or a string to use instead of
SUFFIX. SUFFIX is considered obsolete and may be removed in the future.
SUFFIX.
See `progress-reporter-update-functions' for the list of functions
called on each update.
@ -7252,8 +7251,9 @@ area is busy with something else."
(message "%s" text)))
((pred integerp)
(let ((message-log-max nil)
(pulse-char (aref progress-reporter--pulse-characters
state)))
(pulse-char
(aref progress-reporter--pulse-characters
(mod state (length progress-reporter--pulse-characters)))))
(message "%s %s" text pulse-char)))
('done
(message "%sdone" text))))))
@ -7305,7 +7305,7 @@ area is busy with something else."
(if suffix
(aset parameters 6 suffix)
(setq suffix (or (aref parameters 6) "")))
(let ((index (mod (1+ (car reporter)) 4)))
(let ((index (1+ (car reporter))))
(setcar reporter index)
(run-hook-with-args 'progress-reporter-update-functions
reporter

View file

@ -282,7 +282,9 @@ REPORTER and STATE are the same as in
((pred floatp)
(system-taskbar--progress state))
((pred integerp)
(system-taskbar--progress (/ (1+ state) 4.0)))
;; This won't show 0.0 to indicate work in process until done.
(system-taskbar--progress
(/ (1+ (mod state 5)) 5.0)))
('done
(system-taskbar--progress nil)))))

View file

@ -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)

View file

@ -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

View file

@ -1404,8 +1404,16 @@ If NODE is not in a list, return -1."
"Fontify unordered list marker NODE, show a symbol when markup is hidden.
OVERRIDE, START, and END are passed through to
`treesit-fontify-with-override'."
(let* ((node-start (treesit-node-start node))
;; The tree-sitter markdown grammar includes the leading indentation
;; in the first list_marker_minus/plus/star node of a list, so skip
;; over any leading whitespace to avoid overwriting the indent with
;; the replacement glyph.
(let* ((raw-start (treesit-node-start node))
(node-end (treesit-node-end node))
(node-start (save-excursion
(goto-char raw-start)
(skip-chars-forward " \t" node-end)
(point)))
(face 'markdown-ts-list-marker))
(treesit-fontify-with-override node-start node-end face
override start end)

View file

@ -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))

View file

@ -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,43 @@ 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))
the current TeX document."
:lighter "/I"
:global t
:group 'reftex
(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))))
(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)))))
(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)))))
(remove-hook 'reftex-mode-hook #'reftex-isearch-minor-mode)))
(add-minor-mode 'reftex-isearch-minor-mode "/I" nil nil
'reftex-isearch-minor-mode)
;;; reftex-global.el ends here

View file

@ -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"

View file

@ -89,6 +89,7 @@ The command `tex-file' runs TeX on the file specified by `tex-main-file'
if the variable is non-nil."
:type '(choice (const :tag "None" nil)
file)
:safe (lambda (x) (or (stringp x) (null x)))
:group 'tex-file)
;;;###autoload

View file

@ -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

View file

@ -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.

View file

@ -708,9 +708,7 @@ point."
(interactive "i\nP")
(let ((str
(format-seconds (or format "%Y, %D, %H, %M, %z%S")
(time-convert
(time-since before-init-time)
'integer))))
(time-since before-init-time))))
(if here
(insert str)
(if (called-interactively-p 'interactive)

View file

@ -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)))

Some files were not shown because too many files have changed in this diff Show more