GNU bug report logs -
#58516
28.1; add option/key to rerun current diff without whitespace changes
Previous Next
Reported by: gert <gertopc <at> proton.me>
Date: Fri, 14 Oct 2022 14:55:02 UTC
Severity: normal
Tags: fixed, patch
Found in version 28.1
Fixed in version 30.1
Done: Robert Pluim <rpluim <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #8 received at 58516 <at> debbugs.gnu.org (full text, mbox):
>>>>> On Fri, 14 Oct 2022 11:15:05 +0000, gert via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> said:
Gert> Sometimes, for example when you work together with others, there are
Gert> meaningless whitespace changes in the diff.
Gert> In order to review these diff easier add a key to rerun the current
Gert> diff without showing whitespace changes.
Gert> There is
Gert> ("\C-c\C-w" . diff-ignore-whitespace-hunk)
Gert> which is useful, but incovenient to use when there are many hunks in the diff.
Gert> Add a key which does the same, but for all hunks
Gert> (e.g. diff-toggle-whitespace-changes), so you can easily switch a diff
Gert> buffer to one which ignores all whitespace changes.
Something like this, perhaps. I stuck it on a separate key, but we
could put it on "C-u C-c C-w" instead.
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index a9591c9d82..3b8178884a 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -214,6 +214,7 @@ diff-mode-map
;; `d' because it duplicates the context :-( --Stef
"C-c C-d" #'diff-unified->context
"C-c C-w" #'diff-ignore-whitespace-hunk
+ "C-c C-W" #'diff-ignore-whitespace-all-hunks
;; `l' because it "refreshes" the hunk like C-l refreshes the screen
"C-c C-l" #'diff-refresh-hunk
"C-c C-b" #'diff-refine-hunk ;No reason for `b' :-(
@@ -2275,10 +2276,12 @@ diff--refine-hunk
(match-end 0) end
nil #'diff-refine-preproc props-r props-a)))))))
-(defun diff--iterate-hunks (max fun)
+(defun diff--iterate-hunks (max fun &optional min)
"Iterate over all hunks between point and MAX.
Call FUN with two args (BEG and END) for each hunk."
(save-excursion
+ (when min
+ (goto-char min))
(catch 'malformed
(let* ((beg (or (ignore-errors (diff-beginning-of-hunk))
(ignore-errors (diff-hunk-next) (point))
@@ -2298,6 +2301,13 @@ diff--iterate-hunks
(or (ignore-errors (diff-hunk-next) (point))
max)))))))))
+(defun diff-ignore-whitespace-all-hunks ()
+ "Re-diff all the hunks, ignoring whitespace-differences."
+ (interactive)
+ (diff--iterate-hunks (point-max) (lambda (_ _)
+ (diff-refresh-hunk t))
+ (point-min)))
+
(defun diff--font-lock-refined (max)
"Apply hunk refinement from font-lock."
(when (eq diff-refine 'font-lock)
This bug report was last modified 2 years and 154 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.