Merge from origin/emacs-31

2d496b842d ; Fix Gregor Schmid's attribution for lua-mode.el.
69c50dcb47 ; package-activate-all: Drop requiring package now not pr...
f94637749a vc-switch-working-tree: Use project-current again
060451d6e0 treesit-explore-mode usability improvements (bug#80935)
48b064a2aa Fix 'vc-dir-resynch-file' again (bug#80967)
This commit is contained in:
Sean Whitton 2026-05-08 13:48:22 +01:00
commit 876a1db6ee
6 changed files with 163 additions and 81 deletions

View file

@ -977,7 +977,7 @@ and co-wrote longlines.el tango-dark-theme.el tango-theme.el
and changed simple.el display.texi xdisp.c files.el frames.texi and changed simple.el display.texi xdisp.c files.el frames.texi
cus-edit.el files.texi custom.el subr.el text.texi faces.el keyboard.c cus-edit.el files.texi custom.el subr.el text.texi faces.el keyboard.c
startup.el package.el misc.texi emacs.texi modes.texi mouse.el startup.el package.el misc.texi emacs.texi modes.texi mouse.el
custom.texi image.c window.el and 903 other files custom.texi image.c window.el and 920 other files
Chris Chase: co-wrote idlw-shell.el idlwave.el Chris Chase: co-wrote idlw-shell.el idlwave.el
@ -1439,7 +1439,7 @@ and changed cedet/semantic.el db.el insert.el semantic/complete.el c.by
c.el db-el.el db-file.el db-find.el ede-grammar.el eieio-opt.el c.el db-el.el db-file.el db-find.el ede-grammar.el eieio-opt.el
eieio.el eieio.texi gnus.texi registry.el srecode/compile.el eieio.el eieio.texi gnus.texi registry.el srecode/compile.el
wisent/python.el analyze.el bovine/el.el bovine/grammar.el wisent/python.el analyze.el bovine/el.el bovine/grammar.el
decorate/mode.el and 87 other files decorate/mode.el and 88 other files
Davide Pola: changed comp-cstr.el comp-run.el Davide Pola: changed comp-cstr.el comp-run.el
@ -1811,7 +1811,7 @@ and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c simple.el w32fns.c 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 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 dispnew.c frames.texi files.texi w32proc.c xfaces.c process.c window.c
dispextern.h and 1437 other files dispextern.h and 1451 other files
Eliza Velasquez: changed server.el simple.el Eliza Velasquez: changed server.el simple.el
@ -1914,7 +1914,7 @@ and changed c.srt ede.texi info.el rmail.el speedbspec.el cedet.el
ede-autoconf.srt ede-make.srt eieio.texi gud.el sb-dir-minus.xpm ede-autoconf.srt ede-make.srt eieio.texi gud.el sb-dir-minus.xpm
sb-dir-plus.xpm sb-dir.xpm sb-mail.xpm sb-pg-minus.xpm sb-pg-plus.xpm sb-dir-plus.xpm sb-dir.xpm sb-mail.xpm sb-pg-minus.xpm sb-pg-plus.xpm
sb-pg.xpm sb-tag-gt.xpm sb-tag-minus.xpm sb-tag-plus.xpm sb-pg.xpm sb-tag-gt.xpm sb-tag-minus.xpm sb-tag-plus.xpm
and 34 other files and 35 other files
Eric Schulte: wrote ob-awk.el ob-calc.el ob-comint.el ob-css.el ob-dot.el Eric Schulte: wrote ob-awk.el ob-calc.el ob-comint.el ob-css.el ob-dot.el
ob-emacs-lisp.el ob-eval.el ob-forth.el ob-gnuplot.el ob-haskell.el ob-emacs-lisp.el ob-eval.el ob-forth.el ob-gnuplot.el ob-haskell.el
@ -2313,7 +2313,7 @@ and changed configure.ac Makefile.in src/Makefile.in calendar.el
lisp/Makefile.in diary-lib.el files.el make-dist rmail.el lisp/Makefile.in diary-lib.el files.el make-dist rmail.el
progmodes/f90.el bytecomp.el admin.el misc/Makefile.in simple.el progmodes/f90.el bytecomp.el admin.el misc/Makefile.in simple.el
authors.el startup.el emacs.texi lib-src/Makefile.in display.texi authors.el startup.el emacs.texi lib-src/Makefile.in display.texi
ack.texi subr.el and 1753 other files ack.texi subr.el and 1771 other files
Glynn Clements: wrote gamegrid.el snake.el tetris.el Glynn Clements: wrote gamegrid.el snake.el tetris.el
@ -2357,8 +2357,9 @@ Gregorio Gervasio, Jr.: changed gnus-sum.el
Gregor Kappler: changed ox.el Gregor Kappler: changed ox.el
Gregor Schmid: changed intervals.c intervals.h tcl-mode.el textprop.c Gregor Schmid: co-wrote lua-mode.el
dispnew.c indent.c xdisp.c and changed intervals.c intervals.h tcl-mode.el textprop.c dispnew.c
indent.c xdisp.c
Gregory Chernov: changed nnslashdot.el Gregory Chernov: changed nnslashdot.el
@ -3337,7 +3338,7 @@ and co-wrote help-tests.el keymap-tests.el
and changed subr.el desktop.el w32fns.c bs.el faces.el simple.el and changed subr.el desktop.el w32fns.c bs.el faces.el simple.el
emacsclient.c files.el server.el help-fns.el xdisp.c org.el w32term.c emacsclient.c files.el server.el help-fns.el xdisp.c org.el w32term.c
w32.c buffer.c keyboard.c ido.el image.c window.c eval.c allout.el w32.c buffer.c keyboard.c ido.el image.c window.c eval.c allout.el
and 1191 other files and 1206 other files
Juan Pechiar: changed ob-octave.el Juan Pechiar: changed ob-octave.el
@ -3390,7 +3391,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 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 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 subr.el diff-mode.el repeat.el vc.el mouse.el files.el image-mode.el
menu-bar.el project.el display.texi and 525 other files menu-bar.el project.el display.texi and 526 other files
Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
w32console.c w32heap.c w32inevt.c w32term.h w32console.c w32heap.c w32inevt.c w32term.h
@ -3420,7 +3421,7 @@ and co-wrote longlines.el tramp-sh.el tramp.el
and changed message.el gnus-agent.el gnus-sum.el files.el nnmail.el and changed message.el gnus-agent.el gnus-sum.el files.el nnmail.el
tramp.texi nntp.el gnus.el simple.el ange-ftp.el dired.el paragraphs.el tramp.texi nntp.el gnus.el simple.el ange-ftp.el dired.el paragraphs.el
bindings.el files.texi gnus-art.el gnus-group.el man.el INSTALL bindings.el files.texi gnus-art.el gnus-group.el man.el INSTALL
Makefile.in crisp.el fileio.c and 44 other files Makefile.in crisp.el fileio.c and 45 other files
Kailash C. Chowksey: changed HELLO ind-util.el kannada.el knd-util.el Kailash C. Chowksey: changed HELLO ind-util.el kannada.el knd-util.el
lisp/Makefile.in loadup.el lisp/Makefile.in loadup.el
@ -3552,7 +3553,7 @@ and co-wrote ps-def.el ps-mule.el ps-print.el ps-samp.el quail.el
and changed coding.c mule-cmds.el mule.el fontset.c charset.c xdisp.c and changed coding.c mule-cmds.el mule.el fontset.c charset.c xdisp.c
font.c fontset.el xterm.c fileio.c mule-conf.el ftfont.c characters.el font.c fontset.el xterm.c fileio.c mule-conf.el ftfont.c characters.el
fns.c mule-diag.el coding.h charset.h ccl.c xfaces.c editfns.c fns.c mule-diag.el coding.h charset.h ccl.c xfaces.c editfns.c
composite.c and 370 other files composite.c and 385 other files
Kenichi Okada: co-wrote sasl-cram.el sasl-digest.el Kenichi Okada: co-wrote sasl-cram.el sasl-digest.el
@ -3779,7 +3780,7 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el
and changed subr.el simple.el gnus.texi files.el display.texi process.c and changed subr.el simple.el gnus.texi files.el display.texi process.c
help-fns.el text.texi image.c dired.el help.el image.el package.el help-fns.el text.texi image.c dired.el help.el image.el package.el
edebug.el shortdoc.el dired-aux.el gnutls.c minibuffer.el subr-x.el edebug.el shortdoc.el dired-aux.el gnutls.c minibuffer.el subr-x.el
auth-source.el smtpmail.el and 1050 other files auth-source.el smtpmail.el and 1051 other files
Lars Rasmusson: changed ebrowse.c Lars Rasmusson: changed ebrowse.c
@ -3915,7 +3916,7 @@ Luc Teirlinck: wrote help-at-pt.el
and changed files.el autorevert.el cus-edit.el subr.el simple.el and changed files.el autorevert.el cus-edit.el subr.el simple.el
frames.texi startup.el display.texi files.texi dired.el comint.el frames.texi startup.el display.texi files.texi dired.el comint.el
modes.texi custom.texi emacs.texi fns.c frame.el ielm.el minibuf.texi modes.texi custom.texi emacs.texi fns.c frame.el ielm.el minibuf.texi
variables.texi buffers.texi commands.texi and 210 other files variables.texi buffers.texi commands.texi and 211 other files
Ludovic Courtès: wrote nnregistry.el Ludovic Courtès: wrote nnregistry.el
and changed configure.ac gnus.texi loadup.el and changed configure.ac gnus.texi loadup.el
@ -4417,7 +4418,7 @@ Michael Olson: changed erc.el erc-backend.el Makefile erc-track.el
erc-log.el erc-stamp.el erc-autoaway.el erc-dcc.el erc-goodies.el erc-log.el erc-stamp.el erc-autoaway.el erc-dcc.el erc-goodies.el
erc-list.el erc-compat.el erc-identd.el erc.texi erc-bbdb.el erc-list.el erc-compat.el erc-identd.el erc.texi erc-bbdb.el
erc-match.el erc-notify.el erc-ibuffer.el erc-services.el remember.el erc-match.el erc-notify.el erc-ibuffer.el erc-services.el remember.el
erc-button.el erc-nicklist.el and 53 other files erc-button.el erc-nicklist.el and 54 other files
Michael Orlitzky: changed tex-mode.el Michael Orlitzky: changed tex-mode.el
@ -5261,9 +5262,10 @@ Protesilaos Stavrou: wrote modus-operandi-deuteranopia-theme.el
modus-vivendi-deuteranopia-theme.el modus-vivendi-theme.el modus-vivendi-deuteranopia-theme.el modus-vivendi-theme.el
modus-vivendi-tinted-theme.el modus-vivendi-tritanopia-theme.el modus-vivendi-tinted-theme.el modus-vivendi-tritanopia-theme.el
and changed modus-themes.org eww.el vc-dir.el TUTORIAL.el_GR log-view.el and changed modus-themes.org eww.el vc-dir.el TUTORIAL.el_GR log-view.el
time.el vc-git.el appt.el apropos.el custom.el diff-mode.el flymake.el modus-themes.texi time.el vc-git.el appt.el apropos.el custom.el
ibuffer.el language/greek.el log-edit.el minibuffer.el package.el diff-mode.el flymake.el ibuffer.el language/greek.el log-edit.el
perl-mode.el shortdoc.el shr.el vc-cvs.el and 5 other files minibuffer.el package.el perl-mode.el shortdoc.el shr.el
and 6 other files
Przemsyław Kryger: wrote package-vc-tests.el Przemsyław Kryger: wrote package-vc-tests.el
@ -5988,7 +5990,7 @@ and co-wrote help-tests.el keymap-tests.el
and changed subr.el package.el image-dired.el checkdoc.el efaq.texi and changed subr.el package.el image-dired.el checkdoc.el efaq.texi
cperl-mode.el help.el simple.el progmodes/python.el dired.el files.el cperl-mode.el help.el simple.el progmodes/python.el dired.el files.el
bookmark.el browse-url.el gnus.texi keymap.c dired-x.el erc.el image.c bookmark.el browse-url.el gnus.texi keymap.c dired-x.el erc.el image.c
cl-macs.el message.el subr-tests.el and 1947 other files cl-macs.el message.el subr-tests.el and 1948 other files
Stefan Merten: co-wrote rst.el Stefan Merten: co-wrote rst.el
@ -6005,7 +6007,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 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 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 package.el tex-mode.el progmodes/compile.el lread.c keymap.c window.c
easy-mmode.el and 1743 other files easy-mmode.el and 1744 other files
Stefano Facchini: changed gtkutil.c Stefano Facchini: changed gtkutil.c
@ -6050,7 +6052,7 @@ and changed dired.el wid-edit.el wdired.el dired-tests.el files.el
todo-mode.texi dabbrev-tests.el wdired-tests.el diary-lib.el todo-mode.texi dabbrev-tests.el wdired-tests.el diary-lib.el
menu-bar.el minibuffer.el dabbrev.el dired-aux.el doc-view.el info.el menu-bar.el minibuffer.el dabbrev.el dired-aux.el doc-view.el info.el
outline.el simple.el todo-test-1.todo widget.texi INSTALL_BEGIN outline.el simple.el todo-test-1.todo widget.texi INSTALL_BEGIN
allout.el and 89 other files allout.el and 90 other files
Stephen C. Gilardi: changed configure.ac Stephen C. Gilardi: changed configure.ac
@ -6242,7 +6244,7 @@ and changed spam.el gnus.el nnimap.el gnus.texi gnutls.c gnus-sum.el
auth.texi cfengine.el gnus-sync.el gnus-util.el gnus-start.el netrc.el auth.texi cfengine.el gnus-sync.el gnus-util.el gnus-start.el netrc.el
gnutls.h message.el spam-stat.el .gitlab-ci.yml encrypt.el gnutls.h message.el spam-stat.el .gitlab-ci.yml encrypt.el
mail-source.el nnir.el nnmail.el auth-source-tests.el mail-source.el nnir.el nnmail.el auth-source-tests.el
and 124 other files and 125 other files
Terje Rosten: changed xfns.c version.el xterm.c xterm.h Terje Rosten: changed xfns.c version.el xterm.c xterm.h

View file

@ -451,15 +451,13 @@ The variable `package-load-list' controls which packages to load."
(setq package-activated-list nil)) (setq package-activated-list nil))
(load qs nil 'nomessage) (load qs nil 'nomessage)
t))) t)))
(progn ;; Silence the "unknown function" warning when this is compiled
(require 'package) ;; inside `loaddefs.el'.
;; Silence the "unknown function" warning when this is compiled ;; FIXME: We use `with-no-warnings' because the effect of
;; inside `loaddefs.el'. ;; `declare-function' is currently not scoped, so if we use
;; FIXME: We use `with-no-warnings' because the effect of ;; it here, we end up with a redefinition warning instead :-)
;; `declare-function' is currently not scoped, so if we use (with-no-warnings
;; it here, we end up with a redefinition warning instead :-) (package--activate-all)))))
(with-no-warnings
(package--activate-all))))))
(defun package--activate-all () (defun package--activate-all ()
(dolist (elt (package--alist)) (dolist (elt (package--alist))

View file

@ -8,10 +8,10 @@
;; 2004 various (support for Lua 5 and byte compilation) ;; 2004 various (support for Lua 5 and byte compilation)
;; 2001 Christian Vogler <cvogler@gradient.cis.upenn.edu> ;; 2001 Christian Vogler <cvogler@gradient.cis.upenn.edu>
;; 1997 Bret Mogilefsky <mogul-lua@gelatinous.com> ;; 1997 Bret Mogilefsky <mogul-lua@gelatinous.com>
;; Bret Mogilefsky started from tcl-mode by ;; Gregor Schmid <schmid@fb3-s7.math.tu-berlin.de>
;; Gregor Schmid <schmid@fb3-s7.math.tu-berlin.de> ;; Bret Mogilefsky started from tcl-mode by Gregor Schmid with tons of
;; with tons of assistance from Paul Du Bois <pld-lua@gelatinous.com> ;; assistance from Paul Du Bois <pld-lua@gelatinous.com>
;; and Aaron Smith <aaron-lua@gelatinous.com>. ;; and Aaron Smith <aaron-lua@gelatinous.com>.
;; Maintainer: emacs-devel@gnu.org ;; Maintainer: emacs-devel@gnu.org
;; Keywords: languages, processes, tools ;; Keywords: languages, processes, tools

View file

@ -5035,6 +5035,10 @@ in the region."
(while (and (null (pos-visible-in-window-p pos window)) (while (and (null (pos-visible-in-window-p pos window))
(= (forward-line 4) 0)) (= (forward-line 4) 0))
(set-window-start window (point)))) (set-window-start window (point))))
;; Recenter if amenable.
(when (< scroll-conservatively 101)
(with-selected-window window
(recenter)))
(set-window-point window pos))))))) (set-window-point window pos)))))))
(defun treesit--explorer-refresh () (defun treesit--explorer-refresh ()
@ -5197,11 +5201,6 @@ leaves point at the end of the last line of NODE."
(when (not named) (when (not named)
(overlay-put ov 'face 'treesit-explorer-anonymous-node))))) (overlay-put ov 'face 'treesit-explorer-anonymous-node)))))
(defun treesit--explorer-kill-explorer-buffer ()
"Kill the explorer buffer of this buffer."
(when (buffer-live-p treesit--explorer-buffer)
(kill-buffer treesit--explorer-buffer)))
(defun treesit--explorer-generate-parser-alist () (defun treesit--explorer-generate-parser-alist ()
"Return an alist of (PARSER-NAME . PARSER) for relevant parsers. "Return an alist of (PARSER-NAME . PARSER) for relevant parsers.
Relevant parsers include all global parsers and local parsers that Relevant parsers include all global parsers and local parsers that
@ -5210,7 +5209,12 @@ covers point. PARSER-NAME are unique."
(local-parsers-at-point (local-parsers-at-point
(treesit-local-parsers-at (point))) (treesit-local-parsers-at (point)))
res) res)
(dolist (parser (treesit-parser-list nil nil t)) ;; Add `treesit-primary-parser' first in the list, if populated.
(dolist (parser (delete-dups
(delq nil
(append
(list treesit-primary-parser)
(treesit-parser-list nil nil t)))))
;; Exclude local parsers that doesn't cover point. ;; Exclude local parsers that doesn't cover point.
(when (or (memq parser local-parsers-at-point) (when (or (memq parser local-parsers-at-point)
(not (memq parser local-parsers))) (not (memq parser local-parsers)))
@ -5230,20 +5234,68 @@ covers point. PARSER-NAME are unique."
res))) res)))
(nreverse res))) (nreverse res)))
(defun treesit--explorer-tree-mode-cleanup ()
"Clean up `treesit--explorer-tree-mode'.
If called from the source buffer, quit the tree buffer window and kill
the explorer buffer.
If called from the explorer tree buffer, disable `treesit-explore-mode'
in the source buffer, quit the tree window and kill its buffer."
(cond
;; Called from the source buffer.
((buffer-live-p treesit--explorer-buffer)
(when (window-live-p (get-buffer-window treesit--explorer-buffer))
(let ((buf treesit--explorer-buffer))
(with-selected-window (get-buffer-window treesit--explorer-buffer)
(quit-window))
(kill-buffer buf))))
;; Called from the tree buffer.
((buffer-live-p treesit--explorer-source-buffer)
(with-current-buffer treesit--explorer-source-buffer
(treesit-explore-mode -1))
(when (window-live-p (get-buffer-window (current-buffer)))
(with-selected-window (get-buffer-window (current-buffer))
(quit-window 'kill))))))
(defun treesit-explorer-tree-window-select ()
"Select the `treesit--explorer-buffer' window.
Invoke this command from the source window."
(interactive)
(if (buffer-live-p treesit--explorer-buffer)
(select-window (get-buffer-window treesit--explorer-buffer))
(user-error "The `treesit-explorer-mode' tree buffer does not exist")))
(defun treesit-explorer-source-buffer-window-select ()
"Select the `treesit--explorer-buffer' window.
Invoke this command from the tree window."
(interactive)
(if (buffer-live-p treesit--explorer-source-buffer)
(select-window (get-buffer-window treesit--explorer-source-buffer))
(user-error "The `treesit-explorer-mode' source buffer does not exist")))
(defvar-keymap treesit-explore-mode-map
:doc "Keymap for the treesit explore mode."
"C-c C-t o" #'treesit-explorer-tree-window-select
"C-c C-t q" #'treesit-explore-quit)
(defvar-keymap treesit--explorer-tree-mode-map (defvar-keymap treesit--explorer-tree-mode-map
:doc "Keymap for the treesit tree explorer. :doc "Keymap for the treesit tree explorer.
Navigates from button to button." Navigates from button to button."
:parent special-mode-map :parent special-mode-map
"n" #'forward-button "n" #'forward-button
"p" #'backward-button "p" #'backward-button
"TAB" #'forward-button "q" #'treesit-explore-quit
"<backtab>" #'backward-button) "TAB" #'forward-button
"<backtab>" #'backward-button
"C-c C-t o" #'treesit-explorer-source-buffer-window-select
"C-c C-t q" #'treesit-explore-quit)
(define-derived-mode treesit--explorer-tree-mode special-mode (define-derived-mode treesit--explorer-tree-mode special-mode
"TS Explorer" "TS Explorer"
"Mode for displaying syntax trees for `treesit-explore-mode'." "Mode for displaying syntax trees for `treesit-explore-mode'."
nil) ;; Clean up `treesit--explorer-tree-mode' when the tree buffer is
;; killed.
(add-hook 'kill-buffer-hook
#'treesit--explorer-tree-mode-cleanup 0 t))
(defun treesit-explorer-switch-parser (parser) (defun treesit-explorer-switch-parser (parser)
"Switch explorer to use PARSER." "Switch explorer to use PARSER."
@ -5252,8 +5304,14 @@ Navigates from button to button."
(treesit--explorer-generate-parser-alist)) (treesit--explorer-generate-parser-alist))
(parser-name (if (= (length parser-alist) 1) (parser-name (if (= (length parser-alist) 1)
(car parser-alist) (car parser-alist)
;; Default to the first parser in the
;; list which we hope is
;; `treesit-primary-parser'.
(completing-read (completing-read
"Parser: " (mapcar #'car parser-alist))))) "Parser: "
(mapcar #'car parser-alist)
nil t nil nil
(caar parser-alist)))))
(alist-get parser-name parser-alist (alist-get parser-name parser-alist
nil nil #'equal)))) nil nil #'equal))))
(unless treesit-explore-mode (unless treesit-explore-mode
@ -5262,7 +5320,9 @@ Navigates from button to button."
(display-buffer treesit--explorer-buffer (display-buffer treesit--explorer-buffer
(cons nil '((inhibit-same-window . t)))) (cons nil '((inhibit-same-window . t))))
(setq-local treesit--explorer-last-node nil) (setq-local treesit--explorer-last-node nil)
(treesit--explorer-refresh)) (treesit--explorer-refresh)
;; Signal that `completing-read' did not quit.
t)
(define-minor-mode treesit-explore-mode (define-minor-mode treesit-explore-mode
"Enable exploring the current buffer's syntax tree. "Enable exploring the current buffer's syntax tree.
@ -5281,33 +5341,41 @@ window."
(buffer-name)))) (buffer-name))))
(with-current-buffer treesit--explorer-buffer (with-current-buffer treesit--explorer-buffer
(treesit--explorer-tree-mode))) (treesit--explorer-tree-mode)))
;; Select parser. ;; Select parser. `treesit-explorer-switch-parser' will return
(call-interactively #'treesit-explorer-switch-parser) ;; t if its `completing-read' did not quit.
;; Set up variables and hooks. (if (not (condition-case _
(add-hook 'post-command-hook (call-interactively #'treesit-explorer-switch-parser)
#'treesit--explorer-post-command 0 t) (quit)))
(add-hook 'kill-buffer-hook (setq treesit-explore-mode nil)
#'treesit--explorer-kill-explorer-buffer 0 t) ;; Track the `treesit--explorer-source-buffer' active region.
;; Tell `desktop-save' to not save explorer buffers. (add-hook 'post-command-hook
(when (boundp 'desktop-modes-not-to-save) #'treesit--explorer-post-command 0 t)
(unless (memq 'treesit--explorer-tree-mode ;; Clean up when the `treesit-explore-mode' buffer is killed.
desktop-modes-not-to-save) (add-hook 'kill-buffer-hook
(push 'treesit--explorer-tree-mode #'treesit--explorer-tree-mode-cleanup 0 t)
desktop-modes-not-to-save))) ;; Tell `desktop-save' to not save explorer buffers.
;; Tell `desktop-save' to not save this minor mode (when (boundp 'desktop-modes-not-to-save)
;; that might disrupt loading the desktop (unless (memq 'treesit--explorer-tree-mode
;; with the prompt to select a parser. desktop-modes-not-to-save)
(when (boundp 'desktop-minor-mode-table) (push 'treesit--explorer-tree-mode
(unless (member '(treesit-explore-mode nil) desktop-modes-not-to-save)))
desktop-minor-mode-table) ;; Tell `desktop-save' to not save this minor mode
(push '(treesit-explore-mode nil) ;; that might disrupt loading the desktop
desktop-minor-mode-table)))) ;; with the prompt to select a parser.
(when (boundp 'desktop-minor-mode-table)
(unless (member '(treesit-explore-mode nil)
desktop-minor-mode-table)
(push '(treesit-explore-mode nil)
desktop-minor-mode-table)))))
;; Turn off explore mode. ;; Turn off explore mode.
(remove-hook 'post-command-hook (remove-hook 'post-command-hook
#'treesit--explorer-post-command t) #'treesit--explorer-post-command t)
(remove-hook 'kill-buffer-hook (remove-hook 'kill-buffer-hook
#'treesit--explorer-kill-explorer-buffer t) #'treesit--explorer-tree-mode-cleanup t)
(treesit--explorer-kill-explorer-buffer))) ;; Clean up if the user disables `treesit-explore-mode' interactively; e.g.,
;; via M-x while leaving the source buffer alive.
(when (called-interactively-p 'any)
(treesit--explorer-tree-mode-cleanup))))
(defun treesit-explore () (defun treesit-explore ()
"Show the explorer." "Show the explorer."
@ -5317,6 +5385,15 @@ window."
(display-buffer treesit--explorer-buffer '(nil (inhibit-same-window . t))) (display-buffer treesit--explorer-buffer '(nil (inhibit-same-window . t)))
(treesit-explore-mode))) (treesit-explore-mode)))
(defun treesit-explore-quit ()
"Quit and clean up `treesit-explore-mode'.
Invoke this command from the source buffer or its tree buffer."
(interactive)
;; Called from the source buffer.
(when (buffer-live-p treesit--explorer-buffer)
(treesit-explore-mode -1))
(treesit--explorer-tree-mode-cleanup))
;;; Install & build language grammar ;;; Install & build language grammar
(defvar treesit-language-source-alist nil (defvar treesit-language-source-alist nil

View file

@ -1261,8 +1261,12 @@ that file."
(vc-dir-fileinfo->state crt-data)) result)) (vc-dir-fileinfo->state crt-data)) result))
(nreverse result))) (nreverse result)))
(defun vc-dir-recompute-file-state (fname def-dir) (defun vc-dir-recompute-file-state (fname def-dir &optional truename)
(let* ((file-short (file-relative-name fname def-dir)) "Compute state of FNAME known to live inside DEF-DIR.
If TRUENAME is non-nil, FNAME is a truename, DEF-DIR not necessarily."
(let* ((file-short (file-relative-name
fname (if truename (file-truename def-dir) def-dir)))
(fname (if truename (expand-file-name file-short def-dir) fname))
(_remove-me-when-CVS-works (_remove-me-when-CVS-works
(when (eq vc-dir-backend 'CVS) (when (eq vc-dir-backend 'CVS)
;; FIXME: Warning: UGLY HACK. The CVS backend caches the state ;; FIXME: Warning: UGLY HACK. The CVS backend caches the state
@ -1330,7 +1334,11 @@ that file."
(vc-dir-resync-directory-files file) (vc-dir-resync-directory-files file)
(ewoc-set-hf vc-ewoc (ewoc-set-hf vc-ewoc
(vc-dir-headers vc-dir-backend ddir) "")) (vc-dir-headers vc-dir-backend ddir) ""))
(let* ((complete-state (vc-dir-recompute-file-state file ddir)) (let* ((complete-state
;; Make sure 'vc-dir-recompute-file-state'
;; knows about the truename nature of 'file'
;; (bug#80967).
(vc-dir-recompute-file-state file ddir t))
(state (cadr complete-state))) (state (cadr complete-state)))
(vc-dir-update (vc-dir-update
(list complete-state) (list complete-state)

View file

@ -5789,14 +5789,11 @@ to the root of this working tree."
(let ((backend (or (vc-deduce-backend) (let ((backend (or (vc-deduce-backend)
(vc-responsible-backend default-directory) (vc-responsible-backend default-directory)
(error "No VC backend")))) (error "No VC backend"))))
;; Manually construct VC project objects because `project-current' ;; Skip to the VC root, otherwise `project-current' could find a
;; might find a non-VC project within the VC working tree containing ;; non-VC project between DEFAULT-DIRECTORY and there (bug#80939).
;; DIRECTORY, but we should ignore that (bug#80939).
(funcall project-find-matching-buffer-function (funcall project-find-matching-buffer-function
`(vc ,backend ,(vc-root-dir backend)) (project-current nil (vc-root-dir backend))
`(vc ,backend (project-current nil directory))))
,(let ((default-directory directory))
(vc-root-dir backend))))))
;;;###autoload ;;;###autoload
(defun vc-working-tree-switch-project (dir) (defun vc-working-tree-switch-project (dir)