gündem oluşturduktan sonra kuruluş-gündem dosyalarını açık tutma


14

Org-Mode ( C-c a a) içinde bugünün gündemini oluşturmak dosyaları içinde açar org-agenda-files. Emacs'ın bu ekstra arabellekleri açmasını istemiyorum.

Emacs'a bu tamponları açmamalarını söylemenin kolay bir yolu var mı? (veya aynı şey, gündemi aramadan önce açık değilse otomatik olarak kapatmak için?).

GÜNCELLEME:

Bu, @lawlist tarafından sağlanan çözümün daha kompakt bir sürümüdür:

(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)

Ne yazık ki, bu hala mükemmel değil, çünkü şimdi gündemdeki bir olaya tıklamak ilgili kuruluş dosyasını açmıyor.

Yanıtlar:


11

org-agenda-exitGündem görünümünde varsayılan olarak x'e uygun şekilde istediğiniz

`` Org-agenda-Quit '' gibi, ancak gündem tarafından oluşturulan arabellekleri öldürün. Doğrudan kullanıcı tarafından ziyaret edilen kuruluş tamponlarına dokunulmaz.

Bunu kullanarak buldum describe-mode.


Sane cevap burada.
YoungFrog

1
İşaretçiyi takdir edin describe-mode.
Matt

4

org-agenda-filesTampon (lar) olmalıdır değil arama fonksiyonları bitirdikten sonraya kadar öldürülebilir. Bir *Org Agenda*arabellek oluşturmak için kullanılan en yaygın üç arama fonksiyonu şunlardır org-agenda-list:; org-search-view; ve org-tags-view. org-agenda-fileshem değişken hem de işlevdir - iki farklı, ancak ilişkili hayvan.

(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))

Bu iyi. Tek sorun, gündemi oluşturmadan önce açık olan bir tamponu öldürmek istememem. Bu nedenle, doğru çözümün "etrafta" bir tavsiye yaratmayı gerektirdiği görülmektedir.
scaramouche

@scaramouche - İlk testimde, gözden geçirilmiş taslak aradığınız şeyi yapıyor gibi görünüyor - aroundile birleştiriyor advice.
hukukçu

Şimdi başka bir sorun daha var: Gündemdeki bir olayda enter tuşuna basıldığında ilgili dosya açılmaz. Belki de bunu uygulamanın güzel bir yolu yoktur.
scaramouche

Evet, bu mantıklı (şimdi bunun hakkında düşünüyorum) çünkü *Org-Agenda*tampon sadece bir org-agenda-filestür kopyadır ve yapıştırır *Org-Agenda*. Düzenleme sırasında, kullanıcı org-agenda-filesdüzenleme işlevlerinin zaten açık olduğunu varsaydığı düzenlemeyi yapmak için orijinaline geri atlar . Kullanılmadığı zamanlarda gerçekten org-agenda-fileskapalı olması gerekiyorsa, gerekli dosyayı açmak için düzenleme işlevlerini gözden geçirmeniz ve bittiğinde tekrar kapatmanız gerekir. Başka sorunlar da olabilir
hukukçu

1

Gündemi açtıktan sonra, herhangi bir zamanda gündem arabelleğinde x tuşuna basarak çıkın. Eğer q gündemi oldukça kullanırsanız, tüm arabellekleri açık tutacaktır.


3
Cevabınız büyük ölçüde user269919 Şubat 2016'da yayınlanan bir kopyası .
hukukçu

-1

Yeni kuruluş modu iş akışına geçtim.

Önceden kullanıyorum:

  • NOTE.org Bu dosyaya hızlı erişim için anahtar ciltleme ile elle düzenlenen ücretsiz form notları için ana depolama alanı olarak
  • TODO.orgiçin org-rememberveya(lambda () (interactive) (org-capture nil "t"))

TODO.orgSadece üzerinden ziyaret ediyorum C-c a a. Ancak NOTE.org1 MiB düz metinden daha büyük boyutlarla sürdürülemez olun.

Ben ana kolay seçkin konular bu dosyayı bölmek Yani, gibi LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Olası isimlerin listesini tutmak yerine dizini belirttim:

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

Bu kurulumdan memnunum çünkü hızlı bir şekilde ara belleğe geçerek (anlamlı dosya adı ile IDO ile) ve C-ssınırlı alanda (tarafından ) arama yaparak gerekli konuyu bulabilirim .

Tüm programlar C-c a atüm .orgdosyalar üzerinden kullanılabilir .

Ama şimdi bir sürü açık kullanılmayan .orgdosya var, bundan sonra C-c a aarabellek anahtarları sırasında göründüğünde öldürmem gerekiyor.

Bu hata raporunun gönderilmesi gerektiğini düşünüyorum:

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.