Function: ediff-pop-diff
ediff-pop-diff is a byte-compiled function defined in
ediff-util.el.gz.
Signature
(ediff-pop-diff N BUF-TYPE)
Documentation
Pop last killed Nth diff region from buffer BUF-TYPE.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-util.el.gz
(defun ediff-pop-diff (n buf-type)
"Pop last killed Nth diff region from buffer BUF-TYPE."
(let* ((n-th-record (assoc n ediff-killed-diffs-alist))
(buf (ediff-get-buffer buf-type))
(saved-rec (assoc buf (cdr n-th-record)))
(three-way ediff-3way-job)
(ctl-buf ediff-control-buffer)
ediff-verbose-p
saved-diff reg-beg reg-end recovered)
(if (cdr saved-rec)
(setq saved-diff (cdr saved-rec))
(if (> ediff-number-of-differences 0)
(user-error "Nothing saved for diff %d in buffer %S" (1+ n) buf-type)
(error ediff-NO-DIFFERENCES)))
(setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer))
(setq reg-end (ediff-get-diff-posn buf-type 'end n ediff-control-buffer))
(condition-case conds
(ediff-with-current-buffer buf
(let ((inhibit-read-only (null buffer-read-only)))
(goto-char reg-end)
(insert saved-diff)
(when (> reg-end reg-beg)
(delete-region reg-beg reg-end))
(setq recovered t)
))
(error (message "ediff-pop-diff: %s %s"
(car conds)
(mapconcat #'prin1-to-string (cdr conds) " "))
(beep 1)))
;; Clearing fine diffs is necessary for
;; ediff-unselect-and-select-difference to properly recompute them. We
;; can't rely on ediff-copy-diff to clear this vector, as the user might
;; have modified diff regions after copying and, thus, may have recomputed
;; fine diffs.
(if recovered
(ediff-clear-fine-differences n))
;; adjust state of difference
(if (and three-way recovered)
(ediff-set-state-of-diff-in-all-buffers n ctl-buf))
(ediff-refresh-mode-lines)
(if recovered
(progn
(setq n-th-record (delq saved-rec n-th-record))
(message "Diff region %d in buffer %S restored" (1+ n) buf-type)
))
))