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

myk*_*hal 33 x11 clipboard text xorg

它可能发生在你身上,以及-有时当你复制一些网页中的文字转换为富文本电子邮件草案中你最喜欢的网络邮件客户端,你不喜欢粘贴的事实部分有不同的字体/尺寸/重量.它以某种方式记住了风格(通常是图像,选中时).如果将它粘贴到像Vim这样的喜爱的文本编辑器中,那么没有HTML,只有纯文本?

替代文字

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

Hav*_*c P 30

您可以通过广告格式(主要通过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()))
Run Code Online (Sandbox Code Playgroud)

  • 仅使用“xclip”列出目标(格式)的一行:“xclip -selection Clipboard -target TARGETS -out” (5认同)
  • 我编写了一个小实用程序,可以覆盖所有可用格式,并以文本形式打印其内容 https://github.com/Hi-Angel/scripts/blob/master/print_clipboard_content.py (3认同)