Function: ediff-set-fine-overlays-in-one-buffer
ediff-set-fine-overlays-in-one-buffer is a byte-compiled function
defined in ediff-diff.el.gz.
Signature
(ediff-set-fine-overlays-in-one-buffer BUF-TYPE DIFF-LIST REGION-NUM)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-diff.el.gz
;; Convert diff list to overlays for a given DIFF-REGION
;; in buffer of type BUF-TYPE
(defun ediff-set-fine-overlays-in-one-buffer (buf-type diff-list region-num)
(let* ((current-diff -1)
(reg-start (ediff-get-diff-posn buf-type 'beg region-num))
(buff (ediff-get-buffer buf-type))
(ctl-buf ediff-control-buffer)
combined-merge-diff-list
diff-overlay-list list-element
begin end overlay)
(ediff-clear-fine-differences-in-one-buffer region-num buf-type)
(setq diff-list (cdr diff-list)) ; discard list type (words or points)
(ediff-with-current-buffer buff (goto-char reg-start))
;; if it is a combined merge then set overlays in buff C specially
(if (and ediff-merge-job (eq buf-type 'C)
(setq combined-merge-diff-list
(ediff-looks-like-combined-merge region-num)))
(ediff-set-fine-overlays-for-combined-merge
combined-merge-diff-list region-num)
;; regular fine diff
(while diff-list
(setq current-diff (1+ current-diff)
list-element (car diff-list)
begin (aref list-element (cond ((eq buf-type 'A) 0)
((eq buf-type 'B) 2)
(t 4))) ; buf C
end (aref list-element (cond ((eq buf-type 'A) 1)
((eq buf-type 'B) 3)
(t 5)))) ; buf C
(if (not (or begin end))
() ; skip this diff
;; Put overlays at appropriate places in buffers
;; convert lines to points, if necessary
(ediff-with-current-buffer ctl-buf
(setq begin (ediff-goto-word (1+ begin) buff)
end (ediff-goto-word end buff 'end)))
(setq overlay (ediff-make-bullet-proof-overlay begin end buff))
;; record all overlays for this difference region
(setq diff-overlay-list (nconc diff-overlay-list (list overlay))))
(setq diff-list (cdr diff-list))
) ; while
;; convert the list of difference information into a vector
;; for fast access
(ediff-set-fine-diff-vector
region-num buf-type (vconcat diff-overlay-list))
)))