aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emms-player-extensions.el119
-rw-r--r--emms-player-mplayer.el62
-rw-r--r--emms-player-simple.el4
-rw-r--r--emms.el80
4 files changed, 142 insertions, 123 deletions
diff --git a/emms-player-extensions.el b/emms-player-extensions.el
deleted file mode 100644
index 2956edf..0000000
--- a/emms-player-extensions.el
+++ /dev/null
@@ -1,119 +0,0 @@
-;;; emms-player-extensions.el - Add more user control functions for EMMS
-
-;; Copyright (C) 2005 William XWL
-
-;; Author: William XWL <william.xwl@gmail.com>
-
-;; This program 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 2, or (at your option)
-;; any later version.
-;;
-;; This program 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 this program; if not, write to the Free Software
-;; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-;; 02110-1301 USA
-
-;;; Commentary:
-
-;; This package adds pause and seek support for EMMS. While pause and
-;; seek are only available for special players.
-
-;; Specically, here we add pause and seek support for
-;; `emms-player-mplayer' with mplayer's slave mode enabled. Put
-;; something like this to your .emacs first:
-;;
-;; (setq emms-player-mplayer-command-name "mplayer"
-;; emms-player-mplayer-parameters '("-slave")
-;; emms-player-list
-;; '(emms-player-mplayer
-;; emms-player-mplayer-playlist
-;; emms-player-mpg321
-;; emms-player-ogg123))
-
-;; To use, put this file to your load-path and the following to your
-;; .emacs:
-;;
-;; (require 'emms-player-extensions)
-
-;;; Change Log
-
-;; v 0.21 [2005/07/18 16:42:51] In function `emms-seek', add a call for
-;; `emms-lyric-seek' (defined in `emms-lyric.el').
-
-;; v 0.2 [2005/07/17 20:22:53] And `emms-player-paused-p',
-;; `emms-player-player-paused-hook', and some modifications to
-;; cooperate with another package(`emms-lyric.el'). Rename this
-;; file from emms-patch.el to emms-player-extensions.el.
-
-;; v 0.1 The initial version. Add `emms-pause', `emms-seek',
-;; `emms-repeat-curr', `emms-unrepeat-curr', `emms-repeat-all',
-;; `emms-unrepeat-all'.
-
-;;; Codes:
-
-;; Version control
-(defvar emms-player-extensions-version "0.3 $Revision: 1.7 $"
- "EMMS player extensions version string.")
-;; $Id: emms-player-extensions.el,v 1.7 2005/08/17 14:10:11 xwl Exp $
-
-(require 'emms)
-
-;;; Variables:
-
-(defvar emms-player-paused-p nil
- "The EMMS player paused.")
-
-(defvar emms-player-paused-hook nil
- "*Hook run when an EMMS player pauses playing.")
-
-(defvar emms-player-seeked-hook nil
- "*Hook run when an EMMS player seeks forward or backward.")
-
-;;; User Interfaces:
-
-(defun emms-pause ()
- "Pause the current player."
- (interactive)
- (when emms-player-playing-p
- (funcall (emms-player-get emms-player-playing-p 'pause))
- (setq emms-player-paused-p (not emms-player-paused-p))
- (run-hooks 'emms-player-paused-hook)))
-
-(defun emms-seek (&optional sec)
- "Seek forward/backward SEC(default is 10) seconds."
- (interactive)
- (unless sec (setq sec 10))
- (when emms-player-playing-p
- (funcall (emms-player-get emms-player-playing-p 'seek) sec)
- (run-hook-with-args 'emms-player-seeked-hook sec)))
-
-;;; mplayer: pause, seek
-(emms-player-set emms-player-mplayer
- 'pause
- 'emms-player-mplayer-pause)
-
-(emms-player-set emms-player-mplayer
- 'seek
- 'emms-player-mplayer-seek)
-
-(defun emms-player-mplayer-pause ()
- "Depends on mplayer's -slave mode."
- (process-send-string
- emms-player-simple-process-name "pause\n"))
-
-(defun emms-player-mplayer-seek (sec)
- "Depends on mplayer's -slave mode."
- (process-send-string
- emms-player-simple-process-name
- (format "seek %d\n" sec)))
-
-
-(provide 'emms-player-extensions)
-
-;;; emms-player-extensions.el ends here
diff --git a/emms-player-mplayer.el b/emms-player-mplayer.el
new file mode 100644
index 0000000..a7286b2
--- /dev/null
+++ b/emms-player-mplayer.el
@@ -0,0 +1,62 @@
+;;; emms-player-mplayer.el --- mplayer support for EMMS
+
+;; Copyright (C) 2005 William XWL
+;; Copyright (C) 2005 Jorgen Schaefer
+
+;; Authors: William XWL <william.xwl@gmail.com>
+;; Jorgen Schaefer <forcer@forcix.cx>
+
+;; This program 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 2
+;; of the License, or (at your option) any later version.
+
+;; This program 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 this program; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+;; 02110-1301 USA
+
+;;; Commentary:
+
+;; This provides a player that uses mplayer. It supports pause and
+;; seeking.
+
+;;; Code:
+
+(require 'emms-player-simple)
+
+(define-emms-simple-player mplayer '(file url)
+ (regexp-opt '(".ogg" ".mp3" ".wav" ".mpg" ".mpeg" ".wmv" ".wma"
+ ".mov" ".avi" ".divx" ".ogm" ".asf" ".mkv" "http://"))
+ "mplayer")
+
+(define-emms-simple-player mplayer-playlist '(playlist)
+ "http://"
+ "mplayer" "-playlist")
+
+(emms-player-set emms-player-mplayer
+ 'pause
+ 'emms-player-mplayer-pause)
+
+(emms-player-set emms-player-mplayer
+ 'seek
+ 'emms-player-mplayer-seek)
+
+(defun emms-player-mplayer-pause ()
+ "Depends on mplayer's -slave mode."
+ (process-send-string
+ emms-player-simple-process-name "pause\n"))
+
+(defun emms-player-mplayer-seek (sec)
+ "Depends on mplayer's -slave mode."
+ (process-send-string
+ emms-player-simple-process-name
+ (format "seek %d\n" sec)))
+
+(provide 'emms-player-mplayer)
+;;; emms-player-mplayer.el ends here
diff --git a/emms-player-simple.el b/emms-player-simple.el
index 35ff2de..1d27652 100644
--- a/emms-player-simple.el
+++ b/emms-player-simple.el
@@ -125,10 +125,6 @@ the specified PARAMS."
(define-emms-simple-player mpg321 '(file url) "\\.[mM][pP][23]$" "mpg321")
(define-emms-simple-player ogg123 '(file) (regexp-opt '(".ogg" ".OGG" ".FLAC" ".flac" )) "ogg123")
-(define-emms-simple-player mplayer-playlist '(playlist) "http://" "mplayer" "-playlist")
-(define-emms-simple-player mplayer '(file url)
- (regexp-opt '(".ogg" ".mp3" ".wav" ".mpg" ".mpeg" ".wmv" ".wma" ".mov" ".avi" ".divx" ".ogm" ".asf" ".mkv" "http://")) "mplayer")
-
(provide 'emms-player-simple)
;;; emms-player-simple.el ends here
diff --git a/emms.el b/emms.el
index 95da141..6986022 100644
--- a/emms.el
+++ b/emms.el
@@ -168,9 +168,25 @@ the latter, only when the player actually finishes playing a track."
:type 'hook
:options '(emms-next-noerror))
+(defcustom emms-player-paused-hook nil
+ "*Hook run when a player is paused or resumed.
+Use `emms-player-paused-p' to find the current state."
+ :group 'emms
+ :type 'hook)
+
+(defcustom emms-player-seeked-functions nil
+ "*Functions called when a player is seeking.
+The functions are called with a single argument, the amount of
+seconds the player did seek."
+ :group 'emms
+ :type 'hook)
+
(defvar emms-player-playing-p nil
"The currently playing EMMS player, or nil.")
+(defvar emms-player-paused-p nil
+ "Whether the current player is paused or not.")
+
;;; User Interface
@@ -224,6 +240,33 @@ This is a good function to put in `emms-player-finished-hook'."
(emms-playlist-select-previous)
(emms-start))
+(defun emms-pause ()
+ "Pause the current player."
+ (interactive)
+ (when emms-player-playing-p
+ (emms-player-pause)))
+
+(defun emms-seek (seconds)
+ "Seek the current player SECONDS seconds.
+This can be a floating point number for sub-second fractions.
+It can also be negative to seek backwards."
+ (interactive "nSeconds to seek: ")
+ (if emms-player-playing-p
+ (emms-player-seek seconds)
+ (error "Nothing playing right now")))
+
+(defun emms-seek-forward ()
+ "Seek ten seconds forward."
+ (interactive)
+ (when emms-player-playing-p
+ (emms-player-seek 10)))
+
+(defun emms-seek-backward ()
+ "Seek ten seconds backward."
+ (interactive)
+ (when emms-player-playing-p
+ (emms-player-seek -10)))
+
(defun emms-show (&optional insertp)
"Describe the current EMMS track in the minibuffer.
If INSERTP is non-nil, insert the description into the current buffer instead.
@@ -706,6 +749,43 @@ This should only be done by the current player itself."
(sleep-for emms-player-delay)
(run-hooks 'emms-player-finished-hook)))
+(defun emms-player-pause ()
+ "Pause the current EMMS player."
+ (cond
+ ((not emms-player-playing-p)
+ (error "Can't pause player, nothing is playing"))
+ (emms-player-paused-p
+ (let ((resume (emms-player-get emms-player-playing-p 'resume))
+ (pause (emms-player-get emms-player-playing-p 'pause)))
+ (cond
+ (resume
+ (funcall resume))
+ (pause
+ (funcall pause))
+ (t
+ (error "Player does not know how to pause"))))
+ (setq emms-player-paused-p nil)
+ (run-hooks emms-player-paused-hook))
+ (t
+ (let ((pause (emms-player-get emms-player-playing-p 'pause)))
+ (if pause
+ (funcall pause)
+ (error "Player does not know how to pause")))
+ (setq emms-player-paused-p t)
+ (run-hooks emms-player-paused-hook))))
+
+(defun emms-player-seek (seconds)
+ "Seek the current player by SECONDS seconds.
+This can be a floating point number for fractions of a second,
+or negative to seek backwards."
+ (if (not emms-player-playing-p)
+ (error "Can't seek player, nothing playing right now")
+ (let ((seek (emms-player-get emms-player-playing-p 'seek)))
+ (if (not seek)
+ (error "Player does not know how to seek")
+ (funcall seek)
+ (run-hook-with-args emms-player-seeked-functions seconds)))))
+
;;; Dictionaries