感谢回复,抱歉可能之前看wiki的时候眼花了没看到
发送补丁吧,EAF是js播放器,折腾下就可以了
@manateelazycat 我一直遇到eaf卡死的问题:加载大型网站过程中使用键盘,整个emacs会 卡死。这次我用gdb找到了调试信息,能不能帮我看一下。
#0 0x00007fa46c54e25b in pthread_sigmask@GLIBC_2.2.5 () at /usr/lib/libc.so.6
#1 0x000056211f602cda in really_call_select.lto_priv ()
#2 0x000056211f5da80d in wait_reading_process_output ()
#3 0x000056211f5dcfe7 in Faccept_process_output ()
#4 0x000056211f594ae3 in Ffuncall ()
#5 0x000056211f5cfe56 in exec_byte_code ()
#6 0x000056211f5945e9 in funcall_lambda ()
#7 0x000056211f594a17 in Ffuncall ()
#8 0x000056211f5cfe56 in exec_byte_code ()
#9 0x000056211f5945e9 in funcall_lambda ()
#10 0x000056211f595891 in apply_lambda ()
#11 0x000056211f595c86 in eval_sub ()
#12 0x000056211f59473d in funcall_lambda ()
#13 0x000056211f595891 in apply_lambda ()
#14 0x000056211f595c86 in eval_sub ()
#15 0x000056211f595d7e in eval_sub ()
#16 0x000056211f59628d in Fif ()
#17 0x000056211f595e01 in eval_sub ()
#18 0x000056211f596bcd in Flet ()
#19 0x000056211f595e01 in eval_sub ()
#20 0x000056211f596385 in Fcond ()
#21 0x000056211f595e01 in eval_sub ()
#22 0x000056211f595e01 in eval_sub ()
#23 0x000056211f59473d in funcall_lambda ()
#24 0x000056211f594a17 in Ffuncall ()
#25 0x000056211f51f861 in keyremap_step ()
#26 0x000056211f520824 in read_key_sequence.lto_priv ()
#27 0x000056211f51655f in command_loop_1 ()
#28 0x000056211f592157 in internal_condition_case ()
#29 0x000056211f5109f4 in command_loop_2 ()
#30 0x000056211f593f64 in internal_catch ()
#31 0x000056211f511c7b in command_loop.lto_priv ()
#32 0x000056211f638c0b in recursive_edit_1.isra ()
#33 0x000056211f5162a3 in Frecursive_edit ()
#34 0x000056211f420606 in main ()
更新
我也打开了debug-on-quit,可以看到和epc有关,是在执行is_focus操作。
这个问题的复现方法:用eaf browser打开emacs-china,立刻连续按SPC键若干次,可以看到Emacs卡死
什么操作系统?
Archwsl on wsl1和manjaro xfce都遇到这个问题。
wsl1 也能用 eaf 的浏览器了吗,需要什么特别配置吗
我适配了一下,调用的Windows下面的eaf。
具体配置似乎只要在Windows下面把eaf的依赖给装好,然后配置一下eaf-python-command,让它指向你的Windows下的python.exe就行了,再让eaf-python-file指向eaf.py。这样就能够跑起来了。其他问题我都搞定了。当然,相应的其他的eaf变量也需要调整,你用起来再改就好了,影响不大。
你把windows focus几行代码注释一下,我感觉你卡死的问题是因为事件发生循环,递归调用了。
应该找到问题所在了。是eaf+evil的代码带来了问题。难怪你们没办法复现这个问题。
("browser" (if (string= (eaf-call-sync "call_function" eaf--buffer-id "is_focus") "True")
(kbd "SPC")
(kbd eaf-evil-leader-key)))
网站还没加载好的时候按了SPC键就坏事了。我把这个判断取消,这个问题就没了。副作用 是在浏览器里面用不了SPC键了,暂时没看到有什么影响。
最新版的EAF Browser app里面我加了一个 is_loading 的变量,网站正在加载的时候这个变量为 True,加载完成后变成 False。
你可以厂商结合一下这个状态,有需要加啥再跟我说。
太快了,多谢,已经看到代码了,我去再调一下。
不客气,有需要随时留言。
我刚刚给 browser app 添加了 page_is_loading 的Python函数,你可以在 Elisp 端调用
(eaf-call-sync "call_function" eaf--buffer-id "page_is_loading")
就可以在Elisp端知道网页是否正在加载了。
或者用我才加的Elisp函数 eaf-browser-is-loading
也可以。
今天推送了 music-player 这个补丁,这个补丁主要实现了 Elisp 直接调用 Vue.js 函数的方法,基于这种技术,我们可以做到:
- 启动命令和窗口控制主要用Elisp来实现
- 多线程控制和系统底层库调用由Python来实现
- 所有多媒体界面用 Vue.js 来绘制
以后我们开发Emacs应用,可以直接调用Vue.js和JavaScript的控件库和多媒体控件来绘制,再也不用写几千行代码实现文本模拟控件,功能不强大还难以维护。
通过Vue.js和JavaScript的前端生态,我们可以轻松实现:
- 列表对齐
- 表格
- 复杂布局绘制
- 动画绘制
- 视频和图片嵌入
简单来说:
- EAF 的 music-player 完成后可以全功能替代EMMS
- 同理文件管理器可以轻松替换 Dired, 并实现图片目录平铺展示等功能
- 新闻客户端
- 邮件客户端
- 等等
因为一旦Emacs拥有 Vue.js 绘制界面的能力,这些原来在Emacs中实现非常复杂的界面App的门槛会大大降低。
最新版的EAF已经实现了一个完整功能的音乐播放器,得益于Vue.js的界面绘制和属性响应能力,全程只花了几个小时,现在我已经完全用它替换EMMS了。
默认的快捷键有:
- f12 open_devtools
- j play_next
- k play_prev
- , backward
- . forward
- SPC toggle
- C-n scroll_up
- C-p scroll_down
- C-f scroll_right
- C-b scroll_left
- C-v scroll_up_page
- M-v scroll_down_page
- M-< scroll_to_begin
- M-> scroll_to_bottom
欢迎前端同学一起玩 EAF + Vue.js
请问dist/index.html是需要自己写吗?
install-eaf.sh 会自动执行 npm install 和 npm run build
npm run build 会自动生成 dist/index.html