एजेंडा जेनरेट करने के बाद ओआरजी-एजेंडा-फाइल्स को खुला न रखें


14

ऑर्ग-मोड ( C-c a a) में आज का एजेंडा तैयार करना फाइलों को खोलता है org-agenda-files। मैं नहीं चाहता कि Emacs इन अतिरिक्त बफ़र्स को खोलें।

क्या Emacs को इन बफ़र्स को न खोलने का एक आसान तरीका है? (या क्या समान है, अगर एजेंडा कॉल करने से पहले वे खुले नहीं थे, तो उन्हें स्वचालित रूप से बंद कर दें?)।

अपडेट करें:

यह @lawlist द्वारा प्रदान किए गए समाधान का एक अधिक कॉम्पैक्ट संस्करण है:

(require 'dash)

(defun my-org-keep-quiet (orig-fun &rest args)
  (let ((buffers-pre (-filter #'get-file-buffer (org-agenda-files))))
    (apply orig-fun args)
    (let* ((buffers-post (-filter #'get-file-buffer (org-agenda-files)))
           (buffers-new  (-difference buffers-post buffers-pre)))
      (mapcar (lambda (file) (kill-buffer (get-file-buffer file))) buffers-new))))

(advice-add 'org-agenda-list :around #'my-org-keep-quiet)
(advice-add 'org-search-view :around #'my-org-keep-quiet)
(advice-add 'org-tags-view   :around #'my-org-keep-quiet)

अफसोस, यह अभी भी सही नहीं है, क्योंकि अब एजेंडा में एक घटना पर क्लिक करने से संबंधित ऑर्गन फ़ाइल नहीं खुलती है।

जवाबों:


11

आप चाहते हैं org-agenda-exit, एजेंडा दृश्य में डिफ़ॉल्ट रूप से x के लिए बाध्य है

`ऑर्ग-एजेंडा-क्विट 'की तरह, लेकिन एजेंडा द्वारा बनाए गए किसी भी बफ़र्स को मार दें। उपयोगकर्ता द्वारा सीधे विज़िट किए गए संगठन बफ़र्स को नहीं छुआ जाएगा।

मैंने इसका उपयोग किया describe-mode


साने जवाब यहाँ।
यंगफ्रॉग

1
करने के लिए सूचक की सराहना करते हैं describe-mode
मैट

4

org-agenda-filesबफर (रों) चाहिए नहीं जब तक के बाद खोज कार्यों समाप्त कर दिया है मारे जाने। *Org Agenda*बफर उत्पन्न करने के लिए उपयोग किए जाने वाले तीन (3) सबसे आम खोज कार्य हैं org-agenda-list:; org-search-view; और org-tags-vieworg-agenda-filesएक चर और फलन दोनों है - दो अलग, लेकिन संबंधित, जानवर।

(defvar opened-org-agenda-files nil)

(defun opened-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (setq opened-org-agenda-files nil)
    (mapcar
      (lambda (x)
        (when (get-file-buffer x)
          (push x opened-org-agenda-files)))
      files)))

(defun kill-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (mapcar
      (lambda (x)
        (when
            (and
              (get-file-buffer x)
              (not (member x opened-org-agenda-files)))
          (kill-buffer (get-file-buffer x))))
      files)))

(defadvice org-agenda-list (around opened-org-agenda-list-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-search-view (around org-search-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-tags-view (around org-tags-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

अच्छी बात है। एकमात्र समस्या यह है कि मैं एक बफर को मारना नहीं चाहूंगा जो एजेंडा बनाने से पहले खुला था। इस प्रकार, ऐसा लगता है कि सही समाधान के लिए "आसपास" सलाह बनाने की आवश्यकता है।
स्कारामूचे

@scaramouche - मेरे शुरुआती परीक्षण में, संशोधित ड्राफ्ट ऐसा प्रतीत होता है कि यह वह है जो आप चाह रहे हैं - यह इसके aroundसाथ शामिल है advice
कानून व्यवस्था

अब एक और समस्या है: एजेंडा में एक घटना में एंटर दबाने पर संबंधित फाइल नहीं खुलती है। शायद इसे लागू करने का कोई अच्छा तरीका नहीं है।
16

हां, यह समझ में आता है (अब कि मैं इसके बारे में सोचता हूं) क्योंकि *Org-Agenda*बफर सिर्फ org-agenda-files[ कॉपी ऑफ और पेस्ट है], यह वास्तव में एक सूची में धकेल दिया जाता है और फिर पुनर्गठित होकर *Org-Agenda*बफर में डाला जाता है ]। संपादन करते समय, उपयोगकर्ता संपादन करने के लिए वापस मूल org-agenda-filesपर कूदता है , जिसे संपादित करने का कार्य पहले से ही खुला है। यदि आपके पास वास्तव में org-agenda-filesबंद है जब उपयोग में नहीं है, तो आपको आवश्यक फ़ाइल को खोलने के लिए संपादन कार्यों को संशोधित करना होगा और फिर जब यह किया जाता है तब इसे फिर से बंद करना होगा। अन्य मुद्दे भी हो सकते हैं

1

आपके द्वारा एजेंडा खोलने के बाद, किसी भी समय एजेंडा बफर में x दबाकर इसे बाहर निकालें। यदि आप काफी एजेंडे के लिए q का उपयोग करते हैं तो यह सभी बफ़र्स को खुला रखेगा।


3
आपका उत्तर संभवतः user269919 फरवरी, 2016 को पोस्ट किया गया एक डुप्लिकेट था।
कानून

-1

मैंने नए org- मोड वर्कफ़्लो पर स्विच किया।

पहले मैं उपयोग करता हूं:

  • NOTE.org इस फ़ाइल की त्वरित पहुँच के लिए मुख्य बाइंडिंग के साथ हाथ से संपादित मुफ्त नोट्स के लिए मुख्य भंडारण के रूप में
  • TODO.orgके लिए org-rememberया(lambda () (interactive) (org-capture nil "t"))

TODO.orgमैं केवल यात्रा करता हूं C-c a a। लेकिन NOTE.orgअधिक से अधिक आकार के साथ अप्राप्य हो जाते हैं तो सादे पाठ का 1 MiB।

इसलिए मैं मुख्य आसान प्रतिष्ठित विषयों के आधार पर इस फ़ाइल को विभाजित है, की तरह LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

संभावित नामों की सूची बनाए रखने के बजाय मेरे पास निर्दिष्ट निर्देशिका है:

(setq org-agenda-file-regexp "\\`[^.#].*[^_]\\.org\\'"
      org-agenda-files (list org-directory))

मैं इस सेटअप से खुश हूं क्योंकि मैं आवश्यक विषय को बफर में स्विच करके (सार्थक फ़ाइल नाम के माध्यम से आईडीओ द्वारा C-s) और सीमित स्थान में खोज (द्वारा ) पा सकता हूं ।

सभी कार्यक्रम के माध्यम से उपलब्ध C-c a aसभी भर में .orgफ़ाइलें।

लेकिन अब मेरे पास बहुत सारी खुली हुई अप्रयुक्त .orgफाइलें हैं C-c a aजिनके बाद मुझे बफर स्विच के दौरान दिखाई देने पर मारना चाहिए।

मुझे लगता है कि बग रिपोर्ट प्रस्तुत की जानी चाहिए:

http://debbugs.gnu.org/cgi/bugreport.cgi?archive=yes&bug=22734

24.5; do not leave opened org-agenda-files on org-agenda-list, etc.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.