org: TODO और फिर प्राथमिकता से शीर्षकों को कैसे छांटा जाए?


24

मेरे पास अक्सर इस तरह की एक सूची है:

* Main heading
** TODO [#A] Make world better
** TODO [#B] Make Emacs better 
** TODO [#B] Customize emacs 
** DONE [#C] some task
** TODO [#A] Launch rocket to mars

मैं इसे पहले 'TODO' टास्कवर्ड के अनुसार क्रमबद्ध करना चाहूंगा। तब सॉर्ट किए गए TODO के अंदर आइटम मैं प्राथमिकता से सॉर्ट करना चाहूंगा। (तब इसे "एफर्ट" द्वारा आगे क्रमबद्ध करना अच्छा होगा)।

और मेरा मतलब है कि वर्तमान में मैं मुख्य शीर्षक पर क्लिक कर सकता हूं और बच्चों को पहले से ही प्राथमिकता या टूडू कीवर्ड के आधार पर सॉर्ट कर सकता हूं, लेकिन दोनों नहीं।

क्या छँटाई-रणनीति दोनों तरह से संभव है?


वर्तमान में मेरे पास दो शीर्षक हैं

* Tasks
** TODO [#A] meh
** TODO [#B] meh2
* Completed.
** DONE [#B] meh3.

लेकिन इस दृष्टिकोण के साथ समस्या यह है कि जब मैं उन्हें पूरा करता हूं तो मुझे लगातार कार्यों में फेरबदल करना पड़ता है।

[संपादित करें]
इस थोड़े के समान है इस सिवाय इसके कि मैं उसका जवाब की भावना मेरी जरूरतों पर स्थानांतरित करना नहीं कर सके?


1
फ़ंक्शन org-sort-entriesया तो सभी सबहेडिंग के लिए एक मुख्य शीर्षक पर कार्य करेगा, या यह चुन सकता है कि एक चयनित क्षेत्र में क्या है। आप से चुनने के लिए इंटरैक्टिव विकल्प हैं। आप प्रोग्रामेटिक रूप से भी इसका उपयोग कर सकते हैं, और कई प्रकार संभव हैं - मैं अक्सर एक, ओ, पी, टी (अगले छँटाई मानदंडों के 4 स्तरों को पूरा करने के लिए एक) का उपयोग करता हूं। उदाहरण के लिए, आप वर्णमाला द्वारा पहले सब कुछ सॉर्ट कर सकते हैं, फिर टूडू कीवर्ड, फिर प्राथमिकता से, और फिर समय से।
कानून

नमस्कार, मैं बाल कार्यों को क्रमबद्ध करने के लिए ऑर्ग-सॉर्ट-एंट्री विकल्प के बारे में जानता हूं। मैंने प्रश्न को अद्यतन किया है ताकि बेहतर ढंग से प्रतिबिंबित हो सके। आपकी टिप्पणी के लिये धन्यवाद।
सिंह उफिम्त्सेव

यहां ऑर्ग-मोड बफर को क्रमबद्ध रूप से सॉर्ट करने के लिए एक विस्तृत दृष्टिकोण का लिंक दिया गया है: stackoverflow.com/a/22232709/2112489
कानून सूची

मेरे प्रश्न में यह लिंक पहले से है। उपरोक्त थोड़े किसी की विशिष्ट आवश्यकताओं के अनुरूप है। क्या अधिक सामान्य उद्देश्य / आसान तरीका है?
सिंह उफिम्त्सेव

1
@LeoUfimtsev org-refile-targetsकुछ इस तरह सेट करने का प्रयास करें (setq org-refile-targets '((nil . (:maxlevel . 6))))org-modeजब रिफिलिंग करते समय यह शो 6 की गहराई तक बढ़ेगा । org-refile-targetsअधिक जानकारी के लिए आप दस्तावेज़ की जाँच कर सकते हैं।
itsjeyd

जवाबों:


19

यह बहुत अच्छा है, तो वहाँ की तरह कुछ था होगा org-agenda-sorting-stratagyके साथ काम किया है कि org-sort-entriesहै, लेकिन वहाँ होना करने के लिए प्रतीत नहीं होता। हम इसे नकली org-sort-entriesकर सकते हैं क्योंकि प्रत्येक शीर्ष पर एक (स्ट्रिंग या संख्या) कुंजी को निर्दिष्ट करने वाले फ़ंक्शन को निर्दिष्ट करने के लिए एक तर्क ले सकता है, जिसका उपयोग प्रविष्टियों को क्रमबद्ध करने के लिए किया जाएगा जब ?fसॉर्टिंग प्रकार दिया जाता है। हमें केवल TODO और PRIORITY गुणों के लिए एक स्ट्रिंग प्राप्त करना है। चाल यह है कि हम TODO संपत्ति को अपनी स्थिति के अनुसार क्रमबद्ध करना चाहते हैं org-todo-keywords, वर्णानुक्रम में नहीं।

(require 'cl)
(require 'dash)

(defun todo-to-int (todo)
    (first (-non-nil
            (mapcar (lambda (keywords)
                      (let ((todo-seq
                             (-map (lambda (x) (first (split-string  x "(")))
                                   (rest keywords)))) 
                        (cl-position-if (lambda (x) (string= x todo)) todo-seq)))
                    org-todo-keywords))))

(defun my/org-sort-key ()
  (let* ((todo-max (apply #'max (mapcar #'length org-todo-keywords)))
         (todo (org-entry-get (point) "TODO"))
         (todo-int (if todo (todo-to-int todo) todo-max))
         (priority (org-entry-get (point) "PRIORITY"))
         (priority-int (if priority (string-to-char priority) org-default-priority)))
    (format "%03d %03d" todo-int priority-int)
    ))

(defun my/org-sort-entries ()
  (interactive)
  (org-sort-entries nil ?f #'my/org-sort-key))

M-x my/org-sort-entriesTODO कीवर्ड द्वारा सॉर्ट करेगा और PRIORITY के साथ संबंध तोड़ देगा ( org-default-priorityजब कोई प्राथमिकता नहीं दी जाती है)। यह टूट जाएगा यदि आपके पास 1000 से अधिक TODO कीवर्ड हैं, जो ऐसा नहीं करने का एक अच्छा कारण है।


ओमग, स्क्रिप्ट के लिए धन्यवाद। एक समस्या: मैंने डैश स्थापित किया। फिर स्क्रिप्ट की कोशिश की, लेकिन मुझे एक त्रुटि मिल रही है: प्रतीक की परिभाषा शून्य है: टूडू-टू-इंट। मुझे लगता है कि आप अपने .emacs फ़ाइल में कहीं और कार्य करते हैं, लेकिन उपरोक्त में भूल गए हैं? या शायद कुछ टाइपो?
सिंह उफिम्त्सेव

मैंने todo-to-intअपने उत्तर में पेस्ट करने के बाद एक फ़ंक्शन को एक इंट में कनवर्ट करता है, जो एक कीवर्ड को इंट में बदल देता है । यह अब तय हो गया है।
erikstokes

1
अब सब काम करता है। यार, आपके सभी प्रयासों के लिए धन्यवाद, बहुत सराहना की: -D।
सिंह उफिम्त्सेव

1
NB: यह डॉक्स के अनुसार सीएल का उपयोग करने के लिए अनुशंसित नहीं है ।
कैममिल

1

अपनी फ़ाइल में निम्न जोड़ें:

#+ARCHIVE: :: * Completed.

और फेरबदल आर्काइविंग हो जाता है

प्रविष्टियों को छाँटने के बजाय, छाँटे गए दृश्य के बारे में कैसे?

(setq org-agenda-custom-commands
      '(("cx" "TODOs sorted by state, priority, effort"
         todo "*"
         ((org-agenda-overriding-header "\nTODOs sorted by state, priority, effort")
          (org-agenda-sorting-strategy '(todo-state-down priority-down effort-up))))))

वर्तमान फ़ाइल के साथ इसे प्रतिबंधित करें <। आप सॉर्ट किए गए दृश्य से पूर्ण और संग्रह को चिह्नित कर सकते हैं।


1

आप किसी org-agenda-cmp-user-definedफ़ंक्शन को भी परिभाषित कर सकते हैं और इसे जोड़ सकते हैं org-agenda-sorting-strategy। यह वह है जिसे मैंने एक उदाहरण के रूप में बनाया है।

(setq org-todo-sort-order '("WAIT" "TODO" "DOING" "CANCELED" "DONE"))

(defun my:user-todo-sort (a b)
  "Sort todo based on which I want to see first"
  (when-let ((state-a (get-text-property 14 'todo-state a))
             (state-b (get-text-property 14 'todo-state b))
             (cmp (--map (cl-position-if (lambda (x)
                                           (equal x it))
                                         org-todo-sort-order)
                         (list state-a state-b))))
    (cond ((apply '> cmp) 1)
          ((apply '< cmp) -1)
          (t nil))))
(setq org-agenda-cmp-user-defined 'my:user-todo-sort)

1

आप मेरे द्वारा बनाई गई इस लाइब्रेरी का उपयोग कर सकते हैं: https://github.com/felipelalli/org-sort-tasks

यह उपयोगकर्ता से पूछकर मर्ज सॉर्ट एल्गो का उपयोग करता है यदि कोई कार्य ए बी से अधिक महत्वपूर्ण है, और फिर एक सॉर्ट की गई सूची बनाता है।


क्या आप कुछ विवरण जोड़ सकते हैं कि यह क्या करता है, और विशेष रूप से यह अन्य उत्तरों से कैसे भिन्न होता है।
एंड्रयू स्वान

यह उपयोगकर्ता से पूछकर मर्ज सॉर्ट एल्गो का उपयोग करता है यदि कोई कार्य बी से अधिक महत्वपूर्ण है, और फिर एक क्रमबद्ध सूची का निर्माण करता है।
फेलिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.