संगठन मोड - चिपकाए जाने पर सीधे अमीर HTML को पार्स करना?


12

वर्तमान में, जैसे उपकरणों notetaking के लिए Evernoteऔर Quiver, मैं सीधे HTML सामग्री मेरी पसंदीदा ब्राउज़र से कॉपी कर सकते हैं और फिर उन्हें एप्लिकेशन में पेस्ट, सभी + लिंक संरक्षित स्वरूपण के साथ। हालाँकि ऑर्गमोड में ऐसा लगता है कि सभी फॉर्मेटिंग जानकारी खो गई है।

मैंने देखा है किewweww-org कोई व्यक्ति वेब ब्राउज़ करने और सामग्री को कॉपी करने का सुझाव देता है । हालाँकि यह वास्तव में थकाऊ है (मुझे नहीं लगता कि ewwआजकल आधुनिक ब्राउज़रों के बजाय वेब का उपयोग करने वाले बहुत सारे लोग होंगे। मुझे उस लिंक को फिर से खोलना होगा ewwऔर नकल करना होगा, कभी-कभी उल्लेख ewwनहीं करना होगा। सामग्री को अच्छी तरह से प्रस्तुत करना)।

क्या Emacsपेस्ट करते समय कॉपी किए गए HTML को सीधे पार्स करने देना संभव है ? यहां तक ​​कि अगर उसके लिए कोई मौजूदा उपकरण नहीं है, तो भी क्या इसे बनाना संभव है?

यह लगभग एकमात्र चीज है जो मुझे orgmodeअन्य नोट करने वाले टूल से स्विच करने से रोकती है ।


कृपया स्पष्ट करें कि "नकल किए गए HTML को सीधे पार्स करें" से आपका क्या मतलब है
mankoff

@mankoff ठीक है मुझे लगता है कि मैं अपने विवरण में पर्याप्त स्पष्ट नहीं था। क्या मैं चाहता हूँ उदाहरण के लिए है अगर मूल HTML था <b>text</b>मैं के बाद तो Cmd + Cउस पर, यह करने के लिए परिवर्तित किया जा सकता *text*में org modeकुछ भी तरह से जब चिपकाने। या यदि नहीं, तो कम से कम मूल HTML कोड को संरक्षित करें ताकि मैं बाद में उन्हें उनके मूल उचित प्रारूप में देख सकूं। वर्तमान स्थिति किसी तरह केवल सादा पाठ प्रस्तुत किया जाएगा।
xji

उदाहरण के लिए, हमारे यहाँ है <p>I've seen somebody <a href="http://emacs.stackexchange.com/q/7171/115">suggest using <code>eww</code> to browse the web and copy the content via <code>eww-org</code></a>. However that is really tedious(I don't think there would be a lot of people browsing the web using <code>eww</code> instead of modern browsers nowadays. I'll have to open that link again in <code>eww</code> and do the copying, not to mention sometimes <code>eww</code> doesn't render the contents nicely). </p>। यदि मैं इस अनुच्छेद की प्रतिलिपि बनाता हूं, तो मैं इसके प्रारूपण को पुन: प्रस्तुत करने में सक्षम होना चाहता हूं orgmode
xji

1
@ मांकॉफ अद्भुत! इसने काम कर दिया! आप ही है वह आदमी! मुझे लगता है कि आप इसे Emacs पैकेज आदि के रूप में प्रस्तुत करने पर भी विचार कर सकते हैं। यह org modeइतना अधिक उपयोगकर्ता के अनुकूल बना सकता है । वास्तव में मैं इसे मध्यवर्ती आरटीएफ रूपांतरण के बिना स्वरूपण के साथ अधिक पसंद करता हूं क्योंकि यह अधिक जानकारी को संरक्षित करता है। उदाहरण के लिए #+BEGIN_QUOTEऔर #+BEGIN_EXAMPLEआपके उत्तर में अतिरिक्त रूपांतरण के साथ संरक्षित नहीं किया जाएगा।
xji

1
@incandescentman यह केवल वेब पेज के भीतर कुछ सीएसएस जानकारी, जैसे कुछ CSS स्ट्रिप करने का प्रयास है। आप इसे स्वयं आज़मा सकते हैं और देख सकते हैं कि इससे क्या फर्क पड़ता है।
xji

जवाबों:


12

यह एक बनाने के लिए संभव है?

चूंकि यह emacs है, हाँ

मेरा दृष्टिकोण एक 3 पार्टी टूल का उपयोग करना है जो HTML ले सकता है और सादे पाठ या सीधे ऑर्ग प्रारूप में भी परिवर्तित कर सकता है। मुझे लगता है कि यह एक बदसूरत हैक है, और ऐसा करने के लिए बेहतर तरीके हो सकते हैं, लेकिन ऐसा लगता है कि यह मेरे परीक्षण मामलों के लिए काम करता है।

(defun kdm/html2org-clipboard ()
  "Convert clipboard contents from HTML to Org and then paste (yank)."
  (interactive)
  (kill-new (shell-command-to-string "osascript -e 'the clipboard as \"HTML\"' | perl -ne 'print chr foreach unpack(\"C*\",pack(\"H*\",substr($_,11,-3)))' | pandoc -f html -t json | pandoc -f json -t org"))
  (yank))

दुर्भाग्य से, HTML अब अविश्वसनीय रूप से जटिल है - अब कुछ सरल हाथ से लिखे गए टैग नहीं हैं। इस जटिल HTML टैगिंग के लिए ऊपर जटिल शेल कमांड की आवश्यकता होती है। यह निम्न कार्य करता है:

  1. osascriptक्लिपबोर्ड से HTML टेक्स्ट मिलता है। यह हेक्स एनकोडेड है, इसलिए
  2. पर्ल हेक्स को एक स्ट्रिंग में परिवर्तित करता है
  3. हम उस HTML को सीधे pandoc के साथ Org में बदल सकते हैं, लेकिन HTML जटिल टैग से भरा है और इसलिए एक टन Org कोड का उत्पादन करता है। फ़ॉर्मेटिंग, I को कैप्चर करने के लिए आवश्यक HTML टैग को न्यूनतम सेट करने के लिए
  4. HTML को json में बदलें, और फिर
  5. JSON को Org में कनवर्ट करें (ये दो चरण HTML को सरल बनाते हैं)।

ध्यान दें कि osascriptMacOS के लिए है। लिनक्स के लिए चरण 1-2 को संशोधित करने के लिए, शेल-कमांड-टू-स्ट्रिंग के तर्क को बदलें

"xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org"

किसी भी स्थिति में, pandocकमांड का आउटपुट एमएसीएस में वापस आ जाता है, और बफर में डाला जाता है।

नए Emacs कमांड को "पेस्ट" की तरह एक कुंजी से बांधें, लेकिन इसका मतलब है कि "पेस्ट-एंड-कन्वर्ट-फ्रॉम-html" आपके लिए, और यह काम करना चाहिए।

वैकल्पिक रूप से, यदि आप यह नहीं सोचना चाहते कि कौन से पेस्ट कमांड का उपयोग करना है, तो यहां लिनक्स संस्करण है जो HTML को तब परिवर्तित करेगा जब वह क्लिपबोर्ड पर उपलब्ध होगा और अन्यथा सादे पाठ पर वापस आ जाएगा:

"xclip -o -t TARGETS | grep -q text/html && (xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org) || xclip -o"

एक जोड़: ऐसा लगता है कि स्वरूपित इनलाइन पाठ (बोल्ड, इटैलिक्स, कोड आदि) को परिवर्तित करते समय सामान्य स्थान के बजाय pandocस्वचालित रूप से गैर-ब्रेकिंग स्पेस का उपयोग करता है , जो orgmodeकि डिफ़ॉल्ट रूप से मान्यता प्राप्त नहीं हैं । org-emphasis-regexp-componentsउन ग्रंथों को सही ढंग से स्वरूपित करने के लिए आपको इसे () जोड़ना होगा orgmode
xji

विशेष रूप से "जारी किया गया" संस्करण का संस्करण विकल्प -t का समर्थन नहीं करता है; इसलिए गितुब से ग्रहण बनाया जाना चाहिए। इसके अलावा, आप पाइप pandoc इनपुट और के माध्यम से उत्पादन करने के लिए आवश्यकता हो सकती हैiconv utf-8
malcook

xclipOS X पर भी है (शायद केवल w / X11 और / या डेवलपर टूल स्थापित हैं?), इसलिए बेहतर जवाब OS X पर भी काम कर सकता है।
mankoff

@JIXiang मैं स्वीकृत उत्तर को कैसे संशोधित करूंगा ताकि यह गैर-ब्रेकिंग स्थानों को सामान्य स्थानों में भी परिवर्तित कर दे?
गरमागरम

1
@incandescentman I ने मूल रूप से ऑर्ग-मोड के पैकेज फ़ाइल को संशोधित किया है ताकि यह एक विभाजक के रूप में गैर-ब्रेकिंग स्पेस को पहचान ले। हालांकि यह संस्करण परिवर्तनों के साथ थकाऊ निकला। मैंने फिर पैंडोक के रेपो पर एक मुद्दा उठाया, जिसके बारे में आप खोज कर सकते हैं। अनिवार्य रूप से आप स्वचालित प्रतिस्थापन करने के लिए पंडोक में "फिल्टर" का उपयोग कर सकते हैं। लेकिन वह कभी-कभी असफल भी हो जाता है। इसलिए अब मैं ज्यादातर मैन्युअल रूप से पेस्ट की गई सामग्री का चयन करता हूं और प्रतिस्थापन करता हूं। मेरा अंतिम प्रतिस्थापन लगभग हमेशा यही होता है इसलिए मैं सिर्फ अपने प्रतिस्थापन इतिहास को स्क्रॉल करता हूं और लागू करता हूं।
xji
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.