Function: emerge-split-difference
emerge-split-difference is an interactive and byte-compiled function
defined in emerge.el.gz.
Signature
(emerge-split-difference)
Documentation
Split the current difference where the points are in the three windows.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/vc/emerge.el.gz
(defun emerge-split-difference ()
"Split the current difference where the points are in the three windows."
(interactive)
(let ((n emerge-current-difference))
;; check that this is a valid difference
(emerge-validate-difference)
;; get the point values and old difference
(let ((A-point (with-current-buffer emerge-A-buffer
(point-marker)))
(B-point (with-current-buffer emerge-B-buffer
(point-marker)))
(merge-point (point-marker))
(old-diff (aref emerge-difference-list n)))
;; check location of the points, give error if they aren't in the
;; differences
(if (or (< A-point (aref old-diff 0))
(> A-point (aref old-diff 1)))
(error "Point outside of difference in A buffer"))
(if (or (< B-point (aref old-diff 2))
(> B-point (aref old-diff 3)))
(error "Point outside of difference in B buffer"))
(if (or (< merge-point (aref old-diff 4))
(> merge-point (aref old-diff 5)))
(error "Point outside of difference in merge buffer"))
;; remove the flags
(emerge-unselect-difference emerge-current-difference)
;; increment total number of differences
(setq emerge-number-of-differences (1+ emerge-number-of-differences))
;; build new differences vector
(let ((i 0)
(new-differences (make-vector emerge-number-of-differences nil)))
(while (< i emerge-number-of-differences)
(aset new-differences i
(cond
((< i n)
(aref emerge-difference-list i))
((> i (1+ n))
(aref emerge-difference-list (1- i)))
((= i n)
(vector (aref old-diff 0)
A-point
(aref old-diff 2)
B-point
(aref old-diff 4)
merge-point
(aref old-diff 6)))
(t
(vector (copy-marker A-point)
(aref old-diff 1)
(copy-marker B-point)
(aref old-diff 3)
(copy-marker merge-point)
(aref old-diff 5)
(aref old-diff 6)))))
(setq i (1+ i)))
(setq emerge-difference-list new-differences))
;; set the current difference correctly
(setq emerge-current-difference n)
;; fix the mode line
(emerge-refresh-mode-line)
;; reinsert the flags
(emerge-select-difference emerge-current-difference)
(emerge-recenter))))