diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2021-05-29 14:24:23 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2021-05-29 14:24:23 -0400 |
commit | c97716e9a201c8b5fe0aad414f1846ace878258e (patch) | |
tree | 7ab899f70471d01f6c61213976c18751a9900aab /lisp/mpc.el | |
parent | 1855e3d0c4f156775ca0a462d3c8154e65481fbd (diff) | |
download | emacs-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.el | 22 |
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! |