Add modules/app/rss (WIP)
This commit is contained in:
parent
552684564e
commit
ca8b3b18fa
3 changed files with 131 additions and 0 deletions
65
modules/app/rss/autoload.el
Normal file
65
modules/app/rss/autoload.el
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
;;; app/rss/autoload.el
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun =rss ()
|
||||||
|
"Activate (or switch to) `elfeed' in its workspace."
|
||||||
|
(interactive)
|
||||||
|
(+workspace-switch +rss-workspace-name t)
|
||||||
|
(delete-other-windows)
|
||||||
|
(elfeed))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss|elfeed-wrap ()
|
||||||
|
"Enhances an elfeed entry's readability by wrapping it to a width of
|
||||||
|
`fill-column' and centering it with `visual-fill-column-mode'."
|
||||||
|
(let ((inhibit-read-only t)
|
||||||
|
(inhibit-modification-hooks t))
|
||||||
|
(setq-local truncate-lines nil)
|
||||||
|
(setq-local shr-width 85)
|
||||||
|
(set-buffer-modified-p nil)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss/delete-pane ()
|
||||||
|
"Delete the *elfeed-entry* split pane."
|
||||||
|
(interactive)
|
||||||
|
(let* ((buff (get-buffer "*elfeed-entry*"))
|
||||||
|
(window (get-buffer-window buff)))
|
||||||
|
(kill-buffer buff)
|
||||||
|
(delete-window window)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss-popup-pane (buf)
|
||||||
|
"Display BUF in a popup."
|
||||||
|
(doom-popup-buffer buf
|
||||||
|
:align +rss-split-direction
|
||||||
|
:size 0.75
|
||||||
|
:select t
|
||||||
|
:noesc t
|
||||||
|
:autokill t))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss/open (entry)
|
||||||
|
"Display the currently selected item in a buffer."
|
||||||
|
(interactive (list (elfeed-search-selected :ignore-region)))
|
||||||
|
(when (elfeed-entry-p entry)
|
||||||
|
(elfeed-untag entry 'unread)
|
||||||
|
(elfeed-search-update-entry entry)
|
||||||
|
(elfeed-show-entry entry)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss/next ()
|
||||||
|
"Show the next item in the elfeed-search buffer."
|
||||||
|
(interactive)
|
||||||
|
(funcall elfeed-show-entry-delete)
|
||||||
|
(with-current-buffer (elfeed-search-buffer)
|
||||||
|
(forward-line)
|
||||||
|
(call-interactively '+rss/open)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +rss/previous ()
|
||||||
|
"Show the previous item in the elfeed-search buffer."
|
||||||
|
(interactive)
|
||||||
|
(funcall elfeed-show-entry-delete)
|
||||||
|
(with-current-buffer (elfeed-search-buffer)
|
||||||
|
(forward-line -1)
|
||||||
|
(call-interactively '+rss/open)))
|
61
modules/app/rss/config.el
Normal file
61
modules/app/rss/config.el
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
;;; app/rss/config.el
|
||||||
|
|
||||||
|
;; 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-org-dir (concat +org-dir "/rss/")
|
||||||
|
"Where RSS org files are located.")
|
||||||
|
|
||||||
|
(defvar +rss-elfeed-files (list "elfeed.org")
|
||||||
|
"The files that configure `elfeed's rss feeds.")
|
||||||
|
|
||||||
|
(defvar +rss-workspace-name "RSS"
|
||||||
|
"The name of the transient workspace for elfeed to run in.")
|
||||||
|
|
||||||
|
(defvar +rss-split-direction 'below
|
||||||
|
"What direction to pop up the entry buffer in elfeed.")
|
||||||
|
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; Packages
|
||||||
|
;;
|
||||||
|
|
||||||
|
(def-package! elfeed
|
||||||
|
:commands elfeed
|
||||||
|
:config
|
||||||
|
(setq-default elfeed-search-filter "@2-week-ago ")
|
||||||
|
(setq elfeed-db-directory (concat doom-local-dir "elfeed/")
|
||||||
|
elfeed-show-entry-switch '+rss-popup-pane
|
||||||
|
elfeed-show-entry-delete '+rss/delete-pane)
|
||||||
|
|
||||||
|
;; Ensure elfeed buffers are treated as real
|
||||||
|
(push (lambda (buf) (string-match-p "^\\*elfeed" (buffer-name buf)))
|
||||||
|
doom-real-buffer-functions)
|
||||||
|
|
||||||
|
(add-hook! (elfeed-search-mode elfeed-show-mode)
|
||||||
|
'doom-hide-modeline-mode)
|
||||||
|
(add-hook 'elfeed-show-mode-hook '+rss|elfeed-wrap)
|
||||||
|
|
||||||
|
(after! doom-themes
|
||||||
|
(add-hook 'elfeed-show-mode-hook 'doom-buffer-mode))
|
||||||
|
|
||||||
|
(map! :map elfeed-search-mode-map
|
||||||
|
:n "r" 'elfeed-update
|
||||||
|
:n "RET" 'elfeed-search-show-entry
|
||||||
|
|
||||||
|
:map elfeed-show-mode-map
|
||||||
|
[remap doom/kill-this-buffer] 'elfeed-kill-buffer
|
||||||
|
:n "q" 'elfeed-kill-buffer
|
||||||
|
:m "j" 'evil-next-visual-line
|
||||||
|
:m "k" 'evil-previous-visual-line
|
||||||
|
:n "]b" '+rss/next
|
||||||
|
:n "[b" '+rss/previous))
|
||||||
|
|
||||||
|
(def-package! elfeed-org
|
||||||
|
:after elfeed
|
||||||
|
:config
|
||||||
|
(setq rmh-elfeed-org-files
|
||||||
|
(mapcar (lambda (file) (expand-file-name file +rss-org-dir))
|
||||||
|
+rss-elfeed-files))
|
||||||
|
(elfeed-org))
|
5
modules/app/rss/packages.el
Normal file
5
modules/app/rss/packages.el
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
;; -*- no-byte-compile: t; -*-
|
||||||
|
;;; app/rss/packages.el
|
||||||
|
|
||||||
|
(package! elfeed)
|
||||||
|
(package! elfeed-org)
|
Loading…
Add table
Add a link
Reference in a new issue