最近了解到 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)))
得到这样的效果:
简单来说,最初透明效果是正常的;当 buffer 内容改变导致 child frame 重绘时,新的内容就像是一层一层叠上去一样。可以看到透明度越来越低,光标那边也有“重影”。
不过在普通frame(非 child 的 frame )上使用 alpha-background
却没有这个问题。
网上似乎没有人提到过这个问题,难道只有我遇到了?