取回(yanking) 指从删除环插入文本,但并非直接插入。
yank 等相关命令会通过 insert-for-yank 在插入前对文本做特殊处理。
此函数行为类似 insert,但会先依据 yank-handler 文本属性、
以及变量 yank-handled-properties 和 yank-excluded-properties(见下文)处理字符串,
再将结果插入当前缓冲区。
string 在插入前会经过 yank-transform-functions 处理。
此函数类似 insert-buffer-substring,但会依据 yank-handled-properties
和 yank-excluded-properties 处理文本。
(它不处理 yank-handler 属性,该属性通常不会出现在缓冲区文本中。)
若为字符串全部或部分设置 yank-handler 文本属性,会改变 insert-for-yank 的插入方式。
若字符串不同部分拥有不同 yank-handler 值(使用 eq 比较),则各子串会被分别处理。
属性值必须是包含 1–4 个元素的列表,格式如下(首个元素之后可省略):
(function param noexclude undo)
各元素作用如下:
若 function 非 nil,则调用它而非 insert 插入字符串,参数为待插入字符串。
若 param 存在且非 nil,它会替代 string(或当前处理子串)
传递给 function(或 insert)。
例如,若 function 为 yank-rectangle,param 应为矩形文本字符串列表。
若 noexclude 存在且非 nil,则禁用 yank-handled-properties
和 yank-excluded-properties 对插入字符串的常规处理。
若 undo 存在且非 nil,它是一个函数,会被 yank-pop 调用以撤销当前对象的插入。
调用时传入两个参数:当前区域的起点与终点。
function 可设置 yank-undo-function 覆盖此值。
此变量指定取回文本时对特殊文本属性的处理规则。
处理时机在文本插入后(普通插入或通过 yank-handler)、yank-excluded-properties 生效前。
值应为形如 (prop . fun) 的关联表。
各项按顺序处理。程序扫描插入文本中具有 eq 于 prop 的属性片段,
对每一片段调用 fun,传入三个参数:属性值、文本起点与终点。
此变量的值为需要从插入文本中移除的属性列表。
默认包含可能导致不良效果的属性,如鼠标响应、按键绑定等。
其执行顺序在 yank-handled-properties 之后。
此变量为函数列表。每个函数依次以待取回字符串为参数调用,并返回(可能经过转换的)字符串。
该变量可全局设置,也可用于实现 yank 的变体命令。
例如,实现一个清理空白后再插入的取回命令:
(defun yank-with-clean-whitespace ()
(interactive)
(let ((yank-transform-functions
'(string-clean-whitespace)))
(call-interactively #'yank)))