aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-20 23:35:04 -0500
committerCraig Jennings <c@cjennings.net>2026-07-20 23:35:04 -0500
commitf4c2974ba4dacf8e9417d3036b9396ec5fff9470 (patch)
tree9ab1529dd23c1ccfcc6e70b73b26f70d8befc13c /modules
parentc2f0f3ee16fe98393e1badaa09d2d24f5fb2179a (diff)
downloaddotemacs-f4c2974ba4dacf8e9417d3036b9396ec5fff9470.tar.gz
dotemacs-f4c2974ba4dacf8e9417d3036b9396ec5fff9470.zip
fix(music): queue all dired-marked files and de-anonymize header advice
cj/music-add-dired-selection gated dired-get-marked-files behind use-region-p, so files marked with m fell to the single-file branch and only the point file was queued. dired-get-marked-files already honors marks, a region, or point on its own. The header-refresh advice on the four EMMS toggles was an anonymous lambda, which can't be advice-removed and stacked a copy on every :config reload. It's now a named function installed remove-then-add.
Diffstat (limited to 'modules')
-rw-r--r--modules/music-config.el21
1 files changed, 16 insertions, 5 deletions
diff --git a/modules/music-config.el b/modules/music-config.el
index 2c62a9ae..d33c8c45 100644
--- a/modules/music-config.el
+++ b/modules/music-config.el
@@ -1064,9 +1064,10 @@ Dirs added recursively."
(unless (derived-mode-p 'dired-mode)
(user-error "This command must be run in a Dired buffer"))
(cj/music--ensure-playlist-buffer)
- (let ((files (if (use-region-p)
- (dired-get-marked-files)
- (list (dired-get-file-for-visit)))))
+ ;; dired-get-marked-files already honors m-marks, an active region, or the
+ ;; file at point; gating it behind use-region-p silently dropped all but
+ ;; the point file whenever files were marked without a region.
+ (let ((files (dired-get-marked-files)))
(when (null files)
(user-error "No files selected"))
(dolist (file files)
@@ -1459,6 +1460,12 @@ redisplay this move triggers doesn't loop. Always returns nil."
(move-overlay cj/music--header-overlay pos pos))))
nil))
+(defun cj/music--refresh-header-after-toggle (&rest _)
+ "Refresh the playlist header after a repeat/random/consume toggle.
+Named (not an anonymous lambda) so the :config reload can advice-remove
+it before re-adding -- anonymous advice stacks a copy per reload."
+ (cj/music--update-header))
+
(defun cj/music--update-header ()
"Insert or update the multi-line header overlay in the playlist buffer.
Anchors at the displaying window's start (see
@@ -1591,12 +1598,16 @@ unless fancy."
(add-hook 'emms-player-stopped-hook #'cj/music--stop-bar-timer)
(add-hook 'emms-player-finished-hook #'cj/music--stop-bar-timer)
- ;; Refresh header immediately when toggling modes
+ ;; Refresh header immediately when toggling modes. Named advice with a
+ ;; remove-then-add guard (like the emms-playlist-clear advice above):
+ ;; an anonymous lambda can't be advice-removed and stacks a copy on every
+ ;; :config reload, firing the refresh N times per toggle.
(dolist (fn '(emms-toggle-repeat-playlist
emms-toggle-repeat-track
emms-toggle-random-playlist
cj/music-toggle-consume))
- (advice-add fn :after (lambda (&rest _) (cj/music--update-header))))
+ (advice-remove fn #'cj/music--refresh-header-after-toggle)
+ (advice-add fn :after #'cj/music--refresh-header-after-toggle))
:bind
(:map emms-playlist-mode-map