Function: eca-chat--set-chat-loading
eca-chat--set-chat-loading is a natively compiled function defined in
eca-chat.el.
Signature
(eca-chat--set-chat-loading SESSION LOADING)
Documentation
Set the SESSION chat loading state.
LOADING can be t (loading), 'stopping (stop in progress), or nil (idle).
Source Code
;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-chat.el
(defun eca-chat--set-chat-loading (session loading)
"Set the SESSION chat loading state.
LOADING can be t (loading), \\='stopping (stop in progress), or nil (idle)."
(unless (eq eca-chat--chat-loading loading)
(setq-local eca-chat--chat-loading loading)
(eca-chat--invalidate-tab-line-cache session)
(pcase loading
('t
(setq-local eca-chat--prompt-start-time (current-time))
(let ((buf (current-buffer))
(timer nil))
(setq timer
(run-with-timer 1 1
(lambda ()
(if (buffer-live-p buf)
(with-current-buffer buf
(eca-chat--force-tab-line-update))
(cancel-timer timer)))))
(setq-local eca-chat--modeline-timer timer))
;; Cancel any leftover stopping safety timer
(when eca-chat--stopping-safety-timer
(cancel-timer eca-chat--stopping-safety-timer)
(setq-local eca-chat--stopping-safety-timer nil)))
('stopping
;; Clear visual indicators (looks idle) but stay logically loading
;; so new prompts are queued until server confirms finish.
(when eca-chat--modeline-timer
(cancel-timer eca-chat--modeline-timer)
(setq-local eca-chat--modeline-timer nil))
(eca-chat--force-tab-line-update)
;; Safety timeout: force-clear if server never sends finished
(let ((buf (current-buffer)))
(setq-local eca-chat--stopping-safety-timer
(run-with-timer 10 nil
(lambda ()
(when (buffer-live-p buf)
(with-current-buffer buf
(when (eq eca-chat--chat-loading 'stopping)
(eca-chat--set-chat-loading session nil)))))))))
(_
;; nil — full stop
(when eca-chat--stopping-safety-timer
(cancel-timer eca-chat--stopping-safety-timer)
(setq-local eca-chat--stopping-safety-timer nil))
(when eca-chat--prompt-start-time
(setq-local eca-chat--turn-duration-secs
(floor (float-time (time-subtract (current-time) eca-chat--prompt-start-time))))
(setq-local eca-chat--prompt-start-time nil))
(when eca-chat--modeline-timer
(cancel-timer eca-chat--modeline-timer)
(setq-local eca-chat--modeline-timer nil))
(eca-chat--force-tab-line-update)))
(eca-chat--refresh-transient-area)
(eca-chat--notify-status-changed session)))