;ELC ;;; Compiled by heimdall@baldur on Fri Feb 1 18:34:48 2008 ;;; from file /home/heimdall/repos/emms/emms.el ;;; in Emacs version 23.0.60.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. (if (and (boundp 'emacs-version) (< (aref emacs-version (1- (length emacs-version))) ?A) (or (and (boundp 'epoch::version) epoch::version) (string-lessp emacs-version "19.29"))) (error "`emms.el' was compiled for Emacs 19.29 or later")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #@22 EMMS version string. (defvar emms-version "3.0" (#$ . 571)) (byte-code "\300\301\302\303\304\305\306\307\306\310& \210\300\311\302\312\304\313\306\301&\210\300\314\302\315\304\316\306\301&\207" [custom-declare-group emms nil "*The Emacs Multimedia System." :prefix "emms-" :group multimedia applications emms-player "*Track players for EMMS." "emms-player-" emms-source "*Track sources for EMMS." "emms-source-"] 10) #@60 *List of players that EMMS can use. You need to set this! (custom-declare-variable 'emms-player-list 'nil '(#$ . -996) :group 'emms :type '(repeat (symbol :tag "Player"))) #@141 *The format to use for `emms-show'. Any "%s" is replaced by what `emms-track-description-function' returns for the currently playing track. (custom-declare-variable 'emms-show-format '"Currently playing: %s" '(#$ . -1176) :group 'emms :type 'string) #@195 *Non-nil if the EMMS playlist should automatically repeat. If nil, playback will stop when the last track finishes playing. If non-nil, EMMS will wrap back to the first track when that happens. (custom-declare-variable 'emms-repeat-playlist 'nil '(#$ . -1433) :group 'emms :type 'boolean) #@95 Non-nil, playback will repeat current track. If nil, EMMS will play track by track normally. (custom-declare-variable 'emms-repeat-track 'nil '(#$ . 1728) :group 'emms :type 'boolean) #@64 *Function for describing an EMMS track in a user-friendly way. (custom-declare-variable 'emms-track-description-function ''emms-track-simple-description '(#$ . -1919) :group 'emms :type 'function) #@250 The delay to pause after a player finished. This is a floating-point number of seconds. This is necessary for some platforms where it takes a bit to free the audio device after a player has finished. If EMMS is skipping songs, increase this number. (custom-declare-variable 'emms-player-delay '0 '(#$ . 2123) :type 'number :group 'emms) #@50 *The function to use for shuffling the playlist. (custom-declare-variable 'emms-playlist-shuffle-function ''emms-playlist-simple-shuffle '(#$ . -2466) :type 'function :group 'emms) #@48 *The function to use for sorting the playlist. (custom-declare-variable 'emms-playlist-sort-function ''emms-playlist-simple-sort '(#$ . -2653) :type 'function :group 'emms) #@59 *The function to use for make track uniq in the playlist. (custom-declare-variable 'emms-playlist-uniq-function ''emms-playlist-simple-uniq '(#$ . -2832) :type 'function :group 'emms) #@146 *Function for comparing two EMMS tracks. The function should return non-nil if and only if the first track sorts before the second (see `sort'). (custom-declare-variable 'emms-sort-lessp-function ''emms-sort-track-name-less-p '(#$ . -3023) :group 'emms :type 'function) #@48 *The default name of the EMMS playlist buffer. (custom-declare-variable 'emms-playlist-buffer-name '" *EMMS Playlist*" '(#$ . -3299) :type 'string :group 'emms) #@44 *The default major mode for EMMS playlist. (custom-declare-variable 'emms-playlist-default-major-mode 'default-major-mode '(#$ . -3466) :type 'function :group 'emms) #@57 *A function to insert a track into the playlist buffer. (custom-declare-variable 'emms-playlist-insert-track-function ''emms-playlist-simple-insert-track '(#$ . -3638) :group 'emms :type 'function) (make-variable-buffer-local 'emms-playlist-insert-track-function) #@162 *A function to update the track at point. This is called when the track information changed. This also shouldn't assume that the track has been inserted before. (custom-declare-variable 'emms-playlist-update-track-function ''emms-playlist-simple-update-track '(#$ . -3909) :group 'emms :type 'function) (make-variable-buffer-local 'emms-playlist-insert-track-function) #@66 *A function to delete the track at point in the playlist buffer. (custom-declare-variable 'emms-playlist-delete-track-function ''emms-playlist-simple-delete-track '(#$ . -4284) :group 'emms :type 'function) (make-variable-buffer-local 'emms-playlist-delete-track-function) #@99 *Hook run when a source got inserted into the playlist. The buffer is narrowed to the new tracks. (custom-declare-variable 'emms-playlist-source-inserted-hook 'nil '(#$ . -4563) :type 'hook :group 'emms) #@65 *Hook run after another track is selected in the EMMS playlist. (custom-declare-variable 'emms-playlist-selection-changed-hook 'nil '(#$ . -4773) :group 'emms :type 'hook) #@143 *Hook run after the current EMMS playlist is cleared. This happens both when the playlist is cleared and when a new buffer is created for it. (custom-declare-variable 'emms-playlist-cleared-hook 'nil '(#$ . -4952) :group 'emms :type 'hook) #@110 *List of functions to call for each new EMMS track. This can be used to initialize tracks with various info. (custom-declare-variable 'emms-track-initialize-functions 'nil '(#$ . -5199) :group 'emms :type 'hook) #@108 *List of functions to call when a track changes data. These functions are passed the track as an argument. (custom-declare-variable 'emms-track-updated-functions 'nil '(#$ . -5418) :group 'emms :type 'hook) #@47 *Hook run when an EMMS player starts playing. (custom-declare-variable 'emms-player-started-hook 'nil '(#$ . -5631) :group 'emms :type 'hook :options '(emms-show)) #@88 *Hook run when an EMMS player is stopped by the user. See `emms-player-finished-hook'. (custom-declare-variable 'emms-player-stopped-hook 'nil '(#$ . -5801) :group 'emms :type 'hook) #@301 *Hook run when an EMMS player finishes playing a track. Please pay attention to the differences between `emms-player-finished-hook' and `emms-player-stopped-hook'. The former is called only when the player actually finishes playing a track; the latter, only when the player is stopped interactively. (custom-declare-variable 'emms-player-finished-hook 'nil '(#$ . -5991) :group 'emms :type 'hook) #@66 *A function run when EMMS thinks the next song should be played. (custom-declare-variable 'emms-player-next-function ''emms-next-noerror '(#$ . -6394) :group 'emms :type 'function :options '(emms-next-noerror emms-random)) #@101 *Hook run when a player is paused or resumed. Use `emms-player-paused-p' to find the current state. (custom-declare-variable 'emms-player-paused-hook 'nil '(#$ . -6624) :group 'emms :type 'hook) #@94 The number of seconds to seek forward or backward when seeking. This is a number in seconds. (custom-declare-variable 'emms-seek-seconds '10 '(#$ . 6825) :group 'emms :type 'number) #@137 *Functions called when a player is seeking. The functions are called with a single argument, the amount of seconds the player did seek. (custom-declare-variable 'emms-player-seeked-functions 'nil '(#$ . -7014) :group 'emms :type 'hook) #@181 *Functions called when a player is setting the elapsed time of a track. The functions are called with a single argument, the time elapsed since the beginning of the current track. (custom-declare-variable 'emms-player-time-set-functions 'nil '(#$ . -7257) :group 'emms :type 'hook) #@112 A function to retrieve a track entry from the cache. This is called with two arguments, the type and the name. (custom-declare-variable 'emms-cache-get-function 'nil '(#$ . 7546) :group 'emms :type 'function) #@158 A function to add/set a track entry from the cache. This is called with three arguments: the type of the track, the name of the track, and the track itself. (custom-declare-variable 'emms-cache-set-function 'nil '(#$ . 7762) :group 'emms :type 'function) #@114 A function to be called when a track is modified. The modified track is passed as the argument to this function. (custom-declare-variable 'emms-cache-modified-function 'nil '(#$ . 8024) :group 'emms :type 'function) #@75 *Directory variable from which all other emms file variables are derived. (custom-declare-variable 'emms-directory '"~/.emacs.d/emms" '(#$ . -8246) :group 'emms :type 'string) #@44 The currently playing EMMS player, or nil. (defvar emms-player-playing-p nil (#$ . 8428)) #@46 Whether the current player is paused or not. (defvar emms-player-paused-p nil (#$ . 8524)) #@140 The active buffer before a source was invoked. This can be used if the source depends on the current buffer not being the playlist buffer. (defvar emms-source-old-buffer nil (#$ . 8622)) #@38 The current playlist buffer, if any. (defvar emms-playlist-buffer nil (#$ . 8815)) #@129 Run BODY with the current buffer being the current playlist buffer. This also disables any read-onliness of the current buffer. (defalias 'with-current-emms-playlist '(macro . #[(&rest body) "\301\302\303\304\305\306\303\307BBEEE\207" [body progn (when (or (not emms-playlist-buffer) (not (buffer-live-p emms-playlist-buffer))) (emms-playlist-current-clear)) let ((emms-source-old-buffer (or emms-source-old-buffer (current-buffer)))) with-current-buffer emms-playlist-buffer ((inhibit-read-only t))] 9 (#$ . 8905)])) (byte-code "\300\301\302\303#\210\300\301\304\305#\207" [put with-current-emms-playlist lisp-indent-function 0 edebug-form-spec (body)] 4) #@44 Simple wrapper around `inhibit-read-only'. (defalias 'emms-with-inhibit-read-only-t '(macro . #[(&rest body) "\301\302BB\207" [body let ((inhibit-read-only t))] 3 (#$ . 9569)])) (put 'emms-with-inhibit-read-only-t 'edebug-form-spec '(body)) (defalias 'emms-with-widened-buffer '(macro . #[(&rest body) "\301\302BB\207" [body save-restriction (widen)] 3])) (put 'emms-with-widened-buffer 'edebug-form-spec '(body)) #@192 Execute BODY for each track in the current buffer, starting at point. The point will be placed at the beginning of the track before executing BODY. The point will not be restored afterward. (defalias 'emms-walk-tracks '(macro . #[(&rest body) "\302\303!\304\305BC\306\307\310\311\312\313\314\315BBDFE\316\317D\320 \310\311\321\313\314\322BBDFC\"BBF)\207" [donep body make-symbol "donep" let (nil) unless (emms-playlist-track-at (point)) condition-case nil (emms-playlist-next) error setq (t) while not append (emms-playlist-next) (t)] 14 (#$ . 9992)])) (byte-code "\300\301\302\303#\210\300\301\304\305#\207" [put emms-walk-tracks lisp-indent-function 0 edebug-form-spec (body)] 4) #@55 Start playing the current track in the EMMS playlist. (defalias 'emms-start #[nil "?\205 \301\302 !\207" [emms-player-playing-p emms-player-start emms-playlist-current-selected-track] 2 (#$ . 10686) nil]) #@33 Stop any current EMMS playback. (defalias 'emms-stop #[nil "\205\301 \207" [emms-player-playing-p emms-player-stop] 1 (#$ . 10899) nil]) #@161 Start playing the next track in the EMMS playlist. This might behave funny if called from `emms-player-next-function', so use `emms-next-noerror' in that case. (defalias 'emms-next #[nil "\203\301 \210\302 \210\303 \207" [emms-player-playing-p emms-stop emms-playlist-current-select-next emms-start] 1 (#$ . 11046) nil]) #@276 Start playing the next track in the EMMS playlist. Unlike `emms-next', this function doesn't signal an error when called at the end of the playlist. This function should only be called when no player is playing. This is a good function to put in `emms-player-next-function'. (defalias 'emms-next-noerror #[nil "\203\302\303!\210 \203\304 \207\305\306\307\217\203\304 \207\310\311!\207" [emms-player-playing-p emms-repeat-track error "A track is already being played" emms-start nil (byte-code "\300 \210\301\207" [emms-playlist-current-select-next t] 1) ((error)) message "No next track in playlist"] 3 (#$ . 11377) nil]) #@56 Start playing the previous track in the EMMS playlist. (defalias 'emms-previous #[nil "\203\301 \210\302 \210\303 \207" [emms-player-playing-p emms-stop emms-playlist-current-select-previous emms-start] 1 (#$ . 12012) nil]) #@25 Jump to a random track. (defalias 'emms-random #[nil "\203\301 \210\302 \210\303 \207" [emms-player-playing-p emms-stop emms-playlist-current-select-random emms-start] 1 (#$ . 12245) nil]) #@27 Pause the current player. (defalias 'emms-pause #[nil "\205\301 \207" [emms-player-playing-p emms-player-pause] 1 (#$ . 12443) nil]) #@147 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. (defalias 'emms-seek #[(seconds) "\301 \210\302!\207" [seconds emms-ensure-player-playing-p emms-player-seek] 2 (#$ . 12586) "nSeconds to seek: "]) #@150 Seek the current player to SECONDS seconds. This can be a floating point number for sub-second fractions. It can also be negative to seek backwards. (defalias 'emms-seek-to #[(seconds) "\301 \210\302!\207" [seconds emms-ensure-player-playing-p emms-player-seek-to] 2 (#$ . 12888) "nSeconds to seek to: "]) #@27 Seek ten seconds forward. (defalias 'emms-seek-forward #[nil "\205\302 !\207" [emms-player-playing-p emms-seek-seconds emms-player-seek] 2 (#$ . 13201) nil]) #@28 Seek ten seconds backward. (defalias 'emms-seek-backward #[nil "\205\302 [!\207" [emms-player-playing-p emms-seek-seconds emms-player-seek] 2 (#$ . 13368) nil]) #@198 Describe the current EMMS track in the minibuffer. If INSERTP is non-nil, insert the description into the current buffer instead. This function uses `emms-show-format' to format the current track. (defalias 'emms-show #[(&optional insertp) "\203\304 \305\306 !\"\202\307 \203\nc\202\310\311\n\")\207" [emms-player-playing-p emms-show-format string insertp format emms-track-description emms-playlist-current-selected-track "Nothing playing right now" message "%s"] 4 (#$ . 13539) "P"]) #@75 Shuffle the current playlist. This uses `emms-playlist-shuffle-function'. (defalias 'emms-shuffle #[nil "\203\n\304!\204 \305 \210 \206prq\210\306\212 ,\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-playlist-shuffle-function buffer-live-p emms-playlist-current-clear t] 2 (#$ . 14041) nil]) #@69 Sort the current playlist. This uses `emms-playlist-sort-function'. (defalias 'emms-sort #[nil "\203\n\304!\204 \305 \210 \206prq\210\306\212 ,\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-playlist-sort-function buffer-live-p emms-playlist-current-clear t] 2 (#$ . 14375) nil]) #@69 Uniq the current playlist. This uses `emms-playlist-uniq-function'. (defalias 'emms-uniq #[nil "\203\n\304!\204 \305 \210 \206prq\210\306\212 ,\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-playlist-uniq-function buffer-live-p emms-playlist-current-clear t] 2 (#$ . 14697) nil]) #@88 Toggle whether emms repeats the playlist after it is done. See `emms-repeat-playlist'. (defalias 'emms-toggle-repeat-playlist #[nil "?\211\203 \301\302!\207\301\303!\207" [emms-repeat-playlist message "Will repeat the playlist after it is done." "Will stop after the playlist is over."] 3 (#$ . 15019) nil]) #@74 Toggle whether emms repeats the current track. See `emms-repeat-track'. (defalias 'emms-toggle-repeat-track #[nil "?\211\203 \301\302!\207\301\303!\207" [emms-repeat-track message "Will repeat the current track." "Will advance to the next track after this one."] 3 (#$ . 15336) nil]) #@55 Return non-nil if the track name of A sorts before B. (defalias 'emms-sort-track-name-less-p #[(a b) "\302!\302 !\231\207" [a b emms-track-name] 3 (#$ . 15630)]) #@51 Raise an error if no player is playing right now. (defalias 'emms-ensure-player-playing-p #[nil "?\205\301\302!\207" [emms-player-playing-p error "No EMMS player playing right now"] 2 (#$ . 15799)]) (require 'emms-compat) #@39 Create a new dictionary of type NAME. (defalias 'emms-dictionary #[(name) "C\207" [name] 1 (#$ . 16030)]) (put 'emms-dictionary 'byte-optimizer 'byte-compile-inline-expand) #@41 Return the type of the dictionary DICT. (defalias 'emms-dictionary-type #[(dict) "@\207" [dict] 1 (#$ . 16210)]) (put 'emms-dictionary-type 'byte-optimizer 'byte-compile-inline-expand) #@35 Return the value of NAME in DICT. (defalias 'emms-dictionary-get #[(dict name &optional default) " A\236\211\203\nA\202 )\207" [name dict item default] 3 (#$ . 16402)]) #@41 Set the value of NAME in DICT to VALUE. (defalias 'emms-dictionary-set #[(dict name value) " A\236\211\203\n \241\210\202 \304 A BC\"\241\210) \207" [name dict item value append] 6 (#$ . 16583)]) #@52 Create an EMMS track with type TYPE and name NAME. (defalias 'emms-track #[(type name) "\205 \n\"\211\204)\306C\307\310 \301 #\210\310 \302\n#\210) \203) \n #\210\311\312 \"\210 )\207" [emms-cache-get-function type name track emms-cache-modified-function emms-cache-set-function *track* nil emms-track-set run-hook-with-args emms-track-initialize-functions] 5 (#$ . 16792)]) #@31 True if OBJ is an emms track. (defalias 'emms-track-p #[(obj) "<\205 @\301=\207" [obj *track*] 2 (#$ . 17183)]) #@27 Return the type of TRACK. (defalias 'emms-track-type #[(track) "\301\302\"\207" [track emms-track-get type] 3 (#$ . 17304)]) #@27 Return the name of TRACK. (defalias 'emms-track-name #[(track) "\301\302\"\207" [track emms-track-get name] 3 (#$ . 17436)]) #@98 Return the value of NAME for TRACK. If there is no value, return DEFAULT (or nil, if not given). (defalias 'emms-track-get #[(track name &optional default) "\303 \n#\207" [track name default emms-dictionary-get] 4 (#$ . 17568)]) #@43 Set the value of NAME for TRACK to VALUE. (defalias 'emms-track-set #[(track name value) "\304 \n#\210 \205 !\207" [track name value emms-cache-modified-function emms-dictionary-set] 4 (#$ . 17804)]) #@265 Return a description of TRACK. This function uses the global value for `emms-track-description-function', rather than anything the current mode might have set. Use `emms-track-force-description' instead if you need to insert a description into a playlist buffer. (defalias 'emms-track-description #[(track) "\301\302!!\207" [track default-value emms-track-description-function] 2 (#$ . 18015)]) #@35 Information in TRACK got updated. (defalias 'emms-track-updated #[(track) "\301!\210\302\303\"\207" [track emms-playlist-track-updated run-hook-with-args emms-track-updated-functions] 3 (#$ . 18418)]) #@250 Simple function to give a user-readable description of a track. If it's a file track, just return the file name. Otherwise, return the type and the name with a colon in between. Hex-encoded characters in URLs are replaced by the decoded character. (defalias 'emms-track-simple-description #[(track) "\302!\211\303=\203\304!\202& \305=\203\306\304!!\202&\307 !\310\304!Q)\207" [track type emms-track-type file emms-track-name url emms-format-url-track-name symbol-name ": "] 5 (#$ . 18628)]) #@47 Format URL track name for better readability. (defalias 'emms-format-url-track-name #[(name) "\301!\207" [name url-unhex-string] 2 (#$ . 19137)]) #@272 Always return text that describes TRACK. This is used when inserting a description into a buffer. The reason for this is that if no text was returned (i.e. the user defined a track function that returned nil or the empty string), a confusing error message would result. (defalias 'emms-track-force-description #[(track) " !\211;\203\n\303\230\204\n\202\304 !)\207" [emms-track-description-function track desc "" emms-track-simple-description] 3 (#$ . 19291)]) #@179 The list of EMMS playlist buffers. You should use the `emms-playlist-buffer-list' function to retrieve a current list of EMMS buffers. Never use this variable for that purpose. (defvar emms-playlist-buffers nil (#$ . 19767)) #@46 The marker for the currently selected track. (defvar emms-playlist-selected-marker nil (#$ . 19999)) (make-variable-buffer-local 'emms-playlist-selected-marker) #@54 Non-nil when the current buffer is an EMMS playlist. (defvar emms-playlist-buffer-p nil (#$ . 20166)) (make-variable-buffer-local 'emms-playlist-buffer-p) #@51 Throw an error if we're not in a playlist-buffer. (defalias 'emms-playlist-ensure-playlist-buffer #[nil "?\205\301\302!\207" [emms-playlist-buffer-p error "Not an EMMS playlist buffer"] 2 (#$ . 20327)]) #@34 Set the current playlist buffer. (defalias 'emms-playlist-set-playlist-buffer #[(&optional buffer) "\203\n\303!\202 pr q\210\304 \210) t\203\305\306!\210 )\207" [buffer buf emms-playlist-buffer get-buffer emms-playlist-ensure-playlist-buffer message "Set current EMMS playlist buffer"] 2 (#$ . 20539) (list (let* ((buf-list (mapcar #'(lambda (buf) (list (buffer-name buf))) (emms-playlist-buffer-list))) (default (or (and emms-playlist-buffer-p (buffer-name)) (car (sort buf-list #'(lambda (lbuf rbuf) (< (length (car lbuf)) (length (car rbuf))))))))) (completing-read "Playlist buffer to make current: " buf-list nil t default)))]) #@178 Create a new playlist buffer. The buffer is named NAME, but made unique. NAME defaults to `emms-playlist-buffer-name'. If called interactively, the new buffer is also selected. (defalias 'emms-playlist-new #[(&optional name) "\306\206 !r\nq\210 \f=\204\f \210\307)\310\311\n\"\210t\203%\312\n!\210\n)\207" [name emms-playlist-buffer-name buf major-mode emms-playlist-default-major-mode emms-playlist-buffer-p generate-new-buffer t add-to-list emms-playlist-buffers switch-to-buffer] 3 (#$ . 21187) nil]) #@228 Return a list of EMMS playlist buffers. The first element is guaranteed to be the current EMMS playlist buffer, if it exists, otherwise the slot will be used for the other EMMS buffers. The list will be in newest-first order. (defalias 'emms-playlist-buffer-list #[nil "\302\303\"\304\305\306 \"\210\307 !\203@ =\204 \310 \"B\207" [emms-playlist-buffers emms-playlist-buffer emms-delete-if #[(buf) "\301!?\207" [buf buffer-live-p] 2] mapc #[(buf) "\303!\205rq\210 \205\n>?\205\nB\211)\207" [buf emms-playlist-buffer-p emms-playlist-buffers buffer-live-p] 2] buffer-list buffer-live-p delete] 4 (#$ . 21706)]) #@67 Kill the current EMMS playlist buffer and switch to the next one. (defalias 'emms-playlist-current-kill #[nil "\305!\205,\306 \211A@)\211\203$\n\fA\307 !\210\310!)\202+rq\210\311 ))\207" [emms-playlist-buffer x new old emms-playlist-buffers buffer-live-p emms-playlist-buffer-list kill-buffer switch-to-buffer bury-buffer] 3 (#$ . 22344) nil]) #@84 Clear the current playlist. If no current playlist exists, a new one is generated. (defalias 'emms-playlist-current-clear #[nil "\203\n\301!\204\302 \211\207rq\210\303 )\207" [emms-playlist-buffer buffer-live-p emms-playlist-new emms-playlist-clear] 2 (#$ . 22706) nil]) #@74 Clear the current buffer. If no playlist exists, a new one is generated. (defalias 'emms-playlist-clear #[nil "\301 \210\302~\210ed|\210)\303\304!\207" [inhibit-read-only emms-playlist-ensure-playlist-buffer t run-hooks emms-playlist-cleared-hook] 2 (#$ . 22990) nil]) #@63 Return the track at POS (point if not given), or nil if none. (defalias 'emms-playlist-track-at #[(&optional pos) "\301 \210\214~\210\302\206\f`\303\")\207" [pos emms-playlist-ensure-playlist-buffer get-text-property emms-track] 3 (#$ . 23266)]) #@47 Move to the next track in the current buffer. (defalias 'emms-playlist-next #[nil "\301 \210\302`\303\"\211\204\304\305!\210\306!\204\302\303\"\203%dU\203)\304\305!\210b)\207" [next emms-playlist-ensure-playlist-buffer next-single-property-change emms-track error "No next track" emms-playlist-track-at] 4 (#$ . 23520)]) #@51 Move to the previous track in the current buffer. (defalias 'emms-playlist-previous #[nil "\301 \210\302`\303\"\211\204\304\305!\210\306\303\"\204 \302\303\"\206e\203+\306\303\"\204/\304\305!\210b)\207" [prev emms-playlist-ensure-playlist-buffer previous-single-property-change emms-track error "No previous track" get-text-property] 4 (#$ . 23860)]) #@48 Move to the first track in the current buffer. (defalias 'emms-playlist-first #[nil "\301 \210\302\303\304\217\211\203b\202\305\306!)\207" [first emms-playlist-ensure-playlist-buffer nil (byte-code "\212eb\210\300`!\204 \301 \210`)\207" [emms-playlist-track-at emms-playlist-next] 2) ((error)) error "No first track"] 4 (#$ . 24231)]) #@47 Move to the last track in the current buffer. (defalias 'emms-playlist-last #[nil "\301 \210\302\303\304\217\211\203b\202\305\306!)\207" [last emms-playlist-ensure-playlist-buffer nil (byte-code "\212db\210\300 \210`)\207" [emms-playlist-previous] 1) ((error)) error "No last track"] 4 (#$ . 24579)]) #@28 Delete the track at point. (defalias 'emms-playlist-delete-track #[nil "\301 \210 \207" [emms-playlist-delete-track-function emms-playlist-ensure-playlist-buffer] 1 (#$ . 24892)]) #@38 Return the currently selected track. (defalias 'emms-playlist-selected-track #[nil "\301 \210\205\n\302!\207" [emms-playlist-selected-marker emms-playlist-ensure-playlist-buffer emms-playlist-track-at] 2 (#$ . 25079)]) #@62 Return the currently selected track in the current playlist. (defalias 'emms-playlist-current-selected-track #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-selected-track] 2 (#$ . 25307)]) #@75 Return non-nil when POINT (defaulting to point) is on the selected track. (defalias 'emms-playlist-selected-track-at-p #[(&optional point) "\205 \206\n`U\206\303 \206`\304\"\211\205\nU)\207" [emms-playlist-selected-marker point p previous-single-property-change emms-track] 4 (#$ . 25645)]) #@26 Select the track at POS. (defalias 'emms-playlist-select #[(pos) "\302 \210\303!\204\304\305\"\210 \204\306 \307 \310\"\210 \311\223\210\312\313!\207" [pos emms-playlist-selected-marker emms-playlist-ensure-playlist-buffer emms-playlist-track-at error "No track at position %s" make-marker set-marker-insertion-type t nil run-hooks emms-playlist-selection-changed-hook] 3 (#$ . 25955)]) #@46 Select the next track in the current buffer. (defalias 'emms-playlist-select-next #[nil "\301 \210\212\203\302!\203\202eb\210\303\304\305\217)\207" [emms-playlist-selected-marker emms-playlist-ensure-playlist-buffer marker-position nil (byte-code "\203\f\301\302\303\217\210\202\304 \210\305`!\207" [emms-repeat-playlist nil (emms-playlist-next) ((error (emms-playlist-first))) emms-playlist-next emms-playlist-select] 3) ((error (error "No next track in playlist")))] 3 (#$ . 26356)]) #@48 Select the next track in the current playlist. (defalias 'emms-playlist-current-select-next #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-select-next] 2 (#$ . 26861)]) #@50 Select the previous track in the current buffer. (defalias 'emms-playlist-select-previous #[nil "\301 \210\212\203\302!\203\202db\210\303\304\305\217)\207" [emms-playlist-selected-marker emms-playlist-ensure-playlist-buffer marker-position nil (byte-code "\203\f\301\302\303\217\210\202\304 \210\305`!\207" [emms-repeat-playlist nil (emms-playlist-previous) ((error (emms-playlist-last))) emms-playlist-previous emms-playlist-select] 3) ((error (error "No previous track in playlist")))] 3 (#$ . 27179)]) #@52 Select the previous track in the current playlist. (defalias 'emms-playlist-current-select-previous #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-select-previous] 2 (#$ . 27703)]) #@46 Select a random track in the current buffer. (defalias 'emms-playlist-select-random #[nil "\302 \210\212\303eb\210\303\304`!\204\303\305\306\217\210 \204&`B\303\307\310\217\210\202)\311!\312\313G!H!*\207" [track-indices #1=#:donep emms-playlist-ensure-playlist-buffer nil emms-playlist-track-at (emms-playlist-next) ((error (byte-code "\301\211\207" [#1# t] 2))) (emms-playlist-next) ((error (byte-code "\301\211\207" [#1# t] 2))) vconcat emms-playlist-select random] 4 (#$ . 28033)]) #@48 Select a random track in the current playlist. (defalias 'emms-playlist-current-select-random #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-select-random] 2 (#$ . 28539)]) #@47 Select the first track in the current buffer. (defalias 'emms-playlist-select-first #[nil "\300 \210\212\301 \210\302`!)\207" [emms-playlist-ensure-playlist-buffer emms-playlist-first emms-playlist-select] 2 (#$ . 28861)]) #@49 Select the first track in the current playlist. (defalias 'emms-playlist-current-select-first #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-select-first] 2 (#$ . 29090)]) #@46 Select the last track in the current buffer. (defalias 'emms-playlist-select-last #[nil "\300 \210\212\301 \210\302`!)\207" [emms-playlist-ensure-playlist-buffer emms-playlist-last emms-playlist-select] 2 (#$ . 29411)]) #@48 Select the last track in the current playlist. (defalias 'emms-playlist-current-select-last #[nil "\203\n\303!\204 \304 \210 \206prq\210\305\306 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only buffer-live-p emms-playlist-current-clear t emms-playlist-select-last] 2 (#$ . 29637)]) #@106 Insert TRACK at the current position into the playlist. This uses `emms-playlist-insert-track-function'. (defalias 'emms-playlist-insert-track #[(track) "\302 \210 !\207" [emms-playlist-insert-track-function track emms-playlist-ensure-playlist-buffer] 2 (#$ . 29956)]) #@73 Update TRACK at point. This uses `emms-playlist-update-track-function'. (defalias 'emms-playlist-update-track #[nil "\301 \210 \207" [emms-playlist-update-track-function emms-playlist-ensure-playlist-buffer] 1 (#$ . 30232)]) #@57 Insert tracks from SOURCE, supplying ARGS as arguments. (defalias 'emms-playlist-insert-source #[(source &rest args) "\302 \210\214``}\210\303 \"\210\304\305!)\207" [source args emms-playlist-ensure-playlist-buffer apply run-hooks emms-playlist-source-inserted-hook] 3 (#$ . 30464)]) #@103 Insert tracks from SOURCE in the current playlist. This is supplying ARGS as arguments to the source. (defalias 'emms-playlist-current-insert-source #[(source &rest args) "\203\n\305!\204 \306 \210 \206prq\210\307\310\311 \f#+\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only source args buffer-live-p emms-playlist-current-clear t apply emms-playlist-insert-source] 4 (#$ . 30756)]) #@40 Return all tracks between BEG and END. (defalias 'emms-playlist-tracks-in-region #[(beg end) "\304 \210\305\214 \n}\210eb\210\305\306`!\204\305\307\310\217\210 \204,\306`!B\305\311\312\217\210\202*)\207" [tracks beg end #1=#:donep emms-playlist-ensure-playlist-buffer nil emms-playlist-track-at (emms-playlist-next) ((error (byte-code "\301\211\207" [#1# t] 2))) (emms-playlist-next) ((error (byte-code "\301\211\207" [#1# t] 2)))] 3 (#$ . 31174)]) #@39 Update TRACK in all playlist buffers. (defalias 'emms-playlist-track-updated #[(track) "\300\301\302 \"\210\303\207" [mapc #[(buf) "rq\210 \205*\212\304ed\305\n$\211\205) b\210\306 \210\304\307`\305\"d\305\n$\211\204\310*)\207" [buf emms-playlist-buffer-p track pos text-property-any emms-track emms-playlist-update-track next-single-property-change nil] 6] buffer-list t] 3 (#$ . 31641)]) #@43 Insert the description of TRACK at point. (defalias 'emms-playlist-simple-insert-track #[(track) "\302 \210\303\304\305 !\306 #\307\261)\207" [inhibit-read-only track emms-playlist-ensure-playlist-buffer t emms-propertize emms-track-force-description emms-track "\n"] 4 (#$ . 32044)]) #@105 Update the track at point. Since we don't do anything special with the track anyways, just ignore this. (defalias 'emms-playlist-simple-update-track #[nil "\300\207" [nil] 1 (#$ . 32338)]) #@28 Delete the track at point. (defalias 'emms-playlist-simple-delete-track #[nil "\302 \210\303`!\204 \304\305!\210\306\307`\310\"@A|*\207" [region inhibit-read-only emms-playlist-ensure-playlist-buffer emms-playlist-track-at error "No track at point" t emms-property-region emms-track] 4 (#$ . 32533)]) #@36 Shuffle the whole playlist buffer. (defalias 'emms-playlist-simple-shuffle #[nil "\306 \210\307\310~\210\n\203\311  b\210\312 \210\313\314ed\"!\211G\315ed|\210\316\317!\210\320\f!\210\2037\321!\210 W\203N\321\fH!\210T\211\2029+\322 \210db*\207" [current inhibit-read-only emms-player-playing-p emms-playlist-selected-marker tracks len emms-playlist-ensure-playlist-buffer t nil emms-playlist-selected-track emms-playlist-delete-track vconcat emms-playlist-tracks-in-region 0 run-hooks emms-playlist-cleared-hook emms-shuffle-vector emms-playlist-insert-track emms-playlist-select-first i] 5 (#$ . 32845)]) #@33 Sort the whole playlist buffer. (defalias 'emms-playlist-simple-sort #[nil "\305 \210~\210\306\307 \310ed\"ed|\210\311\312!\210\313\314\315 \"\"\210\316ed\317 $\211\2030\320\f!\2022\321 ,\207" [tracks current inhibit-read-only emms-sort-lessp-function pos emms-playlist-ensure-playlist-buffer t emms-playlist-selected-track emms-playlist-tracks-in-region run-hooks emms-playlist-cleared-hook mapc emms-playlist-insert-track sort text-property-any emms-track emms-playlist-select emms-playlist-first] 6 (#$ . 33479)]) #@68 Compare stringfied element of list, and remove duplicate elements. (defalias 'emms-uniq-list #[(list stringify) "\306\307\310\"\311\211B\211 \311\211\203< @ \f!\312\"\204-\n\f\311B\241\210\nA\313\314#\210) A\211\204* A+\207" [hash result tail list element --dolist-tail-- make-hash-table :test equal nil gethash puthash t stringify str] 5 (#$ . 34009)]) #@25 Remove duplicate tracks (defalias 'emms-playlist-simple-uniq #[nil "\304 \210~\210\305\306 \307ed\"ed|\210\310\311!\210\312\313\314\315\"\237\"\210\316ed\317 $\211\2031\320 !\2023\321 ,\207" [tracks current inhibit-read-only pos emms-playlist-ensure-playlist-buffer t emms-playlist-selected-track emms-playlist-tracks-in-region run-hooks emms-playlist-cleared-hook mapc emms-playlist-insert-track emms-uniq-list emms-track-name text-property-any emms-track emms-playlist-select emms-playlist-first] 6 (#$ . 34390)]) #@133 Return a pair of the beginning and end of the property PROP at POS. If POS does not contain PROP, try to find PROP just before POS. (defalias 'emms-property-region #[(pos prop) "\304\211\neV\203\305\nS \"\203\306\nS \"\202,\305\n \"\203'\n\202,\307\310 \"\210\305\n \"\203;\311\n \"\202S\neV\203N\305\nS \"\203N\n\202S\307\310 \"\210 \206Xe\206]d*B\207" [end begin pos prop nil get-text-property previous-single-property-change error "Cannot find the %s property at the given position" next-single-property-change] 3 (#$ . 34920)]) #@17 Shuffle VECTOR. (defalias 'emms-shuffle-vector #[(vector) "GS\211\304Y\203'\305 T!\nH\n HI\210 I\210* S\211\202)\207" [vector i r old 0 random] 5 (#$ . 35479)]) #@451 Define a new EMMS source called NAME. This macro defines three functions: `emms-source-NAME', `emms-play-NAME' and `emms-add-NAME'. BODY should use `emms-playlist-insert-track' do insert all tracks to be played, which is exactly what `emms-source-NAME' will do. The other two functions will be simple wrappers around `emms-source-NAME'; any `interactive' form that you specify in BODY will end up in these. See emms-source-file.el for some examples. (defalias 'define-emms-source '(macro . #[(name arglist &rest body) "\306\307\310\"!\306\307\311\"!\306\307\312\"!\306\307\313\"!\314\315\316\317\316\320 \"\"@;\203;@A\211 @@)\303=\203Q@A\321\322 \fBBBB\322 \f \323\324\325\326\327\330D\nBBE\331\330D\nBBF\257\322 \f \323\324\325\332\331\330D\nBBE\327\330D\nBBF\257\322 \f \333\330D\nBB\257\257.\207" [name arglist call-args interactive docstring source-insert intern format "emms-source-%s" "emms-play-%s" "emms-add-%s" "emms-insert-%s" "A source of tracks for EMMS." nil delete &rest &optional progn defun if current-prefix-arg let ((current-prefix-arg nil)) emms-source-add quote emms-source-play ((current-prefix-arg nil)) emms-source-insert source-add source-play source-name body x] 16 (#$ . 35661)])) #@68 Play the tracks of SOURCE, after first clearing the EMMS playlist. (defalias 'emms-source-play #[(source &rest args) "\302 \210\303 \210\304\305 #\210\306 \210\307 \207" [source args emms-stop emms-playlist-current-clear apply emms-playlist-current-insert-source emms-playlist-current-select-first emms-start] 4 (#$ . 36933)]) #@67 Add the tracks of SOURCE at the current position in the playlist. (defalias 'emms-source-add #[(source &rest args) "\203\n\306!\204 \307 \210 \206prq\210\310\212db\210\311\312 \f#\210) \203/\313 !?\2051\314 +\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only source args emms-playlist-selected-marker buffer-live-p emms-playlist-current-clear t apply emms-playlist-current-insert-source marker-position emms-playlist-select-first] 4 (#$ . 37267)]) #@54 Insert the tracks from SOURCE in the current buffer. (defalias 'emms-source-insert #[(source &rest args) "\204\303\304!\207\305\306 \n#\207" [emms-playlist-buffer-p source args error "Not in an EMMS playlist buffer" apply emms-playlist-insert-source] 4 (#$ . 37750)]) #@63 Define a `emms-play-X' and `emms-add-X' function for SOURCES. (defalias 'define-emms-combined-source '(macro . #[(name shufflep sources) "\303\304\305\306\307\310 E\n\205\311\257\207" [name sources shufflep define-emms-source nil "An EMMS source for a tracklist." (interactive) mapc (lambda (source) (apply (car source) (cdr source))) (save-restriction (widen) (emms-shuffle))] 8 (#$ . 38027)])) #@58 Non-nil if the last EMMS player was stopped by the user. (defvar emms-player-stopped-p nil (#$ . 38433)) #@637 Create a new EMMS player. The start function will be START, and the stop function STOP. PLAYABLEP should return non-nil for tracks that this player can play. When trying to play a track, EMMS walks `emms-player-list'. For each player,it calls the PLAYABLEP function. The player corresponding to the first PLAYABLEP function that returns non-nil is used to play the track. To actually play the track, EMMS calls the START function, passing the chosen track as a parameter. If the user tells EMMS to stop playing, the STOP function is called. Once the player has finished playing, it should call `emms-player-stopped' to let EMMS know. (defalias 'emms-player #[(start stop playablep) "\304C\305\301 #\210\305\302\n#\210\305\303 #\210)\207" [p start stop playablep *player* emms-player-set] 4 (#$ . 38545)]) #@43 Return the value of entry NAME in PLAYER. (defalias 'emms-player-get #[(player name &optional inexistent) "9\203\nJ\202 \304 \n #)\207" [player p name inexistent emms-dictionary-get] 4 (#$ . 39363)]) #@49 Set the value of entry NAME in PLAYER to VALUE. (defalias 'emms-player-set #[(player name value) "9\203\nJ\202 \304 \n #)\207" [player p name value emms-dictionary-set] 4 (#$ . 39575)]) #@154 Return an EMMS player capable of playing TRACK. This will be the first player whose PLAYABLEP function returns non-nil, or nil if no such player exists. (defalias 'emms-player-for #[(track) "\211\203\303 @\304\"\n!\204 A\211\204 \205 @)\207" [emms-player-list lis track emms-player-get playablep] 4 (#$ . 39774)]) #@22 Start playing TRACK. (defalias 'emms-player-start #[(track) "\203\304\305!\207\306 !\211\204\304\307 \"\202 \310\311\n\312\" !))\207" [emms-player-playing-p track player default-directory error "A player is already playing" emms-player-for "Don't know how to play track: %S" "/" emms-player-get start] 4 (#$ . 40105)]) #@104 Declare that the given EMMS PLAYER has started. This should only be done by the current player itself. (defalias 'emms-player-started #[(player) "\303\304\305!\207" [player emms-player-playing-p emms-player-paused-p nil run-hooks emms-player-started-hook] 2 (#$ . 40439)]) #@31 Stop the current EMMS player. (defalias 'emms-player-stop #[nil "\205\302\303\304\" \210)\305\211\207" [emms-player-playing-p emms-player-stopped-p t emms-player-get stop nil] 3 (#$ . 40721)]) #@106 Declare that the current EMMS player is finished. This should only be done by the current player itself. (defalias 'emms-player-stopped #[nil "\304 \203\n\305\306!\207\307\n!\210\305\310!\210 \207" [emms-player-playing-p emms-player-stopped-p emms-player-delay emms-player-next-function nil run-hooks emms-player-stopped-hook sleep-for emms-player-finished-hook] 2 (#$ . 40927)]) #@32 Pause the current EMMS player. (defalias 'emms-player-pause #[nil "\204\304\305!\207 \2035\306\303\"\306\302\"\211\203 \210\202.\n\203*\n \210\202.\304\307!\210*\310\311\312!\207\306\302\"\211\203D\n \210\202H\304\307!\210)\313\311\312!\207" [emms-player-playing-p emms-player-paused-p pause resume error "Can't pause player, nothing is playing" emms-player-get "Player does not know how to pause" nil run-hooks emms-player-paused-hook t] 5 (#$ . 41316)]) #@139 Seek the current player by SECONDS seconds. This can be a floating point number for fractions of a second, or negative to seek backwards. (defalias 'emms-player-seek #[(seconds) "\204\303\304!\207\305\301\"\211\204\303\306!\202 \n!\210\307\310\n\")\207" [emms-player-playing-p seek seconds error "Can't seek player, nothing playing right now" emms-player-get "Player does not know how to seek" run-hook-with-args emms-player-seeked-functions] 4 (#$ . 41799)]) #@139 Seek the current player to SECONDS seconds. This can be a floating point number for fractions of a second, or negative to seek backwards. (defalias 'emms-player-seek-to #[(seconds) "\204\303\304!\207\305\306\"\211\204\303\307!\202 \n!\210\310\311\n\")\207" [emms-player-playing-p seek seconds error "Can't seek-to player, nothing playing right now" emms-player-get seek-to "Player does not know how to seek-to" run-hook-with-args emms-player-time-set-functions] 4 (#$ . 42275)]) (provide 'emms)