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

感谢回复,抱歉可能之前看wiki的时候眼花了没看到 :joy:

发送补丁吧,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 也可以。

1 个赞

今天推送了 music-player 这个补丁,这个补丁主要实现了 Elisp 直接调用 Vue.js 函数的方法,基于这种技术,我们可以做到:

  1. 启动命令和窗口控制主要用Elisp来实现
  2. 多线程控制和系统底层库调用由Python来实现
  3. 所有多媒体界面用 Vue.js 来绘制

以后我们开发Emacs应用,可以直接调用Vue.js和JavaScript的控件库和多媒体控件来绘制,再也不用写几千行代码实现文本模拟控件,功能不强大还难以维护。

通过Vue.js和JavaScript的前端生态,我们可以轻松实现:

  1. 列表对齐
  2. 表格
  3. 复杂布局绘制
  4. 动画绘制
  5. 视频和图片嵌入

简单来说:

  1. EAF 的 music-player 完成后可以全功能替代EMMS
  2. 同理文件管理器可以轻松替换 Dired, 并实现图片目录平铺展示等功能
  3. 新闻客户端
  4. 邮件客户端
  5. 等等

因为一旦Emacs拥有 Vue.js 绘制界面的能力,这些原来在Emacs中实现非常复杂的界面App的门槛会大大降低。

12 个赞

像这种多国语言多列对齐,用CSS太简单了,基本就是10秒钟写一个样式就可以保证每一列都像素对齐,而Emacs现在的绘制机制做到这点要用非常复杂的 align-to 属性。

3 个赞

最新版的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

EAF音乐播放器支持控制面板了,晚上回家整个可视化音乐反馈

3 个赞

搞定,右下角用 vue-audio-visual 控件直接给EAF音乐播放器做了一个音频可视化效果。

3 个赞

请问dist/index.html是需要自己写吗?

install-eaf.sh 会自动执行 npm install 和 npm run build

npm run build 会自动生成 dist/index.html