text - X11剪贴板如何处理多种数据格式?

标签 text clipboard x11 xorg

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

alt text

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

最佳答案

您复制的应用程序会宣传它可以提供的格式(主要由 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()))

关于text - X11剪贴板如何处理多种数据格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571179/

相关文章:

c - 使用 gtk 剪贴板将文本粘贴到 GNOME 中的 xterm

c++ - 当调用 forkpty 时,X 会抛出错误。 (C++)

firefox - 自动启动 x-server 和自己的服务

html - 如何在图片旁边放置文字?

java - 如何从文本文件集合中提取某些值

python - 如何使用 Python 识别二进制文件和文本文件?

javascript - 如何使用javascript将选定的文本复制到剪贴板

javascript - Chrome 扩展程序粘贴到输入元素中

c - 如何在 X11 上监视所有 Windows(不仅仅是一个)中的鼠标移动事件

c - 写入文件的函数在 .cpp 文件中有效,但在 .h 文件中无效