init-elfeed.el 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. ;;; Elfeed
  2. (setq elfeed-db-directory (expand-file-name "elfeed" user-emacs-directory))
  3. (defun ambrevar/elfeed-play-with-mpv ()
  4. "Play entry link with mpv."
  5. (interactive)
  6. (let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single)))
  7. (quality-arg "")
  8. (quality-val (completing-read "Max height resolution (0 for unlimited): " '("0" "480" "720") nil nil)))
  9. (setq quality-val (string-to-number quality-val))
  10. (message "Opening %s with height≤%s with mpv..." (elfeed-entry-link entry) quality-val)
  11. (when (< 0 quality-val)
  12. (setq quality-arg (format "--ytdl-format=[height<=?%s]" quality-val)))
  13. (start-process "elfeed-mpv" nil "mpv" quality-arg (elfeed-entry-link entry))))
  14. (defun ambrevar/elfeed-open-with-eww ()
  15. "Open in eww with `eww-readable'."
  16. (interactive)
  17. (let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single))))
  18. (eww (elfeed-entry-link entry))
  19. (add-hook 'eww-after-render-hook 'eww-readable nil t)))
  20. (defvar ambrevar/elfeed-visit-patterns
  21. '(("youtu\\.?be" . ambrevar/elfeed-play-with-mpv)
  22. ("phoronix" . ambrevar/elfeed-open-with-eww))
  23. "List of (regexps . function) to match against elfeed entry link to know
  24. whether how to visit the link.")
  25. (defun ambrevar/elfeed-visit-maybe-external ()
  26. "Visit with external function if entry link matches `ambrevar/elfeed-visit-patterns',
  27. visit otherwise."
  28. (interactive)
  29. (let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single)))
  30. (patterns ambrevar/elfeed-visit-patterns))
  31. (while (and patterns (not (string-match (caar patterns) (elfeed-entry-link entry))))
  32. (setq patterns (cdr patterns)))
  33. (if patterns
  34. (funcall (cdar patterns))
  35. (if (eq major-mode 'elfeed-search-mode)
  36. (elfeed-search-browse-url)
  37. (elfeed-show-visit)))))
  38. (define-key elfeed-search-mode-map "v" #'elfeed-play-in-mpv)
  39. (defun ambrevar/elfeed-kill-entry ()
  40. "Like `elfeed-kill-buffer' but pop elfeed search."
  41. (interactive)
  42. (elfeed-kill-buffer)
  43. (switch-to-buffer "*elfeed-search*"))
  44. (define-key elfeed-show-mode-map "q" #'ambrevar/elfeed-kill-entry)
  45. (defun ambrevar/elfeed-switch-back ()
  46. "Back to the last elfeed buffer, entry or search."
  47. (interactive)
  48. (let ((buffer (get-buffer "*elfeed-entry*")))
  49. (if buffer
  50. (switch-to-buffer buffer)
  51. (elfeed))))
  52. (load "~/personal/news/elfeed.el" t)
  53. (provide 'init-elfeed)