featurep! will be renamed modulep! in the future, so it's been deprecated. They have identical interfaces, and can be replaced without issue. featurep! was never quite the right name for this macro. It implied that it had some connection to featurep, which it doesn't (only that it was similar in purpose; still, Doom modules are not features). To undo such implications and be consistent with its namespace (and since we're heading into a storm of breaking changes with the v3 release anyway), now was the best opportunity to begin the transition.
89 lines
3.1 KiB
EmacsLisp
89 lines
3.1 KiB
EmacsLisp
;;; app/rss/config.el -*- lexical-binding: t; -*-
|
|
|
|
;; 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.")
|
|
|
|
(defvar +rss-enable-sliced-images t
|
|
"Automatically slice images shown in elfeed-show-mode buffers, making them
|
|
easier to scroll through.")
|
|
|
|
(defvar +rss-workspace-name "*rss*"
|
|
"Name of the workspace that contains the elfeed buffer.")
|
|
|
|
;;
|
|
;; Packages
|
|
|
|
(use-package! elfeed
|
|
:commands elfeed
|
|
:init
|
|
(setq elfeed-db-directory (concat doom-local-dir "elfeed/db/")
|
|
elfeed-enclosure-default-dir (concat doom-local-dir "elfeed/enclosures/"))
|
|
:config
|
|
(setq elfeed-search-filter "@2-week-ago "
|
|
elfeed-show-entry-switch #'pop-to-buffer
|
|
elfeed-show-entry-delete #'+rss/delete-pane
|
|
shr-max-image-proportion 0.8)
|
|
|
|
(set-popup-rule! "^\\*elfeed-entry"
|
|
:size 0.75 :actions '(display-buffer-below-selected)
|
|
:select t :quit nil :ttl t)
|
|
|
|
(make-directory elfeed-db-directory t)
|
|
|
|
;; Ensure elfeed buffers are treated as real
|
|
(add-hook! 'doom-real-buffer-functions
|
|
(defun +rss-buffer-p (buf)
|
|
(string-match-p "^\\*elfeed" (buffer-name buf))))
|
|
|
|
;; Enhance readability of a post
|
|
(add-hook 'elfeed-show-mode-hook #'+rss-elfeed-wrap-h)
|
|
(add-hook! 'elfeed-search-mode-hook
|
|
(add-hook 'kill-buffer-hook #'+rss-cleanup-h nil 'local))
|
|
|
|
;; 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
|
|
shr-put-image-function #'+rss-put-sliced-image-fn
|
|
shr-external-rendering-functions '((img . +rss-render-image-tag-without-underline-fn))))
|
|
|
|
;; Keybindings
|
|
(after! elfeed-show
|
|
(define-key! elfeed-show-mode-map
|
|
[remap next-buffer] #'+rss/next
|
|
[remap previous-buffer] #'+rss/previous))
|
|
(when (modulep! :editor evil +everywhere)
|
|
(evil-define-key 'normal elfeed-search-mode-map
|
|
"q" #'elfeed-kill-buffer
|
|
"r" #'elfeed-search-update--force
|
|
(kbd "M-RET") #'elfeed-search-browse-url)
|
|
(map! :map elfeed-show-mode-map
|
|
:n "gc" nil
|
|
:n "gc" #'+rss/copy-link)))
|
|
|
|
|
|
|
|
(use-package! elfeed-org
|
|
:when (modulep! +org)
|
|
:after elfeed
|
|
:preface
|
|
(setq rmh-elfeed-org-files (list "elfeed.org"))
|
|
:config
|
|
(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))))))
|
|
|
|
(use-package! elfeed-goodies
|
|
:after elfeed
|
|
:config
|
|
(elfeed-goodies/setup))
|