aboutsummaryrefslogtreecommitdiff
path: root/modules/music-config.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/music-config.el')
-rw-r--r--modules/music-config.el105
1 files changed, 48 insertions, 57 deletions
diff --git a/modules/music-config.el b/modules/music-config.el
index fd619d8cd..55eb47d25 100644
--- a/modules/music-config.el
+++ b/modules/music-config.el
@@ -94,7 +94,9 @@
(require 'subr-x)
(require 'user-constants)
(require 'keybindings) ;; provides cj/custom-keymap
+(require 'cj-window-geometry-lib) ;; cj/preferred-dock-direction (F10 dock side)
(require 'cj-window-toggle-lib) ;; side-window size memory (F10 toggle)
+(require 'system-lib) ;; cj/confirm-strong (overwrite confirms)
;;; Settings (no Customize)
@@ -371,7 +373,7 @@ Offers completion over existing names but allows new names."
(filename (if (string-suffix-p ".m3u" chosen) chosen (concat chosen ".m3u")))
(full (expand-file-name filename cj/music-m3u-root)))
(when (and (file-exists-p full)
- (not (yes-or-no-p (format "Overwrite %s? " filename))))
+ (not (cj/confirm-strong (format "Overwrite %s? " filename))))
(user-error "Aborted saving playlist"))
(with-current-buffer (cj/music--ensure-playlist-buffer)
(let ((emms-source-playlist-ask-before-overwrite nil))
@@ -516,14 +518,38 @@ Intended for use on `emms-player-finished-hook'."
(defvar cj/music-playlist-window-height 0.3
"Default fraction of frame height for the F10 music playlist side window.
-Used until the playlist is resized and toggled off this session; after that,
-the toggled-off height is remembered in `cj/--music-playlist-height'.")
+Used when the playlist docks at the bottom and hasn't been resized and
+toggled off this session; after that, the toggled-off height is remembered
+in `cj/--music-playlist-height'.")
+
+(defvar cj/music-playlist-window-width 0.4
+ "Default fraction of frame width for the F10 music playlist side window.
+Used when the playlist docks as a right-side column (see
+`cj/--music-playlist-side') and hasn't been resized this session; after
+that the toggled-off width is remembered in `cj/--music-playlist-width'.")
(defvar cj/--music-playlist-height nil
- "Last height fraction the playlist side window was toggled off at.
+ "Last height fraction the playlist was toggled off at while docked bottom.
nil means fall back to `cj/music-playlist-window-height'. In-memory only --
resets each Emacs session.")
+(defvar cj/--music-playlist-width nil
+ "Last width fraction the playlist was toggled off at while docked right.
+nil means fall back to `cj/music-playlist-window-width'. In-memory only --
+resets each Emacs session.")
+
+(defun cj/--music-playlist-side ()
+ "Return the side the F10 playlist should dock on: `right' or `bottom'.
+Docks as a right-side column only when a side-by-side split would leave
+both panes at least `cj/window-dock-min-columns' wide (the playlist's
+share is `cj/music-playlist-window-width'); otherwise docks at the bottom.
+See `cj/preferred-dock-direction'."
+ (if (eq (cj/preferred-dock-direction (frame-width)
+ cj/music-playlist-window-width)
+ 'right)
+ 'right
+ 'bottom))
+
(defun cj/music-playlist-toggle ()
"Toggle the EMMS playlist buffer in a bottom side window.
The window opens at `cj/music-playlist-window-height'; if it has been
@@ -534,15 +560,28 @@ resized and toggled off this session, it reopens at that remembered height."
(win (and buffer (get-buffer-window buffer))))
(if win
(progn
- (cj/side-window-capture-size win 'bottom 'cj/--music-playlist-height)
+ ;; Capture the resized size into the var matching the window's
+ ;; actual side, so width and height memories stay independent.
+ ;; Guard the parameter lookup: a dead or non-window WIN (the
+ ;; capture helpers tolerate one) must not error here.
+ (let ((side (if (window-live-p win)
+ (or (window-parameter win 'window-side) 'bottom)
+ 'bottom)))
+ (if (memq side '(left right))
+ (cj/side-window-capture-size win side 'cj/--music-playlist-width)
+ (cj/side-window-capture-size win 'bottom 'cj/--music-playlist-height)))
(delete-window win)
(message "Playlist window closed"))
(progn
(cj/emms--setup)
(setq buffer (cj/music--ensure-playlist-buffer))
- (setq win (cj/side-window-display
- buffer 'bottom 'cj/--music-playlist-height
- cj/music-playlist-window-height))
+ (let* ((side (cj/--music-playlist-side))
+ (right (eq side 'right)))
+ (setq win (cj/side-window-display
+ buffer side
+ (if right 'cj/--music-playlist-width 'cj/--music-playlist-height)
+ (if right cj/music-playlist-window-width
+ cj/music-playlist-window-height))))
(select-window win)
(with-current-buffer buffer
(if (and (fboundp 'emms-playlist-current-selected-track)
@@ -721,54 +760,6 @@ For URL tracks: decoded URL."
(setq emms-track-description-function #'cj/music--track-description)
- ;; Playlist faces
- (defface cj/music-header-face
- '((((class color) (background dark))
- (:foreground "#969385"))
- (((class color) (background light))
- (:foreground "gray50")))
- "Face for playlist header labels.")
-
- (defface cj/music-header-value-face
- '((((class color) (background dark))
- (:foreground "#d0cbc0"))
- (((class color) (background light))
- (:foreground "gray30")))
- "Face for playlist header values.")
-
- (defface cj/music-mode-on-face
- '((((class color) (background dark))
- (:foreground "#d7af5f"))
- (((class color) (background light))
- (:foreground "DarkGoldenrod")))
- "Face for active mode indicators in the playlist header.")
-
- (defface cj/music-mode-off-face
- '((((class color) (background dark))
- (:foreground "#58574e"))
- (((class color) (background light))
- (:foreground "gray70")))
- "Face for inactive mode indicators in the playlist header.")
-
- (defface cj/music-keyhint-face
- '((((class color) (background dark))
- (:foreground "#8a9496"))
- (((class color) (background light))
- (:foreground "gray50")))
- "Face for keybinding hints in the playlist header.")
-
- (custom-set-faces
- '(emms-playlist-track-face
- ((((class color) (background dark))
- (:foreground "#8a9496"))
- (((class color) (background light))
- (:foreground "gray50"))))
- '(emms-playlist-selected-face
- ((((class color) (background dark))
- (:foreground "#d7af5f" :weight bold))
- (((class color) (background light))
- (:foreground "DarkGoldenrod" :weight bold)))))
-
;; Multi-line header overlay
(defvar-local cj/music--header-overlay nil
"Overlay displaying the playlist header.")
@@ -924,7 +915,7 @@ For URL tracks: decoded URL."
(file (expand-file-name (concat safe "_Radio.m3u") cj/music-m3u-root))
(content (format "#EXTM3U\n#EXTINF:-1,%s\n%s\n" name url)))
(when (and (file-exists-p file)
- (not (yes-or-no-p (format "Overwrite %s? " (file-name-nondirectory file)))))
+ (not (cj/confirm-strong (format "Overwrite %s? " (file-name-nondirectory file)))))
(user-error "Aborted creating radio station"))
(with-temp-file file
(insert content))