अपने बच्चों के चेकबॉक्स के साथ एक संगठन कार्य स्थिति को स्वचालित रूप से कैसे समायोजित करें


10

मेरी ऑर्ग फाइल में कई कार्य हैं, जिनमें से एक में चेकबॉक्स (लेकिन केवल उन) से शुरू होने वाले आइटम हैं। उन सभी के अंत में एक सांख्यिकीय कुकी है ([n / m])।

मैं अपने आप से माता-पिता काम अद्यतन करने के लिए एक तरह से तलाश कर रहा हूँ TODOकरने के लिए DONEएक बार चेक बॉक्स के सभी के रूप में के रूप में अच्छी तरह से किया चिह्नित कर रहे हैं।

प्रलेखन कहता है:

यदि आप एक TODO प्रविष्टि को स्वचालित रूप से DONE में बदलना चाहते हैं जब सभी बच्चे हो जाते हैं, तो आप निम्न सेटअप का उपयोग कर सकते हैं [...]

एक अन्य संभावना बड़ी संख्या में उप-कार्य (चेकबॉक्स देखें) की पहचान करने के लिए चेकबॉक्स का उपयोग (एक पदानुक्रम) है।

जिस तरह से मैं समझता हूं कि अंतिम भाग यह है कि यदि बच्चे आइटम चेकबॉक्स हैं, तो माता-पिता की स्थिति पहले से ही स्वचालित रूप से अपडेट होनी चाहिए (जो मामला नहीं है)।

मैं क्या खो रहा हूँ?


संपादित करें:

के org-after-todo-statistics-hookप्रलेखन से (org.el):

एक TODO आँकड़ों के कुकी के अद्यतन होने के बाद कहा जाने वाला हुक। प्रत्येक फ़ंक्शन को दो तर्कों के साथ कहा जाता है: न की गई प्रविष्टियों की संख्या और किए गए प्रविष्टियों की संख्या।

जिसका अर्थ है कि orgmode.org से प्रस्तावित कोड:

(defun org-summary-todo (n-done n-not-done)
  "Switch entry to DONE when all subentries are done, to TODO otherwise."
  (let (org-log-done org-log-states)   ; turn off logging
    (org-todo (if (= n-not-done 0) "DONE" "TODO"))))

(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)

चेकबॉक्स आइटमों की गणना नहीं की जाएगी।


क्या आपके पास हेडलाइन में एक सांख्यिकी कुकी है? इस तरह:* Heading [0/1]
erikstokes

हाँ वहाँ है। उस बिट का जिक्र करना भूल गया।
मैथ्यू मार्केज

1
मुझे लगता है कि यह गलतफहमी इस मामले में ऑर्ग मैनुअल से इतनी स्पष्ट नहीं है। "एक और संभावना है कि चेकबॉक्स का उपयोग शुरू होता है ..." शीर्षक के तहत एक नया पैराग्राफ है "टास्क में नीचे टांगना"। मुझे लगता है कि इस मामले में "एक और संभावना" इस बात का जिक्र कर रही है कि टास्क को टास्क में बदलने की एक और संभावना है कि TODO राज्य को स्वचालित रूप से बदलने के लिए एक और संभावना नहीं है । हो सकता है कि उनके सुझाए गए फंक्शन और हुक को आज़माएं (हालाँकि मैं इस पर ध्यान नहीं दे सका)
इलेटेन

@ ईथन यह वास्तव में समझ में आता है, मुझे लगता है। हां मेरा संपादन देखें :)
मैथ्यू मार्केस

1
यह एक FAQ है
निकड

जवाबों:


6

जैसा कि आपने अपने अद्यतन प्रश्न में उल्लेख किया है, org-after-todo-statistics-hookवह नहीं है जो आप चाहते हैं। आप जो चाहते हैं org-checkbox-statistics-hook

मैं इस फ़ंक्शन का उपयोग वह करने के लिए करता हूं जो आप वर्णन करते हैं (उन्हें वास्तव में इस कार्यक्षमता को org-mode में प्राप्त करना चाहिए):

(defun my/org-checkbox-todo ()
  "Switch header TODO state to DONE when all checkboxes are ticked, to TODO otherwise"
  (let ((todo-state (org-get-todo-state)) beg end)
    (unless (not todo-state)
      (save-excursion
    (org-back-to-heading t)
    (setq beg (point))
    (end-of-line)
    (setq end (point))
    (goto-char beg)
    (if (re-search-forward "\\[\\([0-9]*%\\)\\]\\|\\[\\([0-9]*\\)/\\([0-9]*\\)\\]"
                   end t)
        (if (match-end 1)
        (if (equal (match-string 1) "100%")
            (unless (string-equal todo-state "DONE")
              (org-todo 'done))
          (unless (string-equal todo-state "TODO")
            (org-todo 'todo)))
          (if (and (> (match-end 2) (match-beginning 2))
               (equal (match-string 2) (match-string 3)))
          (unless (string-equal todo-state "DONE")
            (org-todo 'done))
        (unless (string-equal todo-state "TODO")
          (org-todo 'todo)))))))))

(add-hook 'org-checkbox-statistics-hook 'my/org-checkbox-todo) क्या आप इसे हर बार चेकबॉक्स को टॉगल करने के लिए कहेंगे।

हेडर में यह आवश्यक है कि आपके पास एक आँकड़े कुकी (आपके पास [/]या [%]उसके बाद मिलने वाली चीज़ C-c C-c) हो।


1
क्या आपके पास ऐसा संस्करण होना चाहिए, जब TODO को फिर से शेड्यूल किया जाना है, फिर से शेड्यूलिंग के लिए चेकलिस्ट को अनचेक करें? :)
ctietze

0

मैं एक ऐसा संस्करण चाहता था जो @ctietze के लिए देख रहा हो - चेकलिस्ट में आइटम के लिए चेकबॉक्स स्थिति को टॉगल करें। मैंने कॉल करने की कोशिश की, org-reset-checkbox-state-subtreeलेकिन बहुत से नेस्टेड फ़्रेमों के बारे में त्रुटियां हुईं (मैं स्पेसमैक्स का उपयोग कर रहा हूं)।

यहाँ मेरा काम कर समाधान है:

    (defun my/org-reset-checkbox-state-subtree ()
    "Simplified version of org-list builtin"
    ;; Begin copy from org-reset-checkbox-subtree
    (org-narrow-to-subtree)
      (org-show-subtree)
      (goto-char (point-min))
      (let ((end (point-max)))
        (while (< (point) end)
          (when (org-at-item-checkbox-p)
            (replace-match "[ ]" t t nil 1))
          (beginning-of-line 2)))
      (org-update-checkbox-count-maybe 'all)
    ;; End copy from org-reset-checkbox-subtree
    )

  (defun my/org-checkbox-todo ()
    "Switch header TODO state to DONE when all checkboxes are ticked, to TODO otherwise"
    (let ((todo-state (org-get-todo-state)) beg end)
      (unless (not todo-state)
        (save-excursion
          (org-back-to-heading t)
          (setq beg (point))
          (end-of-line)
          (setq end (point))
          (goto-char beg)
          (if (re-search-forward "\\[\\([0-9]*%\\)\\]\\|\\[\\([0-9]*\\)/\\([0-9]*\\)\\]"
                                 end t)
              (if (match-end 1)
                  (if (equal (match-string 1) "100%")
                      (unless (string-equal todo-state "DONE")
                        (my/org-reset-checkbox-state-subtree)
                        (org-todo 'done))
                    (unless (string-equal todo-state "TODO")
                      (org-todo 'todo)))
                (if (and (> (match-end 2) (match-beginning 2))
                         (equal (match-string 2) (match-string 3)))
                    (unless (string-equal todo-state "DONE")
                      (my/org-reset-checkbox-state-subtree)
                      (org-todo 'done))
                  (unless (string-equal todo-state "TODO")
                    (org-todo 'todo)))))))))
  (add-hook 'org-checkbox-statistics-hook 'my/org-checkbox-todo)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.