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
elfeed if possible. Thankfully there's a package called
elfeed-protocols that allows elfeed to sync with tt-rss.
Getting everything setup is fairly straightforward:
(use-package elfeed :defer t :init (elfeed-protocol-enable) :custom (elfeed-use-curl t) (elfeed-feeds '(("ttrss+https://email@example.com" :password "<password goes here>"))))
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)))