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)