I've been using elfeed as my primary RSS reader for a couple of years, but there were a few things I missed about my previous web-based reader. One annoyance was that items I read on my laptop weren't synced with whatever I read on my desktop. I also missed having an online view for when I was out of the office.
Fixing the second problem was easy: Tiny Tiny RSS is a web-based RSS reader that
is free and open-source. I really like the interface, but I still wanted to read
things in elfeed if possible. Thankfully there's a package called
elfeed-protocols that allows elfeed to sync with tt-rss.
Configuring
Getting everything setup is fairly straightforward:
(use-package elfeed
:defer t
:init
(elfeed-protocol-enable)
:custom
(elfeed-use-curl t)
(elfeed-feeds '(("ttrss+https://user@my.ttrss.com"
:password "<password goes here>"))))
The elfeed-protocol-enable part turns on additional protocol support, and
elfeed-feeds tells elfeed which tt-rss server to use.
Tidying up the view
The default view takes up the full width of the window, which I find hard to read on a large monitor. I use the following addition to narrow things down:
(use-package elfeed ;; <- Regular config goes here. :config (add-hook 'elfeed-show-mode-hook #'sodaware/enhance-elfeed-readability)) (defun sodaware/enhance-elfeed-readability () "Clean up elfeed show buffer." (setq shr-width 80) (buffer-face-set 'fixed-pitch))
elfeed uses Simple HTML Renderer (shr) to display articles, so this function
limits the width and sets the font to a fixed-width one.
Marking items as read
Here’s a simple function that marks all RSS items as read before fetching new posts:
(defun sodaware/elfeed-all-read-refresh ()
(interactive)
(when (y-or-n-p "Really mark all items as read?")
(elfeed-mark-all-as-read)
(elfeed-search-fetch nil)))