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

好的,多谢多谢!

貌似还是不行。

js: WebSocket connection to 'ws://127.0.0.1:47199/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

which nodewhich nodejs

这两个命令输出的啥?我怀疑你的 node ./server.js 没有正常启动。

$ which node 
/usr/local/bin/node 
$ which nodejs 
$

你手动在 app/terminal 目录下执行

node ./server.js 3000 /home bash 命令会输出啥?

events.js:287
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1449:7)
    at new WebSocketServer (/home/johnny/.emacs.d/elisp/emacs-application-framework/app/terminal/node_modules/ws/lib/websocket-server.js:75:20)
    at Object.<anonymous> (/home/johnny/.emacs.d/elisp/emacs-application-framework/app/terminal/server.js:27:12)
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
Emitted 'error' event on WebSocketServer instance at:
    at Server.emit (events.js:310:20)
    at emitErrorNT (net.js:1340:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 3000
}

刚才按照@shanyouli 建议的,rebuild了一下,可以打开terminal了 :sweat_smile:

今天我推送了一个补丁

这个补丁用QWindow的setParent方法替换了原来的X11 Reparent来实现跨进程画面粘贴,QWindow::setParent在Linux平台下应该用的X11 Reparent,在Windows和Mac平台下应该用了操作系统底层实现。

这个补丁更新后意味着: 如果能够搞定DBus, EAF应该可以在Windows和Mac平台下运行!!!

8 个赞

其他平台,难道没有和dbus类似的东西? 应该不太可能吧?

https://www.freedesktop.org/wiki/Software/dbus/#windowsport

windows 好像有 dbus

macos 貌似也有

DBus要在操作系统层面先跑一个Daemon,不是不可能,只是其他平台折腾DBus Daemon比较麻烦。

这个终端应该是Emacs里面支持图形化最好的终端了。

我已经想尝试着把pythonnodejs的那一块给去掉,直接拿c++来搞的想法了 :rofl:

没有必要啊,PyQt底层调用的就是Qt的C++ API,在X86效率已经非常高了。 C++反而来回编译,把Hacking的感觉都编译没了。

只是为了减少一点外部依赖,多种语言混合使用,这里构建系统不太好处理。

1 个赞

最新版移植到Windows的障碍只有DBus,移植到Mac的障碍只有DBus和QGraphicsScene(影响Buffer内容在多个View之间镜像同步,主要对应于Emacs分屏操作)

移植的步骤:

  1. 重构 eaf.el 和 eaf.py, 把十几处DBus代码抽象成5个以内的固定IPC接口包装函数
  2. 用LSP的JsonRPC替换DBus
  3. DBus换掉以后,Windows平台应该可以工作了
  4. 随后折腾好Mac下QGraphicsScene, Mac平台应该也可以用EAF

移植过程中可能要针对Windows替换代码中的 / 路径链接操作。

欢迎Windows和Mac平台的黑客一起参与移植,最大的障碍X11 Reparent被QWindow::setParent跨平台API替换后,EAF移植到Windows和Mac平台,成为Emacs多媒体跨平台框架只是时间问题。

15 个赞

以前有一些闪屏的问题,升级后感觉好多了。另外,这意味着 wayland 下可以用了吗?

厉害了,写了一个demo,成功在Windows下将 qt 窗口贴到了 emacs 中。等待大佬重构好 IPC 接口,Windows 上使用EAF指日可待。

7 个赞

太好了,意味着只要DBus被替换后,EAF在Windows上运行完全不是问题。

有没有兴趣一起搞?

可以,我可以做windows上的适配

3 个赞