summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2017-05-09 09:38:49 +0200
committerMarcin Borkowski <mbork@mbork.pl>2017-05-12 11:40:57 +0200
commitaa779b0f15faa114fa5e3f59b17e628b1a837af8 (patch)
tree6fdfebea817af3e55e856e33f3e0b61d9ce32786
parentcb8fcbc3cbd8f6cf95bb858b72188d752672cf6b (diff)
downloademacs-fix/bug-21072.tar.gz
Modify `beginning-of-defun-comments'fix/bug-21072
* lisp/emacs-lisp/lisp.el (beginning-of-defun-comments): Try not to stop in the middle of a multiline comment.
-rw-r--r--lisp/emacs-lisp/lisp.el24
1 files 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))