外观
Emacs 社区日报 2026-08-08
约 6074 字大约 20 分钟
2026-08-08
自动整理自 Telegram 讨论组,每天更新。内容为 AI 摘要,仅作信息索引与回顾。
Emacs 中文讨论组
🎯 核心热点与专题探讨
【专题】Emacs 中的“好排版”与行尾对齐:从 visual-line 到 emacs-kp
今天群内最热烈的讨论围绕如何在 Emacs 里获得美观的文本排版,尤其是中英文混排的行尾对齐问题。几位核心参与者反复试验并对比了不同方案,把这条脉络梳理得相当清晰:
- 问题起点:
visual-line-mode在处理 Markdown 列表符号或中文时行为古怪(如列表符号被单独放到一行),有成员直接表示“感觉很奇怪”,关掉后恢复正常。 - 原生变量介入:有人提到 Emacs 30 开始可能在显示引擎(xdisp)层面有对 word-wrap 的改进,并推荐开启
word-wrap-by-category来改善中/日/韩(CJK)字符的换行位置。 - 排版算法派登场:真正的转折出现在一位成员详细说明了 emacs-kp 的实现思路。它基于经典的断行算法(隐约提到高德纳老爷子,即 Knuth-Plass 算法),通过动态规划在 buffer 内实现实时编辑时的对齐排版,支持所有拉丁语言与 CJK 混合排版。该方案的核心逻辑是:把每个字符、单位等都只看作一个具有宽度的“盒子”,排版就是计算这些盒子的最优断行,而规则特例(如标点悬挂)作为约束加入动态规划即可。
- 性能与实现:有人担心在 Emacs 中承载复杂排版算法会拖慢渲染,作者明确回应:“排版算法不复杂,核心就是动态规划以及若干规则特例;文本属性的性能可以的”,并强调 Emacs buffer 本质是字符串和文本属性,排版属于计算而非图形渲染,性能瓶颈不在这里。
- “AI 排版”之辩:一个有趣的插曲是有人提出“AI 排版”的想法,立刻遭到反驳——“算法可以做到精确化的东西,为什么还需要 AI?”。讨论随后引出 microtypography(微排版) 概念,即通过微调字符间距来改善断行,降格 full-line 的出现。有人觉得收益有限,也有人承认某些场景(如标点出现在行首/行尾)的体感差异很明显。
- 视觉换行的玩法:还有成员分享了利用换行符高度+自动视觉换行来模拟段落间距的效果,这是一种很巧妙的“用文本属性欺骗眼睛”的 Hack。
博客构建之痛与 Org 发布工作流
晚间话题转向用 Emacs/Org 写博客的实践,暴露出碎片化工具链带来的摩擦:
- 格式困境:有人想把 Org 导出为 EDN 作为中间表示(IR)以获得最大自由度;更多人坚持用
org-publish直接生成 HTML。discussion 中提到 GitHub / Codeberg 对 Org 源码的渲染“巨烂”,这或许是很多人不得不用 Markdown 的隐痛。 - 静态站框架的怨念:Hugo 被吐槽“老是引入破坏性更新”,Hexo 虽然生态活跃但自带动态特效,有人讽刺“明明没什么人看”。Hexo 的作者来自中文区,因此 CJK 支持一直优于 Jekyll 和早期的 Hugo,这解释了国内社区的惯性。
- Emacs 侧方案:
ox-hugo和easy-hugo被反复推荐,可以做到“在 Emacs 里写完直接发布”。甚至有人已经能让 agent 写渲染代码,走一遍“AI 生成 + 人 review”的流程。一位成员展示了自己的定制博客:粘贴 Org 源文件即可,页面还能显示diff from previous的补丁,实现“更新不需要写 update,直接改就行”,这种直接、可溯源的风格很有极客味。 - 终极一问:“有没有人需要 Emacs 里面的 Word 插件?” 这引发了关于 Emacs 是否应该模拟 Word 体验的短暂讨论,结论是 Word 的复杂格式调整经常“搞不懂为什么不奏效”,而在 Emacs 里通过文本属性微调控排版可能更透明可控。
🔑 关键概念与技术解析
- visual-line-mode:Emacs 内置的视觉换行模式,根据窗口宽度折行但不插入换行符。对某些特殊上下文(如 Markdown 符号)的处理可能不符合预期。
- word-wrap-by-category:Emacs 变量,允许根据字符类别(如 CJK、拉丁)来更智能地决定换行位置,适合多语言混排。
- emacs-kp (Knuth-Plass 排版算法):指在 Emacs 里实现类似 TeX 所用断行算法的项目,通过动态规划计算最优行断点,支持实时对齐排版。
- microtypography(微排版):一种通过极其细微地拉伸或收缩字符来改善断行、减少孤行多余空白的排版技术,常见于 pdfTeX。在屏幕阅读中观感收益存争议。
- org-publish / ox-hugo / easy-hugo:Org 模式导出为静态站的一套工具链。org-publish 直接生成 HTML 站点;ox-hugo 将 Org 转为 Hugo 内容;easy-hugo 提供可视化界面管理 Hugo。
- 换行符高度(line-height 视觉技巧):在 Emacs 中通过给换行符设置不同于正文的行高文本属性,可制造出段落间距的假象。
💎 碎片知识与金句拾遗
- “visual-line 我记得不大行,30之后有个 xdisp 层面的实现?” —— 透露出对 Emacs 显示引擎基层改进的期待。
- “emacs buffer 里面都是字符串,它不是图形那种渲染……排版算法和 emacs 的渲染关系不大” —— 一针见血地指出文本编辑器的本质,消除性能疑虑。
- “什么阿拉伯文,right to left 让他们本国人自己解决吧” —— 务实且略带自嘲的国际化作法。
- “我之前简单试过设置换行符高度,然后使用自动视觉换行,会有段落间距的效果,挺有意思的” —— 这是一个零依赖的“人造段落间距” Hack,优雅。
- “AI 要是真能做到那确实比用确定性算法排版要好了😈” / “AI排版这个需求是怎么产生的” —— 反映了硬核群对确定性美的执念和对时髦术语的警惕。
- “hexo 最早的作者是中文区的,cjk 支持好很多,应该就这么惯性下来了” —— 解释了一个较长存的历史遗留现象。
- “hexo 之类的动态网页,明明没什么人看……” —— 吐槽精准,直指个人博主过度设计的通病。
- “我搞了个独立的包,审美很棒!” —— 极简赞美,透着对自己作品的自豪。
- “更新博客都不需要写 update 能直接改了” —— 一种“源码即站点,修改即发布”的原始极客范儿。
- “DS 给我写的音乐播放器,给我气笑了” —— 生动的 AI 辅助开发翻车现场,情绪值拉满。
🛠️ 值得深入研究的点 (Follow-up)
- emacs-kp 实时排版:这个项目似乎已经实现了 production-ready 的中英混合对齐。值得把玩它的动态规划参数和文本属性使用方式,甚至可以尝试适配到其他 text-oriented 编辑器。
- microtypography 在等宽/变宽环境下的实际收益:虽然群内对其价值有分歧,但可针对 Emacs 变宽字体模式专门做一次视觉对比实验,尤其关注中文标点悬挂后的行尾对齐效果。
- 基于 Org 源文件的 diff 博客:那位成员展示的“patch 历史”方案非常棒。可以设计一套轻量工作流:Org 源文件存 Git → 静态生成时自动生成补丁 HTML → 融入文章页面,实现天然版本追溯。
- docx-view 的反向思路:https://github.com/nick-maderight/docx-view 在 Emacs 里浏览 Word 文档。结合群内“Emacs 里的 Word 体验”需求,这个工具可以考察其批注和渲染能力,看能否替代部分 Word 只读需求。
- elcity:文中提到的 https://github.com/vkazanov/elcity 带有神秘气息,值得探索它到底是怎样的一个“城市模拟”或游戏式 Emacs 项目。
🧠 Hermes GPT-5.5 观点延伸
今天最有价值的不是“Emacs 能不能做得更像 Word”,而是一个更硬的判断:在文本系统里,很多所谓体验问题,本质不是 AI 问题,也不是 UI 特效问题,而是表示、约束和可验证算法的问题。
1. 好排版不是“更聪明”,而是把问题降到可计算
群里关于 emacs-kp 的争论很典型:有人担心 Knuth-Plass、标点悬挂、CJK 混排会不会太复杂;回应则很清楚——buffer 里是字符串和文本属性,排版首先是宽度、断点、惩罚函数和约束的计算。
这句话背后有一个工程判断:如果一个问题可以被明确建模,就不要急着把它交给 AI。AI 可以帮你写代码、生成规则、做视觉对比,但不应该替代确定性核心。排版尤其如此:它的失败是可复现的,输入、宽度、字体、断点都能固定;那就应该压测、回归、比较,而不是“看起来差不多”。
2. “AI 排版”的诱惑,暴露的是工程边界感不足
“算法可以做到精确化的东西,为什么还需要 AI?”这句很短,但很关键。现在很多软件工程里的 AI 需求,其实不是因为问题需要概率模型,而是因为人懒得定义状态、规则和验收标准。
AI 适合处理模糊目标:审美偏好、样式草案、参数搜索、迁移旧代码、生成测试样例。但一旦进入实时编辑器显示层,核心链路必须可解释、可缓存、可局部更新、可回滚。否则用户看到的就不是“智能排版”,而是偶发抖动、不可复现和调不动的黑箱 Word 体验。
3. Org 博客讨论的本质,是“源码即系统边界”
后半段 Org 发布、EDN IR、org-publish、diff from previous,其实和排版话题是一条线:个人知识系统要长期可维护,就不能只追求最终页面漂亮。源文件、IR、渲染层、web shell、版本 diff,边界越清楚,系统越能演化。
那个“更新博客不需要写 update,直接改,页面显示 patch”的设计很锋利:它把写作从一次性发布,变成可追踪的知识演化。这比换一个 Hugo 主题、加几个动态特效更接近个人博客的核心价值。
可继续实践的方向
把 emacs-kp 和 Org 博客放在一起看,最值得做的是一个小型可验证实验:选几篇中英混排 Org 文档,固定窗口宽度和字体,对比 visual-line、word-wrap-by-category、emacs-kp、导出 HTML 的断行效果;同时记录每次修改生成的 diff 页面。目标不是证明 Emacs 能替代 Word,而是验证一个更重要的命题:文本系统只要表示层足够透明,很多“现代体验”可以用确定性、小而硬的工程手段做出来。
Emacs 轻聊讨论组
🎯 核心热点与专题探讨
专题一:Emacs 界面渲染与图形化能力的极限探索
本日最硬核的讨论集中在如何让 Emacs 的界面达到现代 TUI(终端用户界面)应用(如 k9s, lazygit, btop)的水平。群友 @Lucius_Chen 在做一个基于盒模型(ebox)的 Emacs 原生 UI 框架原型,并成功复刻了 btop 的动态系统监控界面。
核心痛点:
- 重绘性能瓶颈: Emacs 传统倾向于全量或大范围重绘,导致滚动和动态更新时产生延迟和闪烁,无法媲美 Go/Rust 等编译型语言绘制的 TUI 应用。
- 布局复杂性: 实现类似
lazygit的多面板堆叠、固定表头(Header)等复杂 GUI 布局在 Emacs 中极其困难。
解决方案与观点交锋:
- 增量与局部重绘策略: @geekinney 分享了其
ebox中的关键思路:将文本属性(text-property)用于布局增量重排时影响范围的精细化判断,而非仅仅搜索定位。利用局部替换文本实现了毫秒级局部刷新。性能测试显示,长达8小时的任务仅消耗3%资源。 - 多 Buffer 方案的争议: GPT 模型建议用多个 Buffer 形成多窗口布局以实现固定表头和独立滚动。但 @geekinney 认为这会带来“割裂感”和复杂的窗口管理问题,实际效果不佳。最终采纳了更统一但实现复杂的单 Buffer 方案。
- 架构优化与责任分离: @geekinney 正在重构
ebox,将增量更新逻辑抽取到tp中,使库的权责更清晰:ebox只负责盒模型布局,tp直接操作 Buffer。这次重构引发了性能退化,但借助 “Luna Max” 模型进行对比分析和修复,已基本解决。 - 多语言混合开发: 为突破 Emacs Lisp 的性能极限,@geekinney 采用了 C 与 Rust 的混合架构:用 C 编写与 Emacs 交互的薄接口层(Elisp 可调用),核心逻辑(如影响范围判断)由 Rust 动态模块完成,以达到“丝滑”效果。这一模式理论上可拓展至任何能接入 C 代码的语言。
专题二:AI 编程工具的“薅羊毛”与灵活编排
群友热衷于寻找高性价比的 AI 编程工具,并探索如何将不同模型和能力进行编排,以最大化开发效率。
热点工具与事件:
- OpenCode Go: 成为当日热门,新注册用户可获得免费额度(包括每日10美金的 API 额度传闻)。群友通过邀请机制实现“自举”,反复注册以获取大量 Luna、DeepSeek 等模型的免费使用配额。
- OpenAI Astra 暂停研发: 引发热议。OpenAI 因下一代模型 Astra 具备“关键级网络攻击能力”而暂停其内部开发。群友普遍认为这既是真实的安全风险,也是一种体现模型能力的“高级营销”。“AI 非常适合于‘有限穷举’”,如暴力扫描端口、发现漏洞,能极大提高网络攻击效率。
- AI 工具编排新范式:
- Codex + Pi 组合: 一位群友正在开发一个中间件,允许在 Codex CLI 中直接指令:“让 subagent 启动 Pi 来干嘛干嘛”。Codex 随即通过 Pi 的 CLI 注入 prompt 来委派任务,实现了工具的“自举”式开发。
- 跨平台模型编排(Agent 中间件): 群友的最终目标是构建一个模型解耦的中间件,能根据任务难度和免费额度情况,灵活调度不同平台的模型(如用 Sol 审核,Luna 执行;或 Grok 有活动时切入 Grok)。这代表了 Agent 工具下一阶段的重要方向:编排能力不应绑定于某个特定工具,而应是一个可插拔的中间件。
🔑 关键概念与技术解析
- local-mcp: 一个让 ChatGPT 等客户端能够在本地执行代码、操作文件的协议/工具。群友用它结合 GPT Chat 写代码。
- emacs-kp / s-pixel:
kp是 Emacs 中用于排版对齐的包,其核心能力之一是实现像素级精度。s-pixel是从中抽离出的、独立的像素操作工具库,提供了像素裁切等 API,用于盒子堆叠等高级布局。 - ebox: 群友自研的 Emacs 盒模型布局框架,目标是让 Emacs 可以像 Web 前端一样进行复杂布局。
- tp (Text-Property): 在
ebox重构中被分离出来的模块,专门负责直接操作 Emacs Buffer 的文本属性,以实现高效的增量更新。 - Rust 动态模块 (Emacs Module): 一种提升 Emacs 性能的技术。用 C 编写符合 Emacs 模块规范的接口,底层用 Rust 实现高性能计算(如布局算法),由 Emacs 直接加载调用,比纯 Elisp 快得多。
- go to chg: 一个 Emacs 插件,允许用户快速跳转到上一次/下一次修改的位置,类似 Vim 的
g;,g,。 - Luna / Luna Max / Sol Max / Grok: 各种前沿 AI 模型代号。Luna (Max) 是对标 Sonnet 3.5 Max 的编程强模型。
- Breathedge(呼吸边缘): Steam 上的一款太空生存游戏,有免费领取活动。
- zoxide / z.lua / eshell-z: 智能目录跳转工具。
zoxide通过学习用户的目录访问频率,让用户用z 文件夹名即可快速跳转,被誉为“简单而深刻,伟大无需多言”的提效利器。 - Emacspeak: Emacs 的语音界面,最初为视障人士设计,功能极其完备,支持直接朗读 ePub,可在无屏幕环境下操作 Emacs。引申出用其构建语音助理的可能性。
- kokoro: 一款相对轻量级的 TTS 模型,采用前后端分离架构(文本转 IPA,再由模型生成声音),被群友提及用于开发小型 TTS 项目。
💎 碎片知识与金句拾遗
- 关于抽象的成本: “先面条代码搞出来再说,搞完再抽象也来得及”与“我老是想直接 C 就行了”——技术选型和架构设计的矛盾无处不在。
- 关于 AI 的危险性: “编程能力和思维能力挂钩,越聪明实际上是越危险的。‘骗’就是一种高级智能的表现。”
- 关于 AI 监管的本质: “我觉得监管的意义不是及时制止,而是确保发生伤害之后的追偿权。”
- 关于效率工具的初心: 评价目录跳转工具的 zoxide 时一句“节省大量重复的精力,简单而深刻,伟大无需多言”,道出了好工具的真谛。
- 关于 Emacs 开发的困境与抗争:
- “lazygit 本来就抄 emacs 的吧,不要再反过来抄了。”—— 一句自嘲揭示了 Emacs 的强大与困境,它的理念启发了世界,但自身却可能在某些方面落后于模仿者。
- “emacs 缺一个面向图形的进程。可能需要一个 C 模块。”—— 正在尝试用 C/Rust 模块解决根本问题的努力。
- 关于选型与配置的修罗场:
- 终端纠结:从 Warp 回到 Kitty 只因“不够精简”。tmux 与终端功能重叠造成“两套同样的东西”的配置洁癖。
- VPN 的无奈:“上网不得劲,emacs 都不香了。”
- Windows 用户的痛点:Emacs 在处理中文目录、调用
ls命令时会有兼容性问题,需要切换到ls-lisp。
- 对 AI 工具的有效使用:
- 群友让
sol负责审核代码,而luna max负责执行,构建了高效的 AI 流水线。 - “我老想把 codex 这种 agent 工具搬进 emacs buffer。”—— 对一体化开发体验的极致追求。
- 群友让
🛠️ 值得深入研究的点 (Follow-up)
- 项目:s-pixel (
https://github.com/Kinneyzhang/s-pixel/):从 Emacs 排版对齐工具中抽离出的像素操作库,能独立完成像素裁切等底层图形处理,是构建更高级 Emacs GUI 的基石。 - 项目:AgentWorkforce/relay (
https://github.com/AgentWorkforce/relay):一个偏向 Claude 的 Agent 编排工具。群友正在进行类似但更解耦的中间件开发,旨在让 Codex 和 Pi 都可被替换。 - 项目:lazycodex.ai (
https://lazycodex.ai/) & oh-my-opencode 适配插件:为 Codex CLI 开发的第三方插件/配置,提供了更细粒度的模型路由设置,方便灵活切换。 - 项目:herdr (
https://github.com/herdrdev):被群友多次推荐的 Agent 编排工具,特色是允许多个 Agent 相互交流,协同完成复杂任务。 - 方向:Emacs Native GUI 框架:群友正尝试以动态热数据复刻
btop等 TUI 应用,这是一项将 Emacs 从文本编辑器推向通用 TUI 容器的前沿努力。若其盒模型(ebox)+ 高效重绘架构成熟,将极大拓展 Emacs 的能力边界。 - 思路:Emacs 内的语音助理:利用
emacspeak的完备的无屏幕交互能力和whisper.cpp的本地 STT 能力,探索在 Emacs 内部署轻量级、隐私友好的语音编程助理的可能性。
🧠 Hermes GPT-5.5 观点延伸
今天最值得咀嚼的不是“Emacs 能不能复刻 btop/lazygit”,而是一个更硬的判断:Emacs 的下一段生命力,不在于继续把一切塞进 Elisp,而在于把 Buffer 当成可编程交互面板,把高频计算、刷新、Agent 编排这些脏活从编辑器本体里拆出去。
1. “单 Buffer + 局部重绘”比多 Buffer 更像 Emacs 的正路
群里对固定 header、滚动列表、多面板布局的讨论,表面是 UI 实现细节,本质是体验一致性问题。多 Buffer/多窗口方案看似工程上省事,但会把一个连续界面切成几个需要额外管理的 Emacs 对象:光标、isearch、滚动、焦点、窗口状态全都变复杂。这就是“能做”但“不像一个界面”。
单 Buffer 方案更难,因为它要求自己管理布局、脏区、影响范围和局部替换。但这条路一旦走通,收益也更大:Emacs 仍然保留文本即界面的统一心智,同时获得接近 TUI 应用的动态刷新能力。这里的工程判断很明确:如果目标是做 demo,多 Buffer 可以;如果目标是长期框架,必须压住抽象边界,让刷新模型可预测。
2. text-property 不只是装饰,它可以成为布局引擎的索引层
当天一个关键点是:text-property 不再只是用来搜索定位,而是用于判断增量重排的影响范围。这是很重要的转向。很多 Emacs UI 项目卡住,不是因为“画不出来”,而是因为不知道每次变化到底应该影响哪里,于是退化成大范围重绘。
如果 text-property 能稳定承载结构信息,那么 Buffer 就不只是字符串容器,而是带元数据的场景图。上层 ebox 负责盒模型,下层 tp 负责 Buffer 操作,再把影响范围判断交给 Rust 动态模块,这个分层是合理的:Elisp 负责可塑性,Rust/C 负责热路径。性能退化也不是坏信号,它说明抽象开始收费了;真正要验证的是重构后能不能把这笔账用更清晰的边界和可测的局部刷新赚回来。
3. Agent 编排的方向也类似:不要绑定某个工具,要抽出控制平面
晚上关于 Codex 调 Pi、Luna 执行、Sol 审核、不同平台额度切换的讨论,和 Emacs UI 重构其实是同一个主题:把能力和控制面解耦。一个 Agent 工具不应该因为自己接了某个模型、某个 CLI、某个平台,就把编排逻辑锁死在里面。
更可靠的形态是中间件:任务阶段、模型能力、成本额度、审查角色、失败重试都变成可配置策略。今天的“薅羊毛”看起来很草莽,但背后的工程方向是正经的:当模型越来越多,单一 Agent 产品会退化成入口;真正有价值的是路由、审计、回放和角色分工。
可继续实践的方向
可以把这两条线合在一起做一个验证:在 Emacs Buffer 里实现一个 Agent 工作台,但不要只是把 CLI 塞进终端。用单 Buffer 承载任务、日志、diff、审查结果;用局部重绘保证交互流畅;用外部中间件调度不同 Agent/模型。可验证指标也很清楚:刷新是否毫秒级、长任务是否低资源占用、Agent 输出是否可追踪、模型切换是否不影响 UI 层。做到这些,Emacs 就不只是“复刻 TUI”,而是在变成个人工程控制台。
