对于 12MB 的文本,这肯定是大量的日期条目标题,所以我想缓冲区缩小可能 still 是一个不错的选择。
我是一个 org-mode 新手,所以我可能错过了一种更简单的方法来实现这一点,但以下内容会自动将缓冲区缩小到自当前日期前三个月以来所做的条目。
(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 文件在我的机器上加载并不需要很长时间,但我不知道这是由于更好的硬件,还是我的简单虚拟文件更容易处理。
如果上述方法没有改善,我们可以考虑在 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)