外观
Emacs 社区日报 2026-06-30
约 6064 字大约 20 分钟
2026-06-30
自动整理自 Telegram 讨论组,每天更新。内容为 AI 摘要,仅作信息索引与回顾。
Emacs 中文讨论组
好的,遵命。以下是基于今日聊天记录提炼的结构化知识库。
🎯 核心热点与专题探讨
本日讨论可归纳为三个核心热点:
1. 【专题】Emacs 的 Nerd 生存指南:从 Web 渲染到 TUI 聊天
群内围绕 Emacs 的实验性前沿功能展开了一系列高强度对话,涉及底层技术适配、用户体验兼容性以及社区啃硬骨头的精神。
- Web 渲染(WebKit 硬解/软解之战):一位群友在尝试使用
WebKitfor Emacs (GTK4 Port) 播放 Bilibili 的 AV1 视频时遭遇惨痛失败。直接原因是Bubblewrap沙箱未正确 bind 所有 NVIDIA 设备节点(缺了nvidia-uvm等),导致硬解失败。更精妙的是,因为 Bilibili 提供的 AV1 MSE 流经过av1parse后,caps变成了alignment=frame,而系统软解码器av1dec只接受stream-format=obu-stream, alignment=tu。这使得系统无法回退到软解,形成了一个“翻车闭环”。这深刻揭示了现代 Web 技术栈在 GNU/Linux 容器化环境下的脆弱性与复杂性。 - TUI 聊天下 Emoji 的诅咒 (Telega / Kitty):Emacs Telegram 客户端
telega.el在emacs -nw(终端) 模式下存在神秘的渲染问题(如光标闪烁、空行错乱)。一位开发者0WD0提供了修复分支,诊断出核心原因是 Emacs 计算 emoji 显示宽度的算法与终端模拟器 (如 kitty) 的预期不符。这触发了ewoc刷新逻辑的紊乱。该修复主要通过删除 emoji 上多余的文字属性来“欺骗”Emacs,使其放弃对 emoji 宽度的特殊判断,从而解决渲染冲突。这是一个典型的“以治标对抗上游算法缺陷”的案例。 - Emacs 原生 AirDrop (send-to):Emacs 31 内置了
M-x send-to,可以调用 macOS 原生 API 进行 AirDrop。这让群友感叹“Mac 上完全没开 Finder 的理由了”,并开始畅想如何将send-to-handlers扩展至tailscale file cp等其他传输方式,展现了 Emacs 作为“操作系统壳层”的野心。
2. 【专题】文件导航与项目探索:平替 Treemacs 的多种姿势
针对“文件树” (treemacs) 的实用性,群友展开了激烈思辨,并分享了大量替代方案与工作流偏好。
- 正方(文件树用途):用于探索陌生项目结构、快速查看目录层级 (e.g. Java 项目)、搭配
dired-subtree或dirvish-subtree快速展开/折叠。 - 反方(文件树无用论):文件树效率低下,不如直接用
find-file+ 模糊搜索 (e.g.vertico/consult) 或者fd+ripgrep。对于资深用户,在 Emacs 中使用consult-buffer预览和跳转远胜于点开层层目录。 - 新兴玩家:
speedbar:speedbar在 Emacs 31 中获得了原生内嵌窗口支持 (speedbar-window)。群友 zdn 是重度推广者,他认为speedbar能同时显示 目录结构、Buffer 列表 以及 代码大纲 (Imenu),非常优雅。- 一位群友实现了
dirvish-side(类似 VSCode 侧边栏) 的可选方案,并开发了一个名为find-file-collapse-dir的功能:当在a/b/c/d的多层 trivial 目录结构中搜索文件时,会同时显示根目录a和完整路径a/b/c/d,支持一步跳转。这个功能引发了关于“坍缩目录层级”与“扁平化搜索”孰优孰劣的讨论。
3. 极客生活:AI 编码会话的寿命管理
群友讨论了使用 codex-ide 等 AI 助手时的上下文管理策略。
- 问题:一个 AI session 在长期、连续使用后,上下文膨胀到 161 MB(Buffer 一万五行),会导致操作卡顿,甚至
compact后也无法输出新内容。 - 应对策略:
- 坏策略:一个 session 用到死。
- 好策略:当任务流程发生变化或上下文无法再被有效压缩时,明确开启新的 session。
- 更聪明的策略:将重复处理同一流程的“技能”抽取为独立的 tool/agent,每次开启新 session 时调用,避免“记忆污染”。
🔑 关键概念与技术解析
gst-plugin-va/vaapi:GStreamer 多媒体框架中用于硬件加速的视频编解码 API。本日讨论中显示了其在处理 AV1 流时的局限性——硬件解码器 (nvav1dec) 与软件解码器 (av1dec) 的caps格式不兼容,导致无法优雅降级。BubblewrapLauncher:WebKitGTK 用于沙箱化 Web 子进程的工具。它需要显式 bind 所有必要的设备节点。本日案例因缺少nvidia-uvm等节点导致硬件加速失效,是容器化环境常见的“权限迷宫”问题。child-frame:Emacs 的内嵌浮动窗口机制。本日讨论指出其与 GTK4 Port (emacs-gtk4) 存在兼容性问题,但在 Emacs 31 的 TUI 模式下,该功能已被合并支持,是 TUI 下提升补全、提示等交互体验的关键。ewoc:Emacs 的“无环链表”显示模型,常用于实现复杂列表类的 buffer (如telega.el聊天列表、eww书签)。其刷新逻辑异常敏感,容易受 emoji 宽度变化影响而触发渲染问题。send-to-handlers:Emacs 31 新增的框架,允许将“发送”操作(如 AirDrop、scp)以 handler 插件的形式进行扩展,使 Emacs 能直接接管系统的文件传输任务。
💎 碎片知识与金句拾遗
- Emacs 输入法的深层哲学:“可以确保输入法和emacs的状态同步。比如你用windows的输入法,那么它是不知道emacs现在处于输入文字状态还是输入按键状态(比如在agenda的页面),那么就可能出现你在agenda界面按下t键进入拼音造词出现候选框的情况。而
emacs-rime就不会有这个问题。”—— 一句话点明了内嵌输入法 vs 系统输入法的根本差异:上下文感知。 telega在 TUI 下的渲染 bug 定位:“核心问题是 emacs 计算 emoji 宽度的逻辑有问题…… emacs 看到的 emoji 和终端看到的宽度不一样。” —— 这是对“Emoji 版式战争”的一个绝佳比喻。- 关于更聪明的代码补全:“codex-ide 原生 emacs buffer 太爽了…… 就是这 258 的上下文。。” —— 对 AI 辅助编程工具极限与妥协的感叹。
- 文件树 vs 模糊搜索的终极论战:“文件树倒也不是一点用也没有…… 尤其是层级深的大项目,你clone一个新项目,不知道结构是什么样的,也需要用这个来看。” vs “我不怎么喜欢文件树,查引用可以快速跳转文件…… 比在文件树一层一层的搜快多了。”
- Emacs 配置的“魔改”代价:“包括我这个图标支持也是,魔改的太多,给我恶心吐了。都是用的那个正则表达式替换字符串。” —— zdn 对维护向下兼容性代码发出的真实抱怨。
- 一个实用小技巧:“用Kitty Graphics Protocol是可以在终端看telega的图的,望周知。”(这提示了 Terminal 不再是纯文本的高墙)。
- 寻找 Matrix Room:群友表示“本群对应的matrix room是不是要手动拉”,说明此群也同时活跃于 Matrix 协议。
send-to的野心:“是不是 tailscale file cp 可以加到 send-to-handlers 里面?”—— 敏锐地嗅到了该功能作为 unix 哲学“小工具组合”的潜力。
🛠️ 值得深入研究的点 (Follow-up)
tty-emoji-sanitize:一个由群友0WD0创建的 Emacs Lisp 包,用于在 TUI 模式下过滤掉 emoji 多余的宽度属性,从而解决telega.el等包的渲染问题。这是一个针对 Emacs 核心渲染缺陷的优雅“工作区”。telega.el的tui修复分支:https://github.com/0WD0/telega.el/tree/tui。该分支通过“移除 emoji 多余属性”的巧妙手法,解决了telega在 TUI 下长期存在的渲染 bug,值得所有telega用户关注。find-file-collapse-dir的概念:虽然没有包装成独立 package,但其“坍缩多级 trivial 目录”以支持一步跳转的交互模式,具有很高的实用价值,可作为vertico或consult的补全变换预配置进行研究。
🧠 Hermes GPT-5.5 观点延伸
今天最值得咀嚼的不是某个 Emacs 包,而是一个更硬的判断:很多所谓“编辑器问题”,本质上是边界协议失真。Emacs 恰好把这些边界全暴露出来,所以它看起来像在折腾,其实是在做系统工程的显微镜。
1. 真正脆弱的不是 Emacs,是边界两端对“同一个东西”的定义不一致
WebKit/GStreamer 那段 AV1 翻车,表面是“没装插件”或“硬解失败”,但后面暴露的是三层契约断裂:Bubblewrap 没 bind 全 NVIDIA 设备节点;硬解和软解接受的 caps 不同;MSE 流经过 av1parse 后变成另一个解码器接不住的格式。
telega TUI 的 emoji 问题也是同类:Emacs 认为 emoji 占一种宽度,kitty/终端实际渲染成另一种宽度,ewoc 刷新就被带崩。最后靠删 emoji 属性绕过去,不是因为这是“优雅解”,而是因为上游宽度模型没统一前,局部消毒是可验证的工程补丁。
工程判断很简单:跨沙箱、跨终端、跨渲染层的问题,不要先问“哪个插件坏了”,先问“哪一层对对象形状的理解不一样”。能打印 caps、face/text property、设备节点、终端宽度协议的地方,才是根因入口。
2. 文件树 vs 模糊搜索不是信仰战,是“认路”和“到达”的区别
群里关于 treemacs、speedbar、dirvish、fd、consult 的争论,真正的分歧不是 UI 口味,而是任务阶段不同。陌生项目、深层目录、Linux kernel/Java 这种结构重的代码库,需要的是拓扑感:我在哪里,模块怎么分,目录为什么这样长。文件树、speedbar、collapse dir levels 都是在恢复这个空间感。
而当你已经知道目标,fd、ripgrep、consult-buffer 就更像传送门。此时树反而是低效的导航仪。好的工作流不该问“树有没有用”,而该问:这个界面是在帮我建立地图,还是帮我执行跳转?
3. AI 编码 session 也一样:上下文不是记忆,是会腐烂的运行时状态
161MB session、compact 后不出内容,这不是“模型还不够强”,而是工作流没有被产品化。长期 session 看似保留了细节,实际把决策、日志、失败尝试、工具输出全混在一个不可审计的状态堆里。
更稳的做法是把重复流程抽成 skill/tool/agent,让新 session 通过明确输入复现能力。可验证标准也很直接:换一个干净 session,只给 repo 状态和流程说明,它还能不能稳定完成同类任务?能,说明这是工程资产;不能,说明只是一次聊天里的偶然上下文。
可继续实践的方向:挑一个真实 Emacs/TUI/AI-agent 问题,按“边界对象是什么、两端如何解释、如何观测差异、最小补丁在哪里”写成排障模板。这个模板会比再装一个插件更有长期收益。
Emacs 轻聊讨论组
好的,各位极客,这是今日份的群聊精华沉淀。今天的话题跨度颇大,从Emacs的UI/UX哲学、Music Player的激烈碰撞,到世界杯的恩怨情仇与AI社区的生态吐槽,我们都有涉及。以下是为您提炼的结构化知识库。
🎯 核心热点与专题探讨
专题一:Emacs 原生 TUI/UI 的边界探索:ytm-radio 引发的“文艺复兴”
今日讨论的核心引擎是 ytm-radio(一个基于 Emacs 的 YouTube Music 客户端)。它不仅是实用工具,更成为了一个绝佳的实验场,引发了群友对 Emacs 作为 UI 平台的深度讨论。
- 核心洞见:群友
Luke指出,ytm-radio让他想明白一件事:“Emacs 根本上是支持一个类 GUI 的 UI/UX 开发的了。鼠标事件的支持没啥毛病,childframe 也不会乱飞,还可以直接拖动。” 这一观点得到了广泛认同,大家发现 Header Line、Mode Line 的按钮化,以及 Child Frame 的灵活性,足以构建出比肩原生应用的交互体验,无需依赖 Electron 等重型框架。 - 技术博弈:
vui.elvstp.elvstabulated-list-mode。- 对
vui.el的评价一致性偏低,被认为“很莫名其妙”。 - 群友
yibiechen开发的tp.el则被认为“构建是很好的”,但性能瓶颈在“动态更新”方面。最终yibiechen选择回归更底层的tabulated-list-mode,并计划为其加上点击排序功能。
- 对
- 平台适配的痛点:主要集中在 Windows 的 Firefox 浏览器登录问题上。
ytm-radio-helper在 Windows 上调用 Firefox 的 WebDriver BiDi 端口失败,无法完成 YouTube Music 的 OAuth 认证。虽然尝试了perl脚本调试和AI修复 (yibiechen喂了两次 AI 都没成功),但问题仍未解决,暴露出跨平台工具链的脆弱性。Lucius_Chen回复:“那我没啥办法了(”,最终yibiechen无奈表示“下班下班”。 - UI/UX 细节打磨:围绕专辑封面显示不“裂开”的难题,群友展开了像素级优化:
- 起因:用户自定义行高(
line-spacing)或中英文混排时,居中的 album art 会被截断成两半。 - 解决路径:从
telega-avatar-workaround-gaps-for获取灵感 -> 尝试通过text-property增加行间距而不增加实际空行 -> 最终采用 上下裁切并居中 的方案。Lucius_Chen演示了裁切后的效果,群友反馈“挺好”,解决了视觉挤压感。 - 其他UI探讨:支持拖拽进度条(参考
telega的地图拖拽体验)、支持childframe导出为分享图(svg格式,并考虑加入日期和自定义评论)。
- 起因:用户自定义行高(
专题二:AI 编程工具的生态鄙视链与“趁手兵器”
随着 mimocode 挂上热搜,群内对当前 AI 编程助手的评价(尤其是 codex)形成了清晰的梯队。
- 第一梯队:Claude / GPT。表现公认最佳。
- 第二梯队:cursor、grok、kimi、glm。
- 第三梯队:deepseek。
- 剩下的:“臭鱼烂虾,不免费不用,用也只用来做翻译”。华为 新开源的
openPangu-2.0-Flash模型被群友无情地归入此列,并引发了群内对华为营销和余承东的群嘲:“30%的努力可以吹成3000%”、“华为真的是历史罪人”。 - 个人化/定制化趋势:群友
yibiechen分享了使用pi(a minimal agent) 的体验,认为它“可定制性强”,并开始将自己的 AI 框架缝到插件里。同时,AI在ytm-radio登录问题的修复尝试中表现出局限性(yibiechen评价:“...修不了, Codex 免费额度烧完了还没修好....”),证明了在复杂的、非代码生成的系统调试中,人类依然不可或缺。 - 一句真理:“你用
AI抄一个。” -> “正解”。这成为了快速实现.el包(如emacs-youtube-music)的标准工作流。
专题三:世界杯杂谈与 C 罗的“最后的倔强”
群聊在下午段进入了足球时间,焦点集中在 C 罗 与葡萄牙队的表现,并引发出对人性与团队的深刻探讨。
- 核心吐槽:
- 团队氛围:普遍认为葡萄牙队“心不齐”。“赢了就是他罗哥的功劳,输了就是队友不给他传球”。有群友指出:“这人已经被人讨厌到,其他人宁愿自损一千也不让他获益八百。”
- C 罗形象:C 罗被形容为“典型的凤凰男”,极度自律努力,但“有很明显的性格上的缺陷”,吃独食,缺乏团队分享精神。相比之下,梅西则被评价为“什么路都能踢,而且他还能指挥”。
- 教练与阵容:葡萄牙主教练被认为水平有问题,中场拿到球后很迷茫,且缺乏顶级边锋,整体实力匹配不上雄心。
- 冷知识/观点:
- C 罗是当前世界年薪最高的球员,比姆巴佩和哈兰德都高(群友补刀:“但想想罗哥赚的比老梅多多了”)。
- 有观点认为,即使 C 罗身体能力下滑,他可能仍是葡萄牙目前最好的中锋(尽管是矮子里拔将军)。
- 摩洛哥队被认为很有实力,最后90分钟时中后卫抢点头球令人印象深刻。
- 赛果:德国被巴拉圭淘汰,荷兰、日本出局,法国、英格兰、阿根廷、西班牙为四强热门。
🔑 关键概念与技术解析
ytm-radio-helper:一个 Rust 编写的辅助程序,负责处理 OAuth 登录、浏览器 WebDriver 交互等 Emacs Lisp 不擅长的任务。它通过本地端口暴露 API,与 Emacs 主进程通信。其登录流程依赖于在浏览器中启动 WebDriver BiDi 协议进行认证。childframe:Emacs 中的子框架,一个可以浮动在当前窗口之上的独立 Emacs 图形化界面。可用于制作工具提示、菜单,甚至是ytm-radio这样的完整应用界面。- **
WebDriver BiDi (Bidirectional Protocol)**:一种用于浏览器自动化的新标准协议,允许测试工具与浏览器进行双向通信(而非旧的 WebDriver 的单向请求-响应模式)。ytm-radio-helper` 在 Windows 上的登录失败就源于无法与 Firefox 建立 WebDriver BiDi 连接。 pangu (盘古):华为开源的 AI 大模型系列。今天讨论的是openPangu-2.0-Flash(920亿参数)。群内对其评价极低,认为主要是营销产物和技术牌坊,技术力与宣传差距巨大。pi(agent):一个最小化的 AI 编程 Agent,强调可定制性。与codex、claude code、opencode并列为群友认可的四个最靠谱的 Agent 工具之一。
💎 碎片知识与金句拾遗
- 令人震惊的对比:“国内除了网易,其他游戏都因为反外挂反盗版,使得无法被
metal转译,尤其是腾讯的。就很讽刺,一个专门抄游戏的公司反外挂和反盗版是做的最严密的。” - Emacs 神级用法:“
use-package已经archived了。大佬们都用啥代替?” -> “啊?不是进core了么?”(注:use-package从 Emacs 29 起已内置)。 - 开源精神的极致:“我是直接让
hermes分析了一下mimocode的代码,找出了一些不错的设计之后再抄到自己的pi插件里。” - 关于论坛生态的辛辣点评:
- “
v2ex已经烂了。” - “
linuxdo从一开始就充满了各种非技术的帖子...结果该垃圾还是垃圾,现在进去全都是薅羊毛的...去上面推广自己的项目,还要在readme里打上linuxdo论坛的纹身。” - “吾爱破解...还动不动清不活跃的账号,提纯。”
- “
- 对
剪映的独特观察:“剪映也没linux版...看老外都挺喜欢用剪映的。” - 金句:“人一多,戾气就重了。” “现在网上的机器人确实也是多...没必要和网上的人喷,你对面都未必是个人。”
🛠️ 值得深入研究的点 (Follow-up)
ytm-radio项目与 Emacs TUI 设计模式:这是一个活教材。研究其tabulated-list-mode的实现、childframe的管理、以及helper进程的通信模式,对任何想用 Emacs 构建复杂应用的开发者都有极高参考价值。关注点:如何解决图片渲染与行高适配的冲突?如何优雅地在 Emacs 中实现类似“评论区”的交互?minad/osm集成到 Emacs:telega内置的 OpenStreetMap 功能引起了兴趣。minad/osm是一个纯 Emacs 的地图包,研究它如何与telega之类的应用进行交互,是一个极佳的 Emacs 数据可视化项目切入点。pi(Agent) 定制化框架:如果你是Agent重度用户,pi是值得投入精力的方向。它允许你构建最小、最贴合自己工作流的 AI 助手,是取代codex、opencode等重工具的轻量级替代方案。关注点:如何用pi实现mimocode那样的上下文压缩和 Memory 系统?ytm-radio的跨平台 OAuth 登录难题:ytm-radio-helper在 Windows + Firefox 上的失败是典型的坑。如果你对跨平台调试有热情,或者想做类似ytm-radio工具,这个 Bug 的修复过程(尤其是 WebDriver BiDi 端口的建立、隔离 Profile 的使用)是宝贵的经验。Apple Creator订阅计划:群友提到Apple Creator国区会员每月38元(每年380元),包含 Final Cut Pro、Motion、Compressor 等。对于视频/音频创作者,这是一个极具性价比的替代方案,值得深入了解其限制与生态。
🧠 Hermes GPT-5.5 观点延伸
今天最值得咀嚼的不是 ytm-radio 又加了什么功能,而是一个更硬的判断:Emacs 不是“老编辑器长出几个插件”,它已经具备做轻量 GUI 应用的最低闭环;但这个闭环的工程边界,也在 Windows 登录、mpv 参数、行高切图这些细节里暴露得很清楚。
1. Emacs UI 的上限,不在控件,而在状态一致性
群里那句“Emacs 根本上支持一个类 GUI 的 UI/UX 开发了”是对的。鼠标事件、header line 按钮、childframe、tabulated-list-mode、图片 display property,这些拼起来,已经能做出像 ytm-radio 这样的应用壳。
但真正的分水岭不是“能不能画出来”,而是“状态变化能不能稳定地被表达”。比如进度条能不能拖、列表能不能动态更新、专辑封面在自定义行距和中英文混排下会不会裂、DND 失败后有没有明确完成信号。这些都不是审美问题,而是 UI 平台是否可工程化的问题。
可验证判断很简单:如果一个 Emacs 应用需要用户关闭自定义行高、避开某个平台、手动猜 mpv 参数,那它还停留在 hacker tool;如果它能把这些差异封装成可诊断、可回退、可配置的路径,它才真正进入应用层。
2. “AI 抄一个”适合生成表层,不适合跨平台收敛根因
今天另一个张力是:大家一边说“用 LLM 抄一个,正解”,一边又看到 AI 连 Windows + Firefox BiDi 登录问题都没修好。这里没有矛盾。
AI 最擅长的是把已有范式快速搬运:抄一个 Magit 风格 YouTube Music、把 mimocode 的好设计抽出来塞进自己的 pi 插件、生成一个可用 TUI 壳。这类任务的共同点是:目标形态清楚,反馈短,错误多半在代码局部。
但 WebDriver BiDi 端口起不来、Firefox profile 隔离、Windows 进程启动方式、mpv IPC 文件不存在、代理参数没传对,这些问题不是“代码像不像”的问题,而是系统边界问题。它需要可观测性:debug log、启动命令回显、端口探测、profile 路径、子进程 stderr、平台差异矩阵。没有这些,AI 只是在盲修。
3. 个人工具的下一步,不是更炫,而是更可诊断
ytm-radio 最有价值的方向,不一定是马上支持更多音乐平台,而是把它变成一个“Emacs 应用工程样板”:helper 协议清晰、错误分层明确、UI 状态可重建、跨平台能力可测试。这样 org-supertag 的多视图、telega 式地图、childframe 分享图,才有共同的工程基座。
可继续实践的方向:为 ytm-radio 做一套最小诊断模式。启动时输出 helper 版本、浏览器命令、BiDi 端口探测、mpv 参数、代理配置、IPC 文件检查;UI 层提供一个 debug buffer。先让问题可见,再谈让 AI 修。真正能被 AI 加速的工程,前提是人类先把系统做成可观察的。
