2010-07-16 90 views
17

एक्स क्लिपबोर्ड से समृद्ध टेक्स्ट या HTML स्रोत कोड कैसे प्राप्त किया जा सकता है? उदाहरण के लिए, यदि आप किसी वेब ब्राउज़र से कुछ टेक्स्ट कॉपी करते हैं और इसे कॉम्पोजर में पेस्ट करते हैं, तो यह एचटीएमएल के रूप में चिपक जाता है, लिंक आदि के साथ संरक्षित। हालांकि, एक ही चयन के लिए xclip -o सिर्फ सादे पाठ को आउटपुट करता है, elinks -dump के समान तरीके से सुधारित होता है। मैं एचटीएमएल को एक टेक्स्ट एडिटर में खींचना चाहता हूं (विशेष रूप से vim)।एक्स क्लिपबोर्ड से HTML स्रोत या समृद्ध टेक्स्ट प्राप्त करना

मैंने the same question on superuser.com से पूछा, क्योंकि मुझे उम्मीद थी कि ऐसा करने के लिए उपयोगिता थी, लेकिन मुझे कोई जानकारीपूर्ण प्रतिक्रिया नहीं मिली। एक्स क्लिपबोर्ड एपीआई अभी तक मेरे लिए एक रहस्यमय जानवर है; इस जानकारी को खींचने के लिए कुछ हैकिंग पर किसी भी सुझाव का स्वागत है। पसंद की मेरी भाषा इन दिनों पाइथन है, लेकिन बहुत कुछ ठीक है।

उत्तर

21

एक्स 11 में आपको चयन स्वामी के साथ संवाद करना होगा, समर्थित स्वरूपों के बारे में पूछना होगा, और फिर विशिष्ट प्रारूप में डेटा का अनुरोध करना होगा। मुझे लगता है कि ऐसा करने का सबसे आसान तरीका मौजूदा विंडोिंग टूलकिट का उपयोग कर रहा है। ई, जी। अजगर और जीटीके साथ:

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

अच्छी तरह से काम करता है, धन्यवाद एक गुच्छा! मैंने इस कार्यक्षमता को प्राइमोरियल कमांड लाइन इंटरफ़ेस में घुमाया: http://github.com/intuited/clipcli ........................... ....... TIMESTAMP लक्ष्य को पार्स करने के तरीके पर कोई सुझाव? यह यूनिक्स टाइमस्टैम्प प्रतीत नहीं होता है। संभवतः जीटीके दस्तावेज में जानकारी है; मैंने केवल इसके लिए एक सरसरी खोज के लिए समय निकाला। – intuited

+0

X11 प्रोटोकॉल द्वारा परिभाषित टाइमस्टैम्प प्रकार में एपोक के बाद से सेकंड के साथ कुछ लेना देना नहीं है। यह 32-बिट हस्ताक्षरित पूर्णांक है जिसमें मिलीसेकंड में समय होता है, आमतौर पर एक्स सर्वर स्टार्टअप के बाद से। मुझे नहीं लगता कि इसका अंत उपयोगकर्ता अनुप्रयोग के लिए कोई प्रत्यक्ष उपयोग है। – rkhayrov

+0

मुझे इसका एक केडीई संस्करण चाहिए। कोई सुझाव? "केडीई क्लिपबोर्ड एपीआई पायथन" खोजना मेरे लिए कुछ भी उपयोगी नहीं हुआ। – MountainX

30

@rkhayrov's answer की मदद के लिए वहाँ के लिए कि पहले से किसी आदेश मौजूद है: xclip। या अधिक सटीक, patch to xclip है जो added to xclip later on in 2010 था, लेकिन अभी तक जारी नहीं किया गया है। तो, xclip की तोड़फोड़ सिर के साथ डेबियन जहाज की तरह अपने OS संभालने:

$ 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:

$ 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 

एक विशेष लक्ष्य का चयन करने के लिए:

क्लिपबोर्ड चयन के लिए लक्ष्यों को सूचीबद्ध करने के लिए -o के बजाय चयन (-i) को सेट और सेट भी कर सकते हैं।

+5

अच्छा! कोई विचार क्यों अभी तक जारी नहीं किया गया है? – intuited

संबंधित मुद्दे