最近玩nixos, 发现使用默认的emacs-overlay设置alpha-background不生效, 需要显示指定withGTK3 = true; 才可以, 下面是我的build例子作为参考…
with (import <nixpkgs> {});
with rec {
emacs-overlay = import (builtins.fetchTarball { url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz; });
};
let overlay = self: super: {
myemacs = ((super.emacsGit.override{
nativeComp = false;
withGTK3 = true;
}).overrideAttrs (old: {
# 这行是因为, 在用了GTK3后会在 `nativeInputBuilds` 加入 `wrapGAppsHook`, 大概是因为动态链接的问题导致nix-community/emacs-overlay的 treesitter patch没有生效, 因为刚用nixos所以不太熟只想到这个解决方法.
nativeBuildInputs = (lib.remove pkgs.wrapGAppsHook old.nativeBuildInputs);
}));
};
in
(import <nixpkgs> {
overlays = [ emacs-overlay overlay ];
}).myemacs
3 个赞
为什么 我按楼主的方式,没有效果,反而 我用下面的 可以实现透明
(set-frame-parameter nil 'alpha 0.9)
A7R7
43
我也遇到了这个问题,通过站内搜索搜到这个帖子。想知道现在有解决方案了吗?
Shynur
44
还是有点用的,对我来说多大的优点是节约屏幕面积。
下层放文档,上层放 Emacs 边看文档边敲代码算是常见场景了。
不过这还不是我发现透明背景最大的优点。
我把 动态变化 的软件界面放在 Emacs 后面,比如 QQ,玩 Emacs 时还能顺便看到群友在聊什么,这个实在是太方便了。
Ilya.w
45
我遇到和你同样的问题. 请问你是使用的 macOS (ns 架构) 吗?
目前 macOS 好像只能实现背景透明(内容也会跟着一起变透明), 但不能实现如题所述的真·背景透明.
(push '(alpha . (90 . 90)) default-frame-alist)
据我所知在Windows上把窗口弄半透明(毛玻璃效果)不需要使用DirectX,而是使用桌面窗口管理器提供的几个C API: DWM Blur Behind Overview - Win32 apps | Microsoft Learn
1 个赞
这里没有讲到 C 下怎么调节 DC 的 alpha,只是讲解了怎么给全部的窗口内容开启透明效果。
把窗口变成透明以后,绘制带alpha通道的背景,窗口管理器会正确地混合背景色的alpha通道和窗口下面的内容的。这里有一点讨厌的地方是Emacs主要通过GDI来进行绘制,然而很多GDI函数对Alpha通道不太友好(因为太古老了)。要绘制带Alpha的图形,需要使用能够支持32位RGBA的API。
而据说只有 GDI 能从 C 代码调用,GDI+ 之类的必须使用 C++。
技术上讲稍微用一点点c++可能也不算个太大的问题吧,gcc和clang都可以支持,而且Emacs在苹果平台上也用了objc。政治上有没有障碍我就不知道了。
还有一个办法是给 windows 加一个cairo后端
技术上没有阻碍,但是目前的 w32 维护者(Eli)不愿意添加 C++ 代码。
A7R7
55
我在emacs邮件群组里找到了绘制图片透明通道的暂时解决方案,答案是使用xpm的图片格式!
https://mail.gnu.org/archive/html/bug-gnu-emacs/2022-12/msg01080.html
这是使用了xpm图片格式后的显示效果
代价是,启动时间肉眼可见的变长。 启动时间并没有变长~
这是linux平台下的解决方案,我使用pgtk的emacs也可以正确显示。不清楚windows和macos平台下能不能正常显示。
4 个赞
blove
56
哦哦! xpm 格式!回头在 Linux 平台上试试!
真背景透明,我只在 Linux 平台实现过。
在 Windows 平台 29.1 版本 也是不被支持的!
MacOS 我不清楚,因为我不在 MacOS 上用 Emacs!
目前我是根据系统平台分别设置了对应透明方式!
启动时间长, 用server就好了. 我的配置单纯启动要四秒
A7R7
58
用server有一些难以描述的gui方面的问题,我觉得我的启动时间还算是可以接受的
A7R7
60
这个真不错啊,我能不能把 (load custom-file)
放在 (custom-set-faces … ) 那里呢?
还有,这么说的话client gui 不符合预期全都是因为custom加载不符预期导致的吗?