Emacs 29 alpha-background 在 child frame 上异常

最近了解到 alpha-background 这个参数,想把它用在 child frame 上,结果遇到了奇怪的问题。

我使用的平台是 KDE (X11 KWin 5.27.7)。 Emacs -Q 执行下面的函数:

(defun test-child-frame ()
  (interactive)
  (let ((f (make-frame `((parent-frame . ,(selected-frame))
			 (alpha-background . 50)
                         (internal-border-width . 3)
                         (vertical-scroll-bars . nil)
                         (menu-bar-lines . 0)
                         (tool-bar-lines . t)
                         (left . 20)
                         (top . 20)
                         (width . 50)
                         (height . 20))))
        (b (generate-new-buffer "*child-frame*")))
    (with-selected-frame f
      (switch-to-buffer b)
      (with-current-buffer b
        (setq mode-line-format nil)
	(dotimes (i 26)
	  (insert-char (+ i 65))
	  (sit-for 0.2))))
    (delete-frame f)
    (kill-buffer b)))

得到这样的效果:

cut

简单来说,最初透明效果是正常的;当 buffer 内容改变导致 child frame 重绘时,新的内容就像是一层一层叠上去一样。可以看到透明度越来越低,光标那边也有“重影”。

不过在普通frame(非 child 的 frame )上使用 alpha-background 却没有这个问题。

网上似乎没有人提到过这个问题,难道只有我遇到了? :rofl:

1 个赞

因为 child frame 不受到 compositing manager 的控制,child frame 不支持 alpha-background 这个选项。

3 个赞

原来如此,谢谢!

找到了 邮件文档 说某些 WM 不支持 child frame 的 alpha 参数,可能 alpha-background 也一样吧。