第一次没有生效是因为窗口管理器触发了shortcutoverride事件,导致eaf在这时候需要用wmctrl强制聚焦到emacs窗口上。
如果要模拟鼠标事件,建议采用pyqt的方式弄,直接伪造拖拽事件,参考代码可以查看core目录下的qevent相关代码,手机不方便打字,自己搜索一下core目录吧。
第一次没有生效是因为窗口管理器触发了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里一样自由选词并复制,请问有什么办法可以解决吗?
注意:EAF现在分出了master
和master-full
分支。
master
分支删掉了所有node_modules
,添加了package.json
,让EAF原本打包携带的所有第三方js库都重新跟npm上游连起来了。这样既缩小了master
的体积,也利用上github的dependabot,不用我们独立维护各个库。master-full
分支则是增加了node_modules
的版本,方便那些因网络原因不方便使用npm的人群下载EAF。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平台上运行。
欢迎大家更新,提供反馈意见。
现在IPC的问题已经解决了,可以帮忙验证一下EAF是否可以运行在Windows吗?
我在EAF的Discussions里面创建了一个帖子,专门用来通知老EAF用户需要进行哪些操作来确保EAF可以继续运行:https://github.com/manateelazycat/emacs-application-framework/discussions/527
好的,我试一下 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
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就可以了。