From: Noam Postavsky Date: Sun, 5 Mar 2017 05:53:58 +0000 (-0500) Subject: Fix indent-sexp when called from inside a string (Bug#21343) X-Git-Tag: emacs-26.0.90~581 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cf670b49a7704d63575863f832426d32bf6a8c3c;p=emacs.git Fix indent-sexp when called from inside a string (Bug#21343) * lisp/emacs-lisp/lisp-mode.el (indent-sexp): Get initial syntax parse state from `syntax-ppss'. --- diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 5faa6a50ae5..eb07c18b03d 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -1075,10 +1075,14 @@ ENDPOS is encountered." ;; since every line we indent is more deeply nested than point is. (starting-point (save-excursion (if endpos (beginning-of-defun)) (point))) - (state nil) - (init-depth 0) - (next-depth 0) - (last-depth 0) + ;; Use `syntax-ppss' to get initial state so we don't get + ;; confused by starting inside a string. We don't use + ;; `syntax-ppss' in the loop, because this is measurably + ;; slower when we're called on a long list. + (state (syntax-ppss)) + (init-depth (car state)) + (next-depth init-depth) + (last-depth init-depth) (last-syntax-point (point))) (unless endpos ;; Get error now if we don't have a complete sexp after point.