削减缓冲区

削减缓冲区
  • 基本的
  • 次要
  • 剪贴板
  • 削减缓冲区

这些有什么区别?

使用 xclip 和 gedit 进行实验:

设置主要

据我所知,什么都没有发生

设置次要

再次,据我所知,这不会影响 gedit

设置剪贴板

paste在编辑和上下文菜单中被禁用,但按下control-v会导致我想要粘贴的文本。

在 gedit 中复制

似乎正在设置primaryclipboard

它们各自有什么用途?它们通常在程序中如何访问?它们是如何实现的?它们是根窗口上的属性吗(如果是,它们的名称是什么)?

削减缓冲区

我知道在 xterm 中选择文本时会使用剪辑缓冲区,单击鼠标中键时会粘贴。还有其他程序使用剪切缓冲区吗?

答案1

在 X11 术语中,有很多选择,但其中只有一个被称为剪贴板。(主要和次要是另外两个选择。剪切缓冲区不是选择;它们是一种不同的、过时的机制)

剪贴板和主要

剪贴板选择用于明确的“剪切”、“复制”和“粘贴”操作,与其他系统完全一样。您可以使用CtrlC或“编辑>复制”将数据复制到“剪贴板”选择中,然后使用或“编辑>粘贴”从中粘贴Ctrl+V。换句话说,它实际上是您的标准剪贴板。

(右键菜单应具有与编辑菜单相同的操作,均访问同一个剪贴板。如果它们的行为不同,我会称之为 Gedit 错误。)

相比之下,基本的选择将自动保留您拥有的任何文本已选择最后。(通常主要选择仅用于文本,而不是图像或其他数据类型。)

您可以通过单击鼠标中键从主选择中粘贴。(对于带滚轮的鼠标,滚轮也是中间按钮。对于只有两个按钮的鼠标或触摸板,同时按下两个按钮可模拟中间按钮。)没有菜单项或标准键盘快捷键可用于从主选择中粘贴。

(因为主要选择旨在直接反映当前突出显示的文本,所以大多数 X11 应用程序在将其他内容放入主要内容时实际上会删除突出显示。因此,虽然在 Windows 中您可以在窗口 A 中突出显示某些文本而不会丢失窗口 B 中先前的突出显示,但您不能在 X11 中做到这一点。)

在终端应用中,ShiftIns 通常从主选择中粘贴,而CtrlShiftV从剪贴板中粘贴。(在其他程序中,Shift+Ins 的行为有所不同 - 它可以从剪贴板、主选择中粘贴,甚至从剪切缓冲区中粘贴。)

次要

次要的选择是 X11 中不再使用的遗留问题,但很可能它来自桑维尤早于 X 的图形环境,并且是 Sun 工作站独有的。

SunView 中的选择与 X11 中的选择非常相似 - 它有 Primary、Secondary 和 Shelf(这是 SunView 剪贴板的名称)。但是,它不使用 Ctrl+V 等组合热键,而是太阳键盘专用物理按键CutCopyPaste键盘左侧。

在 SunView 中,二次选择的工作方式与一次选择有点相似,但它是由保持功能键之一。例如,如果您将光标放在某处,然后按住Paste并去选择一些文本,这将成为次要选择 - 释放粘贴会立即将选定的文本粘贴到光标位置。通过这样做,您不会丢失现有的主要选择。

SunView 用户指南

6.7. 二次选择

A二次选择是按住功能键时做出的临时选择。释放功能键时,操作生效。此功能可让您使用功能键执行许多CopyPasteCutFind快捷操作。

次要选择始终是下划线。它只在您按住功能键时有效。在此期间,您可以像调整主要选择一样调整次要选择。

您还可以在进行二次选择时滚动,只要您继续按住功能键即可。这样,您就可以调整选择以包含窗口中当前不可见的字符。

使用二次选择,您可以执行需要源和目标的编辑操作,例如复制和移动文本。二次选择还允许您在不更改当前主选择和插入点的情况下执行操作。

(本手册继续提供 SunView 中主选择和次选择用法的示例,其中一些与 X11 非常相似。)

SunView 系统程序员指南,第 9.2 节

选择库处理“选择”这个通用术语下的四个对象。最熟悉的是基本的选择,通常在屏幕上通过反转(“突出显示”)其内容来表示。按住功能键时进行的选择(通常用下划线表示)是次要选择。选择库处理架子21(由 22复制操作,并可以通过 粘贴操作)作为第三种选择。最后,插入点,或插入符号,即使没有内容,也被视为选择。选择库处理的四个等级是:Caret、Primary、Secondary 和 Shelf。

(基于此,SunView 中的“Shelf”大致相当于 X11 中的“Clipboard”。)

削减缓冲区

剪切缓冲区是一种与上述任何一种机制都不同的机制——它们也是 X10 的遗留物(在 X11 中添加选择机制之前),并且几乎没有任何东西再使用它们。

一些非常古老的程序(主要是那些可以追溯到 X10 的程序)仍然使用剪切缓冲区,例如在 Xedit 中选择文本将同时更新 CUTBUFFER0 和“现代”主选择,而按 Shift+Ins 将从主选择粘贴(如果存在),否则从 CUTBUFFER0 粘贴。

选择是一种进程间通信(目标程序直接从源程序请求“粘贴”的数据)并且可以协商不同的数据类型,而剪切缓冲区是静态的(由 X 服务器存储为“根窗口属性”)并且仅适用于存储短字符串。


也可以看看:

  • X 选择、剪切缓冲区和 Kill Ring

    剪贴板:当用户明确复制某些内容时(例如,“编辑/复制”菜单项)。
    基本的:更加短暂和隐含:它用于当用户突出显示或选择某些内容时(例如,将鼠标拖到某些文本上)。
    切割缓冲区:过时了。永远、永远、永远不要使用它们。永远。

答案2

X 称它们为“选择”而不是“剪贴板”。从维基百科(整篇文章可能也会对您有所帮助):

在核心协议层面,PRIMARY 和 CLIPBOARD 选项并无区别。但 xclipboard 客户端使它们的行为有所不同。具体来说,当另一个客户端声明 CLIPBOARD 选项的所有权时,此程序会请求并在窗口中显示它。对此选项的任何进一步请求均由 xclipboard 处理。这样,所选内容在客户端复制后仍然存在。

它们之间没有内在的区别,唯一的区别在于使用它们的应用程序的行为。 例如,您可以编写一个程序,当您按下 时ctrl v,使用主选择而不是剪贴板,从技术角度来看,这完全没问题。区别在于社交,因为用户期望某些行为,并且大多数时候遵循这些行为是明智的。

我认为选择文本并单击鼠标中键进行粘贴是使用主要选择,而不是剪切缓冲区(已弃用),但我可能是错的,因为我从未直接针对 X 协议进行编码。

相关内容