在Emacs中用elfeed阅读你的RSS-feeds
elfeed 是一个超赞的feed阅读器. 该项目的网站上有很完善的文档,详细讲解了各项基础知识. 我已经分享过了我的相关配置. 接下来我也会写一些博文来探讨这些配置. 今天我们就来聊一聊我的elfeed基本配置,我是如何通过一个快捷键就跳转到一组相关elfeed处的,以及我是怎么实现在多台机器之间同步feeds的.
首先我用一个org文件保存我的feeds列表. 下面摘录了一部分内容.
* blogs :elfeed: ** daily :daily: *** http://telescoper.wordpress.com/feed/ *** http://xkcd.com/rss.xml *** http://timharford.com/feed/ *** http://understandinguncertainty.org/rss.xml ** emacs :emacs: *** http://www.reddit.com/r/emacs/.rss *** http://planet.emacsen.org/atom.xml *** http://feeds.feedburner.com/XahsEmacsBlog *** http://pragmaticemacs.com/feed/ *** SX
我们需要借助elfeed-org 这个package来告诉elfeed使用上面的那份org文件:
;; use an org file to organise feeds (use-package elfeed-org :ensure t :config (elfeed-org) (setq rmh-elfeed-org-files (list "/path/to/elfeed.org")))
你应该能注意到,在上面的org文件中,我用到了一个org-mode的链接来指向stack exchange feed; 该链接的描述部分(即SX)会被elfeed用来作为feed的标题. 我还将这些feeds按照daily和emacs的标签进行了分类规整. elfeed会用这些标签来让你可以阅读同一系列的feed. 第一次运行elfeed的时候我们还需要添加一些书签 指向这些feed的集合. 然后,我们需要在emacs配置文件 中添加如下函数帮助我们跳转到这些feed的集合处:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; elfeed feed reader ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;shortcut functions (defun bjm/elfeed-show-all () (interactive) (bookmark-maybe-load-default-file) (bookmark-jump "elfeed-all")) (defun bjm/elfeed-show-emacs () (interactive) (bookmark-maybe-load-default-file) (bookmark-jump "elfeed-emacs")) (defun bjm/elfeed-show-daily () (interactive) (bookmark-maybe-load-default-file) (bookmark-jump "elfeed-daily"))
目前, 我在两台机器上使用elfeed,同时保持elfeed数据库(默认保存在 ~/.elfeed
中)在两台机器之间同步. (我自己用的是unison, 不过你可以使用dropbox之类的其他软件).
为了让这套机制能正常工作,我们还需要确保elfeed退出时会更新数据库,当elfeed重新启动时会再次读取数据库. 下面是一些辅助函数:
;;functions to support syncing .elfeed between machines ;;makes sure elfeed reads index from disk before launching (defun bjm/elfeed-load-db-and-open () "Wrapper to load the elfeed db from disk before opening" (interactive) (elfeed-db-load) (elfeed) (elfeed-search-update--force)) ;;write to disk when quiting (defun bjm/elfeed-save-db-and-bury () "Wrapper to save the elfeed db to disk before burying buffer" (interactive) (elfeed-db-save) (quit-window))
下面让我们安装 并配置elfeed
(use-package elfeed :ensure t :bind (:map elfeed-search-mode-map ("A" . bjm/elfeed-show-all) ("E" . bjm/elfeed-show-emacs) ("D" . bjm/elfeed-show-daily) ("q" . bjm/elfeed-save-db-and-bury)))
做完这些之后,我们就可以通过运行 M-x bjm/elfeed-load-db-and-open
来启动elfeed. 若你是第一次运行elfeed,则还需要为我们的标签创建书签:
按下 G
键刷新feeds后按下 C-x r m
创建一个书签并将之命名为 elfeed-all
(与我们上面函数定义中的名字要一致).
然后按下 s
来设置过滤条件并在过滤字符串中添加 +emacs
. 这样一来应该会只显示你emacs相关的feeds了. 然后为该过滤结果创建一个名为 elfeed-emacs
的书签.
其他的标签也依此法一一操作.
书签创建好后,在elfeed窗口中按下 E
键就会跳到你Emacs相关feed处了,其他快捷键也是类似的功能.
阅读完毕后,可以按下 q
退出elfeed,这样elfeed会保存数据库,并将你最新的改变同步到另一台机.
下一步,我还将研究如何为文章点赞以及如何用org-mode来保存文章,还会对feed的过滤方式做一些小优化.