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