एक ऑर्ग डॉक्यूमेंट में एक सूची या डेटा संरचना को चालू करें


15

मैं एक पैकेज लिख रहा हूं, जो हीलीन, सामग्री और कुछ अन्य गुणों की सूची को लोड करता है, जिन्हें उपयोगकर्ता को प्रदर्शित किया जाना है। फिलहाल, एक org-modeबफर इन सुर्खियों को प्रदर्शित करने का एक अच्छा तरीका है।

नीचे एक उदाहरण दिया गया है कि यह सूची कैसे संरचित हो सकती है। यह केवल दृष्टांत है, मैं आसानी से इसे किसी अन्य संरचना में आवश्यकतानुसार परिवर्तित कर सकता हूं।

'(("One headline" "Some much longer content."
   (property1 . value)
   (property2 . value))
  ("Second headline" "More much longer content."
   (property1 . value)
   (property2 . value)))

क्या कोई फ़ंक्शन या पैकेज है जो इस तरह की सूची को org-modeबफर में प्रिंट करता है ?

यहाँ वांछित उत्पादन है।

* One headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
Some much longer content.

* Second headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
More much longer content.

मैं मैन्युअल रूप से ऐसा कर सकता था, मैं सोच रहा था कि क्या वहां कुछ हो सकता है।


ओह माय, यह बहुत उपयोगी होगा। +1। मैं यह भी नोट करता हूं कि ऑर्ग भी ऐसा मैन्युअल रूप से करता है। देखते हैं org-insert-drawer। (यह है कि, अगर ऐसा कोई कनवर्टर मौजूद है, तो मुझे लगता है कि यह फ़ंक्शन उस एक को कॉल करेगा nil।)
शॉन एलेड

जवाबों:


17

इस का काम है org-element, भयानक की (!) काम निकोलस Goaziou । यदि आप नहीं जानते हैं org-elementऔर आप ओआरजी-डेवलपमेंट की परवाह करते हैं तो यह कुछ ऐसा है जिस पर आपको गौर करना चाहिए। यह न केवल काम करने के लिए एक महान उपकरण है, यह तेजी से शक्ति भी है org। सबसे विशेष रूप से org-export( ox), लेकिन यह भी जैसे में कार्य करता है org.el

बिंदु उपयोग के तहत एक तत्व का "लिस्प प्रतिनिधित्व" प्राप्त करने के लिए org-element-at-pointया org-element-context। बफर उपयोग का प्रतिनिधित्व प्राप्त करने के लिए org-element-parse-buffer। जबकि यहाँ सीधे प्रासंगिक नहीं है, के बारे में पता होना चाहिए org-element-map

"लिस्प प्रतिनिधित्व" से जाने के लिए element, secondary stringया "ओर्ग सिंटैक्स प्रतिनिधित्व" के उपयोग पर parse treeवापस जाएं । यह एक "ऑर्ग सिंटैक्स प्रतिनिधित्व" में "लिस्प प्रतिनिधित्व" को चालू करने का (केवल) तरीका है। आप इस प्रतिनिधित्व को मैन्युअल रूप से लिखना नहीं चाहेंगे, हालाँकि। यहाँ अपने पहले शीर्षक का एक बहुत छोटा प्रतिनिधित्व हैorg-element-interpret-data

(org-element-interpret-data
 '(headline (:title "One headline" :level 1)
            (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                  (node-property (:key "property2" :value "value2"))))
            (#("Some much longer content."))))

यदि आप जोड़ना चाहिए दोनों सुर्खियों में जोड़ें parse tree

(org-element-interpret-data
 '(org-data nil (headline (:title "One headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("Some much longer content.")))
            (headline (:title "Second headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("More much longer content.")))))

हो सकता है कि Thorsten Jolitz के org-dpपुस्तकालय (जैसे प्रयासों में आप सहायता करेगा Melpa पर )।

पुस्तकालय org-dpस्थानीय स्तर पर प्रोग्रामिंग के लिए है, अर्थात बिना किसी (संदर्भ के) जानकारी के बिना बिंदु पर मौजूद तत्व के बारे में। इसे स्थानीय स्तर पर ऑर्ग पार्सर / दुभाषिया ढांचे का उपयोग करने के लिए डिज़ाइन किया गया है जो इसे वैश्विक स्तर पर उपयोग करने के लिए सुविधाजनक है (एक पूर्ण तोता-पेड़ org-element-parse-bufferउपलब्ध द्वारा उत्पादित )

थोरस्टेन द्वारा एक अधिक संपूर्ण विवरण यहां पाया जा सकता है

आगे स्पष्टीकरण के gmane.emacs.orgmodeलिए वास्तव में उपयुक्त मंच है।


यह एक महान जवाब है, लेकिन मैं यह नहीं समझ सकता कि ऑर्ग-डीपी ऑर्ग-एलिमेंट से आगे क्या लाता है।
लिन हेडली

org-dpएक वैकल्पिक इंटरफ़ेस है। AFAIR, यह "तत्वपूर्ण" दृष्टिकोण से ऑर्ग सिंटैक्स / प्रारूप में दस्तावेज़ बनाने के लिए लिखा गया था। ऑर्ग एलिमेंट का लक्ष्य ऑर्गन के लिए पार्सर और वर्कहॉर्स होना है। मैं व्यक्तिगत रूप से ठीक हूं org-element, लेकिन वैकल्पिक इंटरफेस होना बहुत अच्छा है।
रासुस

2

मैंने इस मुद्दे पर स्पष्ट रूप से देखा है। Org- प्रोटोकॉल पर एक नज़र डालें । यह ओआरजी-मोड के साथ बंडल है। विशेष रूप से, ओआरजी-प्रोटोकॉल-डू-कैप्चर फ़ंक्शन एक सूची, "पार्ट्स" (जो आपको पहले से ही लगता है) को ऑर्ग-स्टोर-लिंक-प्रॉप्स फ़ंक्शन का उपयोग करके ऑर्ग-मोड गुणों में परिवर्तित करता है और फिर ऑर्ग-कैप्चर को कॉल करता है। यह मानता है कि आपके पास प्लेसहोल्डर्स जैसे%: लिंक के साथ कैप्चर टेम्पलेट है। आप अपनी पसंद के अनुसार गुणों को परिभाषित कर सकते हैं।

मैंने साइट API से शीर्षक, लेखक, दिनांक, स्रोत आदि को परिमार्जन करने के लिए कुछ ऐसा ही किया है । यदि आप इस कोड को देख रहे हैं, तो कैप्चर-टेम्प्लेट पर भी ध्यान दें।

यदि आप JSON डेटा के साथ काम कर रहे हैं, तो json.el और / या request.el उपयोगी हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.