GNU/Emacs 的 Liquid Glass 效果

Lobsters Hottest 工具

摘要

一份在 macOS 上构建 GNU Emacs 的配方和补丁集,提供受 Ghostty 启发的原生 Liquid Glass 窗口效果,增加 NSGlassEffectView 支持和用于透明与模糊的新 frame 参数。

<p><a href="https://lobste.rs/s/2avtyb/liquid_glass_effect_for_gnu_emacs">评论</a></p>
查看原文
查看缓存全文

缓存时间: 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=,因此无法应用本地补丁。

构建过程按顺序应用两个补丁:

  1. 来自 =d12frosted/emacs-plus= 的 =frame-transparency=
  2. 本仓库的 =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 后端

Hacker News Top

作者描述了如何在 macOS 上使用 Metal、在 Linux 上使用 OpenGL 为 Emacs 构建基于 GPU 的显示后端,从而提升渲染性能并启用视频播放和动画光标等新效果,且无需修改核心重新显示引擎。

软件界的Emacs化

Hacker News Top

作者讲述了在终端中阅读 Markdown 的烦恼,并描述了如何使用 Claude 快速构建一个自定义的 macOS Markdown 查看器(MDV.app),展示了 AI 如何让人能够迅速创建个人软件工具。