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

花了两周时间开发了一个应用程序框架 https://github.com/manateelazycat/emacs-application-framework

现在已经可以在Emacs里面运行全功能浏览器、图片浏览器、视频播放器

欢迎大家加入,一起开发,按照Github的手册,只要会PyQt5就行了,基本不需要Elisp编程知识。

上传几张插件截图:

浏览器

图片浏览器

视频播放器

动态效果可以看:

史上最简单的开发者手册,只需要三步, 只需要三步, 只需要三步 https://github.com/manateelazycat/emacs-application-framework/blob/master/HACKING.md

一起来玩吧,超级好玩。

42赞

超级棒!之前就看过你的webkit浏览器,不知道这种框架效率如何?

1赞

webkit-mode 那个当时只是实验想法。

今天这个Emacs Application Framework是一个框架,可以支持任何程序的编写,不仅仅是浏览器。

主要Python-Xlib里面对 XComposite 的支持不好,所以窗口内容同步是在 XClient 做的,但是效率已经非常非常高了,一般用户察觉不出来。

1赞

肯定会有人问这个问题,我先问了算了,请问这个和 exwm 的主要区别是什么?

exwm 只是一个 Tile WM, 把其他程序平铺进来,而且必须要求用户使用 exwm 窗口管理器。

Emacs Application Framework 是按照Emacs的 Window/Buffer 窗口设计原理来做的图形混合器,有以下优点:

  1. 开发的PyQt程序可以任意分屏,但是buffer只有一个,想象一下Emacs分屏一个视频网页,只是View变成两份,但是后台的QWebView只有一份,最大化的和Emacs的其他插件集成
  2. 所有插件都是由Emacs控制的,意味着可以像传统Elisp插件那样对PyQt程序进行操作
  3. 可以通过DBus IPC来进行编程式的扩展, Elisp <-> Python双方可以互相调用,而不仅仅使 Tile WM 那种只是把窗口弄在一起
  4. 这个框架使非侵入式的,不论你使用的是 Tile WM还是Gnome/KDE/DDE, 都可以享受集成的功能,不需要强迫用户学习 Tile WM 的配置和用法

最终达到的效果是,一批PyQt程序都是按照Emacs的窗口管理风格集成的,达到最高的效率和专注,不被那些鼠标导向设计的普通应用程序打断。

10赞

刚提的需求就被你实现了,图片浏览,视频播放,一直期待的功能,我先看下

只是实现一个框架和基本的功能,希望大家一起贡献,我一个人力量太小。

大佬就是大佬!

想知道既然是pyqt是不是也能够在其他平台上运行呢?兼容需要特殊处理吗?还是只要装pyqt和emacs都可以直接用?

任意支持DBus的Emacs版本加上PyQt5就可以了。

现在只是0.1版本,所以兼容性没有怎么考虑,一般兼容性都是操作系统路径的问题,发现了也好修复。

1赞

期待在Windows上用

Windows平台估计要windows emacser 帮助写补丁,我从来不用windows

很棒啊!个人觉得如果可以同时支持elisp和python对推广有很大用处。要知道,emacs离不开lisp。

1赞

Python 开发 Qt 插件,Emacs Application Framework 的Elisp部分自动集成,几乎不需要开发者了解Elisp编程。

1赞

可以在 reddit emacs 上推广一下,让更多人知道,如果能吸引大牛加入,应该能加快开发进程。

欢迎大家去踩: https://www.reddit.com/r/emacs/comments/8tj4l8/run_any_pyqt5_program_in_emacs/:wink:

1赞

感觉好厉害的样子 支持楼主 :hugs:

能不能将 jupyter 绘制的图形的 qt 窗口直接弹出到 emacs 中呢?如果能的话就太赞了

1赞

因为Emacs有 Window/Buffer 的概念,要支持Emacs这种设计,只有两种方法:

1、像Emacs Application Framework 设计框架,优点是完美集成,缺点是每个Python程序都要自己写

2、利用 Xlib XComposite 扩展专门为Emacs开发一个类似 Emacs Application Framework 架构的 X 窗口管理器,理论上可以嵌入任何程序,比如 chrome

第二条路需要写一个完整的窗口管理器,理论上可行,工作量太大,而且不是所有人都喜欢这种专用的窗口管理器。

只不过你的问题,可以变成 jupyter 保存图形到文件,然后开发一个 EAF 插件,读取图片并嵌入Emacs

1赞

其实昨天你们讨论的sdcv.el的问题,可以写一个新的QtWebKit程序,读取有道词典的API, 然后弹出,光标移动后消失。

取词部分用 Elisp 写,窗口和网络页面渲染用 Python Qt 写

1赞

前几天试用xwidget, 窗口闪烁的厉害, 随便按一些按键就容易闪烁, 而且窗口内容偶尔会消失, 只剩下emacs背景色, 不知道这个有没有这个问题