Download
(defvar emms-get-lyrics-use-files t)
(defvar emms-get-lyrics-dir nil)
(defvar emms-get-lyrics-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "q" 'bury-buffer)
(define-key map "\\" 'isearch-backward)
(define-key map "/" 'isearch-forward)
(define-key map "r" 'isearch-backward)
(define-key map "s" 'isearch-forward)
(define-key map [delete] 'scroll-down)
(define-key map " " 'scroll-up)
(define-key map ">" 'end-of-buffer)
(define-key map "<" 'beginning-of-buffer)
map))
(defun emms-get-lyrics-mode ()
"Major mode for displaying lyrics."
(interactive)
(kill-all-local-variables)
(setq major-mode 'emms-get-lyrics-mode)
(setq mode-name "Lyrics")
(use-local-map emms-get-lyrics-mode-map)
(setq buffer-read-only t)
(run-hooks 'emms-get-lyrics-mode-hook))
(defun emms-get-lyrics-url (artist title)
(concat
"https://duckduckgo.com/?q=!ducky+lyrics007.com+"
(replace-regexp-in-string
" " "+"
(concat
artist
" "
title ""))))
(defun emms-get-lyrics-w3m (url buffer)
(call-process "w3m" nil buffer nil "-dump" url))
(defun emms-get-lyrics (artist title fn &optional file)
(let ((bname (concat "Lyrics: " title " by " artist)))
(cond ((get-buffer bname)
(switch-to-buffer bname))
((and file (file-exists-p file))
(find-file file)
(emms-get-lyrics-mode)
(rename-buffer bname))
(t
(let ((buffer (if file
(find-file-noselect file)
(get-buffer-create bname))))
(set-buffer buffer)
(funcall fn (emms-get-lyrics-url artist title) buffer)
(goto-char (point-min))
(if (and
(search-forward "Send Ringtones to your Cell" nil t)
(not (search-forward
"No results." nil t)))
(let ((frominsert ""))
(delete-region (point-min) (1+ (line-end-position)))
(insert title " by " artist "\n")
(goto-char (point-max))
(if (or
(search-backward "Send Ringtones to your Cell" nil t)
)
(progn (beginning-of-line)(delete-region (point) (point-max))))
(when file
(rename-buffer bname)
(save-buffer)))
(delete-region (point-min) (point-max))
(insert "Unable to find lyrics for " title " by " artist)
(if file (set-buffer-modified-p nil)))
(goto-char (point-min))
(emms-get-lyrics-mode)
(switch-to-buffer buffer)
(goto-char (point-min)))))))
(defun emms-get-lyrics-current-song ()
(interactive)
(let* ((track (emms-playlist-current-selected-track))
(artist (cdr (assoc 'info-artist track)))
(title (cdr (assoc 'info-title track))))
(if emms-player-playing-p
(emms-get-lyrics artist title 'emms-get-lyrics-w3m
(if emms-get-lyrics-use-files
(if emms-get-lyrics-dir
(concat
emms-get-lyrics-dir
"/"
(replace-regexp-in-string
" " "_"
(concat
artist
"-"
title
".lyrics")))
(concat
(file-name-sans-extension (cdr (assoc 'name track)))
".lyrics"))))
"Nothing playing right now")))
(provide 'emms-get-lyrics)