Function: vundo--check-for-command
vundo--check-for-command is a macro defined in vundo.el.
Signature
(vundo--check-for-command &rest BODY)
Documentation
Sanity check before running interactive commands.
Do sanity check, then evaluate BODY.
Source Code
;; Defined in /nix/store/386w2ds6bdh3gcz9k23jssw4cni4lfr2-emacs-packages-deps/share/emacs/site-lisp/elpa/vundo-2.4.0/vundo.el
(defmacro vundo--check-for-command (&rest body)
"Sanity check before running interactive commands.
Do sanity check, then evaluate BODY."
(declare (debug (&rest form)))
`(progn
(when (not (derived-mode-p 'vundo-mode))
(user-error "Not in vundo buffer"))
(when (not (buffer-live-p vundo--orig-buffer))
(when (y-or-n-p "Original buffer is gone, kill vundo buffer? ")
(kill-buffer-and-window))
;; Non-local exit.
(user-error ""))
;; If ORIG-BUFFER changed since we last synced the vundo buffer
;; (eg, user left vundo buffer and did some edit in ORIG-BUFFER
;; then comes back), refresh to catch up.
(let ((undo-list (buffer-local-value
'buffer-undo-list vundo--orig-buffer)))
;; 1. Refresh if the beginning is not the same.
(cond ((not (eq (vundo--sans-nil undo-list)
(vundo--sans-nil vundo--prev-undo-list)))
(vundo--refresh-buffer vundo--orig-buffer (current-buffer))
(message "Refresh"))
;; 2. It is possible that GC trimmed the end of undo
;; list, but that doesn't affect us:
;; `vundo--prev-mod-list' and `vundo--prev-undo-list' are
;; still perfectly fine. Run the command normally. Of
;; course, the next time the user invokes `vundo', the
;; new tree will reflect the trimmed undo list.
(t ,@body)))))