diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/emms-browser.el | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/lisp/emms-browser.el b/lisp/emms-browser.el index 4079181..41d6ad1 100644 --- a/lisp/emms-browser.el +++ b/lisp/emms-browser.el @@ -1390,28 +1390,47 @@ Return the playlist buffer point-max before adding." (emms-browser-view-in-dired (car (emms-browser-bdata-data bdata)))) (emms-browser-view-in-dired (emms-browser-bdata-at-point)))) -(defun emms-browser-remove-tracks (&optional delete) +(defun emms-browser-remove-tracks (&optional delete start end) "Remove all tracks at point or in region if active. Unless DELETE is non-nil or with prefix argument, this only acts on the browser, files are untouched. If caching is enabled, files are removed from the cache as well. -When the region is not active, a numeric prefix argument inserts that many -tracks from point." - (interactive "P") - (let ((tracks (emms-browser-tracks-at-point)) - dirs path) +When the region is not active, a numeric prefix argument remove that many +tracks from point, it does not delete files." + (interactive "P\nr") + (let ((count (cond + ((use-region-p) + (1+ (- (line-number-at-pos end) (line-number-at-pos start)))) + ((numberp current-prefix-arg) + current-prefix-arg) + (t 1))) + dirs path tracks) + ;; If numeric prefix argument, never delete files. + (when (numberp delete) (setq delete nil)) (when delete + (save-mark-and-excursion + (when (use-region-p) (goto-char start)) + (let ((lines (min count (- (line-number-at-pos (point-max)) (line-number-at-pos (point)))))) + (dotimes (_ lines) + ;; TODO: Test this! + (setq tracks (append tracks (emms-browser-tracks-at-point))) + (forward-line)))) (unless (yes-or-no-p - (format "Really permanently delete these %d tracks? " - (length tracks))) + (format "Really permanently delete these %d tracks? " (length tracks))) (error "Cancelled!")) (message "Deleting files...")) - (dolist (track tracks) - (setq path (emms-track-get track 'name)) - (when delete - (delete-file path)) - (add-to-list 'dirs (file-name-directory path)) - (emms-cache-del path)) + (when (use-region-p) (goto-char start)) + (dotimes (_ count) + (dolist (track (emms-browser-tracks-at-point)) + (setq path (emms-track-get track 'name)) + (when delete + (delete-file path)) + (add-to-list 'dirs (file-name-directory path)) + (emms-cache-del path)) + ;; remove the item from the browser + (when (emms-browser-tracks-at-point) + (emms-browser-delete-current-node))) + (deactivate-mark) ;; remove empty dirs (when delete (dolist (dir dirs) @@ -1419,8 +1438,6 @@ tracks from point." (condition-case nil (delete-directory dir) (error nil)))) - ;; remove the item from the browser - (emms-browser-delete-current-node) (when delete (message "Deleting files...done")))) |