Function: pdf-util-do-events
pdf-util-do-events is a macro defined in pdf-util.el.
Signature
(pdf-util-do-events EVENT-RESOLUTION-UNREAD-P CONDITION &rest BODY)
Documentation
Read EVENTs while CONDITION executing BODY.
Process at most 1/RESOLUTION events per second. If UNREAD-p is non-nil, unread the final non-processed event.
(FN (EVENT RESOLUTION &optional UNREAD-p) CONDITION &rest BODY)
Source Code
;; Defined in /nix/store/63h5z2vmzn0mfavcxi2idi23g5xcgkbl-emacs-packages-deps/share/emacs/site-lisp/elpa/pdf-tools-20260102.1101/pdf-util.el
(defmacro pdf-util-do-events (event-resolution-unread-p condition &rest body)
"Read EVENTs while CONDITION executing BODY.
Process at most 1/RESOLUTION events per second. If UNREAD-p is
non-nil, unread the final non-processed event.
\(FN (EVENT RESOLUTION &optional UNREAD-p) CONDITION &rest BODY\)"
(declare (indent 2) (debug ((symbolp form &optional form) form body)))
(cl-destructuring-bind (event resolution &optional unread-p)
event-resolution-unread-p
(let ((*seconds (make-symbol "seconds"))
(*timestamp (make-symbol "timestamp"))
(*clock (make-symbol "clock"))
(*unread-p (make-symbol "unread-p"))
(*resolution (make-symbol "resolution")))
`(let* ((,*unread-p ,unread-p)
(,*resolution ,resolution)
(,*seconds 0)
(,*timestamp (float-time))
(,*clock (lambda (&optional secs)
(when secs
(setq ,*seconds secs
,*timestamp (float-time)))
(- (+ ,*timestamp ,*seconds)
(float-time))))
(,event (read-event)))
(while ,condition
(when (<= (funcall ,*clock) 0)
(progn ,@body)
(setq ,event nil)
(funcall ,*clock ,*resolution))
(setq ,event
(or (read-event nil nil
(and ,event
(max 0 (funcall ,*clock))))
,event)))
(when (and ,*unread-p ,event)
(setq unread-command-events
(append unread-command-events
(list ,event))))))))