emacs ऑर्ग-मोड में एक कार्य के अंत में नोट्स को कैसे मिलान/पार्स करना



elisp org-mode (1)

संपादित करें (7 जनवरी, 2014): पहला काम ड्राफ्ट Regexp के पूंछ के अंत में अगले रिक्त पंक्ति तक नोट मिलेंगे - यानी, नोट्स हार्ड रिटर्न के साथ कई लाइनें हो सकती हैं और उन दोनों के बीच कोई रिक्त पंक्ति नहीं है

संपादित करें (14 जनवरी 2014): संशोधित 31 और 32 ताकि बफर के अंत में कोई अंतिम नई लाइन की आवश्यकता न हो - यानी, बफर के अंत में कोई नोट नहीं किए जाने वाला कार्य अब मान्यता प्राप्त है 20 से 24 में संशोधित ताकि पदों की स्थिति :ToodledoID: दराज और :ToodledoFolder: दराज विनिमेय हैं। 32 को बाहर करने के लिए संशोधित उदाहरण get-whopper फ़ंक्शन

संपादित करें (14 नवंबर, 2014): अपडेट किया गया रीजेक्स एक बिट, लेकिन कार्यक्षमता एक समान है।

संपादित करें (2 दिसंबर, 2014): हटाए गए कस्टम फ़ंक्शन और स्टॉक के org-back-to-heading

संपादित करें (6 दिसंबर 2014: रीजेक्स के प्रमुख पुन: सुधार।) फिर से इकट्ठा करने वाले ज्यादातर प्रविष्टियों के लिए वैकल्पिक आइटम का समर्थन करता है, और बफर के अंत में कोई अंतिम नई लाइन की आवश्यकता नहीं है। नए संशोधन के साथ, regexp एक कस्टम *Org Agenda* बफर जो मूल टोडो से केवल आंशिक वस्तुओं को प्रदर्शित करता है - उदाहरण के लिए, समय सीमा निर्धारित / शेड्यूल्ड / बंद + नोट्स या शीर्षक + नोट्स केवल। :tag: हालांकि, एक अनिवार्य एंकर - अर्थात regexp के लिए ठीक से काम करने के लिए कम से कम एक (1) टैग की आवश्यकता है। रेखा अंत - अर्थात्, \n - अब मेल खाने वाली प्रविष्टियों की संख्या नहीं है। अब regex उन टूली प्रविष्टियों का समर्थन करता है जो बिना किसी नई लाइन को अलग किए गए हैं गैर-कैप्चरिंग समूह के बारे में संबंधित धागा देखें: https://stackoverflow.com/a/3513858/2112489 मल्टी-लाइन रेगेक्स एमैक्स के बारे में संबंधित धागा भी देखें: http://www.emacswiki.org/emacs/MultilineRegexp

(defvar whopper-regexp (concat
  "^\\(\\*\\*\\)" ;; 1
  "\\(?: +\\(Active\\|Next Action\\|Hold\\|Reference\\|Delegated\\|Postponed\\|Waiting\\|Someday\\|Planning\\|Canceled\\|None\\)\\)?" ;; 2
  "\\(?: +\\(\\[#.\\]\\)\\)?" ;; 3
  "\\(?: +\\(.*?\\)\\)?" ;; 4
  "\\(?:[ ]+\\(:[[:alnum:][email protected]#%:]+:\\)\\)" ;; 5 ;; mandatory-anchor
  "\\(?:\n +\\(DEADLINE:\\|SCHEDULED:\\)\\)?" ;; 6
  "\\(?: +\\(<\\)\\([^>]+\\)\\(>\\)\\)?" ;; 7 | 8 | 9
  "\\(?: +\\(DEADLINE:\\|SCHEDULED:\\)\\)?" ;; 10
  "\\(?: +\\(<\\)\\([^>]+\\)\\(>\\)\\)?" ;; 11 | 12 | 13
  "\\(?:\n +\\(CLOSED:.*\\)\\)?" ;; 14
  "\\(?:\n +\\(:PROPERTIES:\\)\\)?" ;; 15
  "\\(?:\n +\\(:ToodledoID:\\|:ToodledoFolder:\\)\\)?" ;; 16
  "\\(?: +\\([0-9]+\\|EVENTS\\|TASKS\\|UNDATED\\|DONE\\|CONTACT\\)\\)?" ;; 17
  "\\(?:\n +\\(:ToodledoID:\\|:ToodledoFolder:\\)\\)?" ;; 18
  "\\(?: +\\([0-9]+\\|EVENTS\\|TASKS\\|UNDATED\\|DONE\\|CONTACT\\)\\)?" ;; 19
  "\\(?:\n +\\(:Hash:\\)\\)?" ;; 20
  "\\(?: +\\(.*\\)\\)?" ;; 21
  "\\(?:\n +\\(:END:\\)\\)?" ;; 22
  "\\(?:\n\\([[email protected]#%:-]+.*\\(?:\n[[email protected]#%:-].*[^\n]\\)*\\)\\)?" ;; 23
  ) "Custom regexp for tasks, events, undated, none, and contacts.")

(defun get-whopper ()
  (save-excursion
    (org-back-to-heading t)
    (when (looking-at whopper-regexp)
      (concat
        (when (not (null (match-string 1)))
          (match-string 1)) ;; stars
        (when (not (null (match-string 2)))
          (concat " " (match-string 2))) ;; todo-state
        (when (not (null (match-string 3)))
          (concat " " (match-string 3))) ;; priority
        (when (not (null (match-string 4)))
          (concat " " (match-string 4))) ;; title
        (when (not (null (match-string 5)))
          (concat " " (match-string 5))) ;; tag
        (cond
          ((and
              (not (null (match-string 6)))    ;; DEADLINE:
              (not (null (match-string 7)))    ;; <-deadline
              (not (null (match-string 8)))    ;; deadline-time-stamp
              (not (null (match-string 9)))    ;; >-deadline
              (not (null (match-string 10)))   ;; SCHEDULED:
              (not (null (match-string 11)))   ;; <-scheduled
              (not (null (match-string 12)))   ;; scheduled-time-stamp
              (not (null (match-string 13))) ) ;; >-scheduled
            (concat
              "\n   "
              (match-string 6)    ;; DEADLINE:
              " "
              (match-string 7)    ;; <-deadline
              (match-string 8)    ;; deadline-time-stamp
              (match-string 9)    ;; >-deadline
              "  "
              (match-string 10)    ;; SCHEDULED:
              " "
              (match-string 11)    ;; <-scheduled
              (match-string 12)    ;; scheduled-time-stamp
              (match-string 13) )) ;; >-scheduled
          ((and
              (not (null (match-string 6))) ;; DEADLINE:
              (not (null (match-string 7))) ;; <-deadline
              (not (null (match-string 8))) ;; deadline-time-stamp
              (not (null (match-string 9))) ;; >-deadline
              (null (match-string 10))      ;; SCHEDULED:
              (null (match-string 11))      ;; <-scheduled
              (null (match-string 12))      ;; scheduled-time-stamp
              (null (match-string 13)) )    ;; >-scheduled
            (concat
              "\n   "
              (match-string 6)    ;; DEADLINE:
              " "
              (match-string 7)    ;; <-deadline
              (match-string 8)    ;; deadline-time-stamp
              (match-string 9)) ) ;; >-deadline
          ((and
              (null (match-string 6))          ;; DEADLINE:
              (null (match-string 7))          ;; <-deadline
              (null (match-string 8))          ;; deadline-time-stamp
              (null (match-string 9))          ;; >-deadline
              (not (null (match-string 10)))   ;; SCHEDULED:
              (not (null (match-string 11)))   ;; <-scheduled
              (not (null (match-string 12)))   ;; scheduled-time-stamp
              (not (null (match-string 13))) ) ;; >-scheduled
            (concat
              "\n   "
              (match-string 10)     ;; SCHEDULED:
              " "
              (match-string 11)     ;; <-scheduled
              (match-string 12)     ;; scheduled-time-stamp
              (match-string 13)) )) ;; >-scheduled
        (when (not (null (match-string 14)))
          (concat "\n   " (match-string 14))) ;; CLOSED:
        (when (not (null (match-string 15)))
          (concat "\n   " (match-string 15))) ;; :PROPERTIES:
        (when (not (null (match-string 16)))
          (concat "\n   " (match-string 16)))      ;; :ToodledoID:
        (when (not (null (match-string 17)))
          (concat " " (match-string 17)))   ;; id-string
        (when (not (null (match-string 18)))
          (concat "\n   " (match-string 18)))      ;; :ToodledoFolder:
        (when (not (null (match-string 19)))
          (concat " " (match-string 19)))   ;; folder-name
        (when (not (null (match-string 20)))
          (concat "\n   " (match-string 20)))      ;; :HASH:
        (when (not (null (match-string 21)))
          (concat " " (match-string 21)))   ;; hash-string
        (when (not (null (match-string 22)))
          (concat "\n   " (match-string 22))) ;; :END:
        (when (not (null (match-string 23)))
          (concat "\n" (match-string 23))) )))) ;; notes

मैं "नोट्स" कहता हूं, जो एक ऑर्ग बिग कार्य की आखिरी पंक्ति (या पंक्तियों का सेट) कहते हैं, उससे मिलान करने का एक तरीका तलाश रहा हूं: " These are the notes of the task. "

मैंने एक बहुत लंबे रैगेक्सपी बना दिया है जो नौकरी कर सकती है, लेकिन मुझे उम्मीद है कि संगठन-मोड पहले ही कुछ बेहतर प्रदान करता है:

"^\\(\\*\\*\\)\\(?: +\\(Active\\|Next Action\\|Hold\\|Reference\\|Delegated\\|Postponed\\|Waiting\\|Someday\\|Planning\\|Canceled\\|None\\)\\)?\\(?: +\\(\\[#.\\]\\)\\)?\\(?: +\\(.*?\\)\\)??\\(?:[ ]+\\(:[[:alnum:][email protected]#%:]+:\\)\\)?[ ]*\\(?:\\(\n\\)\\)?\\(?: +\\(DEADLINE:\\|SCHEDULED:\\)\\)?\\(?: +\\(<\\)\\([^>]+\\)\\(>\\)\\)?\\(?: +\\(DEADLINE:\\|SCHEDULED:\\)\\)?\\(?: +\\(<\\)\\([^>]+\\)\\(>\\)\\)?\\(?:\\(\n\\)\\)?\\(?: +\\(CLOSED:.*\\)\\)?\\(?:\\(\n\\)\\)?\\(?: +\\(:PROPERTIES:\\)\\)?\\(?:\\(\n\\)\\)?\\(?: +\\(:ToodledoID:\\)\\)?\\(?: +\\([0-9]+\\)\\)?\\(?:\\(\n\\)\\)?\\(?: +\\(:ToodledoFolder:\\)\\)?\\(?: +\\(EVENTS\\|TASKS\\|UNDATED\\|DONE\\|CONTACT\\)\\)?\\(?:\\(\n\\)\\)\\(?: +\\(:Hash:\\)\\)?\\(?: +\\(.*+\\)\\)?\\(?:\\(\n\\)\\)?\\(?: +\\(:END:\\)\\)?\\(?:\\(\n\\)\\)?\\(.*\\(?:\n.*\\)*?\\)\\(?:^\\)"
** Delegated [#A] 0 @ Title of the task. :event:lawlist:
   DEADLINE: <2014-01-11 Sat 08:00>  SCHEDULED: <2014-01-11 Sat>
   :PROPERTIES:
   :ToodledoID: 353081871
   :ToodledoFolder: EVENTS
   :Hash: 20657e7586fcc67da708789d7bbc0fbd
   :END:
These are the notes of the task.

org-element-parse-buffer उपयोग करने के लिए मैंने एक ओर्ग कार्य पार्स करने का सबसे पूरा उदाहरण दिया है, लेकिन फिर भी मुझे अभी नोट्स निकालने की कुंजी नहीं दिखाई देती: https://github.com/yyr/org- मोड / ब्लॉब / मास्टर / परीक्षण / तुतलाना / परीक्षण-संगठन-element.el

यदि संभव हो तो मुझे इस काल्पनिक कोड (org-element-property :notes (org-element-at-point)) , जिसके लिए नोट्स को निकालने के लिए उपशीर्षक को संकुचित करने की आवश्यकता नहीं है। मेरे पास कुछ सौ कार्य हैं, और मैं मास्टर ओआरजी फ़ाइल को जल्दी से कंघी बनाने और अपने खुद के कस्टम एजेंडे बफर बनाने की कोशिश कर रहा हूं जो कि पहले और शायद दूसरी पंक्तियाँ (यदि समय सीमा या अनुसूचित) और नोट्स को प्रदर्शित करता है अंत अगर वे मौजूद हैं मुझे लग रहा है कि यदि मुझे 200 कार्य करने के लिए उपशीर्षक को छोटा करना है, तो अंतिम प्रदर्शन का उत्पादन करने में काफी देरी होगी।

कार्य के पहले दो पंक्तियों को पहले से ही संभाल लिया गया है:

(defvar lawlist-org-heading-regexp
  "^\\(\\*+\\)\\(?: +\\(.*?\\)\\)?[ \t]*\\(\n.*DEADLINE.*$\\)"
  "Custom match org headline, plus the second line with a deadline.")

(setq txt
  (save-excursion
    (org-back-to-heading t)
    (when (looking-at org-heading-regexp)
        (concat
          (match-string 1)
          " "
          (match-string 2)
          (if (and (looking-at lawlist-org-heading-regexp) (match-string 3))
            (match-string 3))
          "\n" )))) )

(message "%s" (org-element-map (org-element-parse-buffer) 'paragraph 'identity nil t)) मुझे निम्नलिखित देता है:

 (paragraph 
  (:begin 244 
      :end 276 
      :contents-begin 244 
      :contents-end 276 
      :post-blank 0 
      :post-affiliated 244 
      :parent (section 
           (:begin 58 
               :end 276 
               :contents-begin 58 
               :contents-end 276 
               :post-blank 0 
               :parent (headline 
                (:raw-value 0 
                        @ 
                        Title of the task. 
                        :begin 1 
                        :end 276 
                        :pre-blank 0 
                        :hiddenp nil 
                        :contents-begin 58 
                        :contents-end 276 
                        :level 2 
                        :priority 65 
                        :tags (event lawlist) 
                        :todo-keyword Delegated 
                        :todo-type todo 
                        :post-blank 0 
                        :footnote-section-p nil 
                        :archivedp nil 
                        :commentedp nil 
                        :quotedp nil 
                        :deadline (timestamp 
                               (:type active 
                                  :raw-value <2014-01-11 Sat 08:00> 
                                  :year-start 2014 
                                  :month-start 1 
                                  :day-start 11 
                                  :hour-start 8 
                                  :minute-start 0 
                                  :year-end 2014 
                                  :month-end 1 
                                  :day-end 11 
                                  :hour-end 8 
                                  :minute-end 0 
                                  :begin 71 
                                  :end 95 
                                  :post-blank 2)) 
                        :scheduled (timestamp 
                            (:type active 
                                   :raw-value <2014-01-11 Sat>
                                   :year-start 2014
                                   :month-start 1
                                   :day-start 11
                                   :hour-start nil
                                   :minute-start nil
                                   :year-end 2014
                                   :month-end 1
                                   :day-end 11
                                   :hour-end nil
                                   :minute-end nil
                                   :begin 106
                                   :end 122
                                   :post-blank 0))
                        :TOODLEDOID 353081871
                        :TOODLEDOFOLDER EVENTS
                        :HASH 20657e7586fcc67da708789d7bbc0fbd
                        :CATEGORY .scratch
                        :title (0 @ Title of the task.)
                        :parent (org-data nil #4)) #2)) 
           (planning (:closed nil
                  :deadline (timestamp 
                         (:type active
                            :raw-value <2014-01-11 Sat 08:00>
                            :year-start 2014
                            :month-start 1
                            :day-start 11
                            :hour-start 8
                            :minute-start 0
                            :year-end 2014
                            :month-end 1
                            :day-end 11
                            :hour-end 8
                            :minute-end 0
                            :begin 71
                            :end 95
                            :post-blank 2))
                  :scheduled (timestamp 
                          (:type active
                             :raw-value <2014-01-11 Sat>
                             :year-start 2014
                             :month-start 1
                             :day-start 11
                             :hour-start nil
                             :minute-start nil
                             :year-end 2014
                             :month-end 1
                             :day-end 11
                             :hour-end nil
                             :minute-end nil
                             :begin 106
                             :end 122
                             :post-blank 0))
                  :begin 58
                  :end 123
                  :post-blank 0
                  :parent #2)) 
           (property-drawer (:begin 123
                    :end 244
                    :hiddenp nil
                    :contents-begin 139
                    :contents-end 235
                    :post-blank 0
                    :post-affiliated 123
                    :parent #2) 
                (node-property (:key ToodledoID
                             :value 353081871
                             :begin 139
                             :end 165
                             :post-blank 0
                             :parent #3)) 
                (node-property (:key ToodledoFolder
                             :value EVENTS
                             :begin 165
                             :end 192
                             :post-blank 0
                             :parent #3)) 
                (node-property (:key Hash
                             :value 20657e7586fcc67da708789d7bbc0fbd
                             :begin 192
                             :end 235
                             :post-blank 0
                             :parent #3))) 
           #0))
  These are the notes of the task.)




org-mode