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

了解,感谢说明,另外我最近在看xwidget是怎么实现的,发现你前面有评论过

能讲讲为什么Emacs X11的代码和架构不适合多媒体渲染吗?我发现emacs到现在还在使用一个非常老的图形库lwlib (一开始的开发公司Lucid都已经倒了),这两者之间有关系吗?

图形渲染的要求:

  1. Cairo, Qt, Gtk 这些图形库可以自己绘制任意图像, 字体, 视频并处理输入法, 其中视频必须是可以GPU加速的, X11如果要做到这些, 几乎还要自己造类似Gtk/Qt的代码
  2. 多线程处理一定要好, 如果不支持多线程, 图形渲染就会把主线程卡主.

那这样感觉Emacs要从自己本身去强化对GUI的支援根本无解…

就算第一点之后有办法用上完整的GTK, QT,可是第二点要让Emacs支持多线程感觉不太可能(Emacs 26说的多线程其实也只是随时在不同线程之间切换而已),我记得Emacs的buffer设计本身就会对实现多线程造成很大的困难(很早以前在EmacsWiki上看来的,不知道这个说法对不对)

如果要同时满足这两点除了从根本上重写Emacs的 window/buffer架构之外,感觉没有其他办法了。如果之后Wayland取代X11的话不知道那些开发Emacs的大老们有们有可能考虑重写这一部份 (但真的重写的话现在Melpa上的那堆插件估计就都不相容了)

话说学习X, Xlib的话有推荐的资料吗?

x11的文档没有一个可以看的,都是api手册

只有自己写窗口管理器或者桌面环境才能真正学会x11

O’Reilly 的 XLIB Programming Manual, X Window System user’s guide,会 Common Lisp 可以用 Common LISP X Interface


Wayland 对这个问題几于无用

老王好像在这里推荐过

刚刚看到这篇issue,里面说eaf用到很复杂的技术所以只能用在一般的WM上,没法用在tiling WM,请问具体上是因为一般的tiling WM缺少什么机制吗?

https://github.com/manateelazycat/emacs-application-framework/issues/47

Titling WM 都是最小窗口管理器API的实现, Tiling WM最缺少的就是对窗口重叠和窗口图层混合的支持 (比如阴影和EAF所需要的 X11 reparent 协议).

目前我知道完备支持 X11 所有协议的桌面环境只有 Gnome2, KDE, DDE, Unity, 其他窗口管理器对 X11 Reparent 几乎没有正确支持, 导致 EAF 没法运行.

EAF在Xfce和LXDE都可以基本运行的,更冷门得我就没有试过了。


突然想起来,WineQQ在单WM上似乎也是没有办法正常运行得。不知道是不是也是这个原因

我有个想法是能不能把eaf中python, elisp透过dbus沟通的技术用在EXWM上。这样EXWM里就可以同时支持

  1. 用QT5写的GUI应用,而这些应用还可以透过elisp, python互相控制

  2. 其他应用(像是GTK),这些就是原本的那些程式,Emacs没办法控制他们的行为

这样的话也不用所有程式都自己写,像是浏览器就可以用chrome, firefox,pdf reader就可以用eaf里的,这样的想法可行吗?

感觉在某些支持浮动的窗口管理器,如 i3、awesomewm 等,都是可以正常运行的。之前在 manjaro i3 上折腾 astroidmail 时,内嵌编辑器就能做到这一点。

你没有明白一个问题, 很多应用不是你想控制就可以控制的, 比如 chrome, firefox 这种鼠标导向设计的软件, 就不可能全键盘操作, 当然你可以发送伪造事件通过按键虚拟映射技术去骗这些应用, 但是本质还是没法做到全键盘操作.

如果没法做到全键盘操作, 费那么大劲折腾,效果还不是和不用EAF一样, 浏览器和Emacs来回切换.

当然我不是强调所有应用都要自己写, 我觉得EAF再怎么发展, 也很难去写一个和Chrome/Firefox竞争的浏览器(根本就写不赢), 最多就是一个套壳的键盘操作浏览器.

1 个赞

我不是要透过EXWM来去运行这些鼠标导向的程序,而是希望透过EXWM去运行那些一样是键盘导向但是非QT的程式,像是浏览器可以试试看这个 next browser

而如果没办法找到键盘导向的程序的话,再透过eaf的python elisp沟通技术用QT自己造一个

我只是想通过EXWM那样可以让各种程式运行的优点来填补eaf里很多应用都要自己从头写的缺点,希望你不要介意,本质上我还是希望所有程序都是键盘导向的

其实寻寻觅觅, 最后还是Emacs内部完美结合的好, 只是精力有限, 大家一起加油吧.

2 个赞

我现在都是eaf browser, eww, dash一块用的,在emacs里看文档和blog感觉非常不错 :grinning:

打开markdown文件白屏

 * using personal access token
 * serving flask app "grip.app" (lazy loading)
 * environment: production
e warning: do not use the development server in a production environment.e
e use a production wsgi server instead.e
 * debug mode: off
 * running on http://localhost:52431/ (press ctrl+c to quit)

系统: Manjaro 18.0.4

Emacs: 26.2

可能你用的窗口管理器不支持

我用的是KDE,而且org文件没问题。

安装 grip 然后设置你自己的 token

找到原因了,是http代理的问题。