init-emms.el 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. ;;; Emms
  2. ;;; TODO: See if mpd is faster at building the db. Not so important.
  3. ;;; TODO: Change face from purple to white?
  4. ;;; TODO: emms-all causes some "require"d files to be loaded twice if called after, say, emms-browser was loaded.
  5. (emms-all)
  6. (emms-history-load)
  7. (setq emms-player-list (list emms-player-mpv)
  8. emms-source-file-default-directory (expand-file-name "~/music")
  9. emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find
  10. ;; Cover thumbnails.
  11. emms-browser-covers 'emms-browser-cache-thumbnail)
  12. (add-to-list 'emms-player-mpv-parameters "--no-audio-display")
  13. (add-to-list 'emms-info-functions 'emms-info-cueinfo)
  14. (if (executable-find "emms-print-metadata")
  15. (progn
  16. (require 'emms-info-libtag)
  17. (add-to-list 'emms-info-functions 'emms-info-libtag)
  18. (delete 'emms-info-ogginfo emms-info-functions)
  19. (delete 'emms-info-mp3info emms-info-functions))
  20. (add-to-list 'emms-info-functions 'emms-info-ogginfo)
  21. (add-to-list 'emms-info-functions 'emms-info-mp3info))
  22. ;;; Resume on restart.
  23. ;;; We don't use bookmarks as that could interfere with user's ones.
  24. (with-eval-after-load 'desktop
  25. (add-to-list 'desktop-globals-to-save 'emms-playing-time)
  26. (when (emms-playlist-current-selected-track)
  27. (let ((time emms-playing-time))
  28. (setq emms-playing-time 0) ; Don't disturb the time display.
  29. (and (memq 'emms-player-mpv emms-player-list)
  30. (executable-find "mpv")
  31. (push "--mute=yes" emms-player-mpv-parameters))
  32. (emms-start)
  33. (sleep-for 0 300) ; This is required for the player might not be ready yet.
  34. ;; TODO: This 'sleep-for' is a kludge and upstream should provide a provision for it.
  35. (with-demoted-errors "EMMS error: %S" (emms-player-seek-to time))
  36. (and (memq 'emms-player-mpv emms-player-list)
  37. (executable-find "mpv")
  38. (pop emms-player-mpv-parameters)
  39. ;; TODO: Adapt this to simple-mpv.
  40. (call-process-shell-command (emms-player-mpv--format-command "mute") nil nil nil))
  41. (emms-pause))))
  42. (when (require 'helm-emms nil t)
  43. (setq helm-emms-default-sources
  44. '(helm-source-emms-dired
  45. helm-source-emms-files ; Disable for a huge speed-up.
  46. helm-source-emms-streams)))
  47. (defun ambrevar/emms-play-on-add (old-pos)
  48. "Play tracks when calling `emms-browser-add-tracks' if nothing
  49. is currently playing."
  50. (interactive)
  51. (when (or (not emms-player-playing-p)
  52. emms-player-paused-p
  53. emms-player-stopped-p)
  54. (with-current-emms-playlist
  55. (goto-char old-pos)
  56. ;; if we're sitting on a group name, move forward
  57. (unless (emms-playlist-track-at (point))
  58. (emms-playlist-next))
  59. (emms-playlist-select (point)))
  60. (emms-stop)
  61. (emms-start)))
  62. (add-hook 'emms-browser-tracks-added-hook 'ambrevar/emms-play-on-add)
  63. ;;; Display album in playlist
  64. (defun ambrevar/emms-artist-album-track-and-title-format (bdata fmt)
  65. (concat
  66. "%i"
  67. (let ((artist (emms-browser-format-elem fmt "a")))
  68. (if (not artist)
  69. "%n" ; If unknown, display the filename.
  70. (concat
  71. "%a - "
  72. (let ((album (emms-browser-format-elem fmt "A")))
  73. (if album "%A - " ""))
  74. (let ((disc (emms-browser-format-elem fmt "D")))
  75. (if (and disc (not (string= disc ""))) "%D/" ""))
  76. (let ((track (emms-browser-format-elem fmt "T")))
  77. (if (and track (not (string= track "0")))
  78. "%T. "
  79. ""))
  80. "%t [%d]")))))
  81. (setq emms-browser-playlist-info-title-format 'ambrevar/emms-artist-album-track-and-title-format)
  82. ;; Display disc number in browser
  83. (defun ambrevar/emms-browser-track-artist-and-title-format (bdata fmt)
  84. (concat
  85. "%i"
  86. (let ((disc (emms-browser-format-elem fmt "D")))
  87. (if (and disc (not (string= disc "")))
  88. "%D/"))
  89. (let ((track (emms-browser-format-elem fmt "T")))
  90. (if (and track (not (string= track "0")))
  91. "%T. "
  92. ""))
  93. "%n"))
  94. (setq emms-browser-info-title-format 'ambrevar/emms-browser-track-artist-and-title-format)
  95. (provide 'init-emms)