2010-07-16 5 views
17

Come si può ottenere il rich text o il codice sorgente HTML dagli Appunti X? Ad esempio, se si copia del testo da un browser Web e lo si incolla in kompozer, esso viene incollato come HTML, con i collegamenti e così via conservati. Tuttavia, xclip -o per la stessa selezione emette solo testo semplice, riformattato in modo simile a quello di elinks -dump. Mi piacerebbe estrarre l'HTML e inserirlo in un editor di testo (in particolare vim).ottenere l'origine HTML o il rich text dagli appunti X

Ho chiesto the same question on superuser.com, perché speravo che esistesse un'utilità per farlo, ma non ho ricevuto alcuna risposta informativa. L'API X degli appunti è per me ancora una misteriosa bestia; tutti i suggerimenti su come hackerare qualcosa per ottenere queste informazioni sono i benvenuti. Il mio linguaggio di scelta al giorno d'oggi è Python, ma praticamente tutto è a posto.

risposta

21

In X11 è necessario comunicare con il proprietario della selezione, chiedere informazioni sui formati supportati e quindi richiedere dati nel formato specifico. Penso che il modo più semplice per farlo sia l'utilizzo di toolkit per finestre esistenti. Per esempio. con Python e 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() 

uscita sarà simile a questa:

$ ./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'... 
http://stackoverflow.com/questions/3261379/getting-html-source-or-rich-text-from-the-x-clipboard 
+0

Funziona bene, grazie mille! Ho trasformato questa funzionalità in un'interfaccia primordiale a linea di comando: http://github.com/intuited/clipcli ........................... ....... Qualche consiglio su come analizzare il target TIMESTAMP? Non sembra essere un timestamp UNIX. Presumibilmente ci sono informazioni nella documentazione GTK; Ho solo preso tempo per una ricerca superficiale per questo. – intuited

+0

Il tipo TIMESTAMP come definito dal protocollo X11 non ha nulla a che fare con i secondi da Epoch. Questo è un numero intero senza segno a 32 bit contenente il tempo in millisecondi, in genere dall'avvio del server X. Non penso che abbia un uso diretto per un'applicazione per l'utente finale. – rkhayrov

+0

Vorrei una versione KDE di questo. Eventuali suggerimenti? La ricerca di "kde Clipboard API python" non ha trovato nulla di utile per me. – MountainX

30

Per completare @rkhayrov's answer, esiste un comando per che già: xclip. O più esattamente, c'è un patch to xclip che era added to xclip later on in 2010, ma non è ancora stato rilasciato. Quindi, supponendo che il sistema operativo come navi Debian con la testa eversione xclip:

Per elencare gli obiettivi per la selezione APPUNTI:

$ 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 

Per selezionare un obiettivo particolare:

$ 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 

E xclip può anche impostare e possedere una selezione (-i anziché -o).

+5

Bello! Qualche idea sul perché non è stata ancora rilasciata? – intuited