(elisp--local-variables): Restore point earlier

* lisp/progmodes/elisp-mode.el (elisp--local-variables): Restore
point before calling `elisp--safe-macroexpand-all` in case this
triggers a temporary redisplay.
This commit is contained in:
Stefan Monnier
2026-04-09 14:32:15 -04:00
parent dcae106214
commit fc128826b5

View File

@@ -868,29 +868,30 @@ use of `macroexpand-all' as a way to find the \"underlying raw code\".")
(defun elisp--local-variables ()
"Return a list of locally let-bound variables at point."
(save-excursion
(skip-syntax-backward "w_")
(let* ((ppss (syntax-ppss))
(txt (buffer-substring-no-properties (or (car (nth 9 ppss)) (point))
(or (nth 8 ppss) (point))))
(closer ()))
(dolist (p (nth 9 ppss))
(push (cdr (syntax-after p)) closer))
(setq closer (apply #'string closer))
(let* ((sexp (condition-case nil
(car (read-from-string
(concat txt "elisp--witness--lisp" closer)))
((invalid-read-syntax end-of-file) nil)))
(vars (elisp--local-variables-1
nil (elisp--safe-macroexpand-all sexp))))
(delq nil
(mapcar (lambda (var)
(and (symbolp var)
(not (string-match (symbol-name var) "\\`[&_]"))
;; Eliminate uninterned vars.
(intern-soft var)
var))
vars))))))
(let* ((sexp
(save-excursion
(skip-syntax-backward "w_")
(let* ((ppss (syntax-ppss))
(txt (buffer-substring-no-properties
(or (car (nth 9 ppss)) (point))
(or (nth 8 ppss) (point))))
(closer
(nreverse (mapcar (lambda (p) (cdr (syntax-after p)))
(nth 9 ppss)))))
(condition-case nil
(car (read-from-string
(concat txt "elisp--witness--lisp" closer)))
((invalid-read-syntax end-of-file) nil)))))
(vars (elisp--local-variables-1
nil (elisp--safe-macroexpand-all sexp))))
(delq nil
(mapcar (lambda (var)
(and (symbolp var)
(not (string-match (symbol-name var) "\\`[&_]"))
;; Eliminate uninterned vars.
(intern-soft var)
var))
vars))))
(defconst elisp--local-variables-completion-table
(let ((lastpos nil) (lastvars nil))