从今天开始,Emacs里面可以运行任何你想要的程序 (Only Linux)


#598

现在可以添加种子,下次启动的时候自动抓取所有种子的内容了。

还需要完成:

  1. 快捷键操作
  2. 区分未读新闻
  3. 完善UI细节

#599

说的有道理:smile:


#600

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

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

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

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

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

现在已经支持如下操作:

  • 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可以开发任何你想开发的多媒体应用扩展,唯一的限制就是你的想象力。:wink:


#601

不知道现在的浏览器是怎么做的, 不同的页面在不同的进程里渲染, 最后显示在同一个主窗口里. 有没有人研究过?


#602

前两天提了一个类似的feature request: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=38807


#603

worker还是子进程,不是真正的多线程


#604

是真正的多线程啊, 里面运行一个while(1);不会卡住界面


#605

Archlinux xfce4 不能使用 无论打开什么文件,都是 [EAF] eaf aborted (core dumped)


#606

看看 eaf 显示啥


#607

其实就是 EAF 用的 XReparent 技术


#608

初体验~


#609

多亏懒猫,现在EAF支持emacs27引入的xdg配置路线了


#610

有人尝试过在WSL上使用EAF吗?


#611

https://github.com/manateelazycat/emacs-application-framework/commit/6ee3414fa7d6ea94208c973056eeb23a2e18a13d 删除订阅的操作已经支持了。

所有按键可以在 https://github.com/manateelazycat/emacs-application-framework/wiki/Keybindings 查询到


#612

https://github.com/manateelazycat/emacs-application-framework/commit/317c9660e2503da071e057a74f436577d6850fac 补丁后,RSS Reader的浏览器也可以拥有和浏览器正常的滚动功能了。


#613

https://github.com/manateelazycat/emacs-application-framework/commit/d07e445eb6d9c07f32d5c9b3ccad80c50c5e8aed 现在 RSS Reader 的浏览器区域也支持搜索和Vimium的功能了。


#614

https://github.com/manateelazycat/emacs-application-framework/commit/ebf15e03603ffad2f0998338a425d450098386b7 这个补丁后,现在RSS Reader可以区分已读和未读的状态了。


#615

EAF内置的PDF Viewer已经是Emacs里面性能最高的PDF阅读器。平常编程时我都用Snails来全局搜索。

如果Snails遇到EAF会发生什么美妙的化学反应呢?

那就是今天的 snails-backend-eaf-pdf-table 插件:

  1. 当你在用EAF阅读PDF材料的时候,用快捷键唤起 snails
  2. 随便输入任意目录的字符,snails会用模糊算法匹配你输入的目录关键字
  3. 回车即可跳转到对应目录的位置

这在阅读文档到中间位置的时候特别有用,我们不需要回到目录页面,然后手动去查找目录的标题和页码信息,在阅读到文档的任何地方都可以快速搜索目录标题并跳转。

实现原理:

  1. 首先给EAF打一个保存目录信息的补丁, PDF文件打开的时候,计算PDF文件路径的MD5值,并保存目录信息到MD5文件中, 避免大量的数据在Emacs和EAF两个进程之间传递
  2. 其次给Snails打一个PDF目录搜索的补丁, snails启动时探测到用户在查看PDF文件,就从MD5文件中读取当前PDF文件的目录信息
  3. 最后Snails结合用户输入的关键字和目录信息进行模糊对比过滤出用户想查找的目录标题

Live in Emacs又近了一步, 哈哈哈!


#616

合并了社区开发者 https://github.com/manateelazycat/emacs-application-framework/commit/9ddfacfb95b81e793b33d41eaf527839b54a715d 的新补丁

现在可以在Emacs邮件客户端中调用命令 eaf-open-mail-as-html ,用EAF浏览器功能来渲染HTML的邮件内容了,支持Gnus、mu4e、notmuch。


#617

前几天写了Snails PDF Backend支持Snails直接搜索PDF目录快速跳转。

今天用了同样的原理实现了Snails直接搜索浏览器历史的功能:

  1. 启动Snails
  2. 搜索网址或者关键字
  3. 搜索浏览器历史并用EAF打开浏览器

因为Snails用了fuz.el的模糊算法,所以搜索浏览器历史的模糊算法堪比Google Chrome的搜索体验。

体验这个功能需要更新EAF和Snails到最新版本。

Happy hacking! :wink: