gui-get-selection 和 gui-set-selection 支持的数据类型与选择区并无精确定义,会随 Emacs 运行的窗口系统不同而变化。
同时,gui-set-selection 封装了大量底层复杂性:其 data 参数会直接交给系统相关代码处理,转换为适合窗口系统或请求客户端传输的格式。
最完整的选择区实现位于 X 窗口系统。这既是历史原因(X 是 Emacs 最早支持的窗口系统),也有技术因素:X 选择区不仅用于客户端间传输文本与多媒体内容,更是一套通用的客户端间通信系统,这种设计导致选择区与数据类型非常繁多。
更复杂的是,X 下还有另一套客户端间通信机制:ICE(客户端间交换协议)。Emacs 仅使用 ICE 与会话管理器通信,属于独立主题。