summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-10-12 14:42:51 -0500
committerCraig Jennings <c@cjennings.net>2025-10-12 14:42:51 -0500
commit17723b533e3cd67bb438327f8ac35059a3ee64ed (patch)
tree557ded426f478ad26d2415f196247d268270cc77
parent147d5c265edf0615d2aa1d65319963d7399711de (diff)
feat: complete music/dired integration with dired add to playlist
-rw-r--r--modules/dirvish-config.el2
-rw-r--r--modules/music-config.el51
2 files changed, 27 insertions, 26 deletions
diff --git a/modules/dirvish-config.el b/modules/dirvish-config.el
index 82b44008..47a821ea 100644
--- a/modules/dirvish-config.el
+++ b/modules/dirvish-config.el
@@ -277,7 +277,7 @@ regardless of what file or subdirectory the point is on."
("o" . cj/xdg-open)
("O" . cj/open-file-with-command) ; Prompts for command to run
("r" . dirvish-rsync)
- ("p" . cj/dired-create-playlist-from-marked)
+ ("P" . cj/dired-create-playlist-from-marked)
("s" . dirvish-quicksort)
("v" . dirvish-vc-menu)
("y" . dirvish-yank-menu)))
diff --git a/modules/music-config.el b/modules/music-config.el
index 2ee2788b..f8ecb31d 100644
--- a/modules/music-config.el
+++ b/modules/music-config.el
@@ -226,7 +226,7 @@ Matching is case-insensitive."
(choice-rel (completing-read "Choose music file or directory: "
(cj/music--completion-table candidates)
nil t))
- (cleaned-choice (if (string-suffix-p "/" choice-rel)
+ (cleaned-choice (if (string-suffix-p "/" choice-rel)
(substring choice-rel 0 -1)
choice-rel))
(choice-abs (expand-file-name cleaned-choice cj/music-root)))
@@ -267,7 +267,7 @@ Tracks the saved file for future reference."
(m3u-names-no-ext (mapcar (lambda (f)
(file-name-sans-extension f))
m3u-files))
- (chosen-name (completing-read "Save playlist as: "
+ (chosen-name (completing-read "Save playlist as: "
m3u-names-no-ext
nil nil nil nil
(format-time-string "playlist-%Y%m%d-%H%M%S")))
@@ -569,29 +569,30 @@ in the current window and provides appropriate feedback."
(global-unset-key (kbd "<f10>"))
(global-set-key (kbd "<f10>") #'cj/music-playlist-toggle)
-;; TASK: Complete the Dired / EMMS integration
-;; (defun cj/music-add-dired-selection ()
-;; "Add selected files or directories in Dired/Dirvish to the EMMS playlist.
-;; If region is active, add marked files. Otherwise, add file at point.
-;; Directories are added recursively."
-;; (interactive)
-;; (unless (derived-mode-p 'dired-mode)
-;; (user-error "This command must be run in a Dired buffer"))
-;; (let ((files (if (use-region-p)
-;; (dired-get-marked-files)
-;; (list (dired-get-file-for-visit)))))
-;; (when (null files)
-;; (user-error "No files selected"))
-;; (dolist (file files)
-;; (if (file-directory-p file)
-;; (cj/music-add-directory-recursive file)
-;; (if (cj/music--valid-file-p file)
-;; (emms-add-file file)
-;; (message "Skipping non-music file: %s" file))))
-;; (message "Added %d item(s) to EMMS playlist" (length files))))
-;;
-;; TASK: add the dired keymapping to the above function
-;; ("^" . cj/music-add-dired-selection)
+;; ------------------------- Music Add Dired Selection -------------------------
+
+(defun cj/music-add-dired-selection ()
+ "Add selected files or directories in Dired/Dirvish to the EMMS playlist.
+If region is active, add marked files. Otherwise, add file at point.
+Directories are added recursively."
+ (interactive)
+ (unless (derived-mode-p 'dired-mode)
+ (user-error "This command must be run in a Dired buffer"))
+ (let ((files (if (use-region-p)
+ (dired-get-marked-files)
+ (list (dired-get-file-for-visit)))))
+ (when (null files)
+ (user-error "No files selected"))
+ (dolist (file files)
+ (if (file-directory-p file)
+ (cj/music-add-directory-recursive file)
+ (if (cj/music--valid-file-p file)
+ (emms-add-file file)
+ (message "Skipping non-music file: %s" file))))
+ (message "Added %d item(s) to EMMS playlist" (length files))))
+
+(with-eval-after-load 'dired
+ (define-key dirvish-mode-map "p" 'cj/music-add-dired-selection))
(provide 'music-config)
;;; music-config.el ends here