糟糕的新闻,Emacs

一项对 Emacs register 功能的争议性改动——引入额外确认步骤并改变了延续数十年的键盘工作流——在老用户中引发了强烈反应。批评者认为,破坏肌肉记忆却没有一开始就提供简单方式恢复旧行为,体现了对向后兼容和 Emacs 极致可定制精神的不尊重;而另一方则反驳说,master 只是开发分支,面向新用户的 UX 改进也是正当目标。围绕这场争论,还扩展到了项目治理、何时可以打破既有接口,以及此类变化是否应始终保持可选或默认关闭等更广泛的问题。

发生了什么变化以及为何重要

  • 这次变化影响的是 Emacs 的“registers”(高级的多重剪贴板 / 位置功能),而不是普通的复制/粘贴。
  • 新行为插入了一个 minibuffer UI,显示 registers,并且需要额外按一次 RET 来确认。
  • 批评者说,这把一个快速、依赖主键区、靠肌肉记忆完成的操作,变成了带模态、速度更慢的操作,而这个操作每分钟会用很多次。
  • 还有几种类比:比如每次 Ctrl-C/粘贴后都强制弹出确认对话框,或者给音乐家的乐器增加延迟。

对用户和工作流的影响

  • 重度 register 用户表示,肌肉记忆被破坏了,宏也被破坏了,而且认知负担增加了。
  • 一些人强调,单次操作哪怕只增加很小的延迟,在每天要执行数百次的工作流里也会被严重放大。
  • 另一些人则认为 registers 很小众;许多老用户几乎不用它们,因此这场冲突被夸大了。
  • 线程里非 Emacs 用户也借用了 Vim 的类比,并同意这种变化在他们的编辑器里同样会造成破坏性影响。

可配置性与是否需要 fork

  • 一派观点:在 Emacs 里“everything is Lisp”,所以用户或包可以很容易地恢复旧行为;而强行 fork 被视为政治化或自我驱动的做法。
  • 另一派观点:对核心行为做 monkey-patch,实际上就等于在维护一个私有 fork,并把维护负担转移给用户。
  • 目前仍在推进恢复旧行为的选项/切换;一些更早的提案因为会同时移除其他新功能而被否决。

开发流程与项目治理

  • 有人担心,一个破坏长期存在行为的破坏性 UX 变更,只经过极少数开发者讨论就登陆了 master
  • 也有人认为,这正是 dev 分支应有的工作方式:先合并,再根据反馈在发布前进行打磨或回退。
  • 还有人看到的是一种“独断”式决策模式、对向后兼容缺乏尊重,以及对回退的迟缓态度。
  • 多位评论者指出,文章的叙述明显偏向一边;邮件列表线程展示了更多细节和持续迭代。

更广泛的设计哲学,以及“新用户 vs 老用户”

  • 争论在于 Emacs 是否应当把默认设置优先给新手(可发现性、安全性),还是优先给高级用户(速度、稳定性)。
  • 很多人认为,打破延续数十年的键绑定应当极其罕见,最初应作为可选项,并且始终可以通过明确的设置恢复。
  • 有些人认为这反映了更广泛的趋势:许多软件项目里的 UX “改进”都不尊重肌肉记忆。