議題を生成した後、org-agenda-filesを開いたままにしないでください


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)

残念ながら、アジェンダ内のイベントをクリックしても対応する組織ファイルは開かれないため、これはまだ完璧ではありません。

回答:


11

あなたは欲しいorg-agenda-exit便利な議題ビューでは、デフォルトでXに結合され、

「org-agenda-Quit」に似ていますが、アジェンダによって作成されたバッファをすべて削除します。ユーザーが直接アクセスした組織バッファーは変更されません。

を使用してこれを見つけましたdescribe-mode


ここで正解。
YoungFrog

1
へのポインタに感謝しますdescribe-mode
マット

4

org-agenda-filesバッファ(複数可)する必要がありません検索機能が終了した後まで、殺されます。*Org Agenda*バッファの生成に使用される最も一般的な3つの検索関数は次のとおり org-agenda-listです。org-search-view; およびorg-tags-vieworg-agenda-files変数と関数の両方であり、2つの異なるが関連する動物です。

(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-私の最初のテストでは、改訂されたドラフトはあなたが求めていることをしているように見えます-withを組み込んでaroundadviceます。
ローリスト14

ここで別の問題があります。アジェンダのイベントでEnterキーを押しても、対応するファイルは開かれません。これを実装する良い方法はないかもしれません。
scaramouche

はい、それは理にかなっています(今私はそれについて考えています)*Org-Agenda*バッファは単なるコピーアンドペーストorg-agenda-filesであるためです(実際にはリストにプッシュされ、その後再編成されて*Org-Agenda*バッファに挿入されます)。編集するとき、ユーザーは元org-agenda-filesに戻って編集を行います。編集機能は、編集機能がすでに開いていると想定します。org-agenda-files使用していないときに本当に閉じなければならない場合は、編集機能を修正して必要なファイルを開き、完了したら再び閉じる必要があります。他の問題もある可能性があります
ローリスト14

1

アジェンダを開いたら、いつでもアジェンダのバッファでxを押して終了します。予定表にqを使用すると、すべてのバッファが開いたままになります。


3
あなたの答えはuser2699、2016年2月19日に投稿されたものの複製です。–法律リスト
21:01

-1

新しい組織モードのワークフローに切り替えました。

以前は私が使用します:

  • NOTE.org このファイルにすばやくアクセスするためのキーバインドを使用して、手で編集されたフリーフォームのメモの主記憶として
  • TODO.org以下のためorg-remember(lambda () (interactive) (org-capture nil "t"))

TODO.org経由でのみアクセスしC-c a aます。ただしNOTE.org、1 MiBのプレーンテキストを超えるサイズでは維持できなくなります。

だから私のような、メインの簡単な区別のトピックで、このファイルを分割しましたLEARNING.orgPURCHASES.orgemacs-python.orglinux.orgvps.org、...

可能な名前のリストを維持する代わりに、ディレクトリを指定しました:

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

C-s限られたスペースで(意味のあるファイル名によるIDOによる)バッファーへの切り替えと(by )による検索により、必要なトピックをすばやく見つけることができるため、このセットアップに満足しています。

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.