emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/emms c5040a3402: * emms-playlist-mode.el: emms-playlist


From: ELPA Syncer
Subject: [elpa] externals/emms c5040a3402: * emms-playlist-mode.el: emms-playlist-mode-shift-track-up/down
Date: Tue, 9 Jan 2024 21:57:50 -0500 (EST)

branch: externals/emms
commit c5040a340216860fa276958538e7923bc5154413
Author: Yoni Rabkin <yrk@gnu.org>
Commit: Yoni Rabkin <yrk@gnu.org>

    * emms-playlist-mode.el: emms-playlist-mode-shift-track-up/down
    
    New interactive functions based on `emms-playlist-mode-shift-track'.
---
 emms-playlist-mode.el | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/emms-playlist-mode.el b/emms-playlist-mode.el
index c6209fa3cb..40bd200eef 100644
--- a/emms-playlist-mode.el
+++ b/emms-playlist-mode.el
@@ -120,6 +120,8 @@ This is true for every invocation of 
`emms-playlist-mode-go'."
     (define-key map (kbd "C-n") #'next-line)
     (define-key map (kbd "C-p") #'previous-line)
     (define-key map (kbd "C-j") #'emms-playlist-mode-insert-newline)
+    (define-key map (kbd "C-i") #'emms-playlist-mode-shift-track-up)
+    (define-key map (kbd "C-o") #'emms-playlist-mode-shift-track-down)
     (define-key map (kbd "M-y") #'emms-playlist-mode-yank-pop)
     (define-key map (kbd "M-<") #'emms-playlist-mode-first)
     (define-key map (kbd "M->") #'emms-playlist-mode-last)
@@ -422,6 +424,48 @@ With a prefix arg, open the `dired' buffer in 
OTHER-WINDOW."
   "Return t if there is a track below this one in the buffer."
   (next-property-change (line-end-position)))
 
+;; The need to avoid killing a playing track causes the code to be
+;; written in a bit of a convoluted manner.
+(defun emms-playlist-mode-shift-track (num)
+  "Shift the track at point by one line.
+
+If NUM is 0 or a positive number, shift the track at point down
+one line. Otherwise shift the track up by one line."
+  (emms-playlist-ensure-playlist-buffer)
+  (let ((track (emms-playlist-track-at (point)))
+       (dir (if (>= num 0) 1 -1))
+       shift)
+    (when (not track)
+      (error "no track at point."))
+    (when (and (< num 0)
+              (not (emms-playlist-mode-track-above-p)))
+      (error "already the first track"))
+    (when (and (> num 0)
+              (not (emms-playlist-mode-track-below-p)))
+      (error "already the last track"))
+    (forward-line dir)
+    (if (emms-playlist-selected-track-at-p)
+       (progn
+         (emms-playlist-mode-shift-track (if (= dir 1) -1 1))
+         (forward-line (if (= dir 1) 1 -1)))
+      (let ((shift (emms-playlist-track-at (point))))
+       (emms-playlist-mode-kill-track)
+       (emms-with-inhibit-read-only-t
+        (kill-line))
+       (forward-line (* dir -1))
+       (emms-playlist-mode-insert-track shift)
+       (when (= dir -1) (forward-line -2))))))
+
+(defun emms-playlist-mode-shift-track-down ()
+  "Shift the track at point down one line."
+  (interactive)
+  (emms-playlist-mode-shift-track 0))
+
+(defun emms-playlist-mode-shift-track-up ()
+  "Shift the track at point up one line."
+  (interactive)
+  (emms-playlist-mode-shift-track -1))
+
 
 ;;; --------------------------------------------------------
 ;;; Overlay



reply via email to

[Prev in Thread] Current Thread [Next in Thread]