Function: ediff-really-quit

ediff-really-quit is a byte-compiled function defined in ediff-util.el.gz.

Signature

(ediff-really-quit REVERSE-DEFAULT-KEEP-VARIANTS)

Source Code

;; Defined in /usr/src/emacs/lisp/vc/ediff-util.el.gz
;; Perform the quit operations.
(defun ediff-really-quit (reverse-default-keep-variants)
  (ediff-unhighlight-diffs-totally)
  (ediff-clear-diff-vector 'ediff-difference-vector-A 'fine-diffs-also)
  (ediff-clear-diff-vector 'ediff-difference-vector-B 'fine-diffs-also)
  (ediff-clear-diff-vector 'ediff-difference-vector-C 'fine-diffs-also)
  (ediff-clear-diff-vector 'ediff-difference-vector-Ancestor 'fine-diffs-also)

  (ediff-delete-temp-files)

  ;; Restore the visibility range.  This affects only ediff-*-regions/windows.
  ;; Since for other job names ediff-visible-region sets
  ;; ediff-visible-bounds to ediff-wide-bounds, the settings below are
  ;; ignored for such jobs.
  (if ediff-quit-widened
      (setq ediff-visible-bounds ediff-wide-bounds)
    (setq ediff-visible-bounds ediff-narrow-bounds))

  ;; Apply selective display to narrow or widen
  (ediff-visible-region)
  (mapc (lambda (overl)
	  (if (overlayp overl)
	      (delete-overlay overl)))
	ediff-wide-bounds)
  (mapc (lambda (overl)
	  (if (overlayp overl)
	      (delete-overlay overl)))
	ediff-narrow-bounds)

  ;; restore buffer mode line id's in buffer-A/B/C
  (let ((control-buffer ediff-control-buffer)
	(meta-buffer ediff-meta-buffer)
        ;; FIXME: Here we ignore the global part of the
        ;; ediff-after-quit-hook-internal hook.
        (after-quit-hook-internal (remq t ediff-after-quit-hook-internal))
	(session-number ediff-meta-session-number)
	;; suitable working frame
        (warp-frame (if (and (display-graphic-p) (eq ediff-grab-mouse t))
			(cond ((window-live-p ediff-window-A)
			       (window-frame ediff-window-A))
			      ((window-live-p ediff-window-B)
			       (window-frame ediff-window-B))
			      (t (next-frame))))))
    (condition-case nil
	(ediff-with-current-buffer ediff-buffer-A
	  (setq ediff-this-buffer-ediff-sessions
		(delq control-buffer ediff-this-buffer-ediff-sessions))
	  (kill-local-variable 'mode-line-buffer-identification)
	  (kill-local-variable 'mode-line-format)
	  )
      (error))

    (condition-case nil
	(ediff-with-current-buffer ediff-buffer-B
	  (setq ediff-this-buffer-ediff-sessions
		(delq control-buffer ediff-this-buffer-ediff-sessions))
	  (kill-local-variable 'mode-line-buffer-identification)
	  (kill-local-variable 'mode-line-format)
	  )
      (error))

    (condition-case nil
	(ediff-with-current-buffer ediff-buffer-C
	  (setq ediff-this-buffer-ediff-sessions
		(delq control-buffer ediff-this-buffer-ediff-sessions))
	  (kill-local-variable 'mode-line-buffer-identification)
	  (kill-local-variable 'mode-line-format)
	  )
      (error))

    (condition-case nil
	(ediff-with-current-buffer ediff-ancestor-buffer
	  (setq ediff-this-buffer-ediff-sessions
		(delq control-buffer ediff-this-buffer-ediff-sessions))
	  (kill-local-variable 'mode-line-buffer-identification)
	  (kill-local-variable 'mode-line-format)
	  )
      (error))

  (setq ediff-session-registry
	(delq ediff-control-buffer ediff-session-registry))
  (ediff-update-registry)
  ;; restore state of buffers to what it was before ediff
  (ediff-restore-protected-variables)

  ;; If the user interrupts (canceling saving the merge buffer), continue
  ;; normally.
  (condition-case nil
      (if (ediff-merge-job)
	  (run-hooks 'ediff-quit-merge-hook))
    (quit))

  (run-hooks 'ediff-cleanup-hook)

  (ediff-janitor
   'ask
   ;; reverse-default-keep-variants is t if the user quits with a prefix arg
   (if reverse-default-keep-variants
       (not ediff-keep-variants)
     ediff-keep-variants))

  ;; one hook here is ediff-cleanup-mess, which kills the control buffer and
  ;; other auxiliary buffers. we made it into a hook to let the users do their
  ;; own cleanup, if needed.
  (run-hooks 'ediff-quit-hook)
  (ediff-update-meta-buffer meta-buffer nil session-number)

  ;; warp mouse into a working window
  (setq warp-frame  ; if mouse is over a reasonable frame, use it
	(cond ((ediff-good-frame-under-mouse))
	      (t warp-frame)))
  (if (and (display-graphic-p) (frame-live-p warp-frame) ediff-grab-mouse)
      (set-mouse-position warp-frame 2 1))

  (mapc #'funcall after-quit-hook-internal)
  ))