summaryrefslogtreecommitdiff
path: root/lisp/mpc.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2021-05-29 14:24:23 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2021-05-29 14:24:23 -0400
commitc97716e9a201c8b5fe0aad414f1846ace878258e (patch)
tree7ab899f70471d01f6c61213976c18751a9900aab /lisp/mpc.el
parent1855e3d0c4f156775ca0a462d3c8154e65481fbd (diff)
downloademacs-c97716e9a201c8b5fe0aad414f1846ace878258e.tar.gz
* lisp/mpc.el (mpc-format): Fix inf-loop in constructed predicate
Diffstat (limited to 'lisp/mpc.el')
-rw-r--r--lisp/mpc.el22
1 files changed, 15 insertions, 7 deletions
diff --git a/lisp/mpc.el b/lisp/mpc.el
index f7302750389..9addb70f56a 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -1027,10 +1027,14 @@ If PLAYLIST is t or nil or missing, use the main playlist."
(let ((dir (file-name-directory (cdr (assq 'file info)))))
;; (debug)
(setq pred
- (lambda (info)
- (and (funcall pred info)
- (equal dir (file-name-directory
- (cdr (assq 'file info)))))))
+ ;; We want the closure to capture the current
+ ;; value of `pred' and not a reference to the
+ ;; variable itself.
+ (let ((oldpred pred))
+ (lambda (info)
+ (and (funcall oldpred info)
+ (equal dir (file-name-directory
+ (cdr (assq 'file info))))))))
(if-let* ((covers '(".folder.png" "cover.jpg" "folder.jpg"))
(cover (cl-loop for file in (directory-files (mpc-file-local-copy dir))
if (member (downcase file) covers)
@@ -1057,9 +1061,13 @@ If PLAYLIST is t or nil or missing, use the main playlist."
(when (and (null val) (eq tag 'Title))
(setq val (cdr (assq 'file info))))
(setq pred
- (lambda (info)
- (and (funcall pred info)
- (equal val (cdr (assq ',tag info))))))
+ ;; We want the closure to capture the current
+ ;; value of `pred' and not a reference to the
+ ;; variable itself.
+ (let ((oldpred pred))
+ (lambda (info)
+ (and (funcall oldpred info)
+ (equal val (cdr (assq tag info)))))))
(cond
((not (and (eq tag 'Date) (stringp val))) val)
;; For "date", only keep the year!