Fix mark-defun when there's no spaces between successive defuns.

The problem was a parse-partial-sexp call which tried to use the STOPBEFORE
argument to detect non-syntactic WS.  This fails on a "}", which does not
begin a sexp.

* lisp/emacs-lisp/lisp.h (beginning-of-defun--in-emptyish-line-p): Enhance to
handle BOL being in a string.
(beginning-of-defun-comments): Call the above function in place of the call
to parse-partial-sexp.
This commit is contained in:
Alan Mackenzie 2018-01-06 11:48:32 +00:00
parent a377c652b5
commit b8d74c4578

View file

@ -405,12 +405,13 @@ whitespace."
;; See https://lists.gnu.org/r/help-gnu-emacs/2016-08/msg00141.html ;; See https://lists.gnu.org/r/help-gnu-emacs/2016-08/msg00141.html
(save-excursion (save-excursion
(forward-line 0) (forward-line 0)
(< (line-end-position) (let ((ppss (syntax-ppss)))
(let ((ppss (syntax-ppss))) (and (null (nth 3 ppss))
(when (nth 4 ppss) (< (line-end-position)
(goto-char (nth 8 ppss))) (progn (when (nth 4 ppss)
(forward-comment (point-max)) (goto-char (nth 8 ppss)))
(point))))) (forward-comment (point-max))
(point)))))))
(defun beginning-of-defun-comments (&optional arg) (defun beginning-of-defun-comments (&optional arg)
"Move to the beginning of ARGth defun, including comments." "Move to the beginning of ARGth defun, including comments."
@ -428,10 +429,7 @@ whitespace."
(progn (skip-syntax-backward (progn (skip-syntax-backward
"-" (line-beginning-position)) "-" (line-beginning-position))
(not (bolp))) ; Check for blank line. (not (bolp))) ; Check for blank line.
(progn (parse-partial-sexp (beginning-of-defun--in-emptyish-line-p)))) ; Check for non-comment text.
(line-beginning-position) (line-end-position)
nil t (syntax-ppss (line-beginning-position)))
(eolp))))) ; Check for non-comment text.
(forward-line (if first-line-p 0 1)))) (forward-line (if first-line-p 0 1))))
(defvar end-of-defun-function (defvar end-of-defun-function