Function: eca-providers--render-provider
eca-providers--render-provider is a natively compiled function defined
in eca-providers.el.
Signature
(eca-providers--render-provider PROVIDER SESSION KEYMAP)
Documentation
Render a single PROVIDER card for SESSION using KEYMAP for buttons.
Source Code
;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-providers.el
(defun eca-providers--render-provider (provider session keymap)
"Render a single PROVIDER card for SESSION using KEYMAP for buttons."
(let* ((id (plist-get provider :id))
(label (or (plist-get provider :label) id))
(configured (plist-get provider :configured))
(auth (plist-get provider :auth))
(status (plist-get auth :status))
(login-methods (plist-get (plist-get provider :login) :methods))
(models (plist-get provider :models))
(model-count (length models))
(expanded (and eca-providers--expanded
(member id eca-providers--expanded)))
(has-login (and login-methods (> (length login-methods) 0)))
(is-authed (member status '("authenticated" "expiring" "expired" "local"))))
;; Line 1: indicator + name + status label
(let ((start (point)))
(insert " " (eca-providers--status-indicator status) " ")
(insert (propertize label 'face 'bold))
(let ((status-label (eca-providers--status-label status (plist-get auth :source))))
(insert (make-string (max 1 (- 35 (length label))) ?\s))
(insert status-label))
(insert "\n")
;; Line 2: auth info (if any)
(when-let* ((info (eca-providers--auth-info-text auth)))
(insert " " (propertize info 'face 'eca-providers-auth-info-face) "\n"))
;; Provider settings
(eca-providers--render-settings (plist-get provider :settings) " ")
;; Line 3: models count + actions
(when configured
(let* ((toggle-fn (lambda (&rest _)
(interactive)
(eca-providers--toggle-expand)))
(expand-km (let ((km (make-composed-keymap (make-sparse-keymap) keymap)))
(define-key km (kbd "RET") toggle-fn)
(define-key km (kbd "<return>") toggle-fn)
(define-key km (kbd "TAB") toggle-fn)
(define-key km (kbd "<tab>") toggle-fn)
(when eca-buttons-allow-mouse
(define-key km (kbd "<mouse-1>") toggle-fn))
km))
(models-text (concat " "
(propertize (if expanded "▾" "▸") 'face 'bold)
" "
(propertize (format "%d model%s" model-count (if (= model-count 1) "" "s"))
'face 'font-lock-doc-face))))
(insert (propertize models-text
'keymap expand-km
'pointer 'hand
'help-echo "RET / TAB / mouse-1: expand/collapse")))
;; Action buttons
(let ((btn-col (max (+ (current-column) 2) 40))
(source (plist-get auth :source)))
(insert (make-string (max 1 (- btn-col (current-column))) ?\s))
(cond
((and is-authed (string= source "login"))
(insert (eca-buttonize
keymap
(propertize "Logout"
'font-lock-face 'eca-providers-button-logout-face)
(lambda ()
(when (y-or-n-p (format "Logout from %s? " label))
(eca-api-request-async session
:method "providers/logout"
:params (list :provider id)
:success-callback (lambda (_) (eca-info "Logged out of %s" label))
:error-callback (lambda (err) (eca-warn "Logout failed: %s" err))))))))
((and has-login (not is-authed))
(let ((btn-label (if (eca-providers--has-oauth-login-p login-methods) "Login" "Add Key")))
(insert (eca-buttonize
keymap
(propertize btn-label
'font-lock-face 'eca-providers-button-face)
(lambda () (eca-providers--do-login session id nil))))))))
(insert "\n")
;; Expanded models
(when (and expanded (> model-count 0))
(eca-providers--render-models models)))
;; Unconfigured: show login/add-key button
(when (and (not configured) has-login)
(let ((btn-label (if (eca-providers--has-oauth-login-p login-methods) "Login" "Add Key")))
(insert " "
(eca-buttonize
keymap
(propertize btn-label
'font-lock-face 'eca-providers-button-face)
(lambda () (eca-providers--do-login session id nil)))
"\n")))
;; Tag the whole card with provider id
(put-text-property start (point) 'eca-provider-id id))
(insert "\n")))