42

您可能也遇到过这种情况 - 有时当您将某个网页中的文本复制到您最喜欢的网络邮件客户端中的富文本电子邮件草稿中时,您不喜欢粘贴的部分具有不同的字体/大小/粗细这一事实。 。它以某种方式记住样式(在选择时经常图像)。如果您将相同的内容粘贴到您最喜欢的文本编辑器(如 Vim)中,没有 HTML,只有纯文本,那又如何呢?

替代文字

剪贴板似乎以各种格式维护选定的数据。如何访问任何一种格式的数据(以编程方式或使用某些实用程序)?X11 剪贴板是如何工作的?

4

2 回答 2

35

您复制的应用程序会宣传它可以提供的格式(主要由 MIME 类型标识)。您粘贴到的应用程序必须选择其首选格式并从源应用程序请求该格式。

您可能看不到传输的所有样式信息的原因是应用程序不支持包含样式信息的通用格式。

您还可以看到问题,因为应用程序可能会尝试粘贴 HTML,但实际上无法处理所有 HTML。或者应用程序可能存在错误,或者可能无法就特定 MIME 类型的真正含义达成一致。

当然,几乎所有的应用程序都可以复制和粘贴纯文本,但除此之外,它是触手可及的。如果您不明白似乎有意义的内容,您可以针对其中一个应用程序提交错误。

您可能会注意到,如果退出要从中复制的应用程序,则无法再粘贴。(除非您正在运行“剪贴板管理器”或其他东西。)这是因为在目标应用程序要求粘贴格式之前,实际上没有数据离开源应用程序。有“剪贴板管理器”会在您复制和存储数据时立即请求数据,因此您可以在源应用程序退出后粘贴,但它们有缺点(如果数据很大,或者以 10 种格式提供,等等。 )

如果您安装了 pygtk,以下 python 代码将显示当前复制数据的可用格式。这个应用程序显示的是 ctrl+c 复制的数据,而不是中键复活节彩蛋。(参见http://freedesktop.org/wiki/Specifications/ClipboardsWiki

#!/usr/bin/python

import gtk;
clipboard = gtk.clipboard_get()
print("Current clipboard offers formats: " + str(clipboard.wait_for_targets()))
于 2010-08-26T04:01:11.320 回答
2

由于PyGTK中的 API 更改,Havoc P 的答案中显示当前剪贴板格式的代码遗憾地不再有效。这是一个单行的更新版本:

python -c 'import gi; gi.require_version("Gtk", "3.0"); from gi.repository import Gtk, Gdk; print(*Gtk.Clipboard.get(Gdk.atom_intern("CLIPBOARD", True)).wait_for_targets()[1], sep = "\n")'

在 Arch Linux 中,您可以使用sudo pacman -S pygtk.

下面是一些例子。

来自 Chrome 的文本:

TIMESTAMP
TARGETS
SAVE_TARGETS
MULTIPLE
STRING
UTF8_STRING
TEXT
text/html
text/plain

来自 Gnome 终端的文本:

TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/plain;charset=utf-8
text/plain
于 2019-11-19T07:38:39.697 回答