3

次のような日付エントリを含む大きなジャーナル ファイルがあります。

[2011-06-23 木]

いくつかのテキスト

[2011-06-22 水]

もう少しテキスト

[... 12MB のテキストを後で ...]

[2000-01-01 土]

最初のエントリ

過去 3 か月のみが表示されるように org-mode を構成できるようにしたいと考えていますが、古いエントリは折りたたまれ、必要な場合にのみ展開されます。これを自動的に設定して、新しい日ごとに 3 か月 + 1 日古いエントリが次回折りたたまれるようにする方法はありますか?

今のままでは、ドキュメントの読み込みに 1 分以上かかるため、使用することはできません。

4

4 に答える 4

3

12MB のテキストを使用すると、膨大な数の日付エントリの見出しが必要になるため、バッファを狭くすることは依然として良い方法であると考えられます。

私は組織モードの初心者なので、これを達成するためのより簡単な方法を見逃している可能性がありますが、次の方法では、現在の日付の 3 か月前以降に作成されたエントリにバッファを自動的に絞り込みます。

(defvar my-org-journal "/path/to/file.org")

(add-hook 'org-mode-hook 'my-org-mode-hook)
(defun my-org-mode-hook ()
  (when (equal (expand-file-name (buffer-file-name))
               (expand-file-name my-org-journal))
    (my-org-narrow-to-month-of-entries)))

(defun my-org-narrow-to-month-of-entries ()
  "Narrow buffer to entries within the last three months."
  (interactive)
  (let ((minimum-date
         (with-temp-buffer
           (progn
             (org-insert-time-stamp (current-time) nil t)
             (org-timestamp-change -3 'month)
             (buffer-substring-no-properties
              (point-min) (point-max))))))
    (save-excursion
      (while (search-forward-regexp org-tsr-regexp-both nil t)
        (let ((end (point)))
          (backward-sexp)
          (let ((datestamp (buffer-substring-no-properties (point) end)))
            (if (string< datestamp minimum-date)
                (narrow-to-region (point-min) (point))
              (forward-sexp))))))))

そしてもちろん、C-xnwバッファを再び広げてすべてのエントリを表示します。

ファイル名ではなくローカル変数に基づいてこれを適用する場合は、代わりに次のアプローチを使用できます。

(defvar my-org-narrow-to-month-of-entries nil)

(add-hook 'org-mode-hook 'my-org-mode-hook)
(defun my-org-mode-hook ()
  (add-hook 'hack-local-variables-hook
            (lambda () (when my-org-narrow-to-month-of-entries
                         (my-org-narrow-to-month-of-entries)))
            nil t))

ファイルの最後に次を追加します。

;;; Local Variables:
;;; my-org-narrow-to-month-of-entries: t
;;; End:

参考文献:

編集:

正直なところ、それがその長いロード時間について何かをするかどうかはわかりません. 同等のサイズのサンプル組織ファイルは、リモートでマシンにロードするのにそれほど時間はかかりませんが、それがより優れたハードウェアによるものなのか、単純なダミー ファイルの処理が容易なためなのかはわかりません。

上記の方法で改善されない場合は、org-mode を初期化する前に縮小を行うことを検討し、それによって違いが生じるかどうかを確認できますか?

以下はこれを行う最良の方法ではないかもしれませんが、違いが生じる場合に備えて、パフォーマンス上の理由から試してみる価値があります。

これは、上記の最初の例と同様に、org-mode-hook の代わりにmy-org-journal、ファイル名に変数を使用します。

(defadvice insert-file-contents (after my-insert-file-contents)
  (when (equal (expand-file-name (buffer-file-name))
               (expand-file-name my-org-journal))
    (require 'org)
    (my-org-narrow-to-month-of-entries)))
(ad-activate 'insert-file-contents)
于 2011-06-24T14:30:02.637 に答える
2

あなたが求めていることを完全に自動化する方法はありません。いくつかの elisp/org-mode チョップを持つ誰かがそれを自動化できると確信しています。

役立つ可能性がある組織モードの機能を次に示します。

  • ( 経由で) アーカイブ タグを使用して見出しにラベルを付けることができます。これにより、表示を切り替えたC-c C-x aときに見出しが展開されなくなります。Archiving に関する組織モードのマニュアルを参照してください。可視性に関しては、それで目的が達成されると思います。
  • @Juancho がコメントしたように、式に一致するタイムスタンプを検索できます。これにより、一致のリストが生成され、キーボード マクロを簡単に記述して、それぞれをアーカイブとしてタグ付けできます。org-mode での高度な検索に関する優れたドキュメントを次に示します。

私のシステムでこれを試したときに見つけた 1 つの煩わしさは、検索結果がすべての見出しレベルのフラットなリストになってしまうことです。エントリを整理する方法としては、検索対象を最上位の見出しに限定する方がよいでしょう (これは、日誌の毎日のエントリに使用する方法です)。いくつかのプロパティを設定することで回避できると確信しています。または、組織モードが特定のレベルで検索をフィルタリングできる可能性があります。

于 2011-06-23T19:12:09.003 に答える
2

でアジェンダ ビューを作成C-[し、 で日次/週次のアジェンダを表示しC-u 90 C-c a aます。これをカスタマイズして何かにバインドできます。 http://www.gnu.org/software/emacs/manual/html_node/org/Custom-agenda-views.html#Custom-agenda-viewsを参照してください。

[編集] 実際、これは古いエントリの折りたたみに関する質問には答えませんが、関連するエントリのみを表示できるようにします。

于 2011-06-23T15:30:05.417 に答える
1

次の 3 つのオプションがあります。

  1. すべての古いエントリに対してVISIBILITYプロパティをに設定します。foldedを使用C-c a < aして、現在のファイルに制限されたアジェンダを取得してから、エントリをマークし、上記のプロパティをまとめて設定できます。
  2. を使用して、古い日誌エントリを「アーカイブ兄弟」に移動しC-c C-x Aます。
  3. を使用して、古いエントリをアーカイブ ファイルにアーカイブしますC-c C-x C-s
于 2011-07-21T14:32:31.823 に答える