From aa779b0f15faa114fa5e3f59b17e628b1a837af8 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Tue, 9 May 2017 09:38:49 +0200 Subject: [PATCH] Modify `beginning-of-defun-comments' * lisp/emacs-lisp/lisp.el (beginning-of-defun-comments): Try not to stop in the middle of a multiline comment. --- lisp/emacs-lisp/lisp.el | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el index 71c27d08a2f..0c1fe42fedb 100644 --- a/lisp/emacs-lisp/lisp.el +++ b/lisp/emacs-lisp/lisp.el @@ -417,14 +417,22 @@ whitespace." (interactive "^p") (unless arg (setq arg 1)) (beginning-of-defun arg) - (let (nbobp) - (while (progn - (setq nbobp (zerop (forward-line -1))) - (and (not (looking-at "^\\s-*$")) - (beginning-of-defun--in-emptyish-line-p) - nbobp))) - (when nbobp - (forward-line 1)))) + (let (first-line-p) + (while (let ((ppss (progn (setq first-line-p (= (forward-line -1) -1)) + (syntax-ppss (line-end-position))))) + (while (and (nth 4 ppss) ; If eol is in a line-spanning comment, + (< (nth 8 ppss) (line-beginning-position))) + (goto-char (nth 8 ppss)) ; skip to comment start. + (setq ppss (syntax-ppss (line-end-position)))) + (and (not first-line-p) + (progn (skip-syntax-backward + "-" (line-beginning-position)) + (not (bolp))) ; Check for blank line. + (progn (parse-partial-sexp + (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)))) (defvar end-of-defun-function (lambda () (forward-sexp 1)) -- 2.39.2