Function: dolist-with-progress-reporter
dolist-with-progress-reporter is a macro defined in subr.el.gz.
Signature
(dolist-with-progress-reporter (VAR LIST [RESULT]) REPORTER-OR-MESSAGE BODY...)
Documentation
Loop over a list and report progress in the echo area.
Evaluate BODY with VAR bound to each car from LIST, in turn. Then evaluate RESULT to get return value, default nil.
REPORTER-OR-MESSAGE is a progress reporter object or a string. In the latter case, use this string to create a progress reporter.
At each iteration, print the reporter message followed by progress percentage in the echo area. After the loop is finished, print the reporter message followed by the word "done".
Probably introduced at or before Emacs version 27.1.
Aliases
org-roam-dolist-with-progress (obsolete since 2025-11-07)
Source Code
;; Defined in /usr/src/emacs/lisp/subr.el.gz
(defmacro dolist-with-progress-reporter (spec reporter-or-message &rest body)
"Loop over a list and report progress in the echo area.
Evaluate BODY with VAR bound to each car from LIST, in turn.
Then evaluate RESULT to get return value, default nil.
REPORTER-OR-MESSAGE is a progress reporter object or a string. In the latter
case, use this string to create a progress reporter.
At each iteration, print the reporter message followed by progress
percentage in the echo area. After the loop is finished,
print the reporter message followed by the word \"done\".
\(fn (VAR LIST [RESULT]) REPORTER-OR-MESSAGE BODY...)"
(declare (indent 2) (debug ((symbolp form &optional form) form body)))
(let ((prep (make-symbol "--dolist-progress-reporter--"))
(count (make-symbol "--dolist-count--"))
(list (make-symbol "--dolist-list--")))
`(let ((,prep ,reporter-or-message)
(,count 0)
(,list ,(cadr spec)))
(when (stringp ,prep)
(setq ,prep (make-progress-reporter ,prep 0 (length ,list))))
(dolist (,(car spec) ,list)
,@body
(progress-reporter-update ,prep (setq ,count (1+ ,count))))
(progress-reporter-done ,prep)
(or ,@(cdr (cdr spec)) nil))))