Merge remote-tracking branch 'origin/master' into feature/android

This commit is contained in:
Po Lu 2023-02-21 21:08:16 +08:00
commit a892c0487a
44 changed files with 918 additions and 264 deletions

View file

@ -1,3 +1,431 @@
2022-02-18 Stefan Kangas <stefankangas@gmail.com>
* Version 28.3 released.
2023-02-17 Stefan Kangas <stefankangas@gmail.com>
Update HISTORY for Emacs 28.3
2023-02-17 Stefan Kangas <stefankangas@gmail.com>
Bump Emacs version to 28.3
* README:
* configure.ac:
* msdos/sed2v2.inp:
* nt/README.W32: Bump Emacs version to 28.3.
2023-02-17 Stefan Kangas <stefankangas@gmail.com>
Update NEWS for Emacs 28.3
* etc/NEWS: Update for Emacs 28.3.
2023-02-17 Stefan Kangas <stefankangas@gmail.com>
Update ChangeLog and AUTHORS for Emacs 28.3
* ChangeLog.3:
* etc/AUTHORS: Update for Emacs 28.3.
2023-02-17 Xi Lu <lx@shellcodes.org>
Fix etags local command injection vulnerability
* lib-src/etags.c: (escape_shell_arg_string): New function.
(process_file_name): Use it to quote file names passed to the
shell. (Bug#59817)
(cherry picked from commit 01a4035c869b91c153af9a9132c87adb7669ea1c)
2023-02-17 Xi Lu <lx@shellcodes.org>
Fixed ctags local command execute vulnerability
* lib-src/etags.c:
(clean_matched_file_tag): New function
(do_move_file): New function
(readline_internal):
Add `leave_cr` parameter, if true, include the \r character
* test/manual/etags/CTAGS.good_crlf: New file
* test/manual/etags/CTAGS.good_update: New file
* test/manual/etags/crlf: New file
* test/manual/etags/Makefile: Add `ctags -u` test cases
(cherry picked from commit d48bb4874bc6cd3e69c7a15fc3c91cc141025c51)
2023-02-17 Xi Lu <lx@shellcodes.org>
Fix ruby-mode.el local command injection vulnerability (bug#60268)
* lisp/progmodes/ruby-mode.el
(ruby-find-library-file): Fix local command injection vulnerability.
(cherry picked from commit 9a3b08061feea14d6f37685ca1ab8801758bfd1c)
2023-02-17 Xi Lu <lx@shellcodes.org>
Fix htmlfontify.el command injection vulnerability.
* lisp/htmlfontify.el (hfy-text-p): Fix command injection
vulnerability. (Bug#60295)
(cherry picked from commit 1b4dc4691c1f87fc970fbe568b43869a15ad0d4c)
2022-12-19 Eli Zaretskii <eliz@gnu.org>
Fix storing email into nnmail by Gnus
Backporting suggested by Florian Weimer, since this is
a denial-of-service issue.
* lisp/gnus/nnml.el (nnml--encode-headers): Wrap
'rfc2047-encode-string' calls with 'ignore-errors', to avoid
disrupting email workflows due to possibly-invalid headers.
Reported by Florian Weimer <fweimer@redhat.com>.
(cherry picked from commit 23f7c9c2a92e4619b7c4d2286d4249f812cd695d)
2022-11-14 Robert Pluim <rpluim@gmail.com>
Explain how to bind keys to non-ASCII sequences
* doc/emacs/custom.texi (Init Rebinding): Explain how to use `kbd'
when binding keys to non-ASCII sequences.
2022-11-12 Eli Zaretskii <eliz@gnu.org>
Document that 'transient-mark-mode' is off in batch mode
* doc/emacs/mark.texi (Mark, Disabled Transient Mark): Document,
belatedly, that 'transient-mark-mode' is turned on by default only
in interactive sessions. (Bug#59201)
2022-10-14 Eli Zaretskii <eliz@gnu.org>
Document how to control where the *.eln files are written
* doc/lispref/compile.texi (Native Compilation): Document the
trick of pointing $HOME to a non-existent directory.
(Native-Compilation Variables): Document the role of
'native-comp-eln-load-path' in determining where *.eln files are
written.
2022-10-14 Robert Pluim <rpluim@gmail.com>
Add cross-reference to alternative syntaxes for Unicode
These alternative syntaxes allow you to specify Unicode codepoints
using only ASCII, which helps avoid decoding issues.
* doc/emacs/custom.texi (Init Non-ASCII): Add cross reference to
"General Escape Syntax" in the Emacs Lisp Reference Manual.
2022-10-07 Lars Ingebrigtsen <larsi@gnus.org>
Update name of hs-mouse-toggle-hiding in Emacs manual
* doc/emacs/programs.texi (Hideshow): Update the name of
hs-mouse-toggle-hiding (bug#58331).
2022-10-06 Stefan Kangas <stefankangas@gmail.com>
Fix typo in `(emacs) Lisp Doc'
* doc/emacs/programs.texi (Lisp Doc): Fix reference to
'eldoc-echo-area-display-truncation-message'. (Bug#58324)
2022-10-06 Stefan Kangas <stefankangas@gmail.com>
Fix references to 'default-indent-new-line'
* doc/emacs/programs.texi (Comment Commands)
(Multi-Line Comments): Fix references to
'default-indent-new-line'. (Bug#58325)
2022-10-04 Andreas Schwab <schwab@linux-m68k.org>
* src/emacs.c (load_pdump): Propery handle case when executable
wasn't found.
2022-10-04 Eli Zaretskii <eliz@gnu.org>
Avoid assertion violations in STRING_CHAR
* src/xdisp.c (handle_composition_prop):
* src/editfns.c (styled_format): Don't call 'STRING_CHAR' on
unibyte strings. This avoids assertion violation in
'string_char_and_length'.
(cherry picked from commit d52d6e1e106117eb4bba81a65e256e2e793037b6)
2022-10-03 Stefan Kangas <stefankangas@gmail.com>
Fix documentation of 'TAB' in cc-mode
* doc/emacs/programs.texi (C Indent): Fix documentation of 'TAB'
in cc-mode. (Bug#58258)
2022-10-03 Stefan Kangas <stefankangas@gmail.com>
Fix 'org-export-dispatch' command name in manual
* doc/emacs/text.texi (Org Authoring): Fix 'org-export-dispatch'
command name. (Bug#58260)
2022-10-02 Andreas Schwab <schwab@linux-m68k.org>
* src/emacs.c (load_pdump): Fix use of xpalloc.
2022-10-02 Eli Zaretskii <eliz@gnu.org>
Avoid assertion violation in 'xpalloc'
* src/emacs.c (load_pdump): Ensure the 3rd argument of xpalloc is
always positive. (Bug#58232)
2022-09-30 Michael Albinus <michael.albinus@gmx.de>
Fix connection property incompatibility in Tramp
* lisp/net/tramp.el (tramp-get-remote-tmpdir): Remove obsolete
connection property "tmpdir". (Bug#57800)
2022-09-29 Lars Ingebrigtsen <larsi@gnus.org>
Update some Gnus documentation in the Emacs manual
* doc/emacs/misc.texi (Gnus Group Buffer, Gnus Summary Buffer):
Update documentation (bug#58145).
2022-09-28 Eli Zaretskii <eliz@gnu.org>
Clarify image file search
* doc/lispref/display.texi (Defining Images, Image Descriptors):
* lisp/image.el (create-image): Clarify that non-absolute image
files are searched along 'image-load-path'. (Bug#52931)
2022-09-28 Stefan Kangas <stefankangas@gmail.com>
.mailcap: Some additional fixes.
2022-09-28 Eli Zaretskii <eliz@gnu.org>
Avoid assertion violations in 'pop_it'
* src/xdisp.c (pop_it): Avoid assertion violations when handling
lists or vectors of display properties. (Bug#58122)
2022-09-28 Stefan Kangas <stefankangas@gmail.com>
Add .mailmap for proper git log output
This file is used to fix a few misspelled names in various git
listings (e.g., "git log"). This can be used to fix incorrect
attribution, poor display, or names showing up more than once.
It also allows updating an old email addresses to a new one.
See "man git-shortlog" for more information on the format.
* .mailmap: New file.
2022-09-27 Stefan Kangas <stefankangas@gmail.com>
* doc/emacs/ack.texi (Acknowledgments): Update maintainers.
2022-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/progmodes/hideshow.el (hs-toggle-hiding): Fix `interactive` form
This fixes the first part of bug#52092, which is a regression
introduced by commit d0e9113de97.
2022-09-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Fix shaping with bitmap-only fonts on HarfBuzz 5.2.0 (Bug#57976)
* src/ftcrfont.c (ftcrhbfont_begin_hb_font): Undo last change for
HarfBuzz 5.2.0.
2022-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/text-modes/tex-mode.el (tex-mode): Fix AUCTeX regression
As discussed in
https://lists.gnu.org/r/auctex/2022-08/msg00004.html
AUCTeX installs its own advice to redefine `tex-mode`, and that
advice used to take precedence before commit 6075a7c5ae3fa456cd.
2022-09-20 Robert Pluim <rpluim@gmail.com>
Add vc-annotate-switches to manual
* doc/emacs/maintaining.texi (Old Revisions): Add description of
`vc-annotate-switches' and `vc-BACKEND-annotate-switches'.
2022-09-20 Robert Pluim <rpluim@gmail.com>
Remove mention of non-existent `annotate-switches'
* lisp/vc/vc.el (vc-annotate-switches): Remove mention of
`annotate-switches'. As far as I can tell this has never existed in
Emacs.
2022-09-20 Robert Pluim <rpluim@gmail.com>
Mention that src/macuvs.h sometimes needs committing
* admin/notes/unicode: src/macuvs.h is generated, but needs to be
committed sometimes.
2022-09-19 Gerd Möllmann <gerd@gnu.org>
MacOS ld warning from native compilation (bug#57849)
* lisp/emacs-lisp/comp.el (native-comp-driver-options): Add "-Wl,-w"
on Darwin systems.
* etc/NEWS: Describe change.
2022-09-18 Michael Albinus <michael.albinus@gmx.de>
Fix Tramp error with eshell integration
* lisp/net/tramp-integration.el (tramp-eshell-directory-change):
Respect local `default-directory'. (Bug#57556)
2022-09-17 Michael Albinus <michael.albinus@gmx.de>
Sync with Tramp 2.5.3.2. Don't merge with master
* doc/misc/tramp.texi (Android shell setup): Rework.
(Frequently Asked Questions): Improve recommendations for speeding up.
* doc/misc/trampver.texi:
* lisp/net/trampver.el: Change version to "2.5.4-pre".
* lisp/net/tramp-adb.el (tramp-methods): Use "%d".
(tramp-adb-handle-directory-files-and-attributes): Fix "." and
".." in listing.
(tramp-adb-handle-file-attributes)
(tramp-adb-handle-directory-files-and-attributes)
(tramp-adb-handle-file-name-all-completions): Pipe "ls" output
through "cat", in order to avoid quoting special characters.
(tramp-adb-maybe-open-connection): Compute args from `tramp-login-args'.
* lisp/net/tramp-compat.el (tramp-compat-replace-regexp-in-region):
New defalias.
* lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file):
Adapt check for proper remote command.
* lisp/net/tramp.el (tramp-methods): Adapt docstring.
(tramp-handle-make-process): Check for adb device if indicated.
(tramp-get-remote-tmpdir): Cache result in temporary connection
property.
* test/lisp/net/tramp-tests.el (tramp-test17-insert-directory)
(tramp-test22-file-times, tramp--test-utf8): Adapt tests.
(tramp--test-shell-file-name): Do not depend on `tramp--test-adb-p'.
(tramp-test46-unload): Ignore autoload functions in
`tramp-file-name' structure tests, since `tramp-file-name-handler'
is also autoloaded in Emacs 29.
2022-09-17 Stefan Kangas <stefankangas@gmail.com>
Simplify regexp in make-news-html-file
* admin/admin.el (make-news-html-file): Simplify regexp.
Suggested by Mattias Engdegård <mattiase@acm.org>.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
* admin/admin.el (make-news-html-file): Set id on correct tag.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
Add version headlines to HTML NEWS export
This allows linking to, e.g. "NEWS.28.html#28.1" to go directly to
those release notes.
* admin/admin.el (admin--org-export-headers-format)
(make-news-html-file): Add XX.Y version headlines with an HTML anchor.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
Improve HTML export of NEWS file
* admin/admin.el (admin--org-export-headers-format)
(admin--org-html-postamble): New variables.
(admin--require-external-package): New function.
(make-news-html-file): Improve HTML export.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
Delete "etc/NEWS*.html" from .gitignore
We actually do want to see it when preparing a release, so that we
don't include it in a tarball by mistake.
* .gitignore: Don't ignore "etc/NEWS*.html".
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
Recommend NonGNU ELPA over MELPA
* doc/misc/org.org (Using CDLaTeX to enter math, Footnotes): Recommend
NonGNU ELPA over MELPA.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
Minor doc fixes in picture.el
* lisp/textmodes/picture.el: Improve Commentary.
(picture-forward-column, picture-backward-column)
(picture-move-down, picture-move-up, picture-movement-nw)
(picture-movement-ne, picture-movement-sw, picture-movement-se)
(picture-set-motion, picture-clear-line, picture-newline)
(picture-tab, picture-yank-rectangle)
(picture-yank-rectangle-from-register, picture-insert-rectangle)
(picture-draw-rectangle): Minor doc fixes.
2022-09-16 Stefan Kangas <stefankangas@gmail.com>
* lisp/textmodes/page-ext.el: Improve Commentary.
2022-09-14 Stefan Kangas <stefankangas@gmail.com>
Automate exporting etc/NEWS to HTML
* admin/admin.el (make-news-html-file): New function.
* .gitignore: Ignore generated "etc/NEWS*.html" file.
2022-09-14 Eli Zaretskii <eliz@gnu.org>
* Makefile.in (uninstall): Remove the *.eln files. (Bug#57771)
2022-09-12 Stefan Kangas <stefankangas@gmail.com>
Update HISTORY for Emacs 28.2
* etc/HISTORY: Update for the Emacs 28.2 release.
2022-09-07 Stefan Kangas <stefankangas@gmail.com>
Bump Emacs version to 28.2
* README:
* configure.ac:
* msdos/sed2v2.inp:
* nt/README.W32: Bump Emacs version to 28.2.
2022-09-07 Stefan Kangas <stefankangas@gmail.com>
Update ChangeLog and AUTHORS for Emacs 28.2
* ChangeLog.3:
* etc/AUTHORS:
* etc/NEWS: Update for Emacs 28.2.
2022-09-06 Stefan Kangas <stefankangas@gmail.com>
* doc/misc/idlwave.texi (Troubleshooting): Don't say "Emacsen".
@ -236920,7 +237348,7 @@
This file records repository revisions from
commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
commit ddabb03a0176beb4b7fc8d4f2267d459fd2ebded (inclusive).
commit f7bd5ac55211ad0ae2e473f0dff46df1e60f99bf (inclusive).
See ChangeLog.2 for earlier changes.
;; Local Variables:

View file

@ -1655,11 +1655,11 @@ become available.
@findex image-dired-display-previous
With point in the thumbnail buffer, you can type @key{RET}
(@code{image-dired-display-this}) to display the image in another
window. Use the arrow keys to move around in the thumbnail buffer.
For easy browsing, use @key{SPC} (@code{image-dired-display-next}) to
advance and display the next image. Typing @key{DEL}
(@code{image-dired-display-previous}) backs up to the previous
thumbnail and displays that instead.
window. Use the standard Emacs movement key bindings or the arrow
keys to move around in the thumbnail buffer. For easy browsing, use
@key{SPC} (@code{image-dired-display-next}) to advance and display the
next image. Typing @key{DEL} (@code{image-dired-display-previous})
backs up to the previous thumbnail and displays that instead.
@vindex image-dired-external-viewer
Type @kbd{C-@key{RET}}
@ -1669,9 +1669,19 @@ in an external viewer. You must first configure
You can delete images through Image-Dired also. Type @kbd{d}
(@code{image-dired-flag-thumb-original-file}) to flag the image file
for deletion in the Dired buffer. You can also delete the thumbnail
image from the thumbnail buffer with @kbd{C-d}
(@code{image-dired-delete-char}).
for deletion in the Dired buffer. Alternatively, you can remove an
image's thumbnail from the thumbnail buffer without flagging the image
for deletion, by typing @kbd{C-d} (@code{image-dired-delete-char}).
@findex image-dired-dired-toggle-marked-thumbs
@findex image-dired-dired-display-external
@findex image-dired-dired-display-image
You could also use Image-Dired for ``inline'' operations (i.e.,
right into the Dired buffer). Type @kbd{C-t C-t}, and the thumbnails
of the selected images in Dired will appear in front of their names
(@code{image-dired-dired-toggle-marked-thumbs}). @kbd{C-t i} and
@kbd{C-t x} will display the image under the point in Emacs or with
the external viewer, respectively.
More advanced features include @dfn{image tags}, which are metadata
used to categorize image files. The tags are stored in a plain text
@ -1684,14 +1694,18 @@ in the minibuffer. To mark files having a certain tag, type @kbd{C-t f}
(@code{image-dired-mark-tagged-files}). After marking image files
with a certain tag, you can use @kbd{C-t d} to view them.
@findex image-dired-dired-comment-files
@findex image-dired-dired-edit-comment-and-tags
You can also tag a file directly from the thumbnail buffer by typing
@kbd{t t} and you can remove a tag by typing @kbd{t r}. There is also
a special tag called ``comment'' for each file (it is not a tag in
the exact same sense as the other tags, it is handled slightly
differently). That is used to enter a comment or description about the
image. You comment a file from the thumbnail buffer by typing
@kbd{t t}, and you can remove a tag by typing @kbd{t r}. There is
also a special tag called ``comment'' for each file (it is not a tag
in the exact same sense as the other tags, it is handled slightly
differently). That is used to enter a comment or description about
the image. You comment a file from the thumbnail buffer by typing
@kbd{c}. You will be prompted for a comment. Type @kbd{C-t c} to add
a comment from Dired (@code{image-dired-dired-comment-files}).
@kbd{C-t e} will bring a buffer to edit comment and tags
(@code{image-dired-dired-edit-comment-and-tags}).
@vindex image-dired-thumb-visible-marks
Files that are marked in Dired will also be marked in Image-Dired if

View file

@ -252,11 +252,8 @@ the original symbol. If the contents are another symbol, this
process, called @dfn{symbol function indirection}, is repeated until
it obtains a non-symbol. @xref{Function Names}, for more information
about symbol function indirection.
One possible consequence of this process is an infinite loop, in the
event that a symbol's function cell refers to the same symbol.
Otherwise, we eventually obtain a non-symbol, which ought to be a
function or other suitable object.
We eventually obtain a non-symbol, which ought to be a function or
other suitable object.
@kindex invalid-function
More precisely, we should now have a Lisp function (a lambda
@ -332,19 +329,17 @@ or just
The built-in function @code{indirect-function} provides an easy way to
perform symbol function indirection explicitly.
@defun indirect-function function &optional noerror
@defun indirect-function function
@anchor{Definition of indirect-function}
This function returns the meaning of @var{function} as a function. If
@var{function} is a symbol, then it finds @var{function}'s function
definition and starts over with that value. If @var{function} is not a
symbol, then it returns @var{function} itself.
This function returns @code{nil} if the final symbol is unbound. It
signals a @code{cyclic-function-indirection} error if there is a loop
in the chain of symbols.
This function returns @code{nil} if the final symbol is unbound.
The optional argument @var{noerror} is obsolete, kept for backward
compatibility, and has no effect.
There is also a second, optional argument that is obsolete and has no
effect.
Here is how you could define @code{indirect-function} in Lisp:

View file

@ -737,9 +737,12 @@ explicitly in the source file being loaded. This is because
By contrast, in programs that manipulate function definitions for other
purposes, it is better to use @code{fset}, which does not keep such
records. @xref{Function Cells}.
If the resulting function definition chain would be circular, then
Emacs will signal a @code{cyclic-function-indirection} error.
@end defun
@defun function-alias-p object &optional noerror
@defun function-alias-p object
Checks whether @var{object} is a function alias. If it is, it returns
a list of symbols representing the function alias chain, else
@code{nil}. For instance, if @code{a} is an alias for @code{b}, and
@ -750,9 +753,8 @@ a list of symbols representing the function alias chain, else
@result{} (b c)
@end example
If there's a loop in the definitions, an error will be signaled. If
@var{noerror} is non-@code{nil}, the non-looping parts of the chain is
returned instead.
There is also a second, optional argument that is obsolete and has no
effect.
@end defun
You cannot create a new primitive function with @code{defun} or
@ -1539,6 +1541,9 @@ is not a function, e.g., a keyboard macro (@pxref{Keyboard Macros}):
If you wish to use @code{fset} to make an alternate name for a
function, consider using @code{defalias} instead. @xref{Definition of
defalias}.
If the resulting function definition chain would be circular, then
Emacs will signal a @code{cyclic-function-indirection} error.
@end defun
@node Closures

View file

@ -5111,8 +5111,11 @@ This anchor is a function that is called with 3 arguments: @var{node},
@var{parent}, and @var{bol}. It tries to go to the beginning of the
previous non-empty line, and matches @code{adaptive-fill-regexp}. If
there is a match, this function returns the end of the match,
otherwise it returns nil. This anchor is useful for a
@code{indent-relative}-like indent behavior for block comments.
otherwise it returns nil. However, if the current line begins with a
prefix (e.g., ``-''), return the beginning of the prefix of the
previous line instead, so that the two prefixes aligns. This anchor
is useful for a @code{indent-relative}-like indent behavior for block
comments.
@end ftable
@end defvar

View file

@ -1214,7 +1214,7 @@ Suffix specifications have this form:
@lisp
([@var{LEVEL}]
[@var{KEY}] [@var{DESCRIPTION}]
[@var{KEY} [@var{DESCRIPTION}]]
@var{COMMAND}|@var{ARGUMENT} [@var{KEYWORD} @var{VALUE}]...)
@end lisp
@ -1253,8 +1253,7 @@ Any command will do; it does not need to have an object associated
with it (as would be the case if @code{transient-define-suffix} or
@code{transient-define-infix} were used to define it).
Anonymous, dynamically defined suffix commands are also supported.
See information about the @code{:setup-children} function in @ref{Group Specifications}.
COMMAND can also be a @code{lambda} expression.
As mentioned above, the object that is associated with a command can
be used to set the default for certain values that otherwise have to

View file

@ -325,9 +325,9 @@ Andreas Politz: changed filenotify.el inotify.c buffer-tests.el
Andreas Rottmann: changed emacsclient.1 emacsclient.c misc.texi server.el
Andreas Schwab: changed configure.ac lisp.h xdisp.c process.c alloc.c
coding.c Makefile.in files.el fileio.c keyboard.c lread.c xterm.c fns.c
src/Makefile.in editfns.c emacs.c print.c eval.c font.c xfns.c sysdep.c
and 656 other files
coding.c Makefile.in files.el fileio.c keyboard.c emacs.c lread.c
xterm.c fns.c src/Makefile.in editfns.c print.c eval.c font.c xfns.c
sysdep.c and 656 other files
Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el
gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el
@ -1575,7 +1575,7 @@ and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c w32fns.c simple.el
files.el fileio.c emacs.c keyboard.c w32term.c text.texi dispnew.c
w32proc.c files.texi frames.texi configure.ac lisp.h dispextern.h
process.c ms-w32.h and 1236 other files
process.c editfns.c and 1237 other files
Eliza Velasquez: changed server.el
@ -1984,7 +1984,7 @@ Gerd Möllmann: wrote authors.el ebrowse.el jit-lock.el tooltip.el
and changed xdisp.c xterm.c dispnew.c dispextern.h xfns.c xfaces.c
window.c keyboard.c lisp.h faces.el alloc.c buffer.c startup.el xterm.h
fns.c simple.el term.c configure.ac frame.c xmenu.c emacs.c
and 609 other files
and 610 other files
Gergely Nagy: changed erc.el
@ -4787,8 +4787,8 @@ Robert P. Goldman: changed org.texi ob-exp.el org.el ox-latex.el
Robert Pluim: wrote nsm-tests.el
and changed configure.ac process.c blocks.awk network-stream-tests.el
font.c processes.texi ftfont.c gtkutil.c vc-git.el process-tests.el
emoji-zwj.awk gnutls.el network-stream.el nsm.el tramp.texi mml-sec.el
nsterm.m unicode xfns.c auth.texi composite.c and 139 other files
custom.texi emoji-zwj.awk gnutls.el network-stream.el nsm.el tramp.texi
unicode mml-sec.el nsterm.m xfns.c auth.texi and 140 other files
Robert Thorpe: changed cus-start.el indent.el rmail.texi
@ -5182,7 +5182,7 @@ and co-wrote help-tests.el keymap-tests.el
and changed efaq.texi checkdoc.el package.el cperl-mode.el bookmark.el
help.el keymap.c subr.el simple.el erc.el ediff-util.el idlwave.el
time.el bytecomp-tests.el comp.el emacs-lisp-intro.texi speedbar.el
bytecomp.el edebug.el flyspell.el ibuffer.el and 1348 other files
bytecomp.el edebug.el flyspell.el ibuffer.el and 1352 other files
Stefan Merten: co-wrote rst.el
@ -5937,7 +5937,7 @@ W. Trevor King: changed xterm.el
Xavier Maillard: changed gnus-faq.texi gnus-score.el mh-utils.el spam.el
Xi Lu: changed etags.c tramp-sh.el
Xi Lu: changed etags.c htmlfontify.el ruby-mode.el tramp-sh.el
Xu Chunyang: changed eww.el dom.el gud.el netrc.el
@ -5953,8 +5953,8 @@ Yair F: changed hebrew.el
Yamamoto Mitsuharu: wrote uvs.el
and changed macterm.c macfns.c mac-win.el xterm.c mac.c macterm.h image.c
macmenu.c macgui.h xdisp.c ftfont.c xfns.c keyboard.c macselect.c
ftcrfont.c macfont.m configure.ac w32term.c dispextern.h
macmenu.c macgui.h xdisp.c ftfont.c xfns.c ftcrfont.c keyboard.c
macselect.c macfont.m configure.ac w32term.c dispextern.h
src/Makefile.in unexmacosx.c and 111 other files
Yan Gajdos: changed vc-git.el
@ -6005,7 +6005,7 @@ Yuchen Pei: changed calendar.texi diary-lib.el icalendar-tests.el
Yue Daian: wrote cl-font-lock.el
Yuga Ego: changed emacs-lisp-intro.texi
Yuga Ego: changed custom.texi emacs-lisp-intro.texi
Yu-ji Hosokawa: changed README.W32

View file

@ -228,6 +228,8 @@ GNU Emacs 28.1 (2022-04-04) emacs-28.1
GNU Emacs 28.2 (2022-09-12) emacs-28.2
GNU Emacs 28.3 (2023-02-17) emacs-28.3
----------------------------------------------------------------------
This file is part of GNU Emacs.

View file

@ -358,6 +358,21 @@ This function is like 'user-uid', but is aware of file name handlers,
so it will return the remote UID for remote files (or -1 if the
connection has no associated user).
+++
** 'fset' and 'defalias' now signal an error for circular alias chains.
Previously, 'fset' and 'defalias' could be made to build circular
function indirection chains as in
(defalias 'able 'baker)
(defalias 'baker 'able)
but trying to call them would often make Emacs hang. Now, an attempt
to create such a loop results in an error.
Since circular alias chains now cannot occur, 'function-alias-p' and
'indirect-function' will never signal an error. Their second
'noerror' arguments have no effect and are therefore obsolete.
* Changes in Emacs 30.1 on Non-Free Operating Systems

View file

@ -3416,7 +3416,7 @@ lambda-expression."
(let* ((fn (car form))
(handler (get fn 'byte-compile))
(interactive-only
(or (get fn 'interactive-only)
(or (function-get fn 'interactive-only)
(memq fn byte-compile-interactive-only-functions))))
(when (memq fn '(set symbol-value run-hooks ;; add-to-list
add-hook remove-hook run-hook-with-args

View file

@ -3813,8 +3813,8 @@ Return the trampoline if found or nil otherwise."
;; found.
finally (cl-return
(expand-file-name
(make-temp-file-internal (file-name-sans-extension rel-filename)
0 ".eln" nil)
(make-temp-file (file-name-sans-extension rel-filename) 0 ".eln"
nil)
temporary-file-directory))))
(defun comp-trampoline-compile (subr-name)

View file

@ -769,7 +769,7 @@ the C sources, too."
(and (symbolp function)
(not (eq (car-safe (symbol-function function)) 'macro))
(let* ((interactive-only
(or (get function 'interactive-only)
(or (function-get function 'interactive-only)
(if (boundp 'byte-compile-interactive-only-functions)
(memq function
byte-compile-interactive-only-functions)))))
@ -996,7 +996,7 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)."
(symbol-name function)))))))
(real-def (cond
((and aliased (not (subrp def)))
(car (function-alias-p real-function t)))
(car (function-alias-p real-function)))
((subrp def) (intern (subr-name def)))
(t def))))

View file

@ -167,28 +167,27 @@ to use the Thumbnail Managing Standard; they will be saved in
There are three ways that Image-Dired can store and generate
thumbnails:
1. According to the \"Thumbnail Managing Standard\", which allows
1. According to the Thumbnail Managing Standard, which allows
sharing of thumbnails across different programs. Thumbnails
will be stored in \"$XDG_CACHE_HOME/thumbnails/\"
To use this way, set this user option to one of the following values:
Set this user option to one of the following symbols:
- `standard' means use thumbnails sized 128x128.
- `standard-large' means use thumbnails sized 256x256.
- `standard-x-large' means use thumbnails sized 512x512.
- `standard-xx-large' means use thumbnails sized 1024x1024.
2. In the Image-Dired specific directory indicated by
2. In the Image-Dired specific directory, as indicated by
`image-dired-dir'.
To use this way, set this user option to `image-dired' (or
to `use-image-dired-dir', which means the same thing for
backward-compatibility reasons).
Set this user option to `image-dired' (`use-image-dired-dir'
also works, for backward-compatibility reasons).
3. In a subdirectory \".image-dired\" in the same directory
where the image files are.
as the image files.
To use this way, set this user option to `per-directory'.
Set this user option to `per-directory'.
To control the default size of thumbnails for alternatives (2)
and (3) above, customize the value of `image-dired-thumb-size'.

View file

@ -243,8 +243,8 @@ value of the last statement in BODY, as elisp."
(`output
(setq results
(if matlabp
(cdr (reverse (delq "" (mapcar #'org-strip-quotes
(mapcar #'org-trim raw)))))
(cdr (reverse (delete "" (mapcar #'org-strip-quotes
(mapcar #'org-trim raw)))))
(cdr (member org-babel-octave-eoe-output
(reverse (mapcar #'org-strip-quotes
(mapcar #'org-trim raw)))))))

View file

@ -7330,7 +7330,7 @@ Any match of REMOVE-RE will be removed from TXT."
(let ((s (org-format-outline-path (org-get-outline-path)
(1- (frame-width))
nil org-agenda-breadcrumbs-separator)))
(if (eq "" s) "" (concat s org-agenda-breadcrumbs-separator))))))
(if (equal "" s) "" (concat s org-agenda-breadcrumbs-separator))))))
(setq time (cond (s2 (concat
(org-agenda-time-of-day-to-ampm-maybe s1)
"-" (org-agenda-time-of-day-to-ampm-maybe s2)

View file

@ -648,6 +648,9 @@ With a numeric prefix, show all headlines up to that level."
(org-fold-show-hidden-entry)
(org-fold-show-children))
("content"
;; Newline before heading will be outside the
;; narrowing. Make sure that it is revealed.
(org-fold-heading nil)
(save-excursion
(save-restriction
(org-narrow-to-subtree)

View file

@ -7562,15 +7562,15 @@ the cache."
;; beginning.
(next-element-re (pcase granularity
((or `headline
(guard (eq '(headline)
restrict-elements)))
(guard (equal '(headline)
restrict-elements)))
(cons
(org-with-limited-levels
org-element-headline-re)
'match-beg))
(`headline+inlinetask
(cons
(if (eq '(inlinetask) restrict-elements)
(if (equal '(inlinetask) restrict-elements)
(org-inlinetask-outline-regexp)
org-element-headline-re)
'match-beg))

View file

@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(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.6.1-31-gaf1bb1"))
(let ((org-git-version "release_9.6.1-34-geea8da"))
org-git-version))
(provide 'org-version)

View file

@ -32,6 +32,8 @@
(require 'cl-lib)
(require 'ox)
(eval-when-compile (require 'subr-x))
(defvar orgtbl-exp-regexp)
(defvar org-texinfo-supports-math--cache)
@ -2025,12 +2027,14 @@ Once computed, the results remain cached."
(unless (boundp 'org-texinfo-supports-math--cache)
(setq org-texinfo-supports-math--cache
(let ((math-example "1 + 1 = 2"))
(let* ((input-file
(make-temp-file "test" nil ".info"))
(input-content
(concat (format "@setfilename %s" input-file) "\n"
"@node Top" "\n"
(format "@displaymath{%s}" math-example) "\n")))
(let* ((input-file (make-temp-file "test" nil ".info"))
(input-content (string-join
(list (format "@setfilename %s" input-file)
"@node Top"
"@displaymath"
math-example
"@end displaymath")
"\n")))
(with-temp-file input-file
(insert input-content))
(let* ((output-file (org-texinfo-compile input-file))

View file

@ -87,6 +87,25 @@
:safe 'integerp
:group 'c)
(defun c-ts-mode-toggle-comment-style ()
"Toggle the comment style between block and line comments.
Optional numeric ARG, if supplied, switches to block comment
style when positive, to line comment style when negative, and
just toggles it when zero or left out."
(interactive)
(pcase-let ((`(,starter . ,ender)
(if (string= comment-start "// ")
(cons "/* " " */")
(cons "// " ""))))
(setq-local comment-start starter
comment-end ender))
(c-ts-mode-set-modeline))
(defun c-ts-mode-set-modeline ()
(setq mode-name
(concat (if (eq major-mode 'c-ts-mode) "C" "C++") comment-start))
(force-mode-line-update))
(defun c-ts-mode--indent-style-setter (sym val)
"Custom setter for `c-ts-mode-set-style'.
@ -214,6 +233,25 @@ delimiters < and >'s."
;;; Indent
(defun c-ts-mode--preproc-offset (_n _p &rest _)
"This anchor is used for preprocessor directives.
Because node is nil at the moment of indentation, we use
`treesit-node-on' to capture the anonymous node covering the
newline. If the grand-parent of that node is the
translation_unit itself, we don't indent. Otherwise, just indent
one step according to the great-grand-parent indent level. The
reason there is a difference between grand-parent and
great-grand-parent here is that the node containing the newline
is actually the parent of point at the moment of indentation."
(when-let ((node (treesit-node-on (point) (point))))
(if (string-equal "translation_unit"
(treesit-node-type
(treesit-node-parent
(treesit-node-parent node))))
0
c-ts-mode-indent-offset)))
(defun c-ts-mode--indent-styles (mode)
"Indent rules supported by `c-ts-mode'.
MODE is either `c' or `cpp'."
@ -246,13 +284,14 @@ MODE is either `c' or `cpp'."
((match nil "do_statement" "body") parent-bol c-ts-mode-indent-offset)
((match nil "for_statement" "body") parent-bol c-ts-mode-indent-offset)
((match "preproc_ifdef" "compound_statement") point-min 0)
((match "#endif" "preproc_ifdef") point-min 0)
((match "preproc_if" "compound_statement") point-min 0)
((match "#endif" "preproc_if") point-min 0)
((match "preproc_function_def" "compound_statement") point-min 0)
((node-is "preproc") point-min 0)
((node-is "#endif") point-min 0)
((match "preproc_call" "compound_statement") point-min 0)
((n-p-gp nil "preproc" "translation_unit") point-min 0)
((n-p-gp nil "\n" "preproc") great-grand-parent c-ts-mode--preproc-offset)
((parent-is "preproc") grand-parent c-ts-mode-indent-offset)
((parent-is "function_definition") parent-bol 0)
((parent-is "conditional_expression") first-sibling 0)
((parent-is "assignment_expression") parent-bol c-ts-mode-indent-offset)
@ -740,7 +779,8 @@ the semicolon. This function skips the semicolon."
:parent prog-mode-map
"C-c C-q" #'c-ts-mode-indent-defun
"C-c ." #'c-ts-mode-set-style
"C-c C-c" #'comment-region)
"C-c C-c" #'comment-region
"C-c C-k" #'c-ts-mode-toggle-comment-style)
;;;###autoload
(define-derived-mode c-ts-base-mode prog-mode "C"
@ -805,7 +845,8 @@ the semicolon. This function skips the semicolon."
`((block . ,(rx (or "compound_statement"
"field_declaration_list"
"enumerator_list"
"initializer_list")))
"initializer_list"
"declaration_list")))
(if . "if_statement")
(else . ("if_statement" . "alternative"))
(do . "do_statement")
@ -855,6 +896,7 @@ To use tree-sitter C/C++ modes by default, evaluate
in your configuration."
:group 'c
:after-hook (c-ts-mode-set-modeline)
(when (treesit-ready-p 'c)
(treesit-parser-create 'c)
@ -887,6 +929,7 @@ To use tree-sitter C/C++ modes by default, evaluate
in your configuration."
:group 'c++
:after-hook (c-ts-mode-set-modeline)
(when (treesit-ready-p 'cpp)
(setq-local treesit-text-type-regexp

View file

@ -2105,7 +2105,7 @@ casts and declarations are fontified. Used on level 2 and higher."
;; prevent a repeat invocation. See elisp/lispref page "Search-based
;; Fontification".
(while (and (< (point) limit)
(re-search-forward
(re-search-forward
"\\<\\(module\\|export\\|import\\)\\>\\(?:[^_$]\\|$\\)"
limit t))
(goto-char (match-end 1))

View file

@ -3975,7 +3975,7 @@ is in effect when this is matched (see `c-identifier-syntax-table')."
;; "throw" in `c-type-modifier-kwds' is followed
;; by a parenthesis list, but no extra measures
;; are necessary to handle that.
(regexp-opt
(regexp-opt
(append (c-lang-const c-fun-name-substitute-kwds)
(c-lang-const c-type-modifier-kwds))
t)

View file

@ -474,28 +474,37 @@ compilation and evaluation time conflicts."
(and (eq (char-before) ?\])
(not (eq (char-after) ?\;))))))
`((annotation-top-cont ,(c-point 'iopl))))
((and
;; Heuristics to find object initializers
(save-excursion
;; Next non-whitespace character should be '{'
(goto-char (c-point 'boi))
(eq (char-after) ?{))
(save-excursion
;; 'new' should be part of the line
(goto-char (c-point 'iopl))
(looking-at ".*new.*"))
(unless (eq (char-after) ?{)
(backward-up-list 1 t t))
(save-excursion
;; 'new' should be part of the line
(goto-char (c-point 'iopl))
(looking-at ".*new.*")))
;; Line should not already be terminated
(save-excursion
(goto-char (c-point 'eopl))
(or (not (eq (char-before) ?\;))
(not (eq (char-before) ?\{)))))
(if (save-excursion
;; if we have a hanging brace on line before
(goto-char (c-point 'eopl))
(eq (char-before) ?\{))
`((brace-list-intro ,(c-point 'iopl)))
`((block-open) (statement ,(c-point 'iopl)))))
(cond
((save-excursion
;; if we have a hanging brace on line before
(goto-char (c-point 'eopl))
(eq (char-before) ?\{))
`((brace-list-intro ,(c-point 'iopl))))
((save-excursion
;; if we have a hanging brace on line before
(goto-char (c-point 'boi))
(and (eq (char-after) ?\})
`((brace-list-close ,(save-excursion
(backward-up-list 1 t t)
(point)))))))
(t
`((block-open) (statement ,(c-point 'iopl))))))
(t
(apply orig-fun args))))

View file

@ -1760,11 +1760,6 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(add-hook 'change-major-mode-hook #'eglot--managed-mode-off nil t)
(add-hook 'post-self-insert-hook 'eglot--post-self-insert-hook nil t)
(add-hook 'pre-command-hook 'eglot--pre-command-hook nil t)
(eglot--setq-saving eldoc-documentation-functions
'(eglot-signature-eldoc-function
eglot-hover-eldoc-function))
(eglot--setq-saving eldoc-documentation-strategy
#'eldoc-documentation-enthusiast)
(eglot--setq-saving xref-prompt-for-identifier nil)
(eglot--setq-saving flymake-diagnostic-functions '(eglot-flymake-backend))
(eglot--setq-saving company-backends '(company-capf))
@ -1773,7 +1768,12 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(add-function :before-until (local 'imenu-create-index-function)
#'eglot-imenu))
(unless (eglot--stay-out-of-p 'flymake) (flymake-mode 1))
(unless (eglot--stay-out-of-p 'eldoc) (eldoc-mode 1))
(unless (eglot--stay-out-of-p 'eldoc)
(add-hook 'eldoc-documentation-functions #'eglot-hover-eldoc-function
nil t)
(add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function
nil t)
(eldoc-mode 1))
(cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server))))
(t
(remove-hook 'after-change-functions 'eglot--after-change t)
@ -2782,10 +2782,9 @@ for which LSP on-type-formatting should be requested."
(cl-sort completions
#'string-lessp
:key (lambda (c)
(or (plist-get
(get-text-property 0 'eglot--lsp-item c)
:sortText)
"")))))
(plist-get
(get-text-property 0 'eglot--lsp-item c)
:sortText)))))
(metadata `(metadata (category . eglot)
(display-sort-function . ,sort-completions)))
resp items (cached-proxies :none)

View file

@ -3458,12 +3458,14 @@ This function is intended for use in `after-change-functions'."
((match "<" "jsx_fragment") parent 0)
((parent-is "jsx_fragment") parent js-indent-level)
((node-is "jsx_closing_element") parent 0)
((node-is "jsx_element") parent js-indent-level)
((match "jsx_element" "statement") parent js-indent-level)
((parent-is "jsx_element") parent js-indent-level)
((parent-is "jsx_text") parent-bol js-indent-level)
((parent-is "jsx_opening_element") parent js-indent-level)
((parent-is "jsx_expression") parent-bol js-indent-level)
((match "/" "jsx_self_closing_element") parent 0)
((parent-is "jsx_self_closing_element") parent js-indent-level)
;; FIXME(Theo): This no-node catch-all should be removed. When is it needed?
(no-node parent-bol 0)))))
(defvar js--treesit-keywords
@ -3873,7 +3875,7 @@ See `treesit-sexp-type-regexp' for more information.")
;; Electric-indent.
(setq-local electric-indent-chars
(append "{}():;," electric-indent-chars)) ;FIXME: js2-mode adds "[]*".
(append "{}():;,<>/" electric-indent-chars)) ;FIXME: js2-mode adds "[]*".
(setq-local electric-layout-rules
'((?\; . after) (?\{ . after) (?\} . before)))

View file

@ -36,6 +36,7 @@
(declare-function treesit-node-child "treesit.c")
(declare-function treesit-node-child-by-field-name "treesit.c")
(declare-function treesit-node-start "treesit.c")
(declare-function treesit-node-end "treesit.c")
(declare-function treesit-node-type "treesit.c")
(declare-function treesit-node-parent "treesit.c")
(declare-function treesit-query-compile "treesit.c")
@ -209,50 +210,15 @@
`((scoped_use_list path: (identifier) @font-lock-constant-face)
(scoped_use_list path: (scoped_identifier
name: (identifier) @font-lock-constant-face))
((use_as_clause alias: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
((use_as_clause path: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
((use_as_clause path:
(scoped_identifier path: (_)
name: (identifier) @font-lock-type-face))
(:match "^[A-Z]" @font-lock-type-face))
(use_as_clause path: (scoped_identifier name: (identifier) @default))
((use_declaration
argument: (scoped_identifier
path: (_) @font-lock-constant-face
name: (identifier) @font-lock-type-face))
(:match "^[A-Z]" @font-lock-type-face))
(use_declaration
argument: (scoped_identifier
name: (identifier) @default))
(use_declaration
argument: (scoped_identifier
path: (scoped_identifier
path: (_) @font-lock-constant-face
name: (identifier) @font-lock-constant-face)
name: (identifier) @default))
(use_declaration
argument: (scoped_use_list
path: (scoped_identifier
path: (_) @font-lock-constant-face
name: (identifier) @font-lock-constant-face)))
((use_list (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
(use_list (identifier) @default)
((use_list (scoped_identifier path: (_)
name: (identifier) @font-lock-type-face))
(:match "^[A-Z]" @font-lock-type-face))
(use_list (scoped_identifier path: (_)
name: (identifier) @default))
(use_wildcard (scoped_identifier
name: (identifier) @font-lock-constant-face))
(use_wildcard [(identifier) @rust-ts-mode--fontify-scope
(scoped_identifier
name: (identifier) @rust-ts-mode--fontify-scope)])
(enum_variant name: (identifier) @font-lock-type-face)
(match_arm
pattern: (match_pattern (_ type: (identifier) @font-lock-type-face)))
@ -263,31 +229,13 @@
(mod_item name: (identifier) @font-lock-constant-face)
(primitive_type) @font-lock-type-face
(type_identifier) @font-lock-type-face
((scoped_identifier name: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
((scoped_identifier path: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
((scoped_identifier
path: [(identifier) @font-lock-type-face
(scoped_identifier
name: (identifier) @font-lock-type-face)])
(:match "^[A-Z]" @font-lock-type-face))
((scoped_identifier name: (identifier) @rust-ts-mode--fontify-tail))
((scoped_identifier path: (identifier) @font-lock-type-face)
(:match
"^\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)$"
@font-lock-type-face))
(scoped_identifier path: (_) @font-lock-constant-face
name: (identifier) @font-lock-type-face)
(scoped_identifier path: (scoped_identifier
name: (identifier) @font-lock-constant-face))
(scoped_type_identifier path: (_) @font-lock-constant-face)
(scoped_type_identifier
path: (scoped_identifier
path: (_) @font-lock-constant-face
name: (identifier) @font-lock-constant-face))
(type_identifier) @font-lock-type-face
;; Ensure function calls aren't highlighted as types.
(call_expression function: (scoped_identifier name: (identifier) @default)))
((scoped_identifier path: (identifier) @rust-ts-mode--fontify-scope))
(type_identifier) @font-lock-type-face)
:language 'rust
:feature 'property
@ -303,9 +251,25 @@
:language 'rust
:feature 'variable
'((identifier) @font-lock-variable-name-face
;; Everything in a token_tree is an identifier.
(token_tree (identifier) @default))
'((arguments (identifier) @font-lock-variable-name-face)
(array_expression (identifier) @font-lock-variable-name-face)
(assignment_expression right: (identifier) @font-lock-variable-name-face)
(binary_expression left: (identifier) @font-lock-variable-name-face)
(binary_expression right: (identifier) @font-lock-variable-name-face)
(block (identifier) @font-lock-variable-name-face)
(compound_assignment_expr right: (identifier) @font-lock-variable-name-face)
(field_expression value: (identifier) @font-lock-variable-name-face)
(field_initializer value: (identifier) @font-lock-variable-name-face)
(if_expression condition: (identifier) @font-lock-variable-name-face)
(let_condition value: (identifier) @font-lock-variable-name-face)
(let_declaration value: (identifier) @font-lock-variable-name-face)
(match_arm value: (identifier) @font-lock-variable-name-face)
(match_expression value: (identifier) @font-lock-variable-name-face)
(reference_expression value: (identifier) @font-lock-variable-name-face)
(return_expression (identifier) @font-lock-variable-name-face)
(tuple_expression (identifier) @font-lock-variable-name-face)
(unary_expression (identifier) @font-lock-variable-name-face)
(while_expression condition: (identifier) @font-lock-variable-name-face))
:language 'rust
:feature 'escape-sequence
@ -318,6 +282,28 @@
'((ERROR) @font-lock-warning-face))
"Tree-sitter font-lock settings for `rust-ts-mode'.")
(defun rust-ts-mode--fontify-scope (node override start end &optional tail-p)
(let* ((case-fold-search nil)
(face
(cond
((string-match-p "^[A-Z]" (treesit-node-text node))
'font-lock-type-face)
((and
tail-p
(string-match-p
"\\`\\(?:use_list\\|call_expression\\|use_as_clause\\|use_declaration\\)\\'"
(treesit-node-type (treesit-node-parent (treesit-node-parent node)))))
nil)
(t 'font-lock-constant-face))))
(when face
(treesit-fontify-with-override
(treesit-node-start node) (treesit-node-end node)
face
override start end))))
(defun rust-ts-mode--fontify-tail (node override start end)
(rust-ts-mode--fontify-scope node override start end t))
(defalias 'rust-ts-mode--fontify-pattern
(and
(treesit-available-p)

View file

@ -81,6 +81,8 @@ Argument LANGUAGE is either `typescript' or `tsx'."
((parent-is "member_expression") parent-bol typescript-ts-mode-indent-offset)
((parent-is "named_imports") parent-bol typescript-ts-mode-indent-offset)
((parent-is "statement_block") parent-bol typescript-ts-mode-indent-offset)
((parent-is "switch_case") parent-bol typescript-ts-mode-indent-offset)
((parent-is "switch_default") parent-bol typescript-ts-mode-indent-offset)
((parent-is "type_arguments") parent-bol typescript-ts-mode-indent-offset)
((parent-is "variable_declarator") parent-bol typescript-ts-mode-indent-offset)
((parent-is "arguments") parent-bol typescript-ts-mode-indent-offset)
@ -101,12 +103,14 @@ Argument LANGUAGE is either `typescript' or `tsx'."
`(((match "<" "jsx_fragment") parent 0)
((parent-is "jsx_fragment") parent typescript-ts-mode-indent-offset)
((node-is "jsx_closing_element") parent 0)
((node-is "jsx_element") parent typescript-ts-mode-indent-offset)
((match "jsx_element" "statement") parent typescript-ts-mode-indent-offset)
((parent-is "jsx_element") parent typescript-ts-mode-indent-offset)
((parent-is "jsx_text") parent-bol typescript-ts-mode-indent-offset)
((parent-is "jsx_opening_element") parent typescript-ts-mode-indent-offset)
((parent-is "jsx_expression") parent-bol typescript-ts-mode-indent-offset)
((match "/" "jsx_self_closing_element") parent 0)
((parent-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)))
;; FIXME(Theo): This no-node catch-all should be removed. When is it needed?
(no-node parent-bol 0))))
(defvar typescript-ts-mode--keywords
@ -377,8 +381,9 @@ See `treesit-sexp-type-regexp' for more information.")
;; Electric
(setq-local electric-indent-chars
(append "{}():;," electric-indent-chars))
(append "{}():;,<>/" electric-indent-chars))
(setq-local electric-layout-rules
'((?\; . after) (?\{ . after) (?\} . before)))
;; Navigation.
(setq-local treesit-defun-type-regexp
(regexp-opt '("class_declaration"

View file

@ -1,7 +1,7 @@
;;; xref.el --- Cross-referencing commands -*-lexical-binding:t-*-
;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
;; Version: 1.6.1
;; Version: 1.6.2
;; Package-Requires: ((emacs "26.1"))
;; This is a GNU ELPA :core package. Avoid functionality that is not

View file

@ -9918,7 +9918,12 @@ minibuffer, but don't quit the completions window."
(with-current-buffer buffer
(choose-completion-string
choice buffer
(or (and completion-use-base-affixes base-affixes)
;; Don't allow affixes to replace the whole buffer when not
;; in the minibuffer. Thus check for `completion-in-region-mode'
;; to ignore non-nil value of `completion-use-base-affixes' set by
;; `minibuffer-choose-completion'.
(or (and (not completion-in-region-mode)
completion-use-base-affixes base-affixes)
base-position
;; If all else fails, just guess.
(list (choose-completion-guess-base-position choice)))

View file

@ -7029,27 +7029,17 @@ string will be displayed only if BODY takes longer than TIMEOUT seconds.
(lambda ()
,@body)))
(defun function-alias-p (func &optional noerror)
(defun function-alias-p (func &optional _noerror)
"Return nil if FUNC is not a function alias.
If FUNC is a function alias, return the function alias chain.
If the function alias chain contains loops, an error will be
signaled. If NOERROR, the non-loop parts of the chain is returned."
(declare (side-effect-free t))
(let ((chain nil)
(orig-func func))
(nreverse
(catch 'loop
(while (and (symbolp func)
(setq func (symbol-function func))
(symbolp func))
(when (or (memq func chain)
(eq func orig-func))
(if noerror
(throw 'loop chain)
(signal 'cyclic-function-indirection (list orig-func))))
(push func chain))
chain))))
If FUNC is a function alias, return the function alias chain."
(declare (advertised-calling-convention (func) "30.1")
(side-effect-free error-free))
(let ((chain nil))
(while (and (symbolp func)
(setq func (symbol-function func))
(symbolp func))
(push func chain))
(nreverse chain)))
(defun readablep (object)
"Say whether OBJECT has a readable syntax.

View file

@ -1048,26 +1048,30 @@ example, sets a variable, use `transient-define-infix' instead.
(setq args (plist-put args :key pop)))
(cond
((or (stringp car)
(eq (car-safe car) 'lambda))
(and (eq (car-safe car) 'lambda)
(not (commandp car))))
(setq args (plist-put args :description pop)))
((and (symbolp car)
(not (keywordp car))
(not (commandp car))
(commandp (cadr spec)))
(setq args (plist-put args :description (macroexp-quote pop)))))
(cond
((keywordp car)
(error "Need command, got %S" car))
(error "Need command, got `%s'" car))
((symbolp car)
(setq args (plist-put args :command (macroexp-quote pop))))
((and (commandp car)
(not (stringp car)))
(let ((cmd pop)
(sym (intern (format "transient:%s:%s"
prefix
(or (plist-get args :description)
(plist-get args :key))))))
(defalias sym cmd)
(setq args (plist-put args :command (macroexp-quote sym)))))
(sym (intern
(format "transient:%s:%s"
prefix
(let ((desc (plist-get args :description)))
(if (and desc (or (stringp desc) (symbolp desc)))
desc
(plist-get args :key)))))))
(setq args (plist-put args :command `(defalias ',sym ,cmd)))))
((or (stringp car)
(and car (listp car)))
(let ((arg pop))

View file

@ -1186,12 +1186,18 @@ See `treesit-simple-indent-presets'.")
(skip-syntax-backward "-")
(point))))
(cons 'prev-adaptive-prefix
(lambda (_n parent &rest _)
(let ((comment-start-bol
(save-excursion
(goto-char (treesit-node-start parent))
(line-beginning-position))))
(lambda (_n parent bol &rest _)
(let (comment-start-bol
this-line-has-prefix)
(save-excursion
(goto-char (treesit-node-start parent))
(setq comment-start-bol (line-beginning-position))
(goto-char bol)
(setq this-line-has-prefix
(and (looking-at adaptive-fill-regexp)
(match-string 1)))
(forward-line -1)
(and (>= (point) comment-start-bol)
adaptive-fill-regexp
@ -1199,7 +1205,14 @@ See `treesit-simple-indent-presets'.")
;; If previous line is an empty line, don't
;; indent.
(not (looking-at (rx (* whitespace) eol)))
(match-end 0))))))
;; Return the anchor. If the indenting line
;; has a prefix and the previous line also
;; has a prefix, indent to the beginning of
;; prev line's prefix rather than the end of
;; prev line's prefix. (Bug#61314).
(or (and this-line-has-prefix
(match-beginning 1))
(match-end 0)))))))
;; TODO: Document.
(cons 'grand-parent
(lambda (_n parent &rest _)
@ -1336,8 +1349,11 @@ prev-adaptive-prefix
Goes to the beginning of previous non-empty line, and tries
to match `adaptive-fill-regexp'. If it matches, return the
end of the match, otherwise return nil. This is useful for a
`indent-relative'-like indent behavior for block comments.")
end of the match, otherwise return nil. However, if the
current line begins with a prefix, return the beginning of
the prefix of the previous line instead, so that the two
prefixes aligns. This is useful for a `indent-relative'-like
indent behavior for block comments.")
(defun treesit--simple-indent-eval (exp)
"Evaluate EXP.

View file

@ -514,6 +514,10 @@ load_gccjit_if_necessary (bool mandatory)
#define CALL2I(fun, arg1, arg2) \
CALLN (Ffuncall, intern_c_string (STR (fun)), arg1, arg2)
/* Like call4 but stringify and intern. */
#define CALL4I(fun, arg1, arg2, arg3, arg4) \
CALLN (Ffuncall, intern_c_string (STR (fun)), arg1, arg2, arg3, arg4)
#define DECL_BLOCK(name, func) \
gcc_jit_block *(name) = \
gcc_jit_function_new_block ((func), STR (name))
@ -4991,8 +4995,8 @@ DEFUN ("comp--compile-ctxt-to-file", Fcomp__compile_ctxt_to_file,
format_string ("%s_libgccjit_repro.c", SSDATA (ebase_name)));
Lisp_Object tmp_file =
Fmake_temp_file_internal (base_name, make_fixnum (0),
build_string (".eln.tmp"), Qnil);
CALL4I (make-temp-file, base_name, Qnil, build_string (".eln.tmp"), Qnil);
Lisp_Object encoded_tmp_file = ENCODE_FILE (tmp_file);
#ifdef WINDOWSNT
encoded_tmp_file = ansi_encode_filename (encoded_tmp_file);

View file

@ -840,7 +840,9 @@ the position will be taken. */)
}
DEFUN ("fset", Ffset, Sfset, 2, 2, 0,
doc: /* Set SYMBOL's function definition to DEFINITION, and return DEFINITION. */)
doc: /* Set SYMBOL's function definition to DEFINITION, and return DEFINITION.
If the resulting chain of function definitions would contain a loop,
signal a `cyclic-function-indirection' error. */)
(register Lisp_Object symbol, Lisp_Object definition)
{
CHECK_SYMBOL (symbol);
@ -852,6 +854,12 @@ DEFUN ("fset", Ffset, Sfset, 2, 2, 0,
eassert (valid_lisp_object_p (definition));
/* Ensure non-circularity. */
for (Lisp_Object s = definition; SYMBOLP (s) && !NILP (s);
s = XSYMBOL (s)->u.s.function)
if (EQ (s, symbol))
xsignal1 (Qcyclic_function_indirection, symbol);
#ifdef HAVE_NATIVE_COMP
register Lisp_Object function = XSYMBOL (symbol)->u.s.function;
@ -1078,7 +1086,7 @@ If CMD is not a command, the return value is nil.
Value, if non-nil, is a list (interactive SPEC). */)
(Lisp_Object cmd)
{
Lisp_Object fun = indirect_function (cmd); /* Check cycles. */
Lisp_Object fun = indirect_function (cmd);
bool genfun = false;
if (NILP (fun))
@ -1168,7 +1176,7 @@ If COMMAND is not a command, the return value is nil.
The value, if non-nil, is a list of mode name symbols. */)
(Lisp_Object command)
{
Lisp_Object fun = indirect_function (command); /* Check cycles. */
Lisp_Object fun = indirect_function (command);
if (NILP (fun))
return Qnil;
@ -2482,55 +2490,22 @@ If the current binding is global (the default), the value is nil. */)
/* If OBJECT is a symbol, find the end of its function chain and
return the value found there. If OBJECT is not a symbol, just
return it. If there is a cycle in the function chain, signal a
cyclic-function-indirection error.
This is like Findirect_function, except that it doesn't signal an
error if the chain ends up unbound. */
return it. */
Lisp_Object
indirect_function (register Lisp_Object object)
indirect_function (Lisp_Object object)
{
Lisp_Object tortoise, hare;
hare = tortoise = object;
for (;;)
{
if (!SYMBOLP (hare) || NILP (hare))
break;
hare = XSYMBOL (hare)->u.s.function;
if (!SYMBOLP (hare) || NILP (hare))
break;
hare = XSYMBOL (hare)->u.s.function;
tortoise = XSYMBOL (tortoise)->u.s.function;
if (EQ (hare, tortoise))
xsignal1 (Qcyclic_function_indirection, object);
}
return hare;
while (SYMBOLP (object) && !NILP (object))
object = XSYMBOL (object)->u.s.function;
return object;
}
DEFUN ("indirect-function", Findirect_function, Sindirect_function, 1, 2, 0,
doc: /* Return the function at the end of OBJECT's function chain.
If OBJECT is not a symbol, just return it. Otherwise, follow all
function indirections to find the final function binding and return it.
Signal a cyclic-function-indirection error if there is a loop in the
function chain of symbols. */)
(register Lisp_Object object, Lisp_Object noerror)
function indirections to find the final function binding and return it. */)
(Lisp_Object object, Lisp_Object noerror)
{
Lisp_Object result;
/* Optimize for no indirection. */
result = object;
if (SYMBOLP (result) && !NILP (result)
&& (result = XSYMBOL (result)->u.s.function, SYMBOLP (result)))
result = indirect_function (result);
if (!NILP (result))
return result;
return Qnil;
return indirect_function (object);
}
/* Extract and set vector and string elements. */

View file

@ -2116,7 +2116,7 @@ then strings and vectors are not accepted. */)
fun = function;
fun = indirect_function (fun); /* Check cycles. */
fun = indirect_function (fun);
if (NILP (fun))
return Qnil;

View file

@ -3653,6 +3653,7 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1,
re_opcode_t op2;
bool multibyte = RE_MULTIBYTE_P (bufp);
unsigned char *pend = bufp->buffer + bufp->used;
re_char *p2_orig = p2;
eassert (p1 >= bufp->buffer && p1 < pend
&& p2 >= bufp->buffer && p2 <= pend);
@ -3822,6 +3823,23 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1,
case notcategoryspec:
return ((re_opcode_t) *p1 == categoryspec && p1[1] == p2[1]);
case on_failure_jump_nastyloop:
case on_failure_jump_smart:
case on_failure_jump_loop:
case on_failure_keep_string_jump:
case on_failure_jump:
{
int mcnt;
p2++;
EXTRACT_NUMBER_AND_INCR (mcnt, p2);
/* Don't just test `mcnt > 0` because non-greedy loops have
their test at the end with an unconditional jump at the start. */
if (p2 + mcnt > p2_orig) /* Ensure forward progress. */
return (mutually_exclusive_p (bufp, p1, p2)
&& mutually_exclusive_p (bufp, p1, p2 + mcnt));
break;
}
default:
;
}

View file

@ -29,6 +29,7 @@
(advice-add 'sm-test1 :around (lambda (f y) (* (funcall f y) 2)))
(advice-remove 'sm-test1 (lambda (f y) (* (funcall f y) 5)))
(defun sm-test1 (x) (+ x 4))
(declare-function sm-test1 nil)
(should (equal (sm-test1 6) 20))
(advice-remove 'sm-test1 (lambda (f y) (* (funcall f y) 2)))
(should (equal (sm-test1 6) 10))
@ -62,6 +63,7 @@
(ert-deftest advice-tests-advice ()
"Test advice code."
(defun sm-test2 (x) (+ x 4))
(declare-function sm-test2 nil)
(should (equal (sm-test2 6) 10))
(defadvice sm-test2 (around sm-test activate)
ad-do-it (setq ad-return-value (* ad-return-value 5)))
@ -94,6 +96,7 @@
(ert-deftest advice-tests-combination ()
"Combining old style and new style advices."
(defun sm-test5 (x) (+ x 4))
(declare-function sm-test5 nil)
(should (equal (sm-test5 6) 10))
(advice-add 'sm-test5 :around (lambda (f y) (* (funcall f y) 5)))
(should (equal (sm-test5 6) 50))
@ -112,6 +115,7 @@
(ert-deftest advice-test-called-interactively-p ()
"Check interaction between advice and called-interactively-p."
(defun sm-test7 (&optional x) (interactive) (+ (or x 7) 4))
(declare-function sm-test7 nil)
(advice-add 'sm-test7 :around
(lambda (f &rest args)
(list (cons 1 (called-interactively-p)) (apply f args))))
@ -119,7 +123,7 @@
(should (equal (call-interactively 'sm-test7) '((1 . t) 11)))
(let ((smi 7))
(advice-add 'sm-test7 :before
(lambda (&rest args)
(lambda (&rest _args)
(setq smi (called-interactively-p))))
(should (equal (list (sm-test7) smi)
'(((1 . nil) 11) nil)))
@ -137,6 +141,7 @@ This tests the currently broken case of the innermost advice to a
function being an around advice."
:expected-result :failed
(defun sm-test7.2 () (interactive) (cons 1 (called-interactively-p)))
(declare-function sm-test7.2 nil)
(advice-add 'sm-test7.2 :around
(lambda (f &rest args)
(list (cons 1 (called-interactively-p)) (apply f args))))
@ -147,6 +152,7 @@ function being an around advice."
"Check interaction between filter-args advice and called-interactively-p."
:expected-result :failed
(defun sm-test7.3 () (interactive) (cons 1 (called-interactively-p)))
(declare-function sm-test7.3 nil)
(advice-add 'sm-test7.3 :filter-args #'list)
(should (equal (sm-test7.3) '(1 . nil)))
(should (equal (call-interactively 'sm-test7.3) '(1 . t))))

View file

@ -180,10 +180,6 @@ Return first line of the output of (describe-function-1 FUNC)."
(ert-deftest help-fns--analyze-function-recursive ()
(defalias 'help-fns--a 'help-fns--b)
(should (equal (help-fns--analyze-function 'help-fns--a)
'(help-fns--a help-fns--b t help-fns--b)))
;; Make a loop and see that it doesn't infloop.
(defalias 'help-fns--b 'help-fns--a)
(should (equal (help-fns--analyze-function 'help-fns--a)
'(help-fns--a help-fns--b t help-fns--b))))

View file

@ -0,0 +1,45 @@
Code:
(lambda ()
(c-ts-mode)
(newline)
(indent-for-tab-command))
Point-Char: |
Name: Indents inside #if preproc
=-=
static void
free_glyph_pool (struct glyph_pool *pool)
{
if (pool)
{
#if defined GLYPH_DEBUG|
#endif
}
}
=-=
static void
free_glyph_pool (struct glyph_pool *pool)
{
if (pool)
{
#if defined GLYPH_DEBUG
|
#endif
}
}
=-=-=
Name: Indents to 0 if #if preproc at root
=-=
#if 0|
/* */
static void
=-=
#if 0
|
/* */
static void
=-=-=

View file

@ -242,6 +242,21 @@ line 2
*/
=-=-=
Name: Block Comment prefixes (Bug#61314)
=-=-=
/*
- item1
- item2
- item3
*/
=-=-=
/*
- item1
- item2
- item3
*/
=-=-=
Code:
(lambda ()
@ -354,3 +369,19 @@ int main()
};
}
=-=-=
Code:
(lambda ()
(c++-ts-mode)
(setq-local indent-tabs-mode nil)
(setq-local c-ts-mode-indent-offset 2)
(indent-region (point-min) (point-max)))
Name: Declaration List (Namespace) (Bug#61635)
=-=
namespace test {
class Name {
};
}
=-=-=

View file

@ -27,6 +27,10 @@
(skip-unless (treesit-ready-p 'c))
(ert-test-erts-file (ert-resource-file "indent.erts")))
(ert-deftest c-ts-mode-test-indentation-preproc ()
(skip-unless (treesit-ready-p 'c))
(ert-test-erts-file (ert-resource-file "indent-preproc.erts")))
(ert-deftest c-ts-mode-test-indentation-bsd ()
(skip-unless (treesit-ready-p 'c))
(ert-test-erts-file (ert-resource-file "indent-bsd.erts")))

View file

@ -1058,10 +1058,12 @@ final or penultimate step during initialization."))
'(subr-tests--b subr-tests--c)))
(defalias 'subr-tests--d 'subr-tests--e)
(defalias 'subr-tests--e 'subr-tests--d)
(should-error (function-alias-p 'subr-tests--d))
(should (equal (function-alias-p 'subr-tests--d t)
'(subr-tests--e))))
(should (equal (function-alias-p 'subr-tests--d)
'(subr-tests--e)))
(fset 'subr-tests--f 'subr-tests--a)
(should (equal (function-alias-p 'subr-tests--f)
'(subr-tests--a subr-tests--b subr-tests--c))))
(ert-deftest test-readablep ()
(should (readablep "foo"))

View file

@ -772,4 +772,40 @@ comparing the subr with a much slower Lisp implementation."
"Can't set variable marked with 'make_symbol_constant'."
(should-error (setq most-positive-fixnum 1) :type 'setting-constant))
(ert-deftest data-tests-fset ()
(fset 'data-tests--fs-fun (lambda () 'moo))
(declare-function data-tests--fs-fun nil)
(should (equal (data-tests--fs-fun) 'moo))
(fset 'data-tests--fs-fun1 'data-tests--fs-fun)
(declare-function data-tests--fs-fun1 nil)
(should (equal (data-tests--fs-fun1) 'moo))
(fset 'data-tests--fs-a 'data-tests--fs-b)
(fset 'data-tests--fs-b 'data-tests--fs-c)
(should-error (fset 'data-tests--fs-c 'data-tests--fs-c)
:type 'cyclic-function-indirection)
(fset 'data-tests--fs-d 'data-tests--fs-a)
(should-error (fset 'data-tests--fs-c 'data-tests--fs-d)
:type 'cyclic-function-indirection))
(ert-deftest data-tests-defalias ()
(defalias 'data-tests--da-fun (lambda () 'baa))
(declare-function data-tests--da-fun nil)
(should (equal (data-tests--da-fun) 'baa))
(defalias 'data-tests--da-fun1 'data-tests--da-fun)
(declare-function data-tests--da-fun1 nil)
(should (equal (data-tests--da-fun1) 'baa))
(defalias 'data-tests--da-a 'data-tests--da-b)
(defalias 'data-tests--da-b 'data-tests--da-c)
(should-error (defalias 'data-tests--da-c 'data-tests--da-c)
:type 'cyclic-function-indirection)
(defalias 'data-tests--da-d 'data-tests--da-a)
(should-error (defalias 'data-tests--da-c 'data-tests--da-d)
:type 'cyclic-function-indirection))
;;; data-tests.el ends here

View file

@ -872,4 +872,15 @@ This evaluates the TESTS test cases from glibc."
(should (equal (string-match "\\`\\(?:ab\\)*\\'" "a") nil))
(should (equal (string-match "\\`a\\{2\\}*\\'" "a") nil)))
(ert-deftest regexp-tests-backtrack-optimization () ;bug#61514
;; Make sure we don't use up the regexp stack needlessly.
(with-current-buffer (get-buffer-create "*bug*")
(erase-buffer)
(insert (make-string 1000000 ?x) "=")
(goto-char (point-min))
(should (looking-at "x*=*"))
(should (looking-at "x*\\(=\\|:\\)"))
(should (looking-at "x*\\(=\\|:\\)*"))
(should (looking-at "x*=*?"))))
;;; regex-emacs-tests.el ends here