在 X 等窗口系统中,可通过 选择区(selections) 在不同应用间传输数据。每个窗口系统定义任意数量的 选择区类型(selection types),各自存储数据;常用的只有三种:剪贴板(clipboard)、主选择区(primary selection) 和 次选择区(secondary selection)。See Cut and Paste in The GNU Emacs Manual, 介绍了使用这些选择区的 Emacs 命令。本节说明读写窗口系统选择区的底层函数;特定窗口系统下的选择区类型与数据格式见 See 选择区访问.
该函数设置窗口系统选择区。接收两个参数:选择区类型 type,以及要赋予的值 data。
type 应为符号,通常是 PRIMARY、SECONDARY 或 CLIPBOARD。按照 X 窗口系统惯例,这些符号一般使用大写名称。若 type 为 nil,代表 PRIMARY。
若 data 为 nil,表示清空该选择区。否则 data 可以是字符串、符号、整数、覆盖区,或指向同一缓冲区的两个标记组成的 cons。覆盖区或标记对代表覆盖区内或标记之间的文本。data 也可以是由合法非向量选择区值组成的向量。
若 data 是字符串,其文本属性可指定各数据类型对应的值。例如,若 data 包含名为 text/uri-list 的属性,则使用数据类型 text/uri-list 调用 gui-get-selection 时,会返回该属性值而非 data 本身。
该函数返回 data。
该函数读取 Emacs 或其他程序设置的选择区。接收两个可选参数 type 和 data-type。选择区类型 type 的默认值为 PRIMARY。
参数 data-type 指定数据转换格式,用于将其他程序提供的原始数据转为 Lisp 数据,默认值为 STRING。X 系统支持的数据类型枚举见 See X 选择区,其他系统见 See 其他选区。在 X 窗口系统中,建议始终指定具体的 data-type,尤其当选择区预期为非 ASCII 文本时(Lisp 程序应优先使用 UTF8_STRING)。因为默认 data-type 为 STRING,仅支持 Latin-1 文本,在如今多数场景下已不够用。
该变量指定用于编码选择区数据的编码系统 (see 编码系统),在 MS-Windows 和 X 下生效。在 MS-DOS 移植版运行于 Windows 并可访问 Windows 剪贴板文本时也会使用。
在 X 下,该变量的值指定 gui-get-selection 解码部分文本数据类型时使用的编码系统,同时会强制多态 TEXT 数据类型的选择区请求回复使用 compound-text-with-extensions 编码,而非 Unicode。
在 MS-Windows 下,该变量通常被忽略,因为 Windows 剪贴板会自带解码信息,并自动根据情况使用 UTF-16 或区域编码。建议仅在旧版 Windows 9X 中设置该变量,其余情况下只有剪贴板数据信息因某种原因不可用时才会用到。
该变量默认值:Windows 98/Me 下为系统代码页,Windows NT/W2K/XP/Vista/7/8/10/11 下为 utf-16le-dos,MS-DOS 下为 iso-latin-1-dos,其他系统为 nil。
为兼容旧版,提供了已废弃的别名 x-get-selection 和 x-set-selection,它们是 Emacs 25.1 之前 gui-get-selection 和 gui-set-selection 的名称。