의제를 생성 한 후 조직 아젠다 파일을 열어 두지 마십시오


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 결합,

`org-agenda-Quit '과 같지만 아젠다에 의해 생성 된 모든 버퍼를 제거하십시오. 사용자가 직접 방문한 조직 버퍼는 건드리지 않습니다.

나는 이것을 사용하여 이것을 발견했다 describe-mode.


Sane이 여기에 대답합니다.
YoungFrog

1
에 대한 포인터를 주셔서 감사합니다 describe-mode.
Matt

4

org-agenda-files버퍼 (들)해야 하지 검색 기능이 완료 할 때까지 살해. *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.
lawlist

이제 또 다른 문제가 있습니다. 의제에서 이벤트에서 Enter 키를 누르면 해당 파일이 열리지 않습니다. 아마도 이것을 구현하는 좋은 방법이 없을 수도 있습니다.
scaramouche 2014

그렇습니다. *Org-Agenda*버퍼는 단지 복사와 붙여 넣기 이기 때문에 (이것에 대해 생각합니다.) org-agenda-files[종류는 실제로 목록으로 푸시 된 다음 재구성되고 *Org-Agenda*버퍼에 삽입됩니다 ]. 편집 할 때 편집 org-agenda-files기능이 이미 열려 있다고 가정하면 편집을 위해 원본 으로 되돌아갑니다 . org-agenda-files사용하지 않을 때 실제로 닫아야하는 경우 편집 기능을 수정하여 필요한 파일을 연 다음 완료되면 다시 닫아야합니다. 다른 문제들도있을 수 있습니다
법률가

1

의제를 연 후에는 언제든지 의제 버퍼에서 x를 눌러 종료하십시오. 의제로 q를 사용하면 모든 버퍼가 열린 상태로 유지됩니다.


3
귀하의 답변은 user26992016 년 2 월 19 일에 게시 된 내용과 유사합니다 .
lawlist

-1

새로운 조직 모드 워크 플로로 전환했습니다.

이전에는 다음을 사용합니다.

  • NOTE.org 이 파일에 빠르게 액세스하기 위해 키 바인딩으로 직접 편집 한 자유 양식 노트의 기본 저장소
  • TODO.org대한 org-remember(lambda () (interactive) (org-capture nil "t"))

TODO.org를 통해서만 방문합니다 C-c a a. 그러나 NOTE.org일반 텍스트의 1MiB보다 큰 크기로 유지 관리 할 수 ​​없게됩니다.

내가 메인 쉽게 구별 주제로이 파일을 분할 그래서 같은 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제한된 공간에서 버퍼로 전환하고 (의미있는 파일 이름을 통해 IDO로) 검색하여 필요한 주제를 빠르게 찾을 수 있기 때문에이 설정에 만족 합니다.

를 통해 사용할 수있는 모든 스케줄 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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.