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

exwm 和 eaf的目标不一样,exwm 只是像 tiling wm 那样把所有程序集成到 emacs frame 里面,但是 exwm 没法提升其他那些鼠标设计程序的效率。

eaf 第一用户用啥窗口管理器或桌面环境都可以,第二插件自己写,可以做到所有插件都是键盘操作导向的,而且和emacs的所有按键高度统一。

1 个赞

恩,eaf 是不是 可以替换掉一些 Emacs 本身的一些东西比如 company 的那个下拉框是用 overlay 实现的,用 eaf 就可以直接开发出一个 gui 版本的下拉框?

eaf 是用来开发 GUI 的应用程序,为了无缝集成应用程序,做了很多框架性的东西,比如事件伪造和转发,窗口混合,窗口管理等工作。

如果要做一个Company的东西,非常简单,一个PyQT5窗口,然后 xlib reparent 粘贴上去,给 elisp post-command-insert-hook 加一个 hook ,PyQt5窗口跟着光标一动就可以了。

GUI版的下拉框太简单了。

1 个赞

凡事先从简单点的来嘛,现在 lsp-ui 的 lsp-ui-doc-mode 对 emacs 有版本要求不说,也很难用,感觉很适合用 eaf 来开发,此外 company-quickhelp-mode 也是,当需要显示的文档的内容比较多的时候感觉效果都不是太好

我的意思是,开发这种东西很简单,不需要用 eaf 框架。

最多半个小时就可以写完

哦,好吧…

eaf :+1:

下面这个也爽

The embedded browser lets you browse and navigate websites from within Oni, acting like another type of Vim buffer.

38274487-c4b28120-3743-11e8-9a54-7cfd4126f054

这个只是一个单独的控件吧,它不能像 EAF 那样直接分屏和转发事件。

Emacs 需要的是分屏以后,可以快速组合不同的 mode 的buffer进行协同工作。

如果只是一个控件嵌入,没法提升Emacs的协同作战的能力

我觉得 eaf, 现在要考虑 .QT 和 PyQt5 不同系统上, 版本兼容性的问题.

因为不是所有的用户都是 ArchLinux 的.

可能更多的用户, 会 pip install xxx. 这样安装.

其实没啥兼容性问题,就是有些发行版的Qt5弄得太差了。只要Qt5是好的,大部分都不会有问题

这个只是一个非常简单的demo, 你们可以先体验一下性能,等我带小孩和小狗出去遛弯,遛弯回来晚上睡觉之前就可以写一个完美的 PDF 阅读器

战斗力爆表,很强

我用 poppler 这个库重写了一版 PdfViewerWidget, 更新以后,直接 eaf-open 输入 PDF 文件路径就可以查看了 打开以后:

  • j 向上滚动
  • k 向下滚动
  • space 向上滚动一屏幕
  • b 向下滚动用屏幕
  • t 切换显示模式
  • 逗号:最后一页
  • 句号:第一页
  • 减号: 缩小页面
  • 等号: 放大页面
  • 0: 恢复当前模式页面

特性:

  • 不管多大的pdf文件都秒开,因为永远都只读取第一页数据,后续浏览的时候动态渲染pdf的页面
  • 因为不用和emacs的窗口交互,所以浏览性能非常高,不会出现因为emacs渲染性能不足带来的卡顿问题

PDF 浏览器效果请看:https://github.com/manateelazycat/emacs-application-framework/blob/master/screenshot/pdf_viewer.gif

1 个赞

最大化最小化,xwindow大小不跟随emacs更新,没有处理最大化最小化更改事件?

那个还没做,你可以提issue

之所以没做,是因为我平常都是全屏用 emacs 的

到目前为止的有些快捷键:

App Key Event
Browser Left Button Open link current tab
Ctrl + Left Button Open link in new tab
Image Viewer j Load next image in current directory
k Load previous image in current directory
Video Player Space Play or Pause
h Seek backward
l Seek forward
Pdf Viewer j Scroll up
k Scroll down
Space Scroll up page
b Scroll down page
, Scroll to end
. Scroll to home
t Switch scale mode
- zoom out
= zoom in
0 zoomn reset
1 个赞

运行 eaf-open + image file 出现错误:

Traceback (most recent call last):
  File "/home/stardiviner/Code/Emacs/emacs-application-framework/core/eaf.py", line 35, in <module>
    from app.browser.buffer import BrowserBuffer
  File "/home/stardiviner/Code/Emacs/emacs-application-framework/app/browser/buffer.py", line 25, in <module>
    from PyQt5.QtWebKitWidgets import QWebView, QWebPage
ModuleNotFoundError: No module named 'PyQt5.QtWebKitWidgets'

我是用的 virtualenv python. version 3.6.5, Emacs version 26.1, Arch Linux. 我的 PyQt5 是从 pip 装的。

pip里面没有webkit,看我readme,从pacman里面装。

pip只有qtwebengine,这货还有bug,我还在死磕

pip的qtwebengine就是个坑货,我最后从下到上手动编译安装的

主要那个 QtWebengine 不能控制单击浏览器链接的时候是在当前窗口还是新的窗口打开。 这个让我很郁闷