2017-06-08 11:47:56 +02:00
|
|
|
;;; app/rss/config.el -*- lexical-binding: t; -*-
|
2017-03-06 22:01:37 -05:00
|
|
|
|
|
|
|
;; This is an opinionated workflow that turns Emacs into an RSS reader, inspired
|
|
|
|
;; by apps Reeder and Readkit. It can be invoked via `=rss'. Otherwise, if you
|
|
|
|
;; don't care for the UI you can invoke elfeed directly with `elfeed'.
|
|
|
|
|
|
|
|
(defvar +rss-split-direction 'below
|
|
|
|
"What direction to pop up the entry buffer in elfeed.")
|
|
|
|
|
2018-06-29 14:07:29 +02:00
|
|
|
(defvar +rss-enable-sliced-images t
|
|
|
|
"Automatically slice images shown in elfeed-show-mode buffers, making them
|
|
|
|
easier to scroll through.")
|
|
|
|
|
2022-01-30 11:43:07 -08:00
|
|
|
(defvar +rss-workspace-name "*rss*"
|
|
|
|
"Name of the workspace that contains the elfeed buffer.")
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2023-09-11 23:56:21 +02:00
|
|
|
|
2017-03-06 22:01:37 -05:00
|
|
|
;;
|
2023-09-11 23:56:21 +02:00
|
|
|
;;; Packages
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! elfeed
|
2017-03-06 22:01:37 -05:00
|
|
|
:commands elfeed
|
2020-02-29 17:59:03 -05:00
|
|
|
:init
|
|
|
|
(setq elfeed-db-directory (concat doom-local-dir "elfeed/db/")
|
|
|
|
elfeed-enclosure-default-dir (concat doom-local-dir "elfeed/enclosures/"))
|
2017-03-06 22:01:37 -05:00
|
|
|
:config
|
2017-04-17 02:20:07 -04:00
|
|
|
(setq elfeed-search-filter "@2-week-ago "
|
2018-01-06 03:27:23 -05:00
|
|
|
elfeed-show-entry-switch #'pop-to-buffer
|
2017-04-17 02:17:10 -04:00
|
|
|
elfeed-show-entry-delete #'+rss/delete-pane
|
2019-04-02 12:52:00 -04:00
|
|
|
shr-max-image-proportion 0.8)
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2018-06-15 02:58:12 +02:00
|
|
|
(set-popup-rule! "^\\*elfeed-entry"
|
2018-06-29 13:57:00 +02:00
|
|
|
:size 0.75 :actions '(display-buffer-below-selected)
|
2018-06-18 02:26:05 +02:00
|
|
|
:select t :quit nil :ttl t)
|
2018-02-17 04:56:16 -05:00
|
|
|
|
2017-04-16 20:36:15 -04:00
|
|
|
(make-directory elfeed-db-directory t)
|
|
|
|
|
2017-03-06 22:01:37 -05:00
|
|
|
;; Ensure elfeed buffers are treated as real
|
2019-07-26 19:57:13 +02:00
|
|
|
(add-hook! 'doom-real-buffer-functions
|
2019-07-23 12:30:47 +02:00
|
|
|
(defun +rss-buffer-p (buf)
|
|
|
|
(string-match-p "^\\*elfeed" (buffer-name buf))))
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2017-05-14 10:12:41 +02:00
|
|
|
;; Enhance readability of a post
|
2019-07-23 12:30:47 +02:00
|
|
|
(add-hook 'elfeed-show-mode-hook #'+rss-elfeed-wrap-h)
|
2018-06-29 13:59:07 +02:00
|
|
|
(add-hook! 'elfeed-search-mode-hook
|
2019-07-26 19:57:13 +02:00
|
|
|
(add-hook 'kill-buffer-hook #'+rss-cleanup-h nil 'local))
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2018-06-29 14:07:29 +02:00
|
|
|
;; Large images are annoying to scroll through, because scrolling follows the
|
|
|
|
;; cursor, so we force shr to insert images in slices.
|
|
|
|
(when +rss-enable-sliced-images
|
|
|
|
(setq-hook! 'elfeed-show-mode-hook
|
2019-07-23 12:30:47 +02:00
|
|
|
shr-put-image-function #'+rss-put-sliced-image-fn
|
|
|
|
shr-external-rendering-functions '((img . +rss-render-image-tag-without-underline-fn))))
|
2018-06-29 14:07:29 +02:00
|
|
|
|
2018-06-26 13:14:24 +02:00
|
|
|
;; Keybindings
|
|
|
|
(after! elfeed-show
|
|
|
|
(define-key! elfeed-show-mode-map
|
|
|
|
[remap next-buffer] #'+rss/next
|
|
|
|
[remap previous-buffer] #'+rss/previous))
|
2022-08-12 20:29:19 +02:00
|
|
|
(when (modulep! :editor evil +everywhere)
|
2018-06-26 13:14:24 +02:00
|
|
|
(evil-define-key 'normal elfeed-search-mode-map
|
2018-06-29 13:59:07 +02:00
|
|
|
"q" #'elfeed-kill-buffer
|
2018-06-29 13:59:14 +02:00
|
|
|
"r" #'elfeed-search-update--force
|
2021-09-27 01:21:51 +01:00
|
|
|
(kbd "M-RET") #'elfeed-search-browse-url)
|
2022-01-30 16:19:11 -08:00
|
|
|
(map! :map elfeed-show-mode-map
|
|
|
|
:n "gc" nil
|
|
|
|
:n "gc" #'+rss/copy-link)))
|
2021-09-27 01:21:51 +01:00
|
|
|
|
2017-03-06 22:01:37 -05:00
|
|
|
|
2017-04-08 01:31:09 -04:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! elfeed-org
|
2022-08-12 20:29:19 +02:00
|
|
|
:when (modulep! +org)
|
2018-02-19 20:20:25 -05:00
|
|
|
:after elfeed
|
2020-02-29 18:16:32 -05:00
|
|
|
:preface
|
2020-02-18 00:18:18 -05:00
|
|
|
(setq rmh-elfeed-org-files (list "elfeed.org"))
|
2017-03-06 22:01:37 -05:00
|
|
|
:config
|
2021-02-26 21:19:28 -05:00
|
|
|
(elfeed-org)
|
|
|
|
(defadvice! +rss-skip-missing-org-files-a (&rest _)
|
|
|
|
:before '(elfeed rmh-elfeed-org-mark-feed-ignore elfeed-org-export-opml)
|
|
|
|
(unless (file-name-absolute-p (car rmh-elfeed-org-files))
|
|
|
|
(let* ((default-directory org-directory)
|
|
|
|
(files (mapcar #'expand-file-name rmh-elfeed-org-files)))
|
|
|
|
(dolist (file (cl-remove-if #'file-exists-p files))
|
|
|
|
(message "elfeed-org: ignoring %S because it can't be read" file))
|
|
|
|
(setq rmh-elfeed-org-files (cl-remove-if-not #'file-exists-p files))))))
|
2021-09-27 01:27:05 +01:00
|
|
|
|
2023-09-11 23:56:21 +02:00
|
|
|
|
2021-09-27 01:27:05 +01:00
|
|
|
(use-package! elfeed-goodies
|
|
|
|
:after elfeed
|
|
|
|
:config
|
|
|
|
(elfeed-goodies/setup))
|
2024-08-25 17:22:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
(use-package! elfeed-tube
|
|
|
|
:when (modulep! +youtube)
|
|
|
|
:after elfeed
|
|
|
|
:config (elfeed-tube-setup)
|
|
|
|
(map! (:map elfeed-show-mode-map
|
|
|
|
[remap save-buffer] #'elfeed-tube-save
|
|
|
|
"F" #'elfeed-tube-fetch)
|
|
|
|
(:map elfeed-search-mode-map
|
|
|
|
[remap save-buffer] #'elfeed-tube-save
|
|
|
|
"F" #'elfeed-tube-fetch
|
|
|
|
"C-c C-f" #'elfeed-tube-mpv-follow-mode
|
|
|
|
"C-c C-w" #'elfeed-tube-mpv-where)))
|