조직 모드 버퍼를 자동으로 저장하려면 어떻게합니까?


22

나는 정기적으로 org-mode의제를 사용 하여 할 일 목록을 추적합니다. Dropbox를 사용하여 목록을 동기화하므로 모든 컴퓨터에서 동일한 작업을 사용할 수 있어야합니다. 때로는 정리 과정 중에 변경 사항을 저장하지 않고 사무실에 갈 때 집에 emacs를 열어 두는 것을 잊게됩니다 (따라서 emacs를 닫을 때 저장하라는 메시지가 표시되지 않음). *.org아젠다를 통해 수정 된 아젠다 버퍼에 대한 변경 사항을 자동으로 저장하려면 어떻게 해야합니까?

편집 : 명확히하기 위해, 나는 작업의 의제보기를 사용하여 개요를 보여줍니다. 이보기에서 작업 상태를 변경할 수 있습니다. 또한 기억 모드를 사용하여 새 작업을 추가 한 다음 일정보기에서 다시 분류 할 수 있습니다. 아젠다의 이러한 변경으로 인해 수정 된 조직 모드 아젠다 버퍼가 생겨 저장해야합니다. 이러한 변경이 이루어지면 버퍼가 자동으로 저장되기를 원합니다.


"어젠다를 통해 수정 된 * .org 아젠다 버퍼에 대한 변경 내용을 자동으로 저장하려면 어떻게해야합니까?" ? "의제를 통해 자동으로 저장 ..."(자기 모순으로 보이는 것) 또는 "의제를 통해 수정 된 버퍼"(내가 이해할 수없는)인지 여부를 결정할 수 없습니다.
Sigma

@ 시그마 나는 명확히하기 위해 질문을 업데이트했습니다.
Ryan

1
지금까지의 해결책 s은 의제보기에서 손가락을 자주 탭하도록 손가락을 다시 훈련시키는 것 입니다.
mankoff

@ mankoff 나는 C-x C-sorg-agenda-file에서 (어젠다에서 또는 직접적으로) 변경을 할 때마다 스스로를 공격하도록 재교육했다고 생각 합니다. 자동은 아니지만 모든 내용을 저장합니다.
Jonathan Leech-Pepin

답변:


16

확실하지 않은 빠른 해킹은 사용 사례를 만족시킬 것입니다.

(add-hook 'org-agenda-mode-hook
          (lambda ()
            (add-hook 'auto-save-hook 'org-save-all-org-buffers nil t)
            (auto-save-mode)))

조직 아젠다 버퍼가 열려있는 한 모든 조직 버퍼는 주기적으로 저장됩니다 ( s아젠다보기에서 정기적으로 누르면 발생하는 것과 동일 함 ).

이는 auto-save-mode아젠다 버퍼 자체가 관련이있는 한 그다지 의미가 없다는 점에서 다소 모욕적 입니다 auto-save.

해당 핵을 사용하는 경우 모든 .org 파일에 대한 백업 파일을 안전하게 보관하는 것이 좋습니다.


1
이 접근 방식의 주요 문제점은 자동 저장이 아젠다 버퍼를 활성 디렉토리의 파일에 저장한다는 것입니다. 이것은 내 파일 시스템에 흩어져있는 많은 수의 고아 자동 저장 파일을 만들었습니다. 해결 방법을 잘 모릅니다.
holocronweaver

7

특정 아젠다 함수가 호출 될 때마다 모든 조직 버퍼를 저장할 수 있습니다. 예를 들어, 의제를 종료 한 후 모든 조직 버퍼를 저장하려면 다음을 수행하십시오.

(advice-add 'org-agenda-quit :before 'org-save-all-org-buffers)

또는 마감일을 추가 한 후 각 편집 후에 모든 조직 버퍼를 저장할 수 있습니다.

(advice-add 'org-deadline :after 'org-save-all-org-buffers)

이것은 조직 의제와 조직 버퍼 모두에서 작동합니다. org-agenda-deadline자동 저장을 아젠다로 제한 하려면 대신 사용하십시오 .

모든 조직 기능에 대해 동일한 작업을 수행 할 수 있으므로이 방법을 사용하면 조직 버퍼를 저장할시기를 정확하게 선택할 수 있습니다. 이 방법은 @Sigma의 방법이 놓친 몇 가지 경우를 다룹니다. 이전에 일정을 떠나거나 일정을 변경하지 않고 저장하지 않은 경우에도 일정 변경 사항 auto-save을 저장할 수 있습니다. 나는 개인적으로 두 가지 방법을 사용하여 모든 기지를 덮습니다. [편집 : 더 이상 자신의 솔루션을 사용하지 않는 이유는 @Sigma 솔루션에 대한 의견을 참조하십시오.]


2
내가 저장하는 것을 잊어 버린 유일한 시간은 내가 파일을 복원 한 후에 만 ​​가능하기 때문에 이것은 허용 된 답변보다 나에게 더 효과적이었습니다. (advice-add 'org-refile :after 'org-save-all-org-buffers)다른 파일로 파일을 다시 제출 한 후 조직 파일을 자동으로 저장했습니다.
이 사용자에게 도움이 필요합니다

이것은 원하는 조직 기능에 적용될 수 있으므로 가장 좋은 대답입니다.
KevinG

이것을 적용하면 접두사 인수 org-refile로 호출 org-refile하여 더 이상 특정 헤드 라인 (커서 아래의 제목을 다시 작성하는 대신)으로 이동할 수 없음 을 의미합니다 .
quantum285

6

더 복잡한 많은 답변을 볼 수 있습니다.

`(add-hook 'auto-save-hook 'org-save-all-org-buffers)`

30 초 동안 활동이 없으면 자동 저장이 기본값으로 실행됩니다 (및 설명서에 설명 된 기타 관련없는 시나리오 의 경우 ).


정확히 내가 찾던 것.
LVB

4

다음 스 니펫을 사용하여 새 캡처 후 모든 일정 모드 버퍼를 자동으로 저장하지만 원하는 위치에 연결할 수 있습니다.

(defun my/save-all-agenda-buffers ()
  "Function used to save all agenda buffers that are
currently open, based on `org-agenda-files'."
  (interactive)
  (save-current-buffer
    (dolist (buffer (buffer-list t))
      (set-buffer buffer)
      (when (member (buffer-file-name)
                    (mapcar 'expand-file-name (org-agenda-files t)))
        (save-buffer)))))

;; save all the agenda files after each capture
(add-hook 'org-capture-after-finalize-hook 'my/save-all-agenda-buffers)

의제 버퍼를 표시하기 직전에 호출된다고 생각하는를 'org-capture-after-finalize-hook로 변경하십시오 'org-agenda-finalize-hook.


내 기능을 언급하는 것을 잊어 버렸습니다 .dash.el을 사용할 수 있어야하므로 명심하십시오.
Lee H

2
캡처하는 동안 항목을 org-refile-targets대상으로 즉시 다시 파일링 할 수 있으므로 저장 org-agenda-files이 충분하지 않을 수 있습니다. 아마 org-save-all-org-buffers나 자신 에게 전화했을 것입니다 .
sanityinc

1
추신 : dash거기 에 사용할 필요가 없습니다 : mapcar내장되어 있으며 같은 일을합니다.
sanityinc

@ sanityinc 덕분 mapcar에 대시 대신 사용할 코드를 업데이트했습니다 !
Lee H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.