xclip 的奇怪行为

xclip 的奇怪行为

xclip 手册说有三个存储位置,分别是主存储位置 (XA_PRIMARY)、次存储位置 (XA_SECONDARY) 和剪贴板存储位置 (XA_CLIPBOARD)。我从浏览器中复制 (Ctrl+c) 了一些文本,并在终端中检查了上述三个位置的内容:

xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o

这三个都包含相同的文本。

如果我现在输入

date | xclip -selection XA_PRIMARY

只有 XA_PRIMARY 应该包含日期文本。但实际上,其他两个,即 XA_SECONDARY 和 XA_CLIPBOARD 也包含相同的文本(日期信息)。那么这三个是一回事吗?如果是,那有什么意义呢?

更让我困惑的是,Ctrl+Shift+v(仍然在终端模式)会粘贴我从浏览器复制的原始文本!这表明shell自己的剪贴板也在运行。

是否有人有例子可以证明这三个位置可以同时保存不同的值以及它们与常规剪贴板的关系?

答案1

不幸的是,xclip默默地忽略了无效的命令行选项:

没有同时以和开头的-s选项。您必须至少使用。-selection-silent-s-se

因为xclip只是忽略你的-s选择命令

xclip -s primary -o
xclip -s secondary -o
xclip -s clipboard -o
xclip -s asdfghj -o

全部使用默认选择(primary)。

对于选择名称,实际上仅使用第一个字符,如果不是,sc使用默认字符。

date | xclip -selection XA_PRIMARY
date | xclip -selection XA_SECONDARY
date | xclip -selection XA_CLIPBOARD

全部使用主要选择。

使用类似

date | xclip -se p    # write to primary selection
xclip -se c -o        # read from clipboard

答案2

我将解决遗漏的一点,即“为什么有 3 个不同的剪贴板”。

  1. 从历史上看,您可以发出带有 1 个参数或 2 个参数的命令。第一个参数只对 PRIMARY 进行操作,第二个参数对 PRIMARY 和 SECONDARY 都进行操作。如果您愿意,可以称之为“切换”机制。或者,如果您真的想保留 PRIMARY 中的内容而不受影响,则可以称之为备份。然而,规范并未得到遵循,各种应用程序以各种方式实现了这一点。
  2. Windows / Macs 普及了剪贴板。
  3. 这导致了一个有趣的案例:XA_PRIMARY 用于选择(按照设计),很少有人对 XA_SECONDARY 有好的想法,而 XA_CLIPBOARD 就像一个剪贴板。

xclipxsel默认在 XA_PRIMARY 上工作,因为大多数 X-apps 都是这样工作的:如果你强调一个文本,它是已选择因此落在初选缓冲。

如果要粘贴 PRIMARY,请使用鼠标中键或Shift+ Insert。或者将其内容传输到 CLIPBOARD 并粘贴xclip -o | xclip -se c

精彩阅读:https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt

相关内容