33.8.5 底层剪切环接口

下列函数与变量提供对剪切环的底层访问能力,同时仍适用于 Lisp 程序, 因为它们会自动处理与窗口系统选区的交互(see 窗口系统选择)。

Function: current-kill n &optional do-not-move

函数 current-kill 将标记剪切环首部的粘贴指针移动 n 个位置 (从新剪切内容向旧内容移动),并返回环中对应位置的文本。

若可选的第二个参数 do-not-move 非空,则 current-kill 不会修改粘贴指针,仅返回从当前粘贴指针开始计数的第 n 个剪切内容。

n 为 0,表示请求最新剪切内容,current-kill 在查询剪切环前 会先调用 interprogram-paste-function 的值(见下文说明)。 若该值为函数且调用后返回字符串或字符串列表,则 current-kill 会将这些字符串压入剪切环并返回第一个字符串。同时它会将粘贴指针指向 interprogram-paste-function 返回的第一个字符串对应的剪切环条目, 无论 do-not-move 的值为何。否则,current-kill 不会对 n=0 做特殊处理, 仅返回粘贴指针指向的条目,且不移动粘贴指针。

Function: kill-new string &optional replace

该函数将文本 string 压入剪切环,并使粘贴指针指向它。必要时会丢弃最旧的条目。 它同时会调用 interprogram-paste-function(受用户选项 save-interprogram-paste-before-kill 控制)与 interprogram-cut-function 的值(见下文)。

replace 非空,则 kill-new 会用 string 替换剪切环的第一个元素, 而非将其压入剪切环。

Function: kill-append string before-p

该函数将文本 string 追加到剪切环的第一个条目,并使粘贴指针指向合并后的条目。 通常 string 会添加在条目末尾,但若 before-p 非空,则添加在开头。 该函数以子过程形式调用 kill-new,因此会间接触发 interprogram-cut-function 以及可能的 interprogram-paste-function(见下文)。

Variable: interprogram-paste-function

该变量用于在使用窗口系统时从其他程序获取剪切文本。其值应为 nil 或无参数函数。

若值为函数,则 current-kill 会调用它以获取最新剪切内容。 若该函数返回非空值,则将其作为最新剪切内容;若返回 nil, 则使用剪切环首部内容。

为支持多选区的窗口系统,该函数也可返回字符串列表。此时第一个字符串 作为最新剪切内容,其余字符串均压入剪切环,方便 yank-pop 访问。

该函数的常规用途是将窗口系统剪贴板内容作为最新剪切内容,即使该选区 来自其他应用程序。See 窗口系统选择。但若剪贴板内容 来自当前 Emacs 会话,则该函数应返回 nil

Variable: interprogram-cut-function

该变量用于在使用窗口系统时向其他程序传递剪切文本。其值应为 nil 或接受一个必选参数的函数。

若值为函数,则 kill-newkill-append 会以剪切环新的首元素 为参数调用它。

该函数的常规用途是将新剪切的文本放入窗口系统剪贴板。See 窗口系统选择