EAF 内置RSS Reader啦!
Emacs
EAF
字数1118 2020-01-02

Emacs无法像其他现代图形库那样天然支持多线程编程,导致Emacs非常不适合做大量数据计算的工作,数据计算时间太久就会卡住Emacs。 虽然Emacs也有异步子进程编程模型,但是如果子进程返回数据太大,在主进程中处理数据的时间超过Emacs单线程中一个界面绘制的周期,也会导致卡Emacs界面。

真正的图形多线程的原理是把所有耗时的操作都放到子线程中去处理,只有数据处理完成以后才把结果发送到主线程进行绘制,这样数据计算和数据处理的工作永远不占用图形绘制主线程,所以不管多久的数据计算和大多的数据处理都不会让用户感觉到界面卡顿。

但是要让Emacs支持真正的多线程模型,那要修改的代码就太多了,不光是底层图形库的更新,还有核心绘制代码的更新,最麻烦的是多线程引入后对所有Elisp现有插件带来的巨大兼容性破坏,这些都是Emacs的历史包袱,已经很难再对Emacs进行大手术了。

最新版EAF已经内置了RSS Reader, 利用PyQt的QThread,RSS Reader所有耗时的抓取种子工作都在后台子线程中运行,不管多慢的网络还是多大的新闻数据都不会卡Emacs一毫秒。

看新闻的基本功能已经完全没有问题了,相对于Emacs现有其他新闻阅读器除了优秀的性能外,对新闻网页的渲染也是其他新闻阅读器无法媲美的。

RSS Reader

现在已经支持如下操作:

按键 操作
a 添加订阅
n 查看下一个订阅
p 查看上一个订阅
N 查看最后一个订阅
P 查看第一个订阅
j 选择下一篇文章
k 选择上一篇文章
J 选择最后一篇文章
K 选择第一篇文章

还有一些产品细节需要社区开发者一起协助开发:

  1. 支持删除订阅的操作,除了从左边订阅列表中删除,还需要更新 ~/.emacs.d/eaf/rss-reader/feeds.json 中的数据
  2. 因为QGraphicsScene的原因导致QListWidget的滚动事件还有点问题,原因未知,结果是翻文章的时候,右边的文章列表无法正常滚动
  3. 浏览器的高级功能代码下沉到 core/browser.py 模块里,这样新闻阅读器中的浏览器可以享受很多高级功能,比如vimium跳转和搜索功能
  4. 快捷键支持右边新闻网页的上下滚动,避免用鼠标
  5. 修改 ~/.emacs.d/eaf/rss-reader/feeds.json 数据结构和界面代码,支持已读和未读操作的区分, 避免重复阅读

EAF是一种新型的Emacs应用框架,可以让你用Python和Qt5无限扩展Emacs的多媒体功能的同时又保留Emacs原汁原味的Elisp黑客文化。

RSS Reader只是给大家演示一种可能性,EAF不仅仅是对Emacs网页浏览和PDF阅读功能的扩展,EAF可以开发任何你想开发的多媒体应用扩展,唯一的限制就是你的想象力。;)