получение исходного кода HTML или расширенного текста из буфера обмена X - PullRequest
22 голосов
/ 16 июля 2010

Как получить расширенный текст или исходный код HTML из буфера обмена X? Например, если вы копируете какой-либо текст из веб-браузера и вставляете его в композитор, он вставляется в виде HTML с сохранением ссылок и т. Д. Однако, xclip -o для того же выбора просто выводит простой текст, переформатированный способом, аналогичным elinks -dump. Я хотел бы вытащить HTML в текстовый редактор (в частности, vim).

Я задавал тот же вопрос на superuser.com , потому что я надеялся, что для этого есть утилита, но я не получил информативных ответов. API буфера обмена X для меня все же загадочный зверь; Любые советы по взлому чего-либо, чтобы получить эту информацию, приветствуются. Мой любимый язык в эти дни - Python, но почти все в порядке.

Ответы [ 2 ]

39 голосов
/ 06 июня 2013

В дополнение к @ ответу Рхайрова для этого уже существует команда: xclip.Или, точнее, есть патч для xclip, который был добавлен к xclip позже в 2010 , но еще не выпущен, чтобы сделать это.Итак, предполагая, что ваша ОС, такая как Debian, поставляется с заголовком subversion xclip:

Чтобы получить список целей для выбора CLIPBOARD:

$ xclip -selection clipboard -o -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/x-moz-url-priv

Для выбора конкретной цели:

$ xclip -selection clipboard -o -t text/html
 <a href="https://stackoverflow.com/users/200540/rkhayrov" title="3017 reputation" class="comment-user">rkhayrov</a>
$ xclip -selection clipboard -o -t UTF8_STRING
 rkhayrov
$ xclip -selection clipboard -o -t TIMESTAMP
684176350

И xclip также могут устанавливать и владеть выделением (-i вместо -o).

24 голосов
/ 16 июля 2010

В 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, because I was hoping there was a utility to do this, but I didn't get any informative responses.
Trying 'text/x-moz-url-priv'...
/3375414/poluchenie-ishodnogo-koda-html-ili-rasshirennogo-teksta-iz-bufera-obmena-x
...