从X剪贴板获取HTML源或富文本

如何从X剪贴板获取丰富的文本或HTML源代码?例如,如果您从Web浏览器复制一些文本并将其粘贴到kompozer中,则将其粘贴为HTML,并保留链接等。但是,对于相同的选择,xclip -o只是输出纯文本,以与elinks -dump类似的方式重新格式化。我想把HTML拉出来,进入一个文本编辑器(特别是vim)。

我问the same question on superuser.com,因为我希望有一个实用程序来做到这一点,但我没有得到任何翔实的回应。 X剪贴板API对我来说是一个神秘的野兽;任何关于黑客攻击的提示都是非常受欢迎的。我现在选择的语言是Python,但几乎任何事情都可以。

解决方法

在X11中,您必须与选择所有者通信,询问支持的格式,然后以特定格式请求数据。我认为最简单的方法是使用现有的窗口工具包。例如。与Python和GTK:
#!/usr/bin/python

import glib,gtk

def test_clipboard():
    clipboard = gtk.Clipboard()
    targets = clipboard.wait_for_targets()
    print "Targets available:",",".join(map(str,targets))
    for target in targets:
        print "Trying '%s'..." % str(target)
        contents = clipboard.wait_for_contents(target)
        if contents:
            print contents.data

def main():
    mainloop = glib.MainLoop()
    def cb():
        test_clipboard()
        mainloop.quit()
    glib.idle_add(cb)
    mainloop.run()

if __name__ == "__main__":
    main()

输出将如下所示:

$ ./clipboard.py 
Targets available: TIMESTAMP,TARGETS,MULTIPLE,text/html,text/_moz_htmlcontext,text/_moz_htmlinfo,UTF8_STRING,COMPOUND_TEXT,TEXT,STRING,text/x-moz-url-priv
...
Trying 'text/html'...
I asked <a href="http://superuser.com/questions/144185/getting-html-source-or-rich-text-from-the-x-clipboard">the same question on superuser.com</a>,because I was hoping there was a utility to do this,but I didn't get any informative responses.
Trying 'text/_moz_htmlcontext'...
<html><body class="question-page"><div class="container"><div id="content"><div id="mainbar"><div id="question"><table><tbody><tr><td class="postcell"><div><div class="post-text"><p></p></div></div></td></tr></tbody></table></div></div></div></div></body></html>
...
Trying 'STRING'...
I asked the same question on superuser.com,but I didn't get any informative responses.
Trying 'text/x-moz-url-priv'...
http://stackoverflow.com/questions/3261379/getting-html-source-or-rich-text-from-the-x-clipboard

相关文章

操作步骤 1、进入elasticsearch的plugin,进入ik。进入config。 2、在config下面建立以.dic为后缀的字典...
lengend data数据中若存在&#39;&#39;,则表示换行,用&#39;&#39;切割。
代码实现 option = { backgroundColor: &amp;#39;#080b30&amp;#39;, tooltip: { trigger: &...
问题原因 原因在于直接在js中取的变量并复制给var变量。 于是就变成这样。 解决办法 var data = &#...
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选...
对于很多人来说,用字符编码都是熟能生巧,而不清楚为什么是那样的字符编码,所以我在这列了一个表,翻...