;; Adds org-links for EMMS ;; Based on ;; https://orgmode.org/manual/Adding-Hyperlink-Types.html#Adding-Hyperlink-Types (defun org-emms-store-link () "Store a link to a sound file." (when (eq major-mode 'emms-playlist-mode) ;; This is EMMS mode, we do make this link. (let* ((file (org-emms-get-file-name)) (link (concat "emms:" file)) (desc (emms-info-track-description (emms-playlist-track-at))) ) (org-link-store-props :type "emms" :link link :decription desc)))) (defun org-emms-get-file-name () "Get the file name from the current playlist line." (let ((fname (emms-track-simple-description (emms-playlist-track-at)))) (if (file-exists-p fname) fname nil))) (defun org-emms-export (link description format) "Export an EMMS link from Org files." (let ((desc (or link description))) (pcase format (`html (format "%s" path desc)) (`latex (format "\\href{%s}{%s}" path desc)) (`texinfo (format "@uref{%s,%s}" path desc)) (`ascii (format "%s (%s)" desc path)) (t path)))) (defun org-emms-command (link) "The EMMS command to be used to play a sound file." (if (file-exists-p link) ;; If the file is a playlist (based on extension), use ;; it as such. Otherwise, play the file (if (member ;; Get the extension as a symbol ;; https://emacsredux.com/blog/2014/12/05/converting-between-symbols-and-strings/ (intern (file-name-extension link)) emms-source-playlist-formats) (emms-play-playlist link) (emms-play-file link)))) (org-link-set-parameters "emms" :follow #'org-emms-command :export #'org-emms-export :store #'org-emms-store-link) (provide 'ol-emms) ;;; ol-emms.el ends here