aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-18 16:00:11 -0500
committerCraig Jennings <c@cjennings.net>2026-07-18 16:00:11 -0500
commitd2742cead6539aa343fe2564fd8753ce2671345f (patch)
tree0f546a6f2a634b139d2cc53808d2326de32242a1 /tests
parent18dbd316ef55bed3418bd94407426f18ef1b01a0 (diff)
downloaddotemacs-d2742cead6539aa343fe2564fd8753ce2671345f.tar.gz
dotemacs-d2742cead6539aa343fe2564fd8753ce2671345f.zip
fix(music): unstick arrows and number placement at the playlist top
The playlist header is a multi-line overlay string anchored at buffer position 1. With point on the top row, next-line's visual motion stepped through the header's screen lines. Those all map back to position 1, so arrows never moved point. The buffer now moves by logical lines (each row is one), which skips the header display entirely. The same shared anchor put row 1's number above the header instead of beside its track: both overlay strings sit at position 1 and the number rendered first. Number overlays now outrank the header's priority, so the number lands next to its own row.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-music-config--renumber-rows.el27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/test-music-config--renumber-rows.el b/tests/test-music-config--renumber-rows.el
index 656bbfc9..a5304606 100644
--- a/tests/test-music-config--renumber-rows.el
+++ b/tests/test-music-config--renumber-rows.el
@@ -83,6 +83,33 @@ can fire after the playlist buffer is gone)."
(kill-buffer buf)
(should-not (cj/music--renumber-rows buf))))
+(ert-deftest test-music-renumber-rows-number-outranks-header-overlay ()
+ "Normal: number overlays carry a priority above the header overlay's 100.
+The header block is a same-position overlay string at the buffer start;
+without the higher priority, row 1's number renders above the header
+instead of next to its own track."
+ (with-temp-buffer
+ (insert "track one\n")
+ (cj/music--renumber-rows (current-buffer))
+ (let ((ov (car (seq-filter (lambda (o) (overlay-get o 'cj-music-row-number))
+ (overlays-in (point-min) (point-max))))))
+ (should (> (or (overlay-get ov 'priority) 0) 100)))))
+
+(ert-deftest test-music-ensure-playlist-buffer-logical-line-motion ()
+ "Normal: the playlist moves by logical lines, not screen lines. The
+multi-line header overlay string at position 1 otherwise absorbs every
+next-line from the top row -- vertical motion steps through the header's
+display and maps back to the same buffer position, so arrows look dead."
+ (let (created)
+ (cl-letf (((symbol-function 'emms-playlist-mode) #'ignore))
+ (unwind-protect
+ (progn
+ (setq created (cj/music--ensure-playlist-buffer))
+ (with-current-buffer created
+ (should (local-variable-p 'line-move-visual))
+ (should-not line-move-visual)))
+ (when (buffer-live-p created) (kill-buffer created))))))
+
;;; Current-row indicator
(ert-deftest test-music-highlight-current-number-marks-current-row ()