Function: eca-api-request-while-no-input

eca-api-request-while-no-input is a natively compiled function defined in eca-api.el.

Signature

(eca-api-request-while-no-input SESSION &key METHOD PARAMS)

Documentation

Request sync the ECA server SESSION passing METHOD and PARAMS.

Waits until there is no input.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-api.el
(cl-defun eca-api-request-while-no-input (session &key method params)
  "Request sync the ECA server SESSION passing METHOD and PARAMS.
Waits until there is no input."
  (if (or non-essential (not eca-api-request-while-no-input-may-block))
      (let* ((send-time (float-time))
             ;; max time by which we must get a response
             (expected-time (and
                             eca-api-response-timeout
                             (+ send-time eca-api-response-timeout)))
             resp-result resp-error)
        (eca-api-request-async
         session
         :method method
         :params params
         :success-callback (lambda (res) (setf resp-result (or res :finished)) (throw 'eca-done '_))
         :error-callback (lambda (err) (setf resp-error err) (throw 'eca-done '_)))
        (let ((req-id eca--last-id))
          (unwind-protect
              (progn
                (while (not (or resp-error resp-result (input-pending-p)))
                  (catch 'eca-done
                    (sit-for
                     (if expected-time (- expected-time send-time) 1)))
                  (setq send-time (float-time))
                  (when (and expected-time (< expected-time send-time))
                    (error "Timeout while waiting for response.  Method: %s" method)))
                (cond
                 ((eq resp-result :finished) nil)
                 (resp-result resp-result)
                 (resp-error (error "%s" resp-error))))
            ;; Cleanup: remove stale handler on non-local exit
            ;; (input interrupt, timeout, C-g, etc.)
            (unless (or resp-result resp-error)
              (setf (eca--session-response-handlers session)
                    (plist-put (eca--session-response-handlers session)
                               req-id nil)))
            (when (and (input-pending-p) eca-api--throw-on-input)
              (throw 'input :interrupted)))))
    (eca-api-request-sync session :method method :params params)))