;; Todo:
-;; - Improve `diff-create-changelog', it is very simplistic now.
+;; - Improve `diff-add-change-log-entries-other-window',
+;; 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.
`(("\e" . ,diff-mode-shared-map)
;; From compilation-minor-mode.
("\C-c\C-c" . diff-goto-source)
+ ;; By analogy with the global C-x 4 a binding.
+ ("\C-x4A" . diff-add-change-log-entries-other-window)
;; Misc operations.
("\C-c\C-a" . diff-apply-hunk)
("\C-c\C-e" . diff-ediff-patch)
["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
+ ["Create Change Log entries" diff-add-change-log-entries-other-window
:help "Create ChangeLog entries for the changes in the diff buffer"]
"-----"
["Reverse direction" diff-reverse-direction t]
props 'diff-refine-preproc))))))))
-(defun diff-create-changelog ()
- "Iterate through the current diff and create ChangeLog entries."
+(defun diff-add-change-log-entries-other-window ()
+ "Iterate through the current diff and create ChangeLog entries.
+I.e. like `add-change-log-entry-other-window' but applied to all hunks."
(interactive)
;; XXX: Currently add-change-log-entry-other-window is only called
;; once per hunk. Some hunks have multiple changes, it would be
(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 "."))
+ (while (progn
+ (diff-hunk-next)
+ ;; Move to where the changes are,
+ ;; `add-change-log-entry-other-window' works better in
+ ;; that case.
+ (re-search-forward "\n[!+-<>]" nil t))
+ (save-excursion
+ (add-change-log-entry-other-window)
+ ;; Insert a "." so that the entries created don't get
+ ;; merged.
+ (insert ".")))
+ ;; When there's no more hunks, diff-hunk-next signals an error.
(error nil)))))
;; provide the package