не залишайте відкриті файли org-порядку денного після створення порядку денного


14

Створення сьогоднішнього порядку денного в Org-Mode ( 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)

На жаль, це все ще не ідеально, оскільки зараз натискання на подію в порядку денному не відкриває відповідний файл org.

Відповіді:


11

Ви хочете org-agenda-exit, зручно прив’язати до x за замовчуванням у вікні порядку денного

Як `org-agenda-Quit ', але вбивайте будь-які буфери, створені в порядку денному. Органічні буфери, які відвідує безпосередньо користувач, не будуть торкатися.

Я знайшов це за допомогою describe-mode.


Тут є відповідна відповідь.
YoungFrog

1
Оцініть вказівник на describe-mode.
Метт

4

org-agenda-filesБуфер (и) повинні НЕ бути вбитим , поки після того , як функції пошуку завершення. Три (3) найпоширеніші функції пошуку, які використовуються для створення *Org Agenda*буфера, є org-agenda-list:; org-search-view; і org-tags-view. org-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

@scaramouche - У моєму первісному тестуванні переглянута чернетка, як видається, робить те, що ви прагнете - вона включає в себе aroundс advice.
законник

Тепер є ще одна проблема: натискання клавіші Enter у події порядку денного не відкриває відповідний файл. Можливо, немає приємного способу цього здійснити.
scaramouche

Так, це має сенс (тепер, коли я думаю про це), оскільки *Org-Agenda*буфер - це лише копія та вставка з org-agenda-files[виду, він фактично висувається в список, а потім реорганізується та вставляється в *Org-Agenda*буфер]. Під час редагування користувач переходить до оригіналу, org-agenda-filesщоб зробити редагування, яке, можливо, редагує функції вже відкрито. Якщо вам дійсно потрібно org-agenda-filesзакрити, коли він не використовується, вам знадобиться переглянути функції редагування, щоб відкрити потрібний файл, а потім знову закрити його після завершення. Можуть бути й інші питання
законник

1

Після того, як ви відкрили порядок денний, просто вийдіть з нього, натискаючи x у буфері порядку денного будь-коли. Якщо ви використовуєте q для цілого порядку денного, він збереже всі буфери відкритими.


3
Ваша відповідь, по суті, є дублікатом user2699цього повідомлення, розміщеним 19 лютого 2016 р.
законник

-1

Я перейшов на новий робочий процес в org-режимі.

Раніше я використовую:

  • NOTE.org як основне сховище для вільних нотаток форми, відредаговане вручну з прив’язкою клавіш для швидкого доступу до цього файлу
  • TODO.orgдля org-rememberабо(lambda () (interactive) (org-capture nil "t"))

TODO.orgЯ відвідую тільки через C-c a a. Але NOTE.orgстаньте нездійсненним, розмір якого перевищує 1 МіБ простого тексту.

Тому я розділити цей файл за основними легким зазначеними тем, як LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Замість того, щоб підтримувати список можливих імен, я вказав каталог:

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

Я задоволений цим налаштуванням, тому що я швидко зможу знайти потрібну тему, перейшовши на буфер (від IDO через значущу назву файлу) та шукаючи (від 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.