;ELC ;;; Compiled by heimdall@baldur.tsdh.de on Thu May 15 09:56:13 2008 ;;; from file /home/heimdall/repos/emms/emms-lyrics.el ;;; in Emacs version 23.0.60.2 ;;; 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-lyrics.el' was compiled for Emacs 19.29 or later")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\306\307\310\311\312\301%\207" [require emms emms-player-simple emms-source-file time-date emms-url custom-declare-group emms-lyrics nil "Lyrics module for EMMS." :group] 6) #@42 If non-nil, display lyrics on mode line. (custom-declare-variable 'emms-lyrics-display-on-modeline 't '(#$ . 844) :type 'boolean :group 'emms-lyrics) #@43 If non-nil, display lyrics on minibuffer. (custom-declare-variable 'emms-lyrics-display-on-minibuffer 'nil '(#$ . 1000) :type 'boolean :group 'emms-lyrics) #@143 Local lyrics repository. `emms-lyrics-find-lyric' will look for lyrics in current directory(i.e., same as the music file) and this directory. (custom-declare-variable 'emms-lyrics-dir '"~/music/lyrics" '(#$ . 1163) :type 'string :group 'emms-lyrics) #@31 Format for displaying lyrics. (custom-declare-variable 'emms-lyrics-display-format '" %s " '(#$ . 1419) :type 'string :group 'emms-lyrics) #@296 Coding system for reading lyrics files. If all your lyrics use the same coding system, you can set this variable to that value; else you'd better leave it to nil, and rely on `prefer-coding-system', `file-coding-system-alist' or (info "(emacs)File Variables"), sorted by priority increasingly. (custom-declare-variable 'emms-lyrics-coding-system 'nil '(#$ . 1565) :type 'coding-system :group 'emms-lyrics) #@49 Normal hook run after entering Emms Lyric mode. (custom-declare-variable 'emms-lyrics-mode-hook 'nil '(#$ . 1978) :type 'hook :group 'emms-lyrics) #@35 Function for finding lyric files. (custom-declare-variable 'emms-lyrics-find-lyric-function ''emms-lyrics-find-lyric '(#$ . 2131) :type 'symbol :group 'emms-lyrics) #@45 Non-nil value will enable lyrics scrolling. (custom-declare-variable 'emms-lyrics-scroll-p 't '(#$ . 2302) :type 'boolean :group 'emms-lyrics) #@60 Interval between scroller timers. The shorter, the faster. (custom-declare-variable 'emms-lyrics-scroll-timer-interval '0.4 '(#$ . 2451) :type 'number :group 'emms-lyrics) #@33 If non-nil, will diplay lyrics. (defvar emms-lyrics-display-p t (#$ . 2629)) #@16 Current lyric. (defvar emms-lyrics-mode-line-string "" (#$ . 2712)) #@32 Enable displaying emms lyrics. (defalias 'emms-lyrics-enable #[nil "\300\301!\210\302\303!\207" [emms-lyrics 1 message "emms lyrics enabled."] 2 (#$ . 2786) nil]) #@33 Disable displaying emms lyrics. (defalias 'emms-lyrics-disable #[nil "\300\301!\210\302\303!\207" [emms-lyrics -1 message "EMMS lyrics disabled"] 2 (#$ . 2955) nil]) #@32 Toggle displaying emms lyrics. (defalias 'emms-lyrics-toggle #[nil "\203\301 \207\302 \207" [emms-lyrics-display-p emms-lyrics-disable emms-lyrics-enable] 1 (#$ . 3127) nil]) #@38 Toggle display lyrics on minibbufer. (defalias 'emms-lyrics-toggle-display-on-minibuffer #[nil "\203\n\301\302\303!\207\304\302\305!\207" [emms-lyrics-display-on-minibuffer nil message "Disable lyrics on minibufer" t "Enable lyrics on minibufer"] 2 (#$ . 3311) nil]) #@37 Toggle display lyrics on mode line. (defalias 'emms-lyrics-toggle-display-on-modeline #[nil "\203\f\302\303\304\305!\207\306\304\307!\207" [emms-lyrics-display-on-modeline emms-lyrics-mode-line-string nil "" message "Disable lyrics on mode line" t "Enable lyrics on mode line"] 2 (#$ . 3588) nil]) #@64 Turn on emms lyrics display if ARG is positive, off otherwise. (defalias 'emms-lyrics #[(arg) "\203*\302V\203*\303\304\305\306\"\210\304\307\310\"\210\304\311\310\"\210\304\312\313\"\210\304\314\315\"\210\304\316\317\"\207\310 \210\320\321 \210\322\305\306\"\210\322\307\310\"\210\322\311\310\"\210\322\312\313\"\210\322\314\315\"\210\322\316\317\"\207" [arg emms-lyrics-display-p 0 t add-hook emms-player-started-hook emms-lyrics-start emms-player-stopped-hook emms-lyrics-stop emms-player-finished-hook emms-player-paused-hook emms-lyrics-pause emms-player-seeked-functions emms-lyrics-seek emms-player-time-set-functions emms-lyrics-sync nil emms-lyrics-restore-mode-line remove-hook] 3 (#$ . 3897) "p"]) #@102 Visit playing track's lyric file. If we can't find it from local disk, then search it from internet. (defalias 'emms-lyrics-visit-lyric #[nil "\306 \307\301\"\n\310\311\312 !\313Q\314\315 !#!\211\203-\316 !\203- \317\230\204-\320 !\202k\321\322!\210\307\323\"\324\315 !!\317\211\204F \325\326\"\203[\327\330\331\332 \333\"!\"\202c\327\334\331!\"\335\f!\210\321\336!++\207" [track name emms-lyrics-find-lyric-function lrc url filename emms-playlist-current-selected-track emms-track-get emms-replace-regexp-in-string "\\." file-name-extension "\\'" ".lrc" file-name-nondirectory file-exists-p "" find-file message "lyric file does not exist, search it from internet..." title file-name-sans-extension string-match "\\cc" format "http://mp3.baidu.com/m?f=ms&rn=10&tn=baidump3lyric&ct=150994944&word=%s&lm=-1" emms-url-quote-plus encode-coding-string gb2312 "http://search.lyrics.astraweb.com/?word=%s" browse-url "lyric file does not exist, search it from internet...done"] 7 (#$ . 4618) nil]) #@101 a list of the form: '((time0 . lyric0) (time1 . lyric1)...)). In short, at time-i, display lyric-i. (defvar emms-lyrics-alist nil (#$ . 5641)) #@30 timers for displaying lyric. (defvar emms-lyrics-timers nil (#$ . 5790)) #@24 emms lyric start time. (defvar emms-lyrics-start-time nil (#$ . 5869)) #@24 emms lyric pause time. (defvar emms-lyrics-pause-time nil (#$ . 5946)) #@38 How long time has emms lyric played. (defvar emms-lyrics-elapsed-time 0 (#$ . 6023)) #@25 Lyrics scroller timers. (defvar emms-lyrics-scroll-timers nil (#$ . 6114)) #@349 Read a lyric file(LRC format). Optional CATCHUP is for recognizing `emms-lyrics-catchup'. FILE should end up with ".lrc", its content looks like one of the following: [1:39]I love you, Emacs! [00:39]I love you, Emacs! [00:39.67]I love you, Emacs! FILE should be under the same directory as the music file, or under `emms-lyrics-dir'. (defalias 'emms-lyrics-read-file #[(file &optional catchup) "\204 \n!\n\205\225\306\n!\205\225\307\310!r q\210\311\216\f\312\n!\210\313\314\315\316#\203\214\317\320!\320\321\322\323\321#\324\325\"\203\210\317\320\" \324\326 \"!\327 \330!O!\331_\327 !T GSO!\\ G\315O\332\"BC\"\"\320*\202=+\202\"\333\"\334\"\",\316\207" [catchup emms-lyrics-find-lyric-function file #1=#:temp-buffer emms-lyrics-coding-system coding-system-for-read file-exists-p generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1# buffer-name kill-buffer] 2)) insert-file-contents search-forward-regexp "\\[[0-9:.]+\\].*" nil t match-string 0 "" emms-replace-regexp-in-string ".*\\]" string-match "\\[[0-9:.]+\\]" ":" string-to-number 1 60 append sort #[(a b) "@ @W\207" [a b] 2] lyric time lyric-string time-string semi-pos emms-lyrics-alist] 5 (#$ . 6196)]) #@26 Start displaying lryics. (defalias 'emms-lyrics-start #[nil "\304 \305\306\307\310 \311\"\312\313\314\315 !\316Q\317\320 !#!)\205!\321 \207" [emms-lyrics-start-time emms-lyrics-pause-time emms-lyrics-elapsed-time file current-time nil 0 emms-track-get emms-playlist-current-selected-track name emms-lyrics-read-file emms-replace-regexp-in-string "\\." file-name-extension "\\'" ".lrc" file-name-nondirectory emms-lyrics-set-timer] 6 (#$ . 7457)]) #@198 Catchup with later downloaded LRC file(full path). If you write some lyrics crawler, which is running asynchronically, then this function would be useful to call when the crawler finishes its job. (defalias 'emms-lyrics-catchup #[(lrc) "\305 \306\307\310\f\311\"\210\312 \210\313\314\315 !!!)\207" [emms-lyrics-start-time old-start emms-lyrics-pause-time emms-lyrics-elapsed-time lrc current-time nil 0 emms-lyrics-read-file t emms-lyrics-set-timer emms-lyrics-seek time-to-seconds time-since] 4 (#$ . 7916)]) #@25 Stop displaying lyrics. (defalias 'emms-lyrics-stop #[nil "\205\305\306 \"\210\n\203 \205\307\211\310\211\207" [emms-lyrics-alist emms-lyrics-timers emms-player-paused-p emms-player-stopped-p emms-lyrics-mode-line-string mapc emms-cancel-timer nil ""] 4 (#$ . 8437) nil]) #@26 Pause displaying lyrics. (defalias 'emms-lyrics-pause #[nil "\203\n\305 \202 \203\306\307 \n\"! \\\305 \f\205'\203%\310 \207\311 \207" [emms-player-paused-p emms-lyrics-pause-time emms-lyrics-start-time emms-lyrics-elapsed-time emms-lyrics-alist current-time time-to-seconds time-subtract emms-lyrics-stop emms-lyrics-set-timer] 4 (#$ . 8725)]) #@46 Seek forward or backward SEC seconds lyrics. (defalias 'emms-lyrics-seek #[(sec) "\306\307 !!\\\n\\\211\310W\203\310\311  \205%\f\312\313 \210 )\314 \207" [emms-lyrics-elapsed-time emms-lyrics-start-time sec emms-lyrics-alist emms-player-paused-p paused-orig time-to-seconds time-since 0 current-time t emms-lyrics-stop emms-lyrics-set-timer] 5 (#$ . 9088)]) #@47 Synchronize the lyric display at SEC seconds. (defalias 'emms-lyrics-sync #[(sec) "\303 \304\305\n!\207" [emms-lyrics-start-time emms-lyrics-elapsed-time sec current-time 0 emms-lyrics-seek] 2 (#$ . 9463)]) #@35 Set timers for displaying lyrics. (defalias 'emms-lyrics-set-timer #[nil "\306 \211\205\\\n\211@@)\fZ\n\211@A)\nA\205$\n\211A@)@\fZ\nA\2050\n\211A@)A\f \307\310\311\312\"\306\313 \f\205N\fZ&C\",\nA\211\204\306)\207" [emms-lyrics-timers emms-lyrics-alist lyrics-alist x emms-lyrics-elapsed-time next-lyric nil append run-at-time format "%d sec" emms-lyrics-display-handler next-time lyric time] 11 (#$ . 9678)]) #@29 Add lyric to the mode line. (defalias 'emms-lyrics-mode-line #[nil "\204\301\302\235?\205\303\304\"\211\207" [global-mode-string ("") emms-lyrics-mode-line-string append (emms-lyrics-mode-line-string)] 3 (#$ . 10124)]) #@24 Restore the mode line. (defalias 'emms-lyrics-restore-mode-line #[nil "\301\302\"\303 \207" [global-mode-string remove emms-lyrics-mode-line-string force-mode-line-update] 3 (#$ . 10358)]) #@73 DIFF is the timestamp differences between current LYRIC and NEXT-LYRIC. (defalias 'emms-lyrics-display-handler #[(lyric next-lyric diff) "\305\306 \"!\210\n\205\307 \f#\207" [emms-lyrics-display-format lyric emms-lyrics-scroll-p next-lyric diff emms-lyrics-display format emms-lyrics-scroll] 4 (#$ . 10555)]) #@133 Display LYRIC now. See `emms-lyrics-display-on-modeline' and `emms-lyrics-display-on-minibuffer' on how to config where to display. (defalias 'emms-lyrics-display #[(lyric) "\205 \203\305 \210\n\306 \210\f\205\307\310 !?\205\311\n!\207" [emms-lyrics-alist emms-lyrics-display-on-modeline lyric emms-lyrics-mode-line-string emms-lyrics-display-on-minibuffer emms-lyrics-mode-line force-mode-line-update minibuffer-window-active-p selected-window message] 2 (#$ . 10875)]) #@210 Return full path of found lrc FILE, or nil if not found. Use `emms-source-file-directory-tree-function' to find lrc FILE under current directory and `emms-lyrics-dir'. e.g., (emms-lyrics-find-lyric "abc.lrc") (defalias 'emms-lyrics-find-lyric #[(file) "\305 \306\307\310\"! P\311!\301=\203\312\n!\203\n\206# \f \"@*\207" [track file lyric-under-curr-dir emms-source-file-directory-tree-function emms-lyrics-dir emms-playlist-current-selected-track file-name-directory emms-track-get name emms-track-type file-exists-p] 4 (#$ . 11363)]) #@120 Scroll LYRIC to left smoothly in DIFF seconds. DIFF is the timestamp differences between current LYRIC and NEXT-LYRIC. (defalias 'emms-lyrics-scroll #[(lyric next-lyric diff) "\306!\307\n\310 Q\311\211\f\312\313\215+\207" [diff emms-lyrics-scroll-timers lyric next-lyric pos time floor nil " " 0 return (byte-code " W\205-\306\n\307\310\311 G\fY\203 \f\310O\202\312\313\314\"$C\" \\\fT\202\207" [time diff emms-lyrics-scroll-timers lyric pos scrolled-lyric append run-at-time nil emms-lyrics-display throw return t emms-lyrics-scroll-timer-interval] 9) scrolled-lyric] 3 (#$ . 11915)]) #@32 Keymap for `emms-lyrics-mode'. (defvar emms-lyrics-mode-map (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210)\207" [map make-sparse-keymap define-key "p" emms-lyrics-previous-line "n" emms-lyrics-next-line "i" emms-lyrics-insert-time] 4) (#$ . 12527)) #@59 The remainder of X divided by Y, with the same sign as X. (defalias 'emms-lyrics-rem* #[(x y) "\304 \" \n_Z\211\305U\203\305\202&\305Y \305Y=\203# \202& Z*\207" [x y q rem floor 0] 4 (#$ . 12810)]) #@82 Insert lyric time in the form: [01:23.21], then goto the beginning of next line. (defalias 'emms-lyrics-insert-time #[nil "\305\306\307 \"! \\\310\n\311\245!\312_\312\245\310\313\n\311\"\312_!\314\245\315\316\317\320\321 \f##c\210+\322 \207" [emms-lyrics-start-time emms-lyrics-elapsed-time total min sec time-to-seconds time-subtract current-time floor 60 100 emms-lyrics-rem* 100.0 emms-replace-regexp-in-string " " "0" format "[%2d:%2d]" emms-lyrics-next-line] 7 (#$ . 13025) nil]) #@34 Goto the beginning of next line. (defalias 'emms-lyrics-next-line #[nil "\300y\207" [1] 1 (#$ . 13520) nil]) #@38 Goto the beginning of previous line. (defalias 'emms-lyrics-previous-line #[nil "\300y\207" [-1] 1 (#$ . 13635) nil]) (byte-code "\302\303N\204\f\304\302\303\305#\210\306\307!\204\304\307\310\311#\210\307B\312\307!\204(\313\307\314 \"\210\306\315!\2044\304\315\310\311#\210\315B\312\315!\204D\313\315\316 \"\210\304\301\310\311#\210\301B\312\301!\204^\313\301\317\301\320\"\210 \"\210\304\311\321\320#\207" [current-load-list emms-lyrics-mode-abbrev-table emms-lyrics-mode-hook variable-documentation put "Hook run when entering Emms Lyric mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" boundp emms-lyrics-mode-map definition-name emms-lyrics-mode default-boundp set-default make-sparse-keymap emms-lyrics-mode-syntax-table make-syntax-table define-abbrev-table nil derived-mode-parent] 5) #@153 Major mode for creating lyric files. \{emms-lyrics-mode-map} This mode runs the hook `emms-lyrics-mode-hook', as the final step during initialization. (defalias 'emms-lyrics-mode #[nil "\306\300!\210\307\310 \210\311\312\313 !\210\314\f!\210 \315\316!\210)\317\316!\207" [delay-mode-hooks major-mode mode-name emms-lyrics-mode-map emms-lyrics-mode-syntax-table emms-lyrics-mode-abbrev-table make-local-variable t kill-all-local-variables emms-lyrics-mode "Emms Lyric" use-local-map set-syntax-table run-hooks emms-lyrics-mode-hook run-mode-hooks local-abbrev-table] 2 (#$ . 14532) nil]) (provide 'emms-lyrics)