Mercurial > emacs
diff lisp/diff-mode.el @ 91525:15d5c70e7c61
Add new TODO entry.
(diff-create-changelog): New function.
(diff-mode-menu): Bind it.
| author | Dan Nicolaescu <dann@ics.uci.edu> |
|---|---|
| date | Mon, 04 Feb 2008 21:41:09 +0000 |
| parents | 74f3c7c77fbe |
| children | bc2ac468b977 |
line wrap: on
line diff
--- a/lisp/diff-mode.el Mon Feb 04 17:27:36 2008 +0000 +++ b/lisp/diff-mode.el Mon Feb 04 21:41:09 2008 +0000 @@ -39,6 +39,8 @@ ;; Todo: +;; - Improve `diff-create-changelog', it is very simplistic now. +;; ;; - Add a `delete-after-apply' so C-c C-a automatically deletes hunks. ;; Also allow C-c C-a to delete already-applied hunks. ;; @@ -171,6 +173,8 @@ ["Apply hunk" diff-apply-hunk t] ["Test applying hunk" diff-test-hunk t] ["Apply diff with Ediff" diff-ediff-patch t] + ["Create Change Log" diff-create-changelog + :help "Create ChangeLog entries for the changes in the diff buffer"] "-----" ["Reverse direction" diff-reverse-direction t] ["Context -> Unified" diff-context->unified t] @@ -1725,6 +1729,35 @@ props 'diff-refine-preproc)))))))) +(defun diff-create-changelog () + "Iterate through the current diff and create ChangeLog entries." + (interactive) + ;; XXX: Currently add-change-log-entry-other-window is only called + ;; once per hunk. Some hunks have multiple changes, it would be + ;; good to call it for each change. + (save-excursion + (goto-char (point-min)) + (let ((orig-buffer (current-buffer))) + (condition-case nil + ;; Call add-change-log-entry-other-window for each hunk in + ;; the diff buffer. + (while t + (set-buffer orig-buffer) + (diff-hunk-next) + (beginning-of-line) + (while (not (looking-at "^ ")) + (forward-line 1)) + ;; Move to where the changes are, + ;; `add-change-log-entry-other-window' works better in + ;; that case. + (while (not (looking-at "^[!+-]")) + (forward-line 1)) + (add-change-log-entry-other-window) + ;; Insert a "." so that the entries created don't get + ;; merged. + (insert ".")) + (error nil))))) + ;; provide the package (provide 'diff-mode)
