当启用自适应填充模式(Adaptive Fill Mode)时,Emacs 会根据正在填充的每个段落中的文本自动确定填充前缀, 而非使用预设值。在填充过程中,该填充前缀会被插入到段落第二行及后续行的开头, 相关说明见 段落重排 与 自动换行。
当该变量不为 nil 时,自适应填充模式启用。其默认值为 t。
该函数实现了自适应填充模式的核心逻辑:它根据从 from 到 to (通常为段落起止位置)的文本选择填充前缀。具体通过查看段落前两行实现, 依据为下文所述的相关变量。
通常该函数会返回字符串类型的填充前缀。不过在返回前,函数会进行最终检查
(下文未特别说明),判断以该前缀开头的行是否会被误认为段落起始。
若出现该情况,函数会返回 nil 以标识异常。
具体而言,fill-context-prefix 的执行流程如下:
adaptive-fill-function 中的函数(若存在),
再使用正则表达式 adaptive-fill-regexp(见下文)。
两者中第一个非 nil 的结果即为第一行的候选值,若均为 nil 则候选值为空字符串。
adaptive-fill-first-line-regexp 说明)。
nil。
自适应填充模式使用该正则表达式匹配行中左侧边距空白(若存在)之后的文本, 匹配到的字符即为该行的填充前缀候选。
其默认值可匹配夹杂特定标点符号的空白字符。
该正则表达式仅用于单行段落,作为对唯一可用填充前缀候选的额外校验:
候选必须匹配该正则表达式,或匹配 comment-start-skip。
若不满足,fill-context-prefix 会将该候选替换为等宽空格字符串。
该变量的默认值为 "\\`[ \t]*\\'",仅匹配纯空白字符串。
该默认设置的效果是强制单行段落的填充前缀始终为纯空白。
你可将该变量设为函数,以指定更复杂的自动填充前缀选择方式。
调用该函数时光标位于行左侧边距(若存在)之后,且函数必须保持光标位置不变。
函数应返回该行的填充前缀,或返回 nil 表示未能确定前缀。