Function: cape--company-call
cape--company-call is a byte-compiled function defined in cape.el.
Signature
(cape--company-call &rest APP)
Documentation
Apply APP and handle future return values.
Source Code
;; Defined in ~/.emacs.d/elpa/cape-20260804.2303/cape.el
;;;; Capf combinators
(defun cape--company-call (&rest app)
"Apply APP and handle future return values."
;; Backends are non-interruptible. Disable interrupts!
(let ((toi throw-on-input)
(throw-on-input nil))
(pcase (apply app)
;; Handle async future return values.
(`(:async . ,fetch)
(let ((res 'cape--waiting))
(if toi
(unwind-protect
(progn
(funcall fetch
(lambda (arg)
(when (eq res 'cape--waiting)
(push 'cape--done unread-command-events)
(setq res arg))))
(when (eq res 'cape--waiting)
(let ((ev (let ((input-method-function nil)
(echo-keystrokes 0))
(read-event nil t))))
(unless (eq ev 'cape--done)
(push (cons t ev) unread-command-events)
(setq res 'cape--cancelled)
(throw toi t)))))
(setq unread-command-events
(delq 'cape--done unread-command-events)))
(funcall fetch (lambda (arg) (setq res arg)))
;; Force synchronization, not interruptible! We use polling
;; here and ignore pending input since we don't use
;; `sit-for'. This is the same method used by Company itself.
(while (eq res 'cape--waiting)
(sleep-for 0.01)))
res))
;; Plain old synchronous return value.
(res res))))