GNU/Emacs 的 Liquid Glass 效果
摘要
一份在 macOS 上构建 GNU Emacs 的配方和补丁集,提供受 Ghostty 启发的原生 Liquid Glass 窗口效果,增加 NSGlassEffectView 支持和用于透明与模糊的新 frame 参数。
查看缓存全文
缓存时间: 2026/08/04 17:48
larrasket/emacs-liquid-glass
来源:https://github.com/larrasket/emacs-liquid-glass
#+title: Emacs Liquid Glass
这个仓库是一个用 Ghostty 风格的 macOS 玻璃效果窗口构建 Emacs 的小配方。它在 Homebrew =emacs-plus@31= 和社区的 =frame-transparency= 补丁之上叠加了一个本地 Cocoa 补丁,然后用与 Ghostty 相同的形状配置 Emacs:
#+begin_src conf background-opacity = 0.01 background-blur = macos-glass-regular #+end_src
这不是深色覆盖层,也不是硬编码主题。该补丁仅添加了原生 =NSGlassEffectView= 支持。
[[file:screenshot.png]]
更详细的说明,请参见[[https://lr0.org/blog/p/emacs-apple-glass/][博客文章]]。
- 这个构建方案做了什么 :PROPERTIES: :CUSTOM_ID: what-this-builds :END:
该配方使用 =emacs-plus@31= 配方(formula),而不是 =emacs-plus-app= cask。 cask 分发的是预编译二进制文件,并会忽略 =~/.config/emacs-plus/build.yml=,因此无法应用本地补丁。
构建过程按顺序应用两个补丁:
- 来自 =d12frosted/emacs-plus= 的 =frame-transparency=
- 本仓库的 =patches/ns-glass-effect.patch=
本地补丁添加了以下 frame 参数:
| 参数 | 用途 | |—————————+––––––––––––––––––––––––––| | =ns-glass-material= | 原生材质,目前为 =regular=、=clear= 或 =nil=。 | | =ns-glass-tint-opacity= | 玻璃视图上由主题控制的色调不透明度。 | | =ns-glass-saturation= | 玻璃色调的饱和度倍率。 | | =ns-glass-inactive-opacity= | 窗口处于非活动状态时可选的的不透明度。 | | =ns-glass-corner-radius= | 玻璃视图可选的不透明度。 | | =ns-alpha-glyphs-alpha= | 真正字形背景的单独 alpha 值。 |
最后一个参数是让接近 =0= 的 =alpha-background= 值变得可用的关键。 如果没有它,=hl-line=、选中区域和补全候选高亮会随着窗口背景一起消失。
- 快速开始 :PROPERTIES: :CUSTOM_ID: quick-start :END:
通过你的 tap 安装:
#+begin_src sh brew tap larrasket/emacs-liquid-glass https://github.com/larrasket/emacs-liquid-glass.git brew emacs-liquid-glass install #+end_src
跳过将重新构建的应用包复制到 =/Applications=:
#+begin_src sh brew emacs-liquid-glass install –no-copy-app #+end_src
直接使用 clone 方式也可以:
#+begin_src sh git clone https://github.com/larrasket/emacs-liquid-glass cd emacs-liquid-glass ./install.sh #+end_src
如果你不想更新 =/Applications/Emacs.app= 和 =/Applications/Emacs Client.app=,请使用 =./install.sh –no-copy-app=。
- 手动构建 :PROPERTIES: :CUSTOM_ID: manual-build :END:
复制补丁和构建配置:
#+begin_src sh mkdir -p ~/.config/emacs-plus cp patches/ns-glass-effect.patch ~/.config/emacs-plus/ns-glass-effect.patch cp config/build.yml ~/.config/emacs-plus/build.yml #+end_src
从源码构建 Emacs:
#+begin_src sh brew tap d12frosted/emacs-plus HOMEBREW_NO_AUTO_UPDATE=1 brew reinstall emacs-plus@31 –build-from-source brew postinstall d12frosted/emacs-plus/emacs-plus@31 #+end_src
复制供 Spotlight 和 =/opt/homebrew/bin/emacs= 使用的应用包:
#+begin_src sh rsync -a –delete /opt/homebrew/opt/emacs-plus@31/Emacs.app/ /Applications/Emacs.app/ rsync -a –delete “/opt/homebrew/opt/emacs-plus@31/Emacs Client.app/” “/Applications/Emacs Client.app/” #+end_src
- Emacs 配置 :PROPERTIES: :CUSTOM_ID: emacs-config :END:
从你的 Emacs 配置加载 =lisp/lr-macos-glass.el=。如果这个仓库是作为 Homebrew tap 安装的,你可以用以下命令找到它的路径:
#+begin_src sh brew emacs-liquid-glass path #+end_src
示例:
#+begin_src elisp (add-to-list ’load-path “/path/to/emacs-liquid-glass/lisp”) (require ’lr-macos-glass) #+end_src
当前常规预设使用:
#+begin_src elisp (setq salih/glass-style ’macos-glass-regular salih/alpha-background 0.01 salih/ns-background-blur 0 salih/ns-alpha-glyphs-min-alpha 0.24 salih/ns-glass-material ’regular salih/ns-glass-tint-opacity 0.05 salih/ns-glass-saturation 1.9 salih/ns-glass-inactive-opacity 0.05 salih/ns-glass-corner-radius 2 salih/ns-transparent-titlebar t) #+end_src
交互式命令:
| 命令 | 效果 | |———————————+———————————————————–| | =M-x salih/set-glass-style= | 在 =macos-glass-regular= 和 =macos-glass-clear= 之间切换。 | | =M-x salih/set-glass= | 设置窗口 alpha 和 CGS 模糊。 | | =M-x salih/set-glass-glyph-alpha= | 设置高亮/选中字形的背景 alpha。 | | =M-x salih/toggle-glass= | 在玻璃窗口和不透明窗口之间切换。 |
如果你将 =salih/alpha-background= 设置为 =0=,并且仍然希望 =hl-line=、选中区域和补全候选高亮可见,请保持 =salih/ns-alpha-glyphs-min-alpha= 大于 =0=。
- 验证 :PROPERTIES: :CUSTOM_ID: verification :END:
如果你发现问题,请先检查已安装的二进制文件是否包含新的 frame 参数:
#+begin_src sh
strings /Applications/Emacs.app/Contents/MacOS/Emacs
| rg ‘ns-alpha-glyphs-alpha|ns-glass-material|ns-glass-saturation’
#+end_src
如果 =emacs= 报告无效的 =ns-glass-*= 值,你很可能运行的是比你刚刚编译的应用包更旧的版本。请完全退出 GUI Emacs,如果你使用守护进程请重启它,并确保 =/Applications/Emacs.app= 是从 =/opt/homebrew/opt/emacs-plus@31/Emacs.app= 复制的。
- 注意事项 :PROPERTIES: :CUSTOM_ID: notes :END:
这已在 macOS 上使用 Homebrew =emacs-plus@31= 测试过。不应期望它能在 GNU/Linux、Windows、终端 Emacs 或预构建的 =emacs-plus-app= cask 上工作。
相似文章
我为 Emacs 构建了一个 GPU 后端
作者描述了如何在 macOS 上使用 Metal、在 Linux 上使用 OpenGL 为 Emacs 构建基于 GPU 的显示后端,从而提升渲染性能并启用视频播放和动画光标等新效果,且无需修改核心重新显示引擎。
苹果调低液态玻璃效果,Mac 看起来好多了
苹果 macOS 27 Golden Gate 开发者测试版引入了液态玻璃透明度滑块和设计改进,外观更少光泽,边栏优化,但性能提升尚不确定。
ghostel.el - 由 libghostty 驱动的终端模拟器
ghostel.el 是一个 Emacs 包,提供由 libghostty 驱动的终端模拟器,具有 shell 集成、输入模式和内联图像支持等功能。
与Apple‘更清晰’液态玻璃设置共度的一周透明生活
Apple iOS 27公测版引入了一个滑块,用于调整液态玻璃界面的透明度,让用户可以选择更透明或更不透明。作者测试了最透明的设置,并描述了视觉效果。
软件界的Emacs化
作者讲述了在终端中阅读 Markdown 的烦恼,并描述了如何使用 Claude 快速构建一个自定义的 macOS Markdown 查看器(MDV.app),展示了 AI 如何让人能够迅速创建个人软件工具。