fordon_greeman / voidfiles

Branch: main
Switch branches/tags
main
theidioticdev add emacs 2079ec5 22h ago
125 lines · 3.9 KB Raw Blame History
1 ;;; emms-show-all.el --- Detailed track information for Emms. -*- lexical-binding: t; -*-
2
3 ;; Copyright (C) 2016-2021, 2025 Free Software Foundation, Inc.
4
5 ;; Author: Yoni Rabkin <yrk@gnu.org>
6
7 ;; This file is part of EMMS.
8
9 ;; EMMS is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 3, or (at your option)
12 ;; any later version.
13 ;;
14 ;; EMMS is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
18 ;;
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with EMMS; if not, write to the Free Software Foundation,
21 ;; Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
22
23 ;;; Commentary:
24 ;;
25 ;; Shows all of the available information Emms can provide on the
26 ;; currently playing track. Based on an idea suggested on the
27 ;; emms-help mailing list by Ivan Truskov.
28
29 ;;; Code:
30
31 (require 'emms)
32 (require 'emms-tag-editor)
33
34
35 (defvar emms-show-all-buffer-name "Emms Track Information"
36 "Name of buffer used by `emms-show-all'.")
37
38 (defvar emms-show-all-kill-buffer-on-quit-p nil
39 "If t, kill the show-all buffer when quitting.")
40
41 (defvar emms-show-all-track-alist nil
42 "Declare so as to silence the compiler.")
43
44 (defvar emms-show-all-mode-map
45 (let ((map (make-sparse-keymap)))
46 (set-keymap-parent map text-mode-map)
47 (define-key map (kbd "q") #'emms-show-all-mode-bury-buffer)
48 (define-key map (kbd "E") #'emms-show-all-edit-track)
49 map)
50 "Keymap for `emms-show-all-mode'.")
51
52 (define-derived-mode emms-show-all-mode text-mode "Emms-Show-All"
53 "Major mode for `emms-show-all'
54 \\{emms-show-all-mode-map}")
55
56 (defun emms-show-all-edit-track ()
57 "Edit the track being shown."
58 (interactive)
59 (let ((track emms-show-all-track-alist))
60 (emms-show-all-mode-bury-buffer)
61 (emms-tag-editor-edit-track track)))
62
63 (defun emms-show-all-mode-bury-buffer ()
64 "Bury, and optionally kill the show buffer."
65 (interactive)
66 (quit-restore-window
67 (selected-window)
68 (when emms-show-all-kill-buffer-on-quit-p 'kill)))
69
70 (defun emms-show-all-setup-buffer ()
71 "Prepare the display buffer."
72 (let ((buffer (get-buffer-create emms-show-all-buffer-name)))
73 (with-current-buffer buffer
74 (when (not (local-variable-p 'emms-show-all-track-alist))
75 (make-local-variable 'emms-show-all-track-alist))
76 (setq buffer-read-only t)
77 (when (not (equal major-mode 'emms-show-all-mode))
78 (emms-show-all-mode))
79 (let ((inhibit-read-only t))
80 (erase-buffer)))
81 buffer))
82
83 (defun emms-show-all-format (track)
84 "Format information for TRACK."
85 (let ((s ""))
86 (dolist (e (mapcar #'(lambda (tag)
87 (cons
88 (format "%s" (car tag))
89 (or (emms-track-get track (car tag)) "")))
90 emms-tag-editor-tags))
91 (setq s (concat s (format "%-17s: %s\n" (car e) (cdr e)))))
92 s))
93
94 (defun emms-show-all-insert (track)
95 "Insert information for TRACK in current buffer."
96 (let ((type (emms-track-type track)))
97 (cond ((eq 'file type)
98 (insert (emms-show-all-format track)))
99 ((eq 'url type)
100 (insert
101 (emms-format-url-track-name (emms-track-name track))))
102 (t (insert (concat (symbol-name type)
103 ": " (emms-track-name track)))))))
104
105 (defun emms-show-all-track (track)
106 "Display information for TRACK."
107 (let ((buffer (emms-show-all-setup-buffer)))
108 (with-current-buffer buffer
109 (let ((inhibit-read-only t))
110 (setq emms-show-all-track-alist track)
111 (emms-show-all-insert track))
112 (pop-to-buffer (current-buffer)))))
113
114 (defun emms-show-all ()
115 "Describe the current EMMS track in detail."
116 (interactive)
117 (if emms-player-playing-p
118 (emms-show-all-track
119 (emms-playlist-current-selected-track))
120 (message "nothing playing right now")))
121
122
123 (provide 'emms-show-all)
124
125 ;;; emms-playlist-mode.el ends here