С 12 МБ текста, это должно быть огромное количество заголовков ввода даты, поэтому я мог бы предположить, что сужение буфера может все же быть хорошим способом.
Яновичок в режиме орг, поэтому я могу упустить более простой способ добиться этого, но следующее автоматически сузит буфер до записей, сделанных за три месяца до текущей даты.
(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))))))))
И,конечно, Cx n w , чтобы снова расширить буфер, чтобы увидеть все записи.
Если вы хотите применить это на основеЛокальная переменная, а не по имени файла, вы можете использовать этот подход вместо этого:
(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:
Ссылки:
edit:
Я не уверен, если это будет что-то делать с этим долгим временем загрузки, если честно.Пример файла орга сравнимого размера не требует удаленной загрузки на моем компьютере, но я не знаю, связано ли это с улучшением оборудования или с упрощением обработки моего простого фиктивного файла.
ЕслиВышесказанное не улучшает ситуацию, мы могли бы взглянуть на то, как сужение произойдет до инициализации режима org, и посмотреть, имеет ли это какое-то значение?
Следующее может быть не лучшим способом сделать это, ноСтоит попробовать по соображениям производительности, на всякий случай, если это что-то изменит.
Это будет вместо 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)