Cool Emacs

Read RSS with Elfeed

Since Emacs became my shell of choice1, I am abandoning more and more dedicated applications in favor of different packages. As it turns out, Emacs packages are very feature rich. This time: I moved my RSS reading from newsboat2 to elfeed3.

Elfeed has very simple keybindings:

  • g will refresh the items list
  • G will refresh the items list and fetch new items
  • r will mark currently selected item is read (remove unread tag)[^4]
  • b will open item in the browser

One huge upside of elfeed compared to newsboat is image support. Emacs is a GUI application, so all images are present in their glory!

An Emacs screenshot showing a list using a dark mode
List of articles
An Emacs screenshot showing Elfeed in a dark mode with a vintage PC case in the middle
Images!

My setup is near stock. I have a few dozen feeds that are auto-tagged. Three essential tags are “important”, “news”, and “company”. I want to read each “important”, then I want to see all normal, and finally I can just skim “news” and “company”. Adding auto-tagging is very simple: just define the tag when defining the RSS feed list:

("https://rubenerd.com/feed/" blog important)
("https://www.pine64.org/feed/" company)

Now, each new article will be tagged with matching tags. Elfeed allows to define of custom faces that will be applied to items matching tag4:

(defface important-elfeed-entry
  '((t :foreground "#f77"))
  "Marks an important Elfeed entry."
  :group 'elfeed)

(defface nonimportant-elfeed-entry
  '((t :foreground "#C0C0C0"))
  "Marks an nonimportant Elfeed entry."
  :group 'elfeed)

(push '(important important-elfeed-entry)
       elfeed-search-face-alist)
(push '(company nonimportant-elfeed-entry)
      elfeed-search-face-alist)
(push '(news nonimportant-elfeed-entry)
      elfeed-search-face-alist)

Now important items will be dark red, while company & news will be dark gray

No important things to read at this moment.

Elfeed has a few packages expanding its functionality, but I found the default behavior to be exactly right.

Elfeed-org

One of the packages expanding capabilities of elfeed is elfeed-org5. It allows configuring the list of feeds with a standard org tree. Since my config is now also an org file, nothing stops me from adding the list as an org-tree inside my config org-file! I set it up via:

{{<highlight lisp “linenos=table,linenostart=199,hl_lines=7”>}}

*** elfeed-org

#+BEGIN_SRC emacs-lisp
(use-package elfeed-org
  :ensure t
  :config
  (setq rmh-elfeed-org-files (list "~/.emacs.d/config.org"))
  (elfeed-org))
#+END_SRC

Therefore, I am now pointing at the same file to become the data source for elfeed-org as the rest of my config. Just a few lines down, I start to define my list of subscriptions:

*** Feeds :elfeed:

**** Blogs

***** https://gideonwolfe.com/index.xml      :important:
***** https://fabiensanglard.net/rss.xml.    :important:

**** Emacs

***** https://protesilaos.com/master.xml     :important:

Much more readable! Elfeed-org will ignore the entire outer tree and extract the feeds from leaves under the :elfeed: tag.


Next: Reading and automating email using Notmuch, Up: Cool Emacs