本节描述允许 Lisp 程序将缓冲区中文本的任意片段转换为字符串的函数。
此函数返回一个字符串,其中包含当前缓冲区中由位置 start 与 end 所定义区域的文本副本。
若参数并非缓冲区可访问部分内的位置,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))
此函数与 buffer-substring 类似,区别在于它不复制文本属性,仅复制字符本身。See 文本属性。
此函数以字符串形式返回当前缓冲区全部可访问部分的内容。若被复制的文本带有文本属性,这些属性会随同所属字符一同复制到字符串中。
若你需要确保结果字符串在复制到其他位置时,不会因双向文本重排而改变视觉外观,可使用 buffer-substring-with-bidi-context 函数
(see buffer-substring-with-bidi-context)。
此函数使用变量 filter-buffer-substring-function 指定的函数过滤 start 与 end 之间的缓冲区文本,并返回结果。
默认过滤函数会引用已废弃的包装钩子 filter-buffer-substring-functions(有关此废弃机制的详细信息,参见宏 with-wrapper-hook 的文档字符串)。
若其值为 nil,则直接返回缓冲区中未修改的文本,即 buffer-substring 会返回的内容。
若 delete 非 nil,函数会在复制文本后删除 start 与 end 之间的文本,行为类似 delete-and-extract-region。
Lisp 代码在将文本复制到用户可访问的数据结构(如删除环、X 剪贴板与寄存器)时,应使用此函数而非 buffer-substring、buffer-substring-no-properties 或 delete-and-extract-region。
主模式与次要模式可修改 filter-buffer-substring-function,以在文本从缓冲区复制时对其进行修改。
此变量的值是一个函数,filter-buffer-substring 会调用它完成实际工作。
该函数接收三个参数,与 filter-buffer-substring 的参数一致,并应按照该函数文档说明处理这些参数。
它应返回过滤后的文本(并可选择删除源文本)。
下面两个变量已被 filter-buffer-substring-function 废弃,但为保持向后兼容仍受支持。
此已废弃变量是一个包装钩子,其成员应为接收四个参数的函数:fun、start、end 与 delete。
fun 是接收三个参数(start、end 与 delete)并返回字符串的函数。
两种情况下的 start、end 与 delete 参数均与 filter-buffer-substring 的参数相同。
第一个钩子函数传入的 fun 等价于 filter-buffer-substring 的默认操作,即返回 start 与 end 之间的缓冲区子串,并可选择从缓冲区删除原始文本。
多数情况下,钩子函数会调用一次 fun,再对结果自行处理。
下一个钩子函数接收等价于此操作的 fun,依此类推。
最终返回值为所有钩子函数依次处理后的结果。
此函数以字符串形式返回光标位置处或附近的符号(或单词),返回值不包含文本属性。
若可选参数 really-word 非 nil,则查找单词;否则查找符号(包含单词字符与符号组成字符)。
若可选参数 strict 非 nil,则光标必须位于符号或单词内部或紧邻位置—若该处无符号或单词,函数返回 nil。
否则,同一行中附近的符号或单词也可被接受。
以字符串形式返回光标位置周围或紧邻的 thing。
参数 thing 是一个符号,用于指定一类语法实体。
可选值包括 symbol、list、sexp、defun、filename、existing-filename、url、word、sentence、whitespace、line、page、string 等。
当可选参数 no-properties 非 nil 时,此函数会去除返回值中的文本属性。
---------- 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
此变量允许用户与模式调整 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。