;ELC ;;; Compiled ;;; in Emacs version 26.3 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\207" [require cl-lib emms emms-cache emms-volume emms-source-file emms-playlist-sort sort seq] 2) #@25 Emms browser mode hook. (defvar emms-browser-mode-hook nil (#$ . 619)) (byte-code "\300\301\302\303\304\305\306\307\306\310& \210\311\312\313\314\315DD\316\317\314%\210\311\320\313\314\321DD\322\317\323%\210\311\324\313\314\325DD\326\317\327%\210\311\330\313\314\331DD\332\317\333%\207" [custom-declare-group emms-browser nil "*The Emacs Multimedia System browser" :prefix "emms-browser-" :group multimedia applications custom-declare-variable emms-browser-default-browse-type funcall function #[0 "\300\207" [info-artist] 1] "The default browsing mode." :type emms-browser-get-track-field-function #[0 "\300\207" [emms-browser-get-track-field-albumartist] 1] "A function to get an element from a track.\nChange this to customize the way data is organized in the\nbrowser. For example,\n`emms-browser-get-track-field-use-directory-name' uses the\ndirectory name to determine the artist. This means that\nsoundtracks, compilations and so on don't populate the artist\nview with lots of 1-track elements." (choice (function :tag "Sort by album-artist" emms-browser-get-track-field-albumartist) (function :tag "Simple" emms-browser-get-track-field-simple)) emms-browser-covers #[0 "\300\207" [("cover_small" "cover_med" "cover_large")] 1] "Control how cover images are found.\nCan be either a list of small, medium and large images (large\ncurrently not used), a function which takes a directory and one\nof the symbols `small', `medium' or `large', and should return a\npath to the cover, or nil to turn off cover loading." (choice list function boolean) emms-browser-covers-file-extensions #[0 "\300\207" [("jpg" "jpeg" "png" "gif" "bmp")] 1] "File extensions accepted for `emms-browser-covers'.\nShould be a list of extensions as strings. Should be set before\nemms-browser is required." (repeat (string :tag "Extension"))] 10) #@37 *List of potential cover art names. (defconst emms-browser--covers-filename nil (#$ . -2454)) (byte-code "\300\301\302\303\304DD\305\306\307%\210\300\310\302\303\311DD\312\306\313%\210\300\314\302\303\315DD\316\306\303%\210\300\317\302\303\320DD\321\306\303%\210\300\322\302\303\323DD\321\306\303%\210\300\324\302\303\325DD\326\306\327%\210\300\330\302\303\331DD\332\306\327%\210\300\333\302\303\334DD\335\306\327%\210\300\336\302\303\337DD\340\306\327%\210\300\341\302\303\342DD\343\306\327%\210\300\344\302\303\345DD\346\306\327%\207" [custom-declare-variable emms-browser-default-covers funcall function #[0 "\300\207" [nil] 1] "A list of default images to use if a cover isn't found." :type list emms-browser-comparison-test #[0 "\300\301!\203\302\207\303\207" [fboundp define-hash-table-test case-fold equal] 2] "A method for comparing entries in the cache.\nThe default is to compare case-insensitively." symbol emms-browser-track-sort-function #[0 "\300\207" [emms-sort-natural-order-less-p] 1] "How to sort tracks in the browser.\nUes nil for no sorting." emms-browser-alpha-sort-function #[0 "\300\301!\203\301\207\302\207" [functionp string-collate-lessp string<] 2] "How to sort artists/albums/etc. in the browser.\nUse nil for no sorting." emms-browser-album-sort-function #[0 "\300\207" [emms-browser-sort-by-year-or-name] 1] emms-browser-show-display-hook #[0 "\300\207" [nil] 1] "Hooks to run when starting or switching to a browser buffer." hook emms-browser-hide-display-hook #[0 "\300\207" [nil] 1] "Hooks to run when burying or removing a browser buffer." emms-browser-tracks-added-hook #[0 "\300\207" [nil] 1] "Hooks to run when tracks are added to the playlist." emms-browser-filter-tracks-hook #[0 "\300\207" [nil] 1] "Given a track, return t if the track should be ignored." emms-browser-filter-changed-hook #[0 "\300\207" [nil] 1] "Hook run after the filter has changed." emms-browser-delete-files-hook #[0 "\300\207" [nil] 1] "Hook run after files have been deleted.\nThis hook can be used to clean up extra files, such as album covers.\nCalled once for each directory."] 6) #@37 The current browser buffer, if any. (defvar emms-browser-buffer nil (#$ . 4564)) #@26 The default buffer name. (defvar emms-browser-buffer-name "*EMMS Browser*" (#$ . 4651)) #@25 The search buffer name. (defvar emms-browser-search-buffer-name "*emms-browser-search*" (#$ . 4745)) #@46 The current mapping db, eg. artist -> track. (defvar emms-browser-top-level-hash nil (#$ . 4852)) (make-variable-buffer-local 'emms-browser-top-level-hash) #@45 The current mapping type, eg. 'info-artist. (defvar emms-browser-top-level-type nil (#$ . 5014)) (make-variable-buffer-local 'emms-browser-top-level-type) #@61 Used to override the current indent, for the playlist, etc. (defvar emms-browser-current-indent nil (#$ . 5175)) #@50 The name of the current filter in place, if any. (defvar emms-browser-current-filter-name nil (#$ . 5294)) #@33 Keymap for `emms-browser-mode'. (defvar emms-browser-mode-map (byte-code "\300 \301\302\303#\210\301\304\305#\210\301\306\307#\210\301\310\311#\210\301\312\313#\210\301\314\315#\210\301\316\317#\210\301\320\321#\210\301\322\323#\210\301\324\325#\210\301\326\327#\210\301\330\331#\210\301\332\331#\210\301\333\334#\210\301\335\336#\210\301\337\340#\210\301\341\342#\210\301\343\344#\210\301\345\346#\210\301\347\350#\210\301\351\352#\210\301\353\354#\210\301\355\356#\210\301\357\360#\210\301\361\362#\210\301\363\364#\210\301\365\366#\210\301\367\370#\210\301\371\372#\210\301\373\374#\210\301\375\376#\210\301\377\201@#\210\301\201A\201B#\210\301\201C\201D#\210\301\201E\201F#\210\301\201G\201H#\210\301\201I\201J#\210\301\201K\201L#\210\301\201M\201N#\210\301\201O\201P#\210\301\201Q\201R#\210\301\201S\201T#\210\211\207" [make-sparse-keymap define-key "q" emms-browser-bury-buffer "/" emms-isearch-buffer "r" emms-browser-goto-random "n" next-line "p" previous-line "C" emms-browser-clear-playlist "?" describe-mode [67108911] emms-playlist-mode-undo " " emms-browser-toggle-subitems "^" emms-browser-move-up-level " " emms-browser-add-tracks [C-return] emms-browser-add-tracks-and-play "\n" [tab] emms-browser-next-non-track [backtab] emms-browser-prev-non-track "d" emms-browser-view-in-dired "D" emms-browser-delete-files "E" emms-browser-expand-all "1" emms-browser-collapse-all "2" emms-browser-expand-to-level-2 "3" emms-browser-expand-to-level-3 "4" emms-browser-expand-to-level-4 "b1" emms-browse-by-artist "b2" emms-browse-by-album "b3" emms-browse-by-genre "b4" emms-browse-by-year "b5" emms-browse-by-composer "b6" emms-browse-by-performer "sa" emms-browser-search-by-artist "sc" emms-browser-search-by-composer "sp" emms-browser-search-by-performer "sA" emms-browser-search-by-album "st" emms-browser-search-by-title "ss" emms-browser-search-by-names "WAw" emms-browser-lookup-artist-on-wikipedia "WCw" emms-browser-lookup-composer-on-wikipedia "WPw" emms-browser-lookup-performer-on-wikipedia "Waw" emms-browser-lookup-album-on-wikipedia ">" emms-browser-next-filter "<" emms-browser-previous-filter "+" emms-volume-raise "-" emms-volume-lower] 5) (#$ . 5407)) #@33 Keymap for `emms-browser-mode'. (defvar emms-browser-search-mode-map (byte-code "\301 \302\"\210\303\304\305#\210\211\207" [emms-browser-mode-map make-sparse-keymap set-keymap-parent define-key "q" emms-browser-kill-search] 5) (#$ . 7653)) (byte-code "\300\301!\203\302\303\301\"\210\202\302\303\304\305B\"\210\306\303\307\310#\210\306\303\311\312#\210\302\313\300\314!\203-\314\202.\315\"\207" [fboundp with-selected-window defalias emms-browser-with-selected-window macro #[385 "\300D\207" [save-selected-window] 4 "\n\n(fn WINDOW &rest BODY)"] put lisp-indent-function 1 edebug-form-spec (form body) emms-browser-run-mode-hooks run-mode-hooks run-hooks] 4) #@39 Launch or switch to the EMMS Browser. (defalias 'emms-browser #[0 "\301!\207" [emms-browser-default-browse-type emms-browser-create-or-focus] 2 (#$ . 8329) nil]) #@180 Create a new browser buffer with BROWSE-FUNC, or switch. BROWSE-FUNC should fill the buffer with something of interest. An example function is `emms-browse-by-artist'. (fn TYPE) (defalias 'emms-browser-create-or-focus #[257 "\300 \301\203!\302!\262\211\203\303!\210\202\304!\210\305\306!\202'\307 \210\310!\207" [emms-browser-get-buffer nil get-buffer-window select-window switch-to-buffer emms-browser-run-mode-hooks emms-browser-show-display-hook emms-browser-create emms-browse-by] 5 (#$ . 8499)]) #@63 Create a new emms-browser buffer and start emms-browser-mode. (defalias 'emms-browser-create #[0 "\300 \210\301 \210\302\303!\207" [emms-browser-new-buffer emms-browser-mode emms-browser-run-mode-hooks emms-browser-show-display-hook] 2 (#$ . 9019)]) #@87 A major mode for the Emms browser. \{emms-browser-mode-map} (fn &optional NO-UPDATE) (defalias 'emms-browser-mode #[256 "\305!\210\306\307\310\211\204p\311\312!\207" [emms-browser-mode-map major-mode mode-name buffer-read-only emms-browser-buffer use-local-map emms-browser-mode "Emms-Browser" t run-hooks emms-browser-mode-hook] 3 (#$ . 9275) nil]) #@48 Create a new browser buffer, and switch to it. (defalias 'emms-browser-new-buffer #[0 "\301\302!!\207" [emms-browser-buffer-name switch-to-buffer generate-new-buffer] 3 (#$ . 9639)]) #@52 Create or switch to a browser buffer, clearing it. (defalias 'emms-browser-clear #[0 "\301 \211\203\302!\210\303ed|)\202\304 \207" [inhibit-read-only emms-browser-get-buffer switch-to-buffer t emms-browser-create] 3 (#$ . 9829)]) #@88 Return the current buffer if it exists, or nil. If a browser search exists, return it. (defalias 'emms-browser-get-buffer #[0 "\302!\206 ?\206\303 !??\205 \207" [emms-browser-search-buffer-name emms-browser-buffer get-buffer buffer-live-p] 2 (#$ . 10071)]) (defalias 'emms-browser-ensure-browser-buffer #[0 "\301=?\205\n\302\303!\207" [major-mode emms-browser-mode error "Current buffer is not an emms-browser buffer"] 2]) #@41 Bury the browser buffer, running hooks. (defalias 'emms-browser-bury-buffer #[0 "\300\301!\210\302 \207" [emms-browser-run-mode-hooks emms-browser-hide-display-hook bury-buffer] 2 (#$ . 10509) nil]) #@69 Create an interactive function emms-browse-by-NAME. (fn NAME TYPE) (defalias 'emms-browser-add-category '(macro . #[514 "\300\301P!\302\303Q\304\305\306\307D\257\207" [intern "emms-browse-by-" "Browse by " "." defun nil (interactive) emms-browse-by] 11 (#$ . 10714)])) #@53 Render a top level buffer based on TYPE. (fn TYPE) (defalias 'emms-browse-by #[257 "\303!\304\305O\306P\307!\203\310\311R\262\312 \210\313!\210\314\"\210\211\315!\316V\2042\317 \210eb\207" [emms-browser-current-filter-name emms-browser-top-level-hash emms-browser-top-level-type symbol-name 5 nil "Browsing by: " emms-browser-make-hash-by " [" "]" emms-browser-clear rename-buffer emms-browser-render-hash hash-table-count 0 emms-browser-show-empty-cache-message] 8 (#$ . 10997)]) #@19 Browse by artist. (defalias 'emms-browse-by-artist #[0 "\300\301!\207" [emms-browse-by info-artist] 2 (#$ . 11502) nil]) #@21 Browse by composer. (defalias 'emms-browse-by-composer #[0 "\300\301!\207" [emms-browse-by info-composer] 2 (#$ . 11629) nil]) #@22 Browse by performer. (defalias 'emms-browse-by-performer #[0 "\300\301!\207" [emms-browse-by info-performer] 2 (#$ . 11762) nil]) #@18 Browse by album. (defalias 'emms-browse-by-album #[0 "\300\301!\207" [emms-browse-by info-album] 2 (#$ . 11898) nil]) #@18 Browse by genre. (defalias 'emms-browse-by-genre #[0 "\300\301!\207" [emms-browse-by info-genre] 2 (#$ . 12022) nil]) #@17 Browse by year. (defalias 'emms-browse-by-year #[0 "\300\301!\207" [emms-browse-by info-year] 2 (#$ . 12146) nil]) #@124 Return TYPE from TRACK. This can be customized to group different artists into one for compilations, etc. (fn TRACK TYPE) (defalias 'emms-browser-get-track-field #[514 "\"\207" [emms-browser-get-track-field-function] 5 (#$ . 12268)]) #@134 Return TYPE from TRACK without any heuristic. This function can be used as `emms-browser-get-track-field-function'. (fn TRACK TYPE) (defalias 'emms-browser-get-track-field-simple #[514 "\300\301#\207" [emms-track-get "misc"] 6 (#$ . 12513)]) #@256 Return TYPE from TRACK with an albumartist-oriented heuristic. For 'info-artist TYPE, use 'info-albumartistsort, 'info-albumartist, 'info-artistsort. For 'info-year TYPE, use 'info-originalyear, 'info-originaldate and 'info-date symbols. (fn TRACK TYPE) (defalias 'emms-browser-get-track-field-albumartist #[514 "\211\300=\203!\301\302\"\206J\301\303\"\206J\301\300\"\206J\301\304\305#\207\211\306=\203E\301\307\"\206A\301\310\"\206A\301\311\"\206A\301\306\312#\313!\207\301\314#\207" [info-artist emms-track-get info-albumartist info-albumartistsort info-artistsort "" info-year info-originaldate info-originalyear info-date "" emms-format-date-to-year "misc"] 6 (#$ . 12765)]) #@19 (fn TRACK TYPE) (defalias 'emms-browser-get-track-field-use-directory-name #[514 "\211\300=\203\n\301!\207\302\303#\207" [info-artist emms-browser-get-artist-from-path emms-track-get "misc"] 6 (#$ . 13500)]) #@14 (fn TRACK) (defalias 'emms-browser-get-artist-from-path #[257 "\300\301\"\302!\303\304\302!!!\305\306\"@\207" [emms-track-get name file-name-directory file-name-nondirectory directory-file-name split-string " - "] 7 (#$ . 13720)]) #@65 Make a hash, mapping with TYPE, eg artist -> tracks. (fn TYPE) (defalias 'emms-browser-make-hash-by #[257 "\302\303\"\304C\304C\305\306\307\310\311\312    $\313\"\314\315% \"\210\207" [emms-browser-comparison-test emms-cache-db make-hash-table :test nil maphash make-byte-code 514 "\304\305\"?\2052\302\306\300\"\240\210\302\242\2052\303\307\302\242\301\"\240\210\303\242\203+\310\302\242\303\242B\301#\207\310\302\242C\301#\207" vconcat vector [run-hook-with-args-until-success emms-browser-filter-tracks-hook emms-browser-get-track-field gethash puthash] 6 "\n\n(fn PATH TRACK)"] 14 (#$ . 13963)]) #@60 Render a mapping (DB) into a browser buffer. (fn DB TYPE) (defalias 'emms-browser-render-hash #[514 "\303\304\305\306\307\310!\311\"\312\313%\"\210\314\211\n\203(eb\210\315\316\317\320\321\316\n&\202-\322\316ed#*\207" [inhibit-read-only sort-fold-case emms-browser-alpha-sort-function maphash make-byte-code 514 "\301\300#\207" vconcat vector [emms-browser-insert-top-level-entry] 6 "\n\n(fn DESC DATA)" t sort-subr nil forward-line end-of-line #[0 "\300\301 \302 \"\207" [buffer-substring-no-properties line-beginning-position line-end-position] 3] sort-lines] 10 (#$ . 14583)]) #@12 (fn A B) (defalias 'case-fold-string= #[514 "\300\301\211\301\211\302&\302=\207" [compare-strings nil t] 10 (#$ . 15180)]) #@10 (fn A) (defalias 'case-fold-string-hash #[257 "\300\226!\207" [sxhash] 3 (#$ . 15314)]) (byte-code "\300\301!\203\f\301\302\303\304#\210\300\207" [fboundp define-hash-table-test case-fold case-fold-string= case-fold-string-hash] 4) #@73 Insert a single top level entry into the buffer. (fn NAME TRACKS TYPE) (defalias 'emms-browser-insert-top-level-entry #[771 "\300 \210\301\302$\303!\207" [emms-browser-ensure-browser-buffer emms-browser-make-bdata-tree 1 emms-browser-insert-format] 8 (#$ . 15556)]) #@42 Display some help if the cache is empty. (defalias 'emms-browser-show-empty-cache-message #[0 "\301\302c)\207" [inhibit-read-only t "\nWelcome to EMMS.\n\nThere are currently no files in the EMMS database.\nTo browse music, you need to tell EMMS where your\nfiles are.\n\nTry the following commands:\n\n M-x emms-add-directory-tree:\n Add all music in a directory and its subdirectories.\n\n M-x emms-add-directory:\n Add all music in a directory\n\n M-x emms-add-file: Add a single music file.\n\nAfter you have added some files, wait for EMMS to say\n'all track information loaded,' then return to the\nbrowser, and hit 'b 1' to refresh."] 1 (#$ . 15834)]) #@127 Return the next sensible mapping. Eg. if CURRENT-MAPPING is currently 'info-artist, return 'info-album. (fn CURRENT-MAPPING) (defalias 'emms-browser-next-mapping-type #[257 "\211\300=\203\301\207\211\302=\203\301\207\211\303=\203\301\207\211\301=\203 \304\207\211\305=\203(\300\207\211\306=\205/\300\207" [info-artist info-album info-composer info-performer info-title info-genre info-year] 3 (#$ . 16503)]) #@78 Build a tree of browser DB elements for tracks. (fn TYPE LEVEL TRACKS NAME) (defalias 'emms-browser-make-bdata-tree #[1028 "\300\301#$\207" [emms-browser-make-bdata emms-browser-make-bdata-tree-recurse] 9 (#$ . 16927)]) #@174 Build a tree of alists based on a list of tracks, TRACKS. For example, if TYPE is 'info-year, return an alist like: artist1 -> album1 -> *track* 1.. (fn TYPE LEVEL TRACKS) (defalias 'emms-browser-make-bdata-tree-recurse #[771 "\300!T\301\211C\301\211C\302=\203\2025\303\"\262\304\305\306\307\310\311  \n $\312\"\313\314%\"\207" [emms-browser-next-mapping-type nil info-title emms-browser-make-sorted-alist mapcar make-byte-code 257 "\302\304\300\"\240\210\303A\240\210\305\306\300\301\303\242#\302\242\300\301$\207" vconcat vector [emms-browser-make-name emms-browser-make-bdata emms-browser-make-bdata-tree-recurse] 6 "\n\n(fn ENTRY)"] 19 (#$ . 17163)]) #@75 Return a name for ENTRY, used for making a bdata object. (fn ENTRY TYPE) (defalias 'emms-browser-make-name #[514 "@A@\300\211\301=\203,\302\303\"\262\302\301\"\262\203!\211\204%\202-\304Q\202-\207" [nil info-title emms-track-get info-artist " - "] 9 (#$ . 17846)]) #@152 Return a string representation of a track number. The string will end in a space. If no track number is available, return an empty string. (fn TRACK) (defalias 'emms-browser-track-number #[257 "\300\301\"\211;\203\211\302\230\203\303\202#\211G\304=\203 \302P\202!\211\260\207" [emms-track-get info-tracknumber "0" "" 1] 4 (#$ . 18136)]) #@152 Return a string representation of a track number. The string will end in a space. If no track number is available, return an empty string. (fn TRACK) (defalias 'emms-browser-disc-number #[257 "\300\301\"\211;\203\211\302\230\203\303\202\211\207" [emms-track-get info-discnumber "0" ""] 4 (#$ . 18491)]) #@99 Return a string representation of a track's year. This will be in the form '(1998) '. (fn TRACK) (defalias 'emms-browser-year-number #[257 "\300!\211;\203\211\301\230\203\302\202\303\304Q\207" [emms-track-get-year "0" "" "(" ") "] 5 (#$ . 18808)]) #@118 Return a string representation of a track duration. If no duration is available, return an empty string. (fn TRACK) (defalias 'emms-browser-track-duration #[257 "\300\301\"\300\302\"\300\303\"\203\203\304\305#\202-\211\203,\304\305\306\245\306\246#\202-\307\207" [emms-track-get info-playing-time-min info-playing-time-sec info-playing-time format "%02d:%02d" 60 ""] 9 (#$ . 19072)]) #@289 Return a browser data item from ALIST. DATA should be a list of DB items, or a list of tracks. NAME is a name for the DB item. TYPE is a category the data is organised by, such as 'info-artist. LEVEL is the number of the sublevel the db item will be placed in. (fn DATA NAME TYPE LEVEL) (defalias 'emms-browser-make-bdata #[1028 "\300B\301B\302B\303BF\207" [type level name data] 9 (#$ . 19480)]) #@117 Make an alist mapping of TYPE -> TRACKS. Items with no metadata for TYPE will be placed in 'misc' (fn TYPE TRACKS) (defalias 'emms-browser-make-alist #[514 "\300\211\211\211\211\203Y\211@\301 \"\262\302=\2034\303!\262\304\230\203/\305\306\307\"!\262\2024P\262\310\"\262\203IAB\241\210\202RCBB\262A\266\202\202\210\211\203n\211@\211A\237\241\210A\266\202\202[\210\207" [nil emms-browser-get-track-field info-title emms-browser-track-number "" file-name-nondirectory emms-track-get name assoc] 12 (#$ . 19890)]) #@156 Return a sorted alist of TRACKS. TYPE is the metadata to make the alist by - eg. if it's 'info-artist, an alist of artists will be made. (fn TYPE TRACKS) (defalias 'emms-browser-make-sorted-alist #[514 "\300\301\"\"\207" [emms-browser-sort-alist emms-browser-make-alist] 6 (#$ . 20450)]) #@14 (fn BDATA) (defalias 'emms-browser-bdata-level #[257 "\300\236A\207" [level] 3 (#$ . 20748)]) #@14 (fn BDATA) (defalias 'emms-browser-bdata-name #[257 "\300\236A\207" [name] 3 (#$ . 20851)]) #@14 (fn BDATA) (defalias 'emms-browser-bdata-type #[257 "\300\236A\207" [type] 3 (#$ . 20952)]) #@14 (fn BDATA) (defalias 'emms-browser-bdata-data #[257 "\300\236A\207" [data] 3 (#$ . 21053)]) #@42 True if obj is a BDATA object. (fn OBJ) (defalias 'emms-browser-bdata-p #[257 "\300\236:\207" [data] 3 (#$ . 21154)]) #@222 Return a function to sort an alist using SORT-FUNC. This sorting predicate will compare the cadr of each entry. SORT-FUNC should be a playlist sorting predicate like `emms-playlist-sort-by-natural-order'. (fn SORT-FUNC) (defalias 'emms-browser-sort-cadr '(macro . #[257 "\300\301\302\303BBE\207" [lambda (a b) funcall ((cadr a) (cadr b))] 6 (#$ . 21281)])) (put 'emms-browser-sort-cadr 'edebug-form-spec t) #@221 Return a function to sort an alist using SORT-FUNC. This sorting predicate will compare the car of each entry. SORT-FUNC should be a playlist sorting predicate like `emms-playlist-sort-by-natural-order'. (fn SORT-FUNC) (defalias 'emms-browser-sort-car '(macro . #[257 "\300\301\302\303BBE\207" [lambda (a b) funcall ((car a) (car b))] 6 (#$ . 21697)])) (put 'emms-browser-sort-car 'edebug-form-spec t) #@97 Sort an ALIST by the tracks in each entry. Uses `emms-browser-track-sort-function'. (fn ALIST) (defalias 'emms-browser-sort-by-track #[257 "\203 \301\302\"\207\207" [emms-browser-track-sort-function sort #[514 "A@A@\"\207" [emms-browser-track-sort-function] 5 "\n\n(fn A B)"]] 4 (#$ . 22107)]) #@89 Sort ALIST by keys alphabetically. Uses `emms-browser-alpha-sort-function'. (fn ALIST) (defalias 'emms-browser-sort-by-name #[257 "\203 \301\302\"\207\207" [emms-browser-alpha-sort-function sort #[514 "@@\"\207" [emms-browser-alpha-sort-function] 5 "\n\n(fn A B)"]] 4 (#$ . 22414)]) #@41 Sort based on year or name. (fn ALIST) (defalias 'emms-browser-sort-by-year-or-name #[257 "\300\301\"\207" [sort #[514 "\300A@A@\"\207" [emms-browser-sort-by-year-or-name-p] 5 "\n\n(fn A B)"]] 4 (#$ . 22710)]) #@12 (fn A B) (defalias 'emms-browser-sort-by-year-or-name-p #[514 "\300!\301\302\303#P\300!\301\302\303#P\231\207" [emms-browser-year-number emms-track-get info-album "misc"] 8 (#$ . 22930)]) #@66 Sort ALIST using the sorting function for TYPE. (fn ALIST TYPE) (defalias 'emms-browser-sort-alist #[514 "\211\301=\204\211\302=\204\211\303=\204\211\304=\204\211\305=\203\"\306\2029\211\307=\203,\2029\211\310=\2036\311\2029\312\313!\211!\207" [emms-browser-album-sort-function info-artist info-composer info-performer info-year info-genre emms-browser-sort-by-name info-album info-title emms-browser-sort-by-track message "Can't sort unknown mapping!"] 5 (#$ . 23132)]) #@101 Return the bdata object at point. Includes information at point (such as album name), and metadata. (defalias 'emms-browser-bdata-at-point #[0 "\300\301 \302\"\207" [get-text-property point-at-bol emms-browser-bdata] 3 (#$ . 23627)]) #@70 Return the data stored under point. This will be a list of DB items. (defalias 'emms-browser-data-at-point #[0 "\300\301 !\207" [emms-browser-bdata-data emms-browser-bdata-at-point] 2 (#$ . 23867)]) #@36 Return the current level at point. (defalias 'emms-browser-level-at-point #[0 "\300\301 !\207" [emms-browser-bdata-level emms-browser-bdata-at-point] 2 (#$ . 24072)]) #@56 Return a list of tracks at point. (fn &optional NODE) (defalias 'emms-browser-tracks-at-point #[256 "\300\203 \202 \301 \211\2030\211@\302!\204\211B\262\202)\303\304\305!!\"\262A\266\202\202 \210\211\207" [nil emms-browser-data-at-point emms-browser-bdata-p append emms-browser-tracks-at-point emms-browser-bdata-data] 9 (#$ . 24245)]) #@42 Expand the current line by one sublevel. (defalias 'emms-browser-expand-one-level #[0 "\300 \212\301y\210\302 \210\211\211\205\211@\303!\210A\266\202\202\n\262)\207" [emms-browser-data-at-point 1 beginning-of-line emms-browser-insert-data-item] 5 (#$ . 24604) nil]) #@192 Insert DATA-ITEM into the buffer. This checks DATA-ITEM's level to determine how much to indent. The line will have a property emms-browser-bdata storing subitem information. (fn DATA-ITEM) (defalias 'emms-browser-insert-data-item #[257 "\300!\207" [emms-browser-insert-format] 3 (#$ . 24883)]) #@161 Move point to next entry more than LEVEL and return point. If no entry exits, return nil. Returns point if currently on a an entry more than LEVEL. (fn LEVEL) (defalias 'emms-browser-find-entry-more-than-level #[257 "`\300\301y\210\302 \262\211\203\211V\203`\202b\210\300\207" [nil 1 emms-browser-level-at-point] 5 (#$ . 25187)]) #@49 True if there are any subentries visible point. (defalias 'emms-browser-subitems-visible #[0 "\300 \301\212\302\303\301\304#\210\300 \211\262\205\211V)\207" [emms-browser-level-at-point nil re-search-forward "\n" t] 6 (#$ . 25533)]) #@51 True if it's possible to expand the current line. (defalias 'emms-browser-subitems-exist #[0 "\300\301 !\302=?\207" [emms-browser-bdata-type emms-browser-bdata-at-point info-title] 2 (#$ . 25776)]) #@157 Move up one level if possible. Return true if we were able to move up. If DIRECTION is 1, move forward, otherwise move backwards. (fn &optional DIRECTION) (defalias 'emms-browser-move-up-level #[256 "\300\301\302 \203,\247\203\206\303y\304U\203,\211\302 \206\304V\203\301\262\300\262\202\207" [nil t emms-browser-level-at-point -1 0] 6 (#$ . 25981) "P"]) #@54 Show or hide (kill) subitems under the current line. (defalias 'emms-browser-toggle-subitems #[0 "\300 \203\301 \207\302 \203\303 \207\304 \204\305\306!\210\301 \207" [emms-browser-subitems-visible emms-browser-kill-subitems emms-browser-subitems-exist emms-browser-show-subitems emms-browser-move-up-level cl--assertion-failed (emms-browser-move-up-level)] 2 (#$ . 26361) nil]) #@124 Recursively toggle all subitems under the current line. If there is no more subitems to expand, collapse the current node. (defalias 'emms-browser-toggle-subitems-recursively #[0 "\300 \301\212\302 \203&\303 \204&\211\204\300 \211\262\204!\211\300 U\203&\304 \204\305!\204)\211?\2054\306 \207" [emms-browser-level-at-point nil emms-browser-subitems-exist emms-browser-subitems-visible emms-browser-show-subitems emms-browser-find-entry-more-than-level emms-browser-kill-subitems] 4 (#$ . 26753) nil]) #@39 Show subitems under the current line. (defalias 'emms-browser-show-subitems #[0 "\300 ?\205 \301 \205 \302 \207" [emms-browser-subitems-visible emms-browser-subitems-exist emms-browser-expand-one-level] 1 (#$ . 27273)]) #@95 Remove all subitems under the current line. Stops at the next line at the same level, or EOF. (defalias 'emms-browser-kill-subitems #[0 "\301 \205\302 \303\304!\305\211\212\306!\204\303\304!)|)\266\202\207" [inhibit-read-only emms-browser-subitems-visible emms-browser-level-at-point point-at-bol 2 t emms-browser-find-entry-more-than-level] 5 (#$ . 27501)]) #@66 Insert a group description into the playlist buffer. (fn BDATA) (defalias 'emms-browser-playlist-insert-group #[257 "\303\304\"\203\305!\204\306 \210 \206prq\210\307db\210\211\310\261+\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-browser-format-line playlist buffer-live-p emms-playlist-current-clear t "\n"] 4 (#$ . 27872)]) #@54 Insert a track into the playlist buffer. (fn BDATA) (defalias 'emms-browser-playlist-insert-track #[257 "\303\304\"\203\305!\204\306 \210 \206prq\210\307db\210\211\310\261+\207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-browser-format-line playlist buffer-live-p emms-playlist-current-clear t "\n"] 4 (#$ . 28246)]) #@69 Add all tracks in BDATA to the playlist. (fn BDATA STARTING-LEVEL) (defalias 'emms-browser-playlist-insert-bdata #[514 "\301!\302!\303\203\211SZ\262\304!\305=\204 \306!\210\307!\211\205D\211@\305=\2048\310\"\210\202=\311!\210A\266\202\202#\262)\207" [emms-browser-current-indent emms-browser-bdata-type emms-browser-bdata-level nil emms-browser-make-indent info-title emms-browser-playlist-insert-group emms-browser-bdata-data emms-browser-playlist-insert-bdata emms-browser-playlist-insert-track] 9 (#$ . 28608)]) #@104 Expand to a depth specified by LEVEL. After expanding, jump to the currently marked entry. (fn LEVEL) (defalias 'emms-browser-expand-to-level #[257 "\300\301\302eb\210\303\300!`=\204\304 \300U\203T\262\305 \210\202eb\210\306\307\301#\262\303\300!`=\204`\304 \300U\203P\211\211\247\203F\211@Y\205J\310\"\266T\262\304 W\203Z\311 \210\305 \210\202)\312!\210\313 \210\314\315!\207" [1 0 nil buffer-end emms-browser-level-at-point emms-browser-next-non-track make-progress-reporter "Expanding EMMS browser entries..." progress-reporter-do-update emms-browser-show-subitems progress-reporter-done emms-browser-pop-mark recenter (4)] 9 (#$ . 29157)]) #@51 Save the current top level element, and collapse. (defalias 'emms-browser-mark-and-collapse #[0 "\300 \210db\210\301\302!`=?\205\303 \210\304 \210\202\207" [emms-browser-mark-entry buffer-end -1 emms-browser-prev-non-track emms-browser-kill-subitems] 2 (#$ . 29833)]) #@45 Move up until reaching a top-level element. (defalias 'emms-browser-find-top-level #[0 "\300 \301=?\205\302y\210\202\207" [emms-browser-level-at-point 1 -1] 2 (#$ . 30111)]) #@35 Mark the current top level entry. (defalias 'emms-browser-mark-entry #[0 "\212\301 \210\302\303\304 \305 \306\302D#*\207" [inhibit-read-only emms-browser-find-top-level t add-text-properties point-at-bol point-at-eol emms-browser-mark] 5 (#$ . 30295)]) #@55 Return to the last marked entry, and remove the mark. (defalias 'emms-browser-pop-mark #[0 "eb\210\301ed\302\303$\211\203\211b\210\303\304\305 \306 \302C#)\202!\307\310!\207" [inhibit-read-only text-property-any emms-browser-mark t remove-text-properties point-at-bol point-at-eol message "No mark saved!"] 5 (#$ . 30555)]) #@104 Move point to the parent of the current node. Return point. If at level one, return the current point. (defalias 'emms-browser-go-to-parent #[0 "\300 \211\301=\204\211\300 X\203\302y\210\202`\207" [emms-browser-level-at-point 1 -1] 3 (#$ . 30890)]) #@45 Remove the current node, and empty parents. (defalias 'emms-browser-delete-current-node #[0 "\300\301 \236\302\241\210\303 \207" [data emms-browser-bdata-at-point nil emms-browser-delete-node-if-empty] 2 (#$ . 31151)]) #@42 If empty, remove node and empty parents. (defalias 'emms-browser-delete-node-if-empty #[0 "\301 G\302U\205F\212\303 \304\211\212\305 \262)\306 \203\307 \210\310\311 b\210\312\313!\210)\314!\313=?\205C\211b\210\303 \262\315\236\316\317!\"\241\210\320 \266\203)\207" [inhibit-read-only emms-browser-data-at-point 0 emms-browser-bdata-at-point nil emms-browser-go-to-parent emms-browser-subitems-visible emms-browser-kill-subitems t point-at-bol kill-line 1 emms-browser-bdata-level data delq emms-browser-bdata-data emms-browser-delete-node-if-empty] 8 (#$ . 31376)]) #@195 Add all tracks at point or in region if active. When the region is not active, a numeric prefix argument inserts that many tracks from point. Return the playlist buffer point-max before adding. (defalias 'emms-browser-add-tracks #[0 "\304 \203\305\306 !\305\307 !ZT\202\247\203\202\310 \203&\311 !\204)\312 \210\n\206.pr q\210\313d+\304 \203@\307 b\210\314\211W\203b\211\315 \211\203Y\316\317!\"\210\320y\210\266\211T\262\202B\266\321\322\"\210\323 \210\207" [current-prefix-arg emms-playlist-buffer emms-source-old-buffer inhibit-read-only use-region-p line-number-at-pos region-end region-beginning 1 buffer-live-p emms-playlist-current-clear t 0 emms-browser-bdata-at-point emms-browser-playlist-insert-bdata emms-browser-bdata-level nil run-hook-with-args emms-browser-tracks-added-hook deactivate-mark] 10 (#$ . 31960) nil]) #@58 Add all tracks at point, and play the first added track. (defalias 'emms-browser-add-tracks-and-play #[0 "\303 \203\f\304!\204\305 \210 \206prq\210\306\211b\210\307`!\204'\310 \210\311`!\210+\312 \210\313 \207" [emms-playlist-buffer emms-source-old-buffer inhibit-read-only emms-browser-add-tracks buffer-live-p emms-playlist-current-clear t emms-playlist-track-at emms-playlist-next emms-playlist-select emms-stop emms-start] 3 (#$ . 32823) nil]) #@29 Isearch through the buffer. (defalias 'emms-isearch-buffer #[0 "eb\210\300 \205\301 ?\205\302 \207" [isearch-forward emms-browser-subitems-visible emms-browser-show-subitems] 1 (#$ . 33288) nil]) #@63 Jump to the next non-track element. (fn &optional DIRECTION) (defalias 'emms-browser-next-non-track #[256 "\300\211\205\206\n\301y\205\302\303 !\304=\204\305\262\202\207" [t 1 emms-browser-bdata-type emms-browser-bdata-at-point info-title nil] 4 (#$ . 33494) nil]) #@41 Jump to the previous non-track element. (defalias 'emms-browser-prev-non-track #[0 "\300\301!\207" [emms-browser-next-non-track -1] 2 (#$ . 33777) nil]) #@20 Expand everything. (defalias 'emms-browser-expand-all #[0 "\300\301!\207" [emms-browser-expand-to-level 99] 2 (#$ . 33936) nil]) #@39 Expand all top level items one level. (defalias 'emms-browser-expand-to-level-2 #[0 "\300 \210\301\302!\207" [emms-browser-mark-and-collapse emms-browser-expand-to-level 2] 2 (#$ . 34071) nil]) #@40 Expand all top level items two levels. (defalias 'emms-browser-expand-to-level-3 #[0 "\300 \210\301\302!\207" [emms-browser-mark-and-collapse emms-browser-expand-to-level 3] 2 (#$ . 34271) nil]) #@42 Expand all top level items three levels. (defalias 'emms-browser-expand-to-level-4 #[0 "\300 \210\301\302!\207" [emms-browser-mark-and-collapse emms-browser-expand-to-level 4] 2 (#$ . 34472) nil]) #@53 Collapse everything, saving and restoring the mark. (defalias 'emms-browser-collapse-all #[0 "\300 \210\301 \210\302\303!\207" [emms-browser-mark-and-collapse emms-browser-pop-mark recenter (4)] 2 (#$ . 34675) nil]) #@30 Do we need to seed (random)? (defvar emms-browser-seed-pending t (#$ . 34897)) #@59 Move cursor to random item with the lowest visible level. (defalias 'emms-browser-goto-random #[0 "\203\n\301\302!\210\303eb\210\301\304ed\"!Sy\210\305 \205\202\n\207" [emms-browser-seed-pending random t nil count-lines emms-browser-subitems-visible] 4 (#$ . 34982) nil]) #@60 View the current directory in dired. (fn &optional BDATA) (defalias 'emms-browser-view-in-dired #[256 "\211\203\"\300!\301=\203\302!@\303\304\"\305!\306!\207\307\302!@!\207\307\310 !\207" [emms-browser-bdata-type info-title emms-browser-bdata-data emms-track-get name file-name-directory find-file emms-browser-view-in-dired emms-browser-bdata-at-point] 6 (#$ . 35266) nil]) #@371 Remove all tracks at point or in region if active. Unless DELETE is non-nil or with prefix argument, this only acts on the browser, files are untouched. If caching is enabled, files are removed from the cache as well. When the region is not active, a numeric prefix argument remove that many tracks from point, it does not delete files. (fn &optional DELETE START END) (defalias 'emms-browser-remove-tracks #[768 "\301 \203\302!\302!ZT\202\247\203\202\303\304\211\211\247\203&\304\262\203~\305 \306\307\310\311\312!\313\"\314$\216\212\301 \203Cb\210\302d!\302`!Z^\211\307\211W\203h\211\315\316 \"\262\304y\266\211T\262\202N\266*\210\317\320\321G\"!\204z\322\323!\210\324\325!\210\301 \203\206b\210\307\211W\203\327\211\316 \211\203\306\211@\326\327\"\262 \203\247\330!\210\331!\332\n\"\204\271\211 B\262 \210\333!\210A\266\202\202\221\210\316 \203\317\334 \210\210\211T\262\202\210\266\335 \210\203\211\203\211@\336\337#\210\3401\371\341!0\202\375\210\202\376\210A\266\202\202\342\210\205\324\342!\207" [current-prefix-arg use-region-p line-number-at-pos 1 nil save-mark-and-excursion--save make-byte-code 0 "\301\300!\207" vconcat vector [save-mark-and-excursion--restore] 2 append emms-browser-tracks-at-point yes-or-no-p format "Really permanently delete these %d tracks? " error "Cancelled!" message "Deleting files..." emms-track-get name delete-file file-name-directory memql emms-cache-del emms-browser-delete-current-node deactivate-mark run-hook-with-args emms-browser-delete-files-hook (error) delete-directory "Deleting files...done"] 16 (#$ . 35658) "P\nr"]) (byte-code "\300\301\302\"\210\303\301\304\305#\207" [defalias emms-browser-delete-files emms-browser-remove-tracks put disabled t] 4) (defalias 'emms-browser-clear-playlist #[0 "\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-clear] 2 nil nil]) #@18 (fn FIELD URL) (defalias 'emms-browser-lookup #[514 "\300\301\302 !\"\211\205\303P!\207" [emms-track-get emms-browser-bdata-first-track emms-browser-bdata-at-point browse-url] 6 (#$ . 37697)]) #@14 (fn FIELD) (defalias 'emms-browser-lookup-wikipedia #[257 "\300\301\"\207" [emms-browser-lookup "http://en.wikipedia.org/wiki/Special:Search?search="] 4 (#$ . 37903)]) (defalias 'emms-browser-lookup-artist-on-wikipedia #[0 "\300\301!\207" [emms-browser-lookup-wikipedia info-artist] 2 nil nil]) (defalias 'emms-browser-lookup-composer-on-wikipedia #[0 "\300\301!\207" [emms-browser-lookup-wikipedia info-composer] 2 nil nil]) (defalias 'emms-browser-lookup-performer-on-wikipedia #[0 "\300\301!\207" [emms-browser-lookup-wikipedia info-performer] 2 nil nil]) (defalias 'emms-browser-lookup-album-on-wikipedia #[0 "\300\301!\207" [emms-browser-lookup-wikipedia info-album] 2 nil nil]) (byte-code "\300\301\302\303\304DD\305\306\307%\207" [custom-declare-variable emms-browser-switch-to-playlist-on-add funcall function #[0 "\300\207" [nil] 1] "Whether to switch to to the playlist after adding files." :type boolean] 6) #@172 Display browser and playlist. Toggle between selecting browser, playlist or hiding both. Tries to behave sanely if the user has manually changed the window configuration. (defalias 'emms-smart-browse #[0 "\301\302\303\"\210\301\304\305\"\210\301\306\307\"\210\310\311=\203+\312 \262\211\203$\313!\202U\313\303 !\202U\314=\203S\312 \262\211\203K\313!\210\315 \210\311=\205U\316 \202U\316 \210\305 \202U\317 \207" [major-mode add-hook emms-browser-show-display-hook emms-browser-display-playlist emms-browser-hide-display-hook emms-browser-hide-linked-window emms-browser-tracks-added-hook #[257 "\301\203\302 \210\303 \211\262\205/\304!r\305\306\307\310\311!\312\"\313$\216\314@\315\"\210b\210\316\317!*\262\207" [emms-browser-switch-to-playlist-on-add nil emms-smart-browse emms-browser-get-linked-window internal--before-with-selected-window make-byte-code 0 "\301\300!\207" vconcat vector [internal--after-with-selected-window] 2 select-window norecord recenter (4)] 9 "\n\n(fn START-OF-TRACKS)" nil] nil emms-browser-mode emms-browser-get-linked-window select-window emms-playlist-mode emms-browser-bury-buffer bury-buffer emms-browser] 3 (#$ . 38832) nil]) #@59 Return linked buffer (eg browser if playlist is selected. (defalias 'emms-browser-get-linked-buffer #[0 "\301=\203\n\302 @\207\303=\205\304 \207" [major-mode emms-browser-mode emms-playlist-buffer-list emms-playlist-mode emms-browser-get-buffer] 2 (#$ . 40025)]) #@59 Return linked window (eg browser if playlist is selected. (defalias 'emms-browser-get-linked-window #[0 "\300 \211\205 \301!\207" [emms-browser-get-linked-buffer get-buffer-window] 3 (#$ . 40299)]) #@89 A hook to show the playlist when the browser is displayed. Returns the playlist window. (defalias 'emms-browser-display-playlist #[0 "\301 \302 \303!\204F\304 r\305\306\307\310\311!\312\"\313$\216\314 \210\315\316!\210\203+\317!\210\2023\320 \262\317!\210\321\300!\203?\322\323\324#\210\325!\262*\210\207" [emms-playlist-mode-map emms-browser-get-linked-buffer emms-browser-get-linked-window window-live-p internal--before-save-selected-window make-byte-code 0 "\301\300!\207" vconcat vector [internal--after-save-selected-window] 2 split-window-horizontally other-window 1 switch-to-buffer emms-playlist-current-clear boundp define-key "q" #[0 "\300 \210\301 \207" [emms-browser-hide-linked-window bury-buffer] 1 nil nil] get-buffer-window] 9 (#$ . 40505) nil]) #@63 Delete a playlist or browser window when the other is hidden. (defalias 'emms-browser-hide-linked-window #[0 "\300 \301 \211\203\302!\203\303!\210\304!\207" [emms-browser-get-linked-buffer emms-browser-get-linked-window window-live-p delete-window bury-buffer] 4 (#$ . 41287) nil]) #@219 Return a list of tracks that match SEARCH-LIST. SEARCH-LIST is a list of cons pairs, in the form: ((field1 field2) string) If string matches any of the fields in a cons pair, it will be included. (fn SEARCH-LIST) (defalias 'emms-browser-filter-cache #[257 "\301C\302\303\304\305\306\307\"\310\"\311\312%\"\210\211\242\207" [emms-cache-db nil maphash make-byte-code 514 "\302\300\"\205 \301\301\242B\240\207" vconcat vector [emms-browser-matches-p] 5 "\n\n(fn K TRACK)"] 10 (#$ . 41583)]) #@26 (fn TRACK SEARCH-LIST) (defalias 'emms-browser-matches-p #[514 "\300\211\211\203A\211@\300\262\211@\211\2032\211@\301\302#\211\203*\303A@\"\203*\304\262\210A\266\202\202\210\204:\304\262A\266\202\202\210?\207" [nil emms-track-get "" string-match t] 12 (#$ . 42090)]) #@56 Create a new search buffer, or clean the existing one. (defalias 'emms-browser-search-buffer-go #[0 "\303\304!!\210\305\306!\210\307 !\210\306ed|)\207" [emms-browser-search-buffer-name emms-browser-search-mode-map inhibit-read-only switch-to-buffer get-buffer-create emms-browser-mode t use-local-map] 3 (#$ . 42387)]) #@43 Search for STR using FIELDS. (fn FIELDS) (defalias 'emms-browser-search #[257 "\301\302\"\303!\304 \210\305\306\307DC!!\210)\310 \210eb\207" [inhibit-read-only format "Searching with %S: " read-string emms-browser-search-buffer-go t emms-browser-render-search emms-browser-filter-cache emms-browser-expand-all] 7 (#$ . 42714)]) #@15 (fn TRACKS) (defalias 'emms-browser-render-search #[257 "\300\301\"\211\211\205\211@\302@A\301#\210A\266\202\202\262\207" [emms-browser-make-sorted-alist info-artist emms-browser-insert-top-level-entry] 8 (#$ . 43054)]) #@32 Kill the buffer when q is hit. (defalias 'emms-browser-kill-search #[0 "\300p!\207" [kill-buffer] 2 (#$ . 43291) nil]) (defalias 'emms-browser-search-by-artist #[0 "\300\301!\207" [emms-browser-search (info-artist)] 2 nil nil]) (defalias 'emms-browser-search-by-composer #[0 "\300\301!\207" [emms-browser-search (info-composer)] 2 nil nil]) (defalias 'emms-browser-search-by-performer #[0 "\300\301!\207" [emms-browser-search (info-performer)] 2 nil nil]) (defalias 'emms-browser-search-by-title #[0 "\300\301!\207" [emms-browser-search (info-title)] 2 nil nil]) (defalias 'emms-browser-search-by-album #[0 "\300\301!\207" [emms-browser-search (info-album)] 2 nil nil]) (defalias 'emms-browser-search-by-names #[0 "\300\301!\207" [emms-browser-search (info-artist info-composer info-performer info-title info-album)] 2 nil nil]) #@134 Build `emms-browser--covers-filename'. Based on from `emms-browser-covers' (when a list) and `emms-browser-covers-file-extensions'. (defalias 'emms-browser--build-cover-filename #[0 "\302\303\"\211\207" [emms-browser-covers emms-browser--covers-filename mapcar #[257 "\301!\203 \211C\207\302\303\304\305\306\307!\310\"\311\312%\"\207" [emms-browser-covers-file-extensions file-name-extension mapcar make-byte-code 257 "\300\301Q\207" vconcat vector ["."] 4 "\n\n(fn EXT)"] 8 "\n\n(fn COVER)"]] 3 (#$ . 44127)]) #@29 (fn BDATA &optional SIZE) (defalias 'emms-browser-get-cover-from-album #[513 "\300!\301=\204\f\302\303!\210\304!\304@!@\305\306\"\307\"\207" [emms-browser-bdata-type info-album cl--assertion-failed (eq (emms-browser-bdata-type bdata) 'info-album) emms-browser-bdata-data emms-track-get name emms-browser-get-cover-from-path] 8 (#$ . 44653)]) #@66 Return a cover filename, if it exists. (fn PATH &optional SIZE) (defalias 'emms-browser-get-cover-from-path #[513 "\211\204\303\262\211\304=\203\305\202\"\211\303=\203\306\202\"\211\307=\205\"\310\311!\2031\312!\"\202Y<\205Y\2118\205Y \204C\313 \210\314\315\316\317\320\321\322\323\n!\324\"\325\326% 8\"\"@\211\203g\327!\203g\211\202n\n\205n\n8\207" [emms-browser-covers emms-browser--covers-filename emms-browser-default-covers medium small 0 1 large 2 functionp file-name-directory emms-browser--build-cover-filename delq nil mapcar make-byte-code 257 "\301\300!P\302!\205\f\211\207" vconcat vector [file-name-directory file-exists-p] 4 "\n\n(fn COVER)" file-readable-p] 12 (#$ . 45010)]) #@13 (fn PATH) (defalias 'emms-browser-insert-cover #[257 "\300!c\207" [emms-browser-make-cover] 3 (#$ . 45740)]) #@13 (fn PATH) (defalias 'emms-browser-make-cover #[257 "\300!\211\301\230\203 \302\202K\211\303\230\203\304\202K\211\305\230\203!\306\202K\211\307\230\203+\310\202K\311\312\"\2036\313\202K\211\314\230\203@\315\202K\211\316\230\203J\317\202K\320\321\322\323\324\325\326\327\330 \257\331\332%\207" [file-name-extension "png" png "xbm" xbm "xpm" xpm "pbm" pbm string-match "e?ps" postscript "gif" gif "tiff" tiff jpeg emms-propertize " " display image :type :margin 5 :file rear-nonsticky (display)] 13 (#$ . 45858)]) #@18 (fn PATH SIZE) (defalias 'emms-browser-get-cover-str #[514 "\300\"\211\203\301!\202\302\207" [emms-browser-get-cover-from-path emms-browser-make-cover " "] 5 (#$ . 46397)]) #@118 Return the first track from a given bdata. If > album level, most of the track data will not make sense. (fn BDATA) (defalias 'emms-browser-bdata-first-track #[257 "\300!\211\301=\203\302!@\202\303\302!@!\207" [emms-browser-bdata-type info-title emms-browser-bdata-data emms-browser-bdata-first-track] 5 (#$ . 46586)]) #@14 (fn BDATA) (defalias 'emms-browser-insert-format #[257 "\301\302!\303\261)\207" [inhibit-read-only t emms-browser-format-line "\n"] 3 (#$ . 46919)]) #@14 (fn LEVEL) (defalias 'emms-browser-make-indent #[257 "\206 \301S\302\\\303\"\207" [emms-browser-current-indent make-string 0 32] 4 (#$ . 47079)]) #@27 (fn FORMAT-STRING ELEM) (defalias 'emms-browser-format-elem #[514 "\300\"A\207" [assoc] 5 (#$ . 47236)]) #@88 Return a propertized string to be inserted in the buffer. (fn BDATA &optional TARGET) (defalias 'emms-browser-format-line #[513 "\211\204\300\262\301!\206\302\303!\304!\305!\306!\307\310\"\311!\312  \"\313\nD\314B\315\nB\316\317!B\320\307 \321\"B\322\307\n\323\"B\324\307 \325\"B\326\307\f\327\"B\330\307 \331\"B\332\333!B\334\335!B\336\337!B\257 \340\321\232\203\225\341\342\343 \344\"B\345\343\n\346\"B\347\343 \350\"BE\"\262\351!\203\242 \"\262\352\353!r\211q\210\354\355\356\357\360!\361\"\362$\216c\210eb\210e\363\364\340\365#\203\307`\262\363\366\340\365#\203\322`\262\367d\370\nD#\266\371 *\262\262\372\"\262\331=\203\374\373\230\204\374\374P\262 \375=\203\331=\203\341\376 D\"\262\367\355G$\210\207" [browser emms-browser-bdata-name "misc" emms-browser-bdata-level emms-browser-bdata-type emms-browser-make-indent emms-browser-bdata-first-track emms-track-get name emms-browser-get-face emms-browser-get-format emms-browser-bdata "i" "n" "y" emms-track-get-year "A" info-album "a" info-artist "C" info-composer "p" info-performer "t" info-title "D" emms-browser-disc-number "T" emms-browser-track-number "d" emms-browser-track-duration nil append "cS" emms-browser-get-cover-str small "cM" medium "cL" large functionp generate-new-buffer " *temp*" make-byte-code 0 "\301\300!\205 \302\300!\207" vconcat vector [buffer-name kill-buffer] 2 re-search-forward "%c[SML]" t "%i" add-text-properties face buffer-string emms-browser-format-spec "" " " playlist emms-track] 24 (#$ . 47351)]) #@47 Return a suitable face for BDATA. (fn BDATA) (defalias 'emms-browser-get-face #[257 "\300!\211\301=\204\211\302=\203\303\202B\211\304=\203\305\202B\211\306=\203'\307\202B\211\310=\2031\311\202B\211\312=\203;\313\202B\211\314=\205B\315\316\317\320Q!\207" [emms-browser-bdata-type info-year info-genre "year/genre" info-artist "artist" info-composer "composer" info-performer "performer" info-album "album" info-title "track" intern "emms-browser-" "-face"] 7 (#$ . 48932)]) #@313 Return a string based on FORMAT and SPECIFICATION. FORMAT is a string containing `format'-like specs like "bash %u %k", while SPECIFICATION is an alist mapping from format spec characters to values. Any text properties on a %-spec itself are propagated to the text that it generates. (fn FORMAT SPECIFICATION) (defalias 'emms-browser-format-spec #[514 "\300\301!r\211q\210\302\303\304\305\306!\307\"\310$\216c\210eb\210\311\312\313\314#\203r\313f\315=\203/\316\317!\210\202\320\321!\203k\322\317!\322\310!\323\"A\211\204I\324\325\"\210\326\312\327Q\"\330!\210\303\224G\\\303\225G\\|\210\303\224S\303\224|\266\202\324\331!\210\202\332 *\207" [generate-new-buffer " *temp*" make-byte-code 0 "\301\300!\205 \302\300!\207" vconcat vector [buffer-name kill-buffer] 2 search-forward "%" nil t 37 delete-char 1 looking-at "\\([-0-9.]*\\)\\([a-zA-Z]+\\)" match-string assoc error "Invalid format character: %s" format "s" insert-and-inherit "Invalid format string" buffer-string] 10 (#$ . 49430)]) #@15 indent + name (defvar emms-browser-default-format "%i%n" (#$ . 50450)) (defvar emms-browser-info-title-format 'emms-browser-track-artist-and-title-format) (defvar emms-browser-playlist-info-title-format 'emms-browser-track-artist-and-title-format) #@21 (fn BDATA TARGET) (defalias 'emms-browser-get-format #[514 "\301!\302=\203 \303\202\304!\305P\306\307\304!\310R!\311!\203&\211J\202'\207" [emms-browser-default-format emms-browser-bdata-type browser "" symbol-name "-" intern "emms-browser-" "-format" boundp] 9 (#$ . 50704)]) #@18 (fn BDATA FMT) (defalias 'emms-browser-track-artist-and-title-format #[514 "\300\301\302\"\211\203\211\303\230\204\304\202\305\262\306Q\207" ["%i" emms-browser-format-elem "T" "0" "%T. " "" "%n"] 6 (#$ . 51000)]) (defvar emms-browser-info-album-format 'emms-browser-year-and-album-fmt) (defvar emms-browser-playlist-info-album-format 'emms-browser-year-and-album-fmt-med) #@18 (fn BDATA FMT) (defalias 'emms-browser-year-and-album-fmt #[514 "\300\301\302\"\211\203\211\303\230\204\304\202\305\262\306Q\207" ["%i%cS" emms-browser-format-elem "y" "0" "(%y) " "" "%n"] 6 (#$ . 51388)]) #@18 (fn BDATA FMT) (defalias 'emms-browser-year-and-album-fmt-med #[514 "\300\301\302\"\211\203\211\303\230\204\304\202\305\262\306Q\207" ["%i%cM" emms-browser-format-elem "y" "0" "(%y) " "" "%n"] 6 (#$ . 51610)]) #@39 (fn NAME DARK-COL LIGHT-COL HEIGHT) (defalias 'emms-browser-make-face '(macro . #[1028 "\300\301\302Q!\303\304\305\306\307FD\310\306\307 FD\311\312\313 DDFD\314\315QF\207" [intern "emms-browser-" "-face" defface quote ((class color) (background dark)) :foreground :height ((class color) (background light)) (((type tty) (class mono)) (:inverse-video t)) t :background "Face for " " in a browser/playlist buffer."] 14 (#$ . 51836)])) (byte-code "\300\301\302\303#\210\300\304\305\306#\210\300\307\310\311#\210\300\312\313\314#\210\300\315\316\317#\210\300\320\321\322#\207" [custom-declare-face emms-browser-year/genre-face ((#2=((class color) (background dark)) (:foreground #1="#aaaaff" :height 1.5)) (#3=((class color) (background light)) (:foreground "#444477" :height 1.5)) #4=(((type tty) (class mono)) (:inverse-video t)) (t (:background #1#))) "Face for year/genre in a browser/playlist buffer." emms-browser-artist-face ((#2# (:foreground #5="#aaaaff" :height 1.3)) (#3# (:foreground "#444477" :height 1.3)) #4# (t (:background #5#))) "Face for artist in a browser/playlist buffer." emms-browser-composer-face ((#2# (:foreground #6="#aaaaff" :height 1.3)) (#3# (:foreground "#444477" :height 1.3)) #4# (t (:background #6#))) "Face for composer in a browser/playlist buffer." emms-browser-performer-face ((#2# (:foreground #7="#aaaaff" :height 1.3)) (#3# (:foreground "#444477" :height 1.3)) #4# (t (:background #7#))) "Face for performer in a browser/playlist buffer." emms-browser-album-face ((#2# (:foreground #8="#aaaaff" :height 1.1)) (#3# (:foreground "#444477" :height 1.1)) #4# (t (:background #8#))) "Face for album in a browser/playlist buffer." emms-browser-track-face ((#2# (:foreground #9="#aaaaff" :height 1.0)) (#3# (:foreground "#444477" :height 1.0)) #4# (t (:background #9#))) "Face for track in a browser/playlist buffer."] 4) #@30 A list of available filters. (defvar emms-browser-filters nil (#$ . 53709)) #@246 Make a user-level function for filtering tracks. This: - defines an interactive function M-x emms-browser-show-NAME. - defines a variable emms-browser-filter-NAME of (name . func). - adds the filter to `emms-browser-filters'. (fn NAME FUNC) (defalias 'emms-browser-make-filter '(macro . #[514 "\300\301P!\300\302P!\303\304Q\305\306\307F\310\311  EE\312\313E\314\307\315\316 D\257\257\207" [intern "emms-browser-show-" "emms-browser-filter-" "Filter the cache using rule '" "'" progn defvar nil setq cons add-to-list 'emms-browser-filters defun (interactive) emms-browser-refilter] 16 (#$ . 53792)])) #@106 Set the current filter to be used on next update. This does not refresh the current buffer. (fn FILTER) (defalias 'emms-browser-set-filter #[257 "\211A\211@\302\303!\207" [emms-browser-filter-tracks-hook emms-browser-current-filter-name run-hooks emms-browser-filter-changed-hook] 3 (#$ . 54420)]) #@54 Filter and render the top-level tracks. (fn FILTER) (defalias 'emms-browser-refilter #[257 "\302!\210\303\206\n !\207" [emms-browser-top-level-type emms-browser-default-browse-type emms-browser-set-filter emms-browse-by] 3 (#$ . 54727)]) #@57 Redisplay with the next filter. (fn &optional REVERSE) (defalias 'emms-browser-next-filter #[256 "\211\203\n\302!\202  \303\"\235A@\211\204@\262\304!\207" [emms-browser-filters emms-browser-current-filter-name reverse assoc emms-browser-refilter] 6 (#$ . 54975) nil]) #@37 Redisplay with the previous filter. (defalias 'emms-browser-previous-filter #[0 "\300\301!\207" [emms-browser-next-filter t] 2 (#$ . 55262) nil]) #@116 Generate a function which checks if a track is in DIRNAME. If the track is not in DIRNAME, return t. (fn DIRNAME) (defalias 'emms-browser-filter-only-dir #[257 "\300\301!P\302\303\304\305\306!\307\"\310\311%\207" ["^" expand-file-name make-byte-code 257 "\301\300\302\303\"\"?\207" vconcat vector [string-match emms-track-get name] 6 "\n\n(fn TRACK)"] 8 (#$ . 55415)]) #@100 Generate a function which checks a track's type. If the track is not of TYPE, return t. (fn TYPE) (defalias 'emms-browser-filter-only-type #[257 "\300\301\302\303\304!\305\"\306\307%\207" [make-byte-code 257 "\300\301\302\"=?\207" vconcat vector [emms-track-get type] 5 "\n\n(fn TRACK)"] 7 (#$ . 55795)]) #@68 Show only tracks played within the last number of DAYS. (fn DAYS) (defalias 'emms-browser-filter-only-recent #[257 "\300\301\302\303\304!\305\"\306\307%\207" [make-byte-code 257 "\301\302 \303\300\304_!\"\305\306\307\305#\211\262\205\310\"?\207" vconcat vector [time-subtract current-time seconds-to-time 86400 nil emms-track-get last-played time-less-p] 7 "\n\n(fn TRACK)"] 7 (#$ . 56109)]) #@44 Directory where to store cover thumbnails. (defvar emms-browser-thumbnail-directory (expand-file-name "thumbnails" emms-directory) (#$ . 56515)) #@102 Cover thumbnail will be resized if necessary so that neither width nor height exceed this dimension. (defvar emms-browser-thumbnail-small-size 128 (#$ . 56667)) #@102 Cover thumbnail will be resized if necessary so that neither width nor height exceed this dimension. (defvar emms-browser-thumbnail-medium-size 256 (#$ . 56835)) #@102 Cover thumbnail will be resized if necessary so that neither width nor height exceed this dimension. (defvar emms-browser-thumbnail-large-size 1024 (#$ . 57004)) #@169 Select covers containing 'front' or 'cover' in DIR. If none was found, fallback on `emms-browser-thumbnail-filter-all'. See `emms-browser-thumbnail-filter'. (fn DIR) (defalias 'emms-browser-thumbnail-filter-default #[257 "\302!\205A\303\304\305\304$\304\305 \211\2034\211@\306\307\310\311\312\313\314!\315\"\316\317%\"\"\262A\266\202\202\210\211\204>\320!\262)\266\202\207" [case-fold-search emms-browser-covers-file-extensions file-directory-p directory-files t nil append seq-filter make-byte-code 257 "\301\302\300P\"\207" vconcat vector [string-match "\\(front\\|cover\\).*\\."] 4 "\n\n(fn C)" emms-browser-thumbnail-filter-all] 14 (#$ . 57173)]) #@129 Return the list of all files with `emms-browser-covers-file-extensions' in DIR. See `emms-browser-thumbnail-filter'. (fn DIR) (defalias 'emms-browser-thumbnail-filter-all #[257 "\301\211\203\211@\302\303\304\305P\"!\"\262A\266\202\202\262\207" [emms-browser-covers-file-extensions nil append file-expand-wildcards expand-file-name "*."] 9 (#$ . 57852)]) #@218 This filter must hold a function that takes a directory argument and returns a list of cover file names. The list will be processed by `emms-browser-cache-thumbnail'. See also `emms-browser-thumbnail-filter-default'. (defvar emms-browser-thumbnail-filter 'emms-browser-thumbnail-filter-default (#$ . 58228)) #@38 The ImageMagick's `convert' program. (defvar emms-browser-thumbnail-convert-program (executable-find "convert") (#$ . 58542)) #@584 Return cached cover SIZE for album in DIR. SIZE must be 'small, 'medium or 'large. It will determine the resolution of the cached file. See the variables `emms-browser-thumbnail-SIZE-size'. If cover is not cached or if cache is out-of-date, re-cache it. If both the width and the height of the cover are smaller than `emms-browser-thumbnail-SIZE-size', it need not be cached and will be used directly. Emms assumes that you have one album per folder. This function will always use the same cover per folder. `emms-browser-covers' can be `fset' to this function. (fn DIR SIZE) (defalias 'emms-browser-cache-thumbnail #[514 "\211\304=?\205\352\305\211\306\211\307\310\311!\312Q!J\305!\262\205\350\305\211\203`\211@\313\314!\315\"\262@\316V\203YA\316V\203Y@W\203YAW\203Y@\262A\262\211\262A\266\202\202#\266Y\203rY\203r\202\350 \317!P\320\315\"\210\321\322\"\311 !\323\324 !R\266\202\n\203\347\325!\203\247\326\327\330!8\327\330!8\"\203\347\305\211\331\332\333!!\334\216 r q\210\335\336\337!\305\340\305\341\342\343 \211# \n&\262*r q\210\344 +\262\306U\204\345\345\346\"\210\305\262\266\211\266\206\207" [emms-browser-thumbnail-filter emms-browser-thumbnail-directory emms-browser-thumbnail-convert-program standard-output large nil 0 intern "emms-browser-thumbnail-" symbol-name "-size" image-size create-image t 30 file-name-directory mkdir expand-file-name "cover_" "." file-name-extension file-exists-p time-less-p 5 file-attributes get-buffer-create generate-new-buffer-name " *string-output*" #[0 "\301!\207" [standard-output kill-buffer] 2] call-process executable-find "convert" (t t) "-resize" format "%sx%s" buffer-string warn "%s"] 20 (#$ . 58675)]) #@49 Cache for `emms-browser-cache-thumbnail-async'. (defvar emms-browser--cache-hash nil (#$ . 60413)) #@302 Like `emms-browser-cache-thumbnail' but caches queries for faster lookups. The drawback is that if changes are made to the covers in DIR after `emms-browser-cache-thumbnail-async' queried them, it won't be taken into account. Call `emms-browser-clear-cache-hash' to refresh the cache. (fn DIR SIZE) (defalias 'emms-browser-cache-thumbnail-async #[514 "\204 \301\302\303\"B\304\"\211\206\305\306\"#\207" [emms-browser--cache-hash make-hash-table :test equal gethash puthash emms-browser-cache-thumbnail] 9 (#$ . 60519)]) #@159 Resets `emms-browser-cache-thumbnail-async' cache. This is useful if there were changes on disk after `emms-browser-cache-thumbnail-async' first cached them. (defalias 'emms-browser-clear-cache-hash #[0 "\301!\207" [emms-browser--cache-hash clrhash] 2 (#$ . 61063) nil]) (provide 'emms-browser)