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

tty

我们微信聊吧,我来帮你修复一下问题

试一下这个补丁吧 Wayland native need window-system and XDG_SESSION_TYPE to detect. · emacs-eaf/emacs-application-framework@c5038e9 · GitHub

现在用 Emacs 的 window-system 变量是否是 pgtk 以及环境变量 XDG_SESSION_TYPE 是否是 wayland 一起来判断 Wayland native 的情况。

我这边不行,问题更严重了。

之前Qt的窗口是嵌入在Emacs中的,现在彻底分离了。

比如运行M-x,Emacs便会隐藏Qt窗口,再执行M-x,buffer变得空无一物。

这个补丁修复的功能是能让Qt窗口隐藏了

Emacs 变量值 system-type window-system 分别是什么?

环境变量 XDG_SESSION_TYPE 的值是什么?

Emacs 函数 (display-graphic-p) 返回的值是什么?

  1. system-type: gnu/linux
  2. window-system: pgtk
  3. XDG_SESSION_TYPE: tty
  4. display-graphic-p: t

那对呀,你的 (eaf-emacs-not-use-reparent-technology) 应该返回 nil 啊,你更新EAF以后重启Emacs了吗?

(eaf-emacs-not-use-reparent-technology) 的返回值是nil

更新后重启了emacs

你这种现象我没有遇到啊,加了 XDG_SESSION_TYPE 判断后,(eaf-emacs-not-use-reparent-technology) 就应该返回 nil, 返回 nil 就会把Qt窗口嵌入到Emacs中啊。

X 中 root window 子窗口以下的 hierarchy 是 X 服务器处理的,窗口管理器只需要在 RootWindow 设置 SubstructureRedirectMask,不会对 child window 造成影响,也不因该影响 EAF。

否则 Emacs 内置的 scrollbar 和 toolbar 都没法使用,因为这些也是被 reparent 的窗口。

好像回答错了。。。不知道浏览器为啥突然翻到了 2019 年的帖子

建议用 `pgtk-backend-display-class’ 这个函数判断,Wayland 下是 “GdkWaylandDisplay”

我的 Emacs 29 启动就卡死,暂时没法测试这个函数。

这个是 Emacs29的问题,我尝试换回了 Emacs 27,没有异常现象

不晓得 emacs29 改了啥,感觉不光是EAF这边的问题

1 个赞

EAF是没有大问题的,主要是Emacs 29 不知道被触发了什么,把qt和emacs分离了

我看错了,抱歉。这种情况之前经常在wsl 上面看到。

这一波问题应该都是archlinux的emacs-git包打开了pgtk造成的。

https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=emacs-git#n49

@Jerry 的反馈看,Jerry 用的是 Arch + KDE + X11 的组合,在Emacs29也会被影响,如果现象是 Qt窗口和 Emacs 窗口分离,感觉 Emacs29 即使在 X11 下, XReparent 都没法工作的。

1 个赞

你在 Emacs 29中,(frame-parameter frame 'window-id) 可以获取到 Emacs 的 XID 吗?