diff options
| author | bard <[email protected]> | 2023-10-08 15:17:31 -0400 |
|---|---|---|
| committer | bard <[email protected]> | 2023-10-08 15:17:31 -0400 |
| commit | a2ec9082998918158df250c1906d0f6c0c4889db (patch) | |
| tree | 52e42110cc407b7a142fb6216df0d4cf2f82da1c /elisp/emms-setup.el | |
| parent | 16b4c9ed8f62dccce9a3ec32810077a9140f8925 (diff) | |
emms package
Diffstat (limited to 'elisp/emms-setup.el')
| -rw-r--r-- | elisp/emms-setup.el | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/elisp/emms-setup.el b/elisp/emms-setup.el new file mode 100644 index 0000000..e96ccea --- /dev/null +++ b/elisp/emms-setup.el @@ -0,0 +1,200 @@ +;;; emms-setup.el --- Setup script for EMMS -*- lexical-binding: t; -*- + +;; Copyright (C) 2005-2022 Free Software Foundation, Inc. + +;; Author: Yoni Rabkin <[email protected]> +;; Keywords: emms setup multimedia + +;; 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; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; This file provides the `emms-setup' feature. With `emms-setup' we +;; can setup Emms with different features enabled. The use of this +;; feature is documented in the Emms manual which is distributed with +;; Emms. +;; +;; The use this feature we can invoke (for example): +;; +;; (require 'emms-setup) +;; (emms-all) +;; +;; The first command loads the feature into Emacs and the second +;; chooses the `emms-all' level. + +;;; Code: + +(require 'emms) + +(defgroup emms-setup nil + "*The Emacs Multimedia System setup utility." + :prefix "emms-setup" + :group 'multimedia) + +(defcustom emms-setup-default-player-list + '(emms-player-mpg321 + emms-player-ogg123 + emms-player-mplayer-playlist + emms-player-mplayer + emms-player-mpv + emms-player-vlc + emms-player-vlc-playlist) + "Default list of players for emms-setup." + :type 'list) + +(defvar emms-setup-discover-player-alist + '((emms-player-mpg321 . "mpg123") + (emms-player-ogg123 . "ogg123") + (emms-player-mplayer . "mplayer") + (emms-player-mpv . "mpv") + (emms-player-vlc . "vlc")) + "Association list of players and their binaries.") + +;;;###autoload +(defun emms-minimalistic () + "An Emms setup script. +Invisible playlists and all the basics for playing media." + (require 'emms-source-file) + (require 'emms-source-playlist) + (require 'emms-player-simple) + (require 'emms-player-mplayer) + (require 'emms-player-mpv) + (require 'emms-player-vlc)) + +;;;###autoload +(defun emms-all () + "An Emms setup script. +Everything included in the `emms-minimalistic' setup and adds all +the stable features which come with the Emms distribution." + ;; include + (emms-minimalistic) + ;; define + (eval-and-compile + (require 'emms-playlist-mode) + (require 'emms-info) + (require 'emms-info-mp3info) + (require 'emms-info-ogginfo) + (require 'emms-info-opusinfo) + (require 'emms-info-metaflac) + (require 'emms-info-tinytag) + (require 'emms-info-exiftool) + (require 'emms-info-native) + (require 'emms-cache) + (require 'emms-mode-line) + (require 'emms-mark) + (require 'emms-tag-editor) + (require 'emms-tag-tracktag) + (require 'emms-show-all) + (require 'emms-streams) + (require 'emms-lyrics) + (require 'emms-playing-time) + (require 'emms-player-mpd) + (require 'emms-player-xine) + (require 'emms-playlist-sort) + (require 'emms-browser) + (require 'emms-mode-line-icon) + (require 'emms-cue) + (require 'emms-bookmarks) + (require 'emms-last-played) + (require 'emms-metaplaylist-mode) + (require 'emms-stream-info) + (require 'emms-score) + (require 'emms-history) + (require 'emms-i18n) + (require 'emms-volume) + (require 'emms-playlist-limit) + (require 'emms-librefm-scrobbler) + (require 'emms-librefm-stream) + (require 'emms-mpris)) + ;; setup + (setq emms-playlist-default-major-mode #'emms-playlist-mode) + (add-to-list 'emms-track-initialize-functions #'emms-info-initialize-track) + (setq emms-info-functions '(emms-info-native emms-info-cueinfo)) + (setq emms-track-description-function #'emms-info-track-description) + (when (fboundp 'emms-cache) ; work around compiler warning + (emms-cache 1)) + (emms-mode-line-mode 1) + (emms-mode-line-blank) + (emms-lyrics 1) + (emms-playing-time-mode 1) + (add-hook 'emms-player-started-hook #'emms-last-played-update-current) + (emms-score 1)) + + +;;;###autoload +(defun emms-default-players () + "Set `emms-player-list' to `emms-setup-default-player-list'." + (setq emms-player-list + emms-setup-default-player-list)) + + + +;; These are kept around in order not to break anyone's existing +;; setup. +;;;###autoload +(defun emms-devel () + (emms-all)) +(make-obsolete 'emms-devel 'emms-all "4.1") + +;;;###autoload +(defun emms-standard () + (emms-all)) +(make-obsolete 'emms-standard 'emms-all "4.1") + + +;;; ------------------------------------------------------------------ +;;; Player discovery +;;; ------------------------------------------------------------------ +(defun emms-setup-discover-player-binary (bin-str) + "Find if BIN-STR can be executed in the current environment." + (when (not (eq system-type 'gnu/linux)) + (error "Player discovery only supported on GNU/Linux.")) + (let ((result (call-process "which" nil nil nil bin-str))) + (cond ((eq 0 result) t) + ((eq 1 result) nil) + ((eq 2 result) (error "invalid arguments to `which'."))))) + +(defun emms-setup-discover-player-has-binary-p (player) + "Find if PLAYER has an excecutable in the current environment." + (let ((bin-str (alist-get player emms-setup-discover-player-alist))) + (if bin-str + (emms-setup-discover-player-binary bin-str) + nil))) + +(defun emms-setup-discover-players () + "Interactively add players to `emms-player-list'." + (interactive) + (when (and emms-player-list + (y-or-n-p (format "emms-player-list is already set to %s, do you want to empty it first?" + emms-player-list))) + (setq emms-player-list nil)) + (let ((players (copy-tree emms-setup-default-player-list))) + (while players + (let ((player (car players))) + (when (emms-setup-discover-player-has-binary-p player) + (when (y-or-n-p + (format "Player %s is installed on your system, add it to the Emms player list?" + player)) + (add-to-list 'emms-player-list player)))) + (setq players (cdr players)))) + (message "emms-player-list is now set to: %s" emms-player-list)) + + + +(provide 'emms-setup) +;;; emms-setup.el ends here |
