Function: eca-jobs--render
eca-jobs--render is a natively compiled function defined in
eca-jobs.el.
Signature
(eca-jobs--render SESSION BUFFER)
Documentation
Render background jobs for SESSION into BUFFER.
Source Code
;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-jobs.el
;; Rendering
(defun eca-jobs--render (session buffer)
"Render background jobs for SESSION into BUFFER."
(when (buffer-live-p buffer)
(with-current-buffer buffer
(let ((inhibit-read-only t)
(keymap (or (current-local-map) eca-settings-mode-map))
(jobs (eca--session-jobs session))
(saved-pos (point)))
(erase-buffer)
(insert "\n")
(insert (propertize "Background Jobs" 'font-lock-face 'eca-settings-heading))
(insert "\n\n")
(if (or (null jobs) (seq-empty-p jobs))
(insert (propertize "No background jobs" 'font-lock-face font-lock-doc-face))
(let ((groups (eca-jobs--group-by-chat jobs))
(first-group t))
(dolist (group groups)
(let ((chat-label (cadr group))
(group-jobs (cddr group)))
(unless first-group
(insert "\n"))
(setq first-group nil)
;; Chat separator
(insert (propertize (concat "── " chat-label " "
(make-string (max 0 (- 60 (length chat-label) 4)) ?─))
'font-lock-face 'eca-jobs-chat-separator-face))
(insert "\n")
;; Jobs in this group
(dolist (job group-jobs)
(let* ((id (plist-get job :id))
(status (plist-get job :status))
(label (or (plist-get job :label) ""))
(summary (or (plist-get job :summary) id))
(elapsed (or (when (string= status "running")
(eca-jobs--elapsed-since (plist-get job :startedAt)))
(plist-get job :elapsed) ""))
(exit-code (plist-get job :exitCode))
(truncated-label (if (> (length label) 80)
(concat (substring label 0 77) "...")
label))
(start (point)))
;; Line 1: status + summary + elapsed + buttons
(insert (propertize (eca-jobs--status-emoji status)
'help-echo status))
(insert " ")
(insert (propertize summary 'font-lock-face 'bold))
(insert " ")
(insert (propertize elapsed 'font-lock-face 'shadow))
(when (and (string= status "failed") exit-code)
(insert " ")
(insert (propertize (format "exit:%s" exit-code)
'font-lock-face 'eca-jobs-status-failed-face)))
(insert " ")
(insert (eca-buttonize
keymap
(propertize "output"
'font-lock-face 'eca-jobs-button-output-face)
(lambda ()
(when-let* ((s (ignore-errors (eca-session))))
(eca-jobs--view-output-by-id s id)))))
(when (string= status "running")
(insert " ")
(insert (eca-buttonize
keymap
(propertize "kill"
'font-lock-face 'eca-jobs-button-kill-face)
(lambda ()
(when-let* ((s (ignore-errors (eca-session))))
(eca-api-request-async s
:method "jobs/kill"
:params (list :job-id id)
:success-callback
(lambda (result)
(if (plist-get result :killed)
(message "Job %s killed" id)
(message "Job %s was not running" id)))
:error-callback
(lambda (_err)
(user-error "Failed to kill job %s" id))))))))
(insert "\n")
;; Line 2: command (indented)
(insert (propertize (concat " " truncated-label)
'font-lock-face 'shadow))
(insert "\n")
(put-text-property start (point) 'eca-job-id id)))))))
(insert "\n")
(goto-char (min saved-pos (point-max)))
(eca-jobs--ensure-timer session buffer)))))