2013-06-20 8 views
6

मुझे एक वेब समृद्ध संपादक में कुछ क्लिपबोर्ड सामग्री चिपकाने के बारे में एक रिपोर्ट भेजनी है और मुझे क्लिपबोर्ड सामग्री को (शायद) HTML पर डंप/पुनर्स्थापित करने का एक तरीका चाहिए।ओएस एक्स पेस्टबोर्ड/क्लिपबोर्ड से एचटीएमएल डेटा कैसे प्राप्त करें?

मैं यह कैसे कर सकता हूं?

ऐसा लगता है कि pbcopy/pbpaste alway मुझे और भी पाठ अगर मैं pbpaste -P rtf या pbpaste -P HTML

उत्तर

6

मुझे पता है आप पहले से ही इस मिल गया है का उपयोग देना है, लेकिन लोगों के लाभ के जो गूगल से यहां बारी के लिए, Getting RTF data out of Mac OS X pasteboard (clipboard) पर आरटीएफ डेटा के लिए दिया गया समाधान क्लिपबोर्ड से HTML प्राप्त करने के लिए भी ठीक काम करता है।

है, आदेश

osascript -e 'the clipboard as «class HTML»' | perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))' 
4

तीन साल बाद, अधिक सभ्य समय में, हम Swift है। ओएस एक्स के पेस्टबोर्ड से आपको जो चाहिए उसे खींचने के लिए आप एक छोटी स्विफ्ट स्क्रिप्ट लिख सकते हैं।

निम्न स्विफ्ट 3 स्निपेट को एक नई टेक्स्ट फ़ाइल में रखें। मैं मेरा pbpaste.swift नामित:

import Cocoa 
let type = NSPasteboardTypeHTML 
if let string = NSPasteboard.general().string(forType:type) { 
    print(string) 
} 
else { 
    print("Could not find string data of type '\(type)' on the system pasteboard") 
    exit(1) 
} 

फिर, निर्देशिका है जहाँ आप उस फ़ाइल डाल से कुछ html प्रतिलिपि बनाएँ, और चलाने के swift pbpaste.swift

हाँ, एचटीएमएल! उग, ओएस एक्स ने कस्टम मार्कअप का एक टन जोड़ा (और <meta> टैग ?!) - लेकिन हे, कम से कम यह सादा पाठ नहीं है!

नोट्स:

  • NSPasteboardTypeHTML एक विशेष वैश्विक कि स्ट्रिंग "public.html"
  • का आकलन करती है जाहिर है यह एचटीएमएल विशिष्ट है, तो आप शायद चाहते हैं करने के लिए या तो:
    1. नाम यह pbpaste-html.swift, या
    2. कमांड लाइन तर्क
    से वांछित प्रकार पढ़ें
  • यह धीमा है, क्योंकि इसे फ्लाई पर व्याख्या किया जा रहा है, संकलित और निष्पादित नहीं किया गया है।

    xcrun -sdk macosx swiftc pbpaste.swift -o pbpaste-html 
    

    तो बस ./pbpaste-html बजाय swift pbpaste.swift फोन: संकलन मुझे एक 10x गति-अप देता है।

स्विफ्ट 2 संस्करण:

import Cocoa 
let type = NSPasteboardTypeHTML 
if let string = NSPasteboard.generalPasteboard().stringForType(type) { 
    print(string) 
} 
else { 
    print("Could not find string data of type '\(type)' on the system pasteboard") 
    exit(1) 
}