[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
| [Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/emms c5040a3402: * emms-playlist-mode.el: emms-playlist-mode-shift-track-up/down,
ELPA Syncer <=