30.21 窗口系统选择

在 X 等窗口系统中,可通过 选择区(selections) 在不同应用间传输数据。每个窗口系统定义任意数量的 选择区类型(selection types),各自存储数据;常用的只有三种:剪贴板(clipboard)主选择区(primary selection)次选择区(secondary selection)。See Cut and Paste in The GNU Emacs Manual, 介绍了使用这些选择区的 Emacs 命令。本节说明读写窗口系统选择区的底层函数;特定窗口系统下的选择区类型与数据格式见 See 选择区访问.

Command: gui-set-selection type data

该函数设置窗口系统选择区。接收两个参数:选择区类型 type,以及要赋予的值 data

type 应为符号,通常是 PRIMARYSECONDARYCLIPBOARD。按照 X 窗口系统惯例,这些符号一般使用大写名称。若 typenil,代表 PRIMARY

datanil,表示清空该选择区。否则 data 可以是字符串、符号、整数、覆盖区,或指向同一缓冲区的两个标记组成的 cons。覆盖区或标记对代表覆盖区内或标记之间的文本。data 也可以是由合法非向量选择区值组成的向量。

data 是字符串,其文本属性可指定各数据类型对应的值。例如,若 data 包含名为 text/uri-list 的属性,则使用数据类型 text/uri-list 调用 gui-get-selection 时,会返回该属性值而非 data 本身。

该函数返回 data

Function: gui-get-selection &optional type data-type

该函数读取 Emacs 或其他程序设置的选择区。接收两个可选参数 typedata-type。选择区类型 type 的默认值为 PRIMARY

参数 data-type 指定数据转换格式,用于将其他程序提供的原始数据转为 Lisp 数据,默认值为 STRING。X 系统支持的数据类型枚举见 See X 选择区,其他系统见 See 其他选区。在 X 窗口系统中,建议始终指定具体的 data-type,尤其当选择区预期为非 ASCII 文本时(Lisp 程序应优先使用 UTF8_STRING)。因为默认 data-typeSTRING,仅支持 Latin-1 文本,在如今多数场景下已不够用。

User Option: selection-coding-system

该变量指定用于编码选择区数据的编码系统 (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-selectionx-set-selection,它们是 Emacs 25.1 之前 gui-get-selectiongui-set-selection 的名称。