aboutsummaryrefslogtreecommitdiff
path: root/emms-show-all.el
diff options
context:
space:
mode:
Diffstat (limited to 'emms-show-all.el')
-rw-r--r--emms-show-all.el125
1 files changed, 125 insertions, 0 deletions
diff --git a/emms-show-all.el b/emms-show-all.el
new file mode 100644
index 0000000..f37ef5e
--- /dev/null
+++ b/emms-show-all.el
@@ -0,0 +1,125 @@
+;;; emms-show-all.el --- Detailed track information for Emms.
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Yoni Rabkin <yrk@gnu.org>
+
+;; This file is part of EMMS.
+
+;; EMMS is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; EMMS is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with EMMS; if not, write to the Free Software Foundation,
+;; Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+;;;
+;;; Shows all of the available information Emms can provide on the
+;;; currently playing track. Based on an idea suggested on the
+;;; emms-help mailing list by Ivan Truskov.
+
+;;; Code:
+
+(require 'emms)
+(require 'emms-tag-editor)
+
+
+(defvar emms-show-all-buffer-name "Emms Track Information"
+ "Name of buffer used by `emms-show-all'.")
+
+(defvar emms-show-all-kill-buffer-on-quit-p nil
+ "If t, kill the show-all buffer when quitting.")
+
+(defvar emms-show-all-track-alist nil
+ "Declare so as to silence the compiler.")
+
+(defvar emms-show-all-mode-map
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map text-mode-map)
+ (define-key map (kbd "q") 'emms-show-all-mode-bury-buffer)
+ (define-key map (kbd "E") 'emms-show-all-edit-track)
+ map)
+ "Keymap for `emms-show-all-mode'.")
+
+(define-derived-mode emms-show-all-mode text-mode "Emms-Show-All"
+ "Major mode for `emms-show-all'
+ \\{emms-show-all-mode-map}")
+
+(defun emms-show-all-edit-track ()
+ "Edit the track being shown."
+ (interactive)
+ (let ((track emms-show-all-track-alist))
+ (emms-show-all-mode-bury-buffer)
+ (emms-tag-editor-edit-track track)))
+
+(defun emms-show-all-mode-bury-buffer ()
+ "Bury, and optionally kill the show buffer."
+ (interactive)
+ (quit-restore-window
+ (selected-window)
+ (when emms-show-all-kill-buffer-on-quit-p 'kill)))
+
+(defun emms-show-all-setup-buffer ()
+ "Prepare the display buffer."
+ (let ((buffer (get-buffer-create emms-show-all-buffer-name)))
+ (with-current-buffer buffer
+ (when (not (local-variable-p 'emms-show-all-track-alist))
+ (make-local-variable 'emms-show-all-track-alist))
+ (setq buffer-read-only t)
+ (when (not (equal major-mode 'emms-show-all-mode))
+ (emms-show-all-mode))
+ (let ((inhibit-read-only t))
+ (erase-buffer)))
+ buffer))
+
+(defun emms-show-all-format (track)
+ "Format information for TRACK."
+ (let ((s ""))
+ (dolist (e (mapcar #'(lambda (tag)
+ (cons
+ (format "%s" (car tag))
+ (or (emms-track-get track (car tag)) "")))
+ emms-tag-editor-tags))
+ (setq s (concat s (format "%-17s: %s\n" (car e) (cdr e)))))
+ s))
+
+(defun emms-show-all-insert (track)
+ "Insert information for TRACK in current buffer."
+ (let ((type (emms-track-type track)))
+ (cond ((eq 'file type)
+ (insert (emms-show-all-format track)))
+ ((eq 'url type)
+ (insert
+ (emms-format-url-track-name (emms-track-name track))))
+ (t (concat (symbol-name type)
+ ": " (emms-track-name track))))))
+
+(defun emms-show-all-track (track)
+ "Display information for TRACK."
+ (let ((buffer (emms-show-all-setup-buffer)))
+ (with-current-buffer buffer
+ (let ((inhibit-read-only t))
+ (setq emms-show-all-track-alist track)
+ (emms-show-all-insert track))
+ (pop-to-buffer (current-buffer)))))
+
+(defun emms-show-all ()
+ "Describe the current EMMS track in detail."
+ (interactive)
+ (if emms-player-playing-p
+ (emms-show-all-track
+ (emms-playlist-current-selected-track))
+ (message "nothing playing right now")))
+
+
+(provide 'emms-show-all)
+
+;;; emms-playlist-mode.el ends here