Function: diff--refine-hunk
diff--refine-hunk is a byte-compiled function defined in
diff-mode.el.gz.
Signature
(diff--refine-hunk START END)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/diff-mode.el.gz
(defun diff--refine-hunk (start end)
(require 'smerge-mode)
(goto-char start)
(let* ((style (diff-hunk-style)) ;Skips the hunk header as well.
(beg (point))
(props-c '((diff-mode . fine) (face . diff-refine-changed)))
(props-r '((diff-mode . fine) (face . diff-refine-removed)))
(props-a '((diff-mode . fine) (face . diff-refine-added))))
(remove-overlays beg end 'diff-mode 'fine)
(goto-char beg)
(pcase style
('unified
(while (re-search-forward "^-" end t)
(let ((beg-del (progn (beginning-of-line) (point)))
beg-add end-add)
(when (and (diff--forward-while-leading-char ?- end)
;; Allow for "\ No newline at end of file".
(progn (diff--forward-while-leading-char ?\\ end)
(setq beg-add (point)))
(diff--forward-while-leading-char ?+ end)
(progn (diff--forward-while-leading-char ?\\ end)
(setq end-add (point))))
(smerge-refine-regions beg-del beg-add beg-add end-add
nil #'diff-refine-preproc props-r props-a)))))
('context
(let* ((middle (save-excursion (re-search-forward "^---" end t)))
(other middle))
(while (and middle
(re-search-forward "^\\(?:!.*\n\\)+" middle t))
(smerge-refine-regions (match-beginning 0) (match-end 0)
(save-excursion
(goto-char other)
(re-search-forward "^\\(?:!.*\n\\)+" end)
(setq other (match-end 0))
(match-beginning 0))
other
(if diff-use-changed-face props-c)
#'diff-refine-preproc
(unless diff-use-changed-face props-r)
(unless diff-use-changed-face props-a)))))
(_ ;; Normal diffs.
(let ((beg1 (1+ (point))))
(when (re-search-forward "^---.*\n" end t)
;; It's a combined add&remove, so there's something to do.
(smerge-refine-regions beg1 (match-beginning 0)
(match-end 0) end
nil #'diff-refine-preproc props-r props-a)))))))