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

第一次没有生效是因为窗口管理器触发了shortcutoverride事件,导致eaf在这时候需要用wmctrl强制聚焦到emacs窗口上。

如果要模拟鼠标事件,建议采用pyqt的方式弄,直接伪造拖拽事件,参考代码可以查看core目录下的qevent相关代码,手机不方便打字,自己搜索一下core目录吧。

core/buffer.py 里面有一个 fake_key_event 的函数,简单来说就是根据Emacs按键信息构建QEvent,然后通过QApplication.sendEvent函数把伪造的事件发送给EAF的Qt应用。

我建议你如果模拟鼠标的操作有效,不要用外部工具,因为用外部工具就会发生窗口焦点切换的事件,一旦焦点切换就会触发ShortcutOverride事件,引发Emacs窗口无法获取焦点事件,这时候EAF会调用wmctrl工具强制聚焦到Emacs窗口,也是为啥你用外部模拟工具后,第一次没效果,因为第一次按键被ShortcutOverride事件吃掉了。

方法是参考 core/buffer.py 伪造一个 “鼠标拖拽事件”, 然后通过QApplication.sendEvent函数把伪造的鼠标拖拽事件发送给EAF的Qt应用,因为这种方法是直接通过Qt来实现的,不存在窗口切换的问题,也就不会发生第一次事件没反应的现象了。

最近在用eaf看epub电子书,要比nov.el个人感觉好,后者对一些特殊字符和图示显示效果不太理想。但唯一不满意的点就是eaf打开epub后,不能像在pdf里一样自由选词并复制,请问有什么办法可以解决吗?

1 个赞

注意:EAF现在分出了mastermaster-full分支。

  1. master分支删掉了所有node_modules,添加了package.json,让EAF原本打包携带的所有第三方js库都重新跟npm上游连起来了。这样既缩小了master的体积,也利用上github的dependabot,不用我们独立维护各个库。
  2. 新的master-full分支则是增加了node_modules的版本,方便那些因网络原因不方便使用npm的人群下载EAF。
  3. 如果使用EAF Terminal中出现跟buffer.active相关的错误,则需要跑一遍npm install

这两天写了一个比较大的补丁:Use python-epc instead DBus, to make EAF works on Windows platform. · emacs-eaf/emacs-application-framework@d1da60f · GitHub

用Python EPC替代DBus,作为EAF进程间通讯新的方式。

新版的EAF需要安装Python包: sudo pip install epc

同时安装三个Elisp包:

这个版本以后,理论上把EAF中一些关于文件路径的地方调整下,EAF应该可以直接在Windows平台上运行。

欢迎大家更新,提供反馈意见。

12 个赞

现在IPC的问题已经解决了,可以帮忙验证一下EAF是否可以运行在Windows吗?

我在EAF的Discussions里面创建了一个帖子,专门用来通知老EAF用户需要进行哪些操作来确保EAF可以继续运行:https://github.com/manateelazycat/emacs-application-framework/discussions/527

1 个赞

好的,我试一下 Windows 能不能正常跑通

npm install用不成功

d:/home/.emacs.d\site-lisp\emacs-application-framework>npm install

> [email protected] postinstall D:\home\.emacs.d\site-lisp\emacs-application-framework
> (cd app/js-video-player && npm install); (cd app/mermaid && npm install); (cd app/terminal && npm install)

此时不应有 (cd。
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] postinstall: `(cd app/js-video-player && npm install); (cd app/mermaid && npm install); (cd app/terminal && npm install)`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Administrator\AppData\Roaming\npm-cache\_logs\2021-01-22T02_06_30_880Z-debug.log

然后按文档说的用了 master-full,用了这个是不在需要 npm install.

执行 M-x eaf-open-browser 报错

epc:start-server: Server may raise an error. Use "M-x epc:pop-to-last-server-process-buffer RET" to see full traceback:
Process epc:server:4 exited abnormally with code 49

主要是进入这几个subdirectory挨个儿npm install

看看*epc:server* buffer,也试试eaf-open-demo

这个 IPC 完美,试了一下,没有问题。

还有很多地方需要适配

1 个赞

nice,有没有遇到上面的npm install问题?

有这个问题,我提了一个 PR,增加了安装脚本

这里一定要 sudo 么?不sudo可不可以?

更新到新版本之后,在Dired 里面按 Enter 报错。 直接使用 eaf-open 也是报这个错。

Traceback (most recent call last):
  File "/home/stardiviner/Code/Emacs/emacs-application-framework/eaf.py", line 621, in <module>
    eaf = EAF(sys.argv[1:])
  File "/home/stardiviner/Code/Emacs/emacs-application-framework/eaf.py", line 52, in __init__
    (emacs_width, emacs_height, proxy_host, proxy_port, proxy_type, config_dir, emacs_server_port, var_dict_string) = args
ValueError: not enough values to unpack (expected 8, got 7)

重启一下emacs,估计是老的python进程

可以用 --user 选项安装到用户目录,这样就不用sudo

在manjaro上报这种错是为什么呀

epc:start-server: Server may raise an error. Use "M-x epc:pop-to-last-server-process-buffer RET" to see full traceback:
Qt: Session management error: Could not open network socket

error in process filter: epc:call-deferred: Wrong type argument: epc:manager, nil
error in process filter: Wrong type argument: epc:manager, nil

M-x epc:pop-to-last-server-process-buffer RET 的输出为:

epc:pop-to-last-server-process-buffer: No buffer for the last server process.  Probably the EPC connection exits correctly or you didn’t start it yet

我用了 virtualenv环境,使用 --user 选项报错。

ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.

那我直接 pip install epc 应该也是ok的吧,只要epc在路径可找到范围就行?

是的,只要装上epc就可以了。