24.7.1 Font Lock 基础

字体加锁功能基于若干基础函数实现。 每个函数都会调用对应变量所指定的函数。 这种间接方式允许主模式和次要模式修改该模式缓冲区中字体渲染的行为, 甚至可以将字体加锁机制用于与字体渲染无关的功能。 (这也是下文在描述函数功能时使用“应当”的原因: 模式可以通过自定义对应变量的值来实现完全不同的逻辑。) 下文提及的变量详见 字体锁定其他变量

font-lock-fontify-buffer

该函数应当通过调用 font-lock-fontify-buffer-function 指定的函数,对当前缓冲区的可访问部分执行字体渲染。

font-lock-unfontify-buffer

用于关闭字体加锁模式时移除字体渲染效果。 调用 font-lock-unfontify-buffer-function 指定的函数。

font-lock-fontify-region beg end &optional loudly

应当对 begend 之间的区域执行字体渲染。 若 loudly 为非 nil,则渲染时应显示状态信息。 调用 font-lock-fontify-region-function 指定的函数。

font-lock-unfontify-region beg end

应当移除 begend 之间区域的字体渲染效果。 调用 font-lock-unfontify-region-function 指定的函数。

font-lock-flush &optional beg end

该函数应当将 begend 之间区域的字体渲染标记为过期。 若未指定或为 nilbegend 默认为缓冲区可访问部分的开头与结尾。 调用 font-lock-flush-function 指定的函数。

font-lock-ensure &optional beg end

该函数应当确保 begend 之间的区域已完成字体渲染。 可选参数 begend 默认为缓冲区可访问部分的开头与结尾。 调用 font-lock-ensure-function 指定的函数。

font-lock-debug-fontify

这是一个便捷命令,用于为某一模式开发字体加锁规则时使用, 不应在 Lisp 代码中调用。 它会重新计算所有相关变量,随后对整个缓冲区调用 font-lock-fontify-region

有若干变量用于控制字体加锁模式如何高亮文本。 但主模式不应直接设置这些变量。 相反,它们应当将 font-lock-defaults 设置为缓冲区局部变量。 当字体加锁模式启用时,该变量的值会被用于设置其他所有相关变量。

Variable: font-lock-defaults

该变量由各模式自行设置,用于指定该模式下文本的字体渲染方式。 设置后会自动变为缓冲区局部变量。 若其值为 nil,字体加锁模式不执行任何高亮。

若为非 nil,其值格式如下:

(keywords [keywords-only [case-fold
 [syntax-alist other-vars...]]])

第一个元素 keywords 间接指定 font-lock-keywords 的值, 用于控制基于搜索的字体渲染。 它可以是一个符号、变量或函数,其值为供 font-lock-keywords 使用的列表。 也可以是多个此类符号组成的列表,分别对应不同的字体渲染等级。 第一个符号指定‘模式默认’渲染等级, 下一个为等级 1,再下一个为等级 2,依此类推。 ‘模式默认’等级通常与等级 1 相同, 在 font-lock-maximum-decorationnil 时使用。 See 字体锁定级别

第二个元素 keywords-only 指定变量 font-lock-keywords-only 的值。 若该元素省略或为 nil,则同时执行语法字体渲染(字符串与注释)。 若为非 nil,则不执行语法字体渲染。 See 语法字体锁定

第三个元素 case-fold 指定 font-lock-keywords-case-fold-search 的值。 若为非 nil,字体加锁模式在基于搜索的渲染中忽略大小写。

第四个元素 syntax-alist 若为非 nil, 应当是形如 (char-or-string . string) 的 cons 单元格列表。 这些用于构建语法字体渲染所需的语法表, 生成的语法表保存在 font-lock-syntax-table 中。 若 syntax-alist 省略或为 nil, 语法字体渲染使用 syntax-table 函数返回的语法表。 See Syntax Table Functions

其余所有元素(若有)统称为 other-vars。 每个元素格式为 (variable . value), 意为将 variable 设为缓冲区局部变量并赋值为 value。 你可以通过这些 other-vars 设置前五个元素无法控制的、影响字体渲染的其他变量。 See 字体锁定其他变量

若你的模式通过显式添加 font-lock-face 属性实现文本渲染, 可以为 font-lock-defaults 指定 (nil t) 以关闭所有自动字体渲染。 但这并非必需;可以同时使用 font-lock-face 属性渲染部分内容, 并为文本其他部分配置自动渲染。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike