diff options
author | Noam Postavsky <npostavs@gmail.com> | 2017-05-09 09:38:49 +0200 |
---|---|---|
committer | Marcin Borkowski <mbork@mbork.pl> | 2017-05-12 11:40:57 +0200 |
commit | aa779b0f15faa114fa5e3f59b17e628b1a837af8 (patch) | |
tree | 6fdfebea817af3e55e856e33f3e0b61d9ce32786 /lisp/emacs-lisp | |
parent | cb8fcbc3cbd8f6cf95bb858b72188d752672cf6b (diff) | |
download | emacs-aa779b0f15faa114fa5e3f59b17e628b1a837af8.tar.gz emacs-aa779b0f15faa114fa5e3f59b17e628b1a837af8.tar.bz2 emacs-aa779b0f15faa114fa5e3f59b17e628b1a837af8.zip |
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.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/lisp.el | 24 |
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)) |