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)
	  ))
    ))