知识卡片
自动重绘和等输入才刷新把显示逻辑从插件作者手中收走
内容
Emacs重绘引擎有两个关键设计:一是Lisp代码不需要指定如何更新显示,只管修改缓冲区、属性、覆盖图,重绘代码自己审视变化后决定最小的界面刷新操作;二是一次命令或键盘宏执行期间的多次中间修改不会逐帧闪烁,只在等待用户下一次输入时才统一刷新成最终效果。这把如何高效更新画面的复杂度从每个扩展开发者身上剥离,交给核心引擎统一处理。
参考来源
- 位置:《架构之美》第11章《GNU Emacs:滋长的特性是其优势》11.2.2节《视图:Emacs重绘引擎》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0237.xhtml)
- 结论依据:原文明确"Lisp代码无法指定如何对显示结果进行更新……Emacs的重绘代码将审视这些修改,然后确定一组有效的界面重绘操作"以及"Emacs不是快速地……显示出缓冲区的中间状态,而是直到用户输入结束之后更新显示"。
- 原始内容:Lisp代码无法指定如何对显示结果进行更新……Emacs的重绘代码将审视这些修改,然后确定一组有效的界面重绘操作……Emacs不是快速地(看起来就像在闪烁)显示出缓冲区的中间状态,而是直到用户输入结束之后更新显示,只展示最后的效果。