【问题标题】:How does X11 clipboard handle multiple data formats?X11剪贴板如何处理多种数据格式?
【发布时间】:2011-04-04 00:37:01
【问题描述】:

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

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

【问题讨论】:

  • 我有一个想法,浏览器也维护自己的剪贴板,但这意味着它只能在浏览器应用程序进程中工作,事实并非如此。

标签: text clipboard x11 xorg


【解决方案1】:

由于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 安装 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您提供非常有用的信息(我担心如果 C 代码行包含 t[eo]ns -8 网页)在 utf-16le 编码..
    • 跟进,有点像:askubuntu.com/questions/427704/…。关于实际尝试从剪贴板获取富文本的任何提示?我懒得弄清楚如何创建缓冲区。
    • 我无法让当前代码工作。 This ones does though。我还冒昧地将输出分成多行,这样它就更具可读性。随意在你的答案中使用它:)
    • 我写了一个小工具,可以检查所有可用的格式,并以文本形式打印它们的内容github.com/Hi-Angel/scripts/blob/master/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2012-05-17
    相关资源
    最近更新 更多