組織モードのバッファを自動的に保存するにはどうすればよいですか?


22

org-modeTo Doリストを追跡するために、私は定期的にアジェンダを使用しています。Dropboxを使用してリストを同期するため、すべてのコンピューターで同じタスクを使用できるようにする必要があります。時々、クリーンアップの過程で、変更を保存するのを忘れて、オフィスに行ったときに自宅でemacsを開いたままにします(したがって、emacsを閉じるときに保存するように求められません)。*.orgアジェンダで変更されたアジェンダバッファへの変更を自動的に保存するにはどうすればよいですか?

編集:明確にするために、タスクのアジェンダビューを使用して概要を表示します。そのビューから、タスクのステータスを変更できます。さらに、remember-modeを使用して新しいタスクを追加し、それをアジェンダビューで再分類できます。アジェンダのこれらの変更により、組織モードのアジェンダバッファが変更され、保存する必要があります。これらの変更が行われたら、バッファーを自動的に保存したいと思います。


「アジェンダによって変更された* .orgアジェンダバッファへの変更を自動的に保存するにはどうすればよいですか?」?それは(私は理解していないもの)(自己矛盾するように思われる)「に自動的に議題を通じて...保存」または「議題を介して変更されているバッファ」だ場合、私は決めることができない
シグマ

@Sigma明確にするために質問を更新しました。
ライアン14

1
これまでの私の解決策はs、アジェンダビューで頻繁にキーをタップするように指を再トレーニングすることでした。
マンコフ14

@mankoff C-x C-sorg-agenda-fileに(アジェンダから、または直接)変更を加えるたびにヒットするように再訓練したと思います。自動ではありませんが、すべてが保存されます。
ジョナサンリーチペピン14

回答:


16

あなたのユースケースを満足させるかどうかはわかりませんが、簡単なハックは

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

Orgアジェンダバッファが開いている限り、すべての組織バッファが定期的に保存されます(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とorgバッファの両方で機能します。org-agenda-deadline自動保存を議題に制限する場合は、代わりに使用します。

任意の組織機能に対して同じことを行うことができるため、このメソッドを使用すると、組織バッファーをいつ保存するかを正確に選択できます。このアプローチは、@ Sigmaのメソッドが見逃しているいくつかのコーナーケースをカバーします。アジェンダauto-saveをトリガーする前にアジェンダを離れる場合でも、アジェンダの変更を保存したり、アジェンダの外で変更を行って保存を忘れたりすることができます。私は個人的に両方の方法を使用してすべてのベースをカバーしています。[編集:彼のソリューションを使用しなくなった理由については、@ Sigmaソリューションのコメントを参照してください。]


2
保存するのを忘れるのはリファイリング後だけなので、これは受け入れられた答えよりもうまく機能しました。(advice-add 'org-refile :after 'org-save-all-org-buffers)別のファイルにリファイルした後、orgファイルを自動的に保存しました。
このユーザーはヘルプを必要とします

これは、どの組織機能にも適用できるため、最良の答えです。
ケビン

私は、これを適用することがわかっていないorg-refile呼び出すことにより、特定の見出し(カーソル下の1を整頓ではなく)「へ移動し、」もはや私ができることを意味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-hooktoを変更します'org-agenda-finalize-hook。これは、アジェンダバッファを表示する直前に呼び出されます。


私の機能について言及するのを忘れた場合、dash.elが利用可能である必要があるので、それを覚えておいてください。
リーH 14

2
キャプチャ中に、アイテムを任意のorg-refile-targets宛先にすぐに再ファイリングできるため、保存org-agenda-filesが不十分である可能性があります。私はおそらくorg-save-all-org-buffers自分自身を呼び出すだろう。
sanityinc 14

1
PS dashそこを使用する必要はありません:mapcarが組み込まれ、同じことをします。
sanityinc 14

@sanityincありがとう、mapcarダッシュの代わりに使用するようにコードを更新しました!
リーH 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.