Mercurial > emacs
diff lisp/log-edit.el @ 105201:cdc275504289
(log-edit-changelog-entries): Avoid inf-loops.
Try and avoid copying twice the same paragraph.
(log-edit-changelog-paragraph, log-edit-changelog-subparagraph):
Remove save-excursion.
(log-edit-changelog-entry): Do it here instead.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 25 Sep 2009 17:57:09 +0000 |
parents | 5744c85d533a |
children | bd2966850aac |
line wrap: on
line diff
--- a/lisp/log-edit.el Fri Sep 25 17:40:53 2009 +0000 +++ b/lisp/log-edit.el Fri Sep 25 17:57:09 2009 +0000 @@ -560,23 +560,21 @@ (defun log-edit-changelog-paragraph () "Return the bounds of the ChangeLog paragraph containing point. If we are between paragraphs, return the previous paragraph." - (save-excursion - (beginning-of-line) - (if (looking-at "^[ \t]*$") - (skip-chars-backward " \t\n" (point-min))) - (list (progn - (if (re-search-backward "^[ \t]*\n" nil 'or-to-limit) - (goto-char (match-end 0))) - (point)) - (if (re-search-forward "^[ \t\n]*$" nil t) - (match-beginning 0) - (point-max))))) + (beginning-of-line) + (if (looking-at "^[ \t]*$") + (skip-chars-backward " \t\n" (point-min))) + (list (progn + (if (re-search-backward "^[ \t]*\n" nil 'or-to-limit) + (goto-char (match-end 0))) + (point)) + (if (re-search-forward "^[ \t\n]*$" nil t) + (match-beginning 0) + (point-max)))) (defun log-edit-changelog-subparagraph () "Return the bounds of the ChangeLog subparagraph containing point. A subparagraph is a block of non-blank lines beginning with an asterisk. If we are between sub-paragraphs, return the previous subparagraph." - (save-excursion (end-of-line) (if (search-backward "*" nil t) (list (progn (beginning-of-line) (point)) @@ -585,16 +583,17 @@ (if (re-search-forward "^[ \t]*[\n*]" nil t) (match-beginning 0) (point-max)))) - (list (point) (point))))) + (list (point) (point)))) (defun log-edit-changelog-entry () "Return the bounds of the ChangeLog entry containing point. The variable `log-edit-changelog-full-paragraphs' decides whether an \"entry\" is a paragraph or a subparagraph; see its documentation string for more details." - (if log-edit-changelog-full-paragraphs - (log-edit-changelog-paragraph) - (log-edit-changelog-subparagraph))) + (save-excursion + (if log-edit-changelog-full-paragraphs + (log-edit-changelog-paragraph) + (log-edit-changelog-subparagraph)))) (defvar user-full-name) (defvar user-mail-address) @@ -663,11 +662,17 @@ pattern "\\($\\|[^[:alnum:]]\\)")) - (let (texts) - (while (re-search-forward pattern nil t) + (let (texts + (pos (point))) + (while (and (not (eobp)) (re-search-forward pattern nil t)) (let ((entry (log-edit-changelog-entry))) - (push entry texts) - (goto-char (elt entry 1)))) + (if (< (elt entry 1) (max (1+ pos) (point))) + ;; This is not relevant, actually. + nil + (push entry texts)) + ;; Make sure we make progress. + (setq pos (max (1+ pos) (elt entry 1))) + (goto-char pos))) (cons (current-buffer) texts))))))))