33.2 查看缓冲区内容

本节描述允许 Lisp 程序将缓冲区中文本的任意片段转换为字符串的函数。

Function: buffer-substring start end

此函数返回一个字符串,其中包含当前缓冲区中由位置 startend 所定义区域的文本副本。 若参数并非缓冲区可访问部分内的位置,buffer-substring 会触发 args-out-of-range 错误。

以下示例假设未启用字体锁定模式:

---------- Buffer: foo ----------
This is the contents of buffer foo

---------- Buffer: foo ----------

(buffer-substring 1 10)
     ⇒ "This is t"
(buffer-substring (point-max) 10)
     ⇒ "he contents of buffer foo\n"

若被复制的文本带有文本属性,这些属性会随同所属字符一同复制到字符串中。See 文本属性。 但缓冲区中的覆盖层(see 覆盖层)及其属性会被忽略,不会复制。

例如,若启用了字体锁定模式,你可能会得到如下结果:

(buffer-substring 1 10)
     ⇒ #("This is t" 0 1 (fontified t) 1 9 (fontified t))
Function: buffer-substring-no-properties start end

此函数与 buffer-substring 类似,区别在于它不复制文本属性,仅复制字符本身。See 文本属性

Function: buffer-string

此函数以字符串形式返回当前缓冲区全部可访问部分的内容。若被复制的文本带有文本属性,这些属性会随同所属字符一同复制到字符串中。

若你需要确保结果字符串在复制到其他位置时,不会因双向文本重排而改变视觉外观,可使用 buffer-substring-with-bidi-context 函数 (see buffer-substring-with-bidi-context)。

Function: filter-buffer-substring start end &optional delete

此函数使用变量 filter-buffer-substring-function 指定的函数过滤 startend 之间的缓冲区文本,并返回结果。

默认过滤函数会引用已废弃的包装钩子 filter-buffer-substring-functions(有关此废弃机制的详细信息,参见宏 with-wrapper-hook 的文档字符串)。 若其值为 nil,则直接返回缓冲区中未修改的文本,即 buffer-substring 会返回的内容。

deletenil,函数会在复制文本后删除 startend 之间的文本,行为类似 delete-and-extract-region

Lisp 代码在将文本复制到用户可访问的数据结构(如删除环、X 剪贴板与寄存器)时,应使用此函数而非 buffer-substringbuffer-substring-no-propertiesdelete-and-extract-region。 主模式与次要模式可修改 filter-buffer-substring-function,以在文本从缓冲区复制时对其进行修改。

Variable: filter-buffer-substring-function

此变量的值是一个函数,filter-buffer-substring 会调用它完成实际工作。 该函数接收三个参数,与 filter-buffer-substring 的参数一致,并应按照该函数文档说明处理这些参数。 它应返回过滤后的文本(并可选择删除源文本)。

下面两个变量已被 filter-buffer-substring-function 废弃,但为保持向后兼容仍受支持。

Variable: filter-buffer-substring-functions

此已废弃变量是一个包装钩子,其成员应为接收四个参数的函数:funstartenddeletefun 是接收三个参数(startenddelete)并返回字符串的函数。 两种情况下的 startenddelete 参数均与 filter-buffer-substring 的参数相同。

第一个钩子函数传入的 fun 等价于 filter-buffer-substring 的默认操作,即返回 startend 之间的缓冲区子串,并可选择从缓冲区删除原始文本。 多数情况下,钩子函数会调用一次 fun,再对结果自行处理。 下一个钩子函数接收等价于此操作的 fun,依此类推。 最终返回值为所有钩子函数依次处理后的结果。

Function: current-word &optional strict really-word

此函数以字符串形式返回光标位置处或附近的符号(或单词),返回值不包含文本属性。

若可选参数 really-wordnil,则查找单词;否则查找符号(包含单词字符与符号组成字符)。

若可选参数 strictnil,则光标必须位于符号或单词内部或紧邻位置—若该处无符号或单词,函数返回 nil。 否则,同一行中附近的符号或单词也可被接受。

Function: thing-at-point thing &optional no-properties

以字符串形式返回光标位置周围或紧邻的 thing

参数 thing 是一个符号,用于指定一类语法实体。 可选值包括 symbollistsexpdefunfilenameexisting-filenameurlwordsentencewhitespacelinepagestring 等。

当可选参数 no-propertiesnil 时,此函数会去除返回值中的文本属性。

---------- Buffer: foo ----------
Gentlemen may cry ``Pea∗ce! Peace!,''
but there is no peace.
---------- Buffer: foo ----------

(thing-at-point 'word)
     ⇒ "Peace"
(thing-at-point 'line)
     ⇒ "Gentlemen may cry ``Peace! Peace!,''\n"
(thing-at-point 'whitespace)
     ⇒ nil
Variable: thing-at-point-provider-alist

此变量允许用户与模式调整 thing-at-point 的工作方式。 它是一个由 thing 与函数(无参数调用并返回对应对象)组成的关联表。 针对 thing 的条目会依次求值,直到返回非 nil 结果。

例如,某个主模式可以这样设置:

(setq-local thing-at-point-provider-alist
            (append thing-at-point-provider-alist
                    '((url . my-mode--url-at-point))))

若无任何提供程序返回非 nil 值,则按标准方式计算 thing