(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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user