Hi Keita, Ikumi Keita <ik...@ikumi.que.jp> writes:
> Thank you, it seems promising and worked well for my brief testing. Thank you for testing it! > Thanks. Have you signed FSF copyright assignment form for AUCTeX (or > Emacs) before? If not, please follow the instruction here: > https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.future I have completed the copyright assignment for Emacs, and I have contributed to Emacs before. > I'll wait for your update and install it when you tell us the > assignment is complete. Please find the attached patch. I think it should suffice to just record and check the modification time, so it is simpler than I originally thought. Regards, Pengji
>From c3bea464633ab75a7f2aab2df14279cdd2486aa8 Mon Sep 17 00:00:00 2001 From: Pengji Zhang <m...@pengjiz.com> Date: Fri, 25 Oct 2024 18:49:55 +0800 Subject: [PATCH] Use internal buffer for log file * tex.el (TeX-help-error): Insert contents of log file into an internal buffer (whose name starts with a space) instead of visiting the file. This is to avoid polluting, for example, the user's buffer list and recentf list. --- tex.el | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/tex.el b/tex.el index 4e361e4c..f95930a8 100644 --- a/tex.el +++ b/tex.el @@ -10011,6 +10011,11 @@ It must end with a fallback entry that matches any error, for example '((t (:inherit TeX-error-description-tex-said))) "Face for \"Help\" string in error descriptions.") +(defvar-local TeX--log-file-readin-modtime nil + "Recorded modification time of the TeX log file. +It is updated each time the file is read into the buffer, and is to +avoid unnecessary reads of the log file.") + (defun TeX-help-error (error output runbuffer type) "Print ERROR in context OUTPUT from RUNBUFFER in another window. TYPE is a symbol specifing if ERROR is a real error, a warning or @@ -10053,29 +10058,27 @@ a bad box." 'TeX-error-description-help) (let ((help (cdr (nth TeX-error-pointer error-description-list)))) - (save-excursion - (if (and (= (1+ TeX-error-pointer) - (length error-description-list)) - (let* ((log-buffer (find-buffer-visiting log-file))) - (if log-buffer - (progn - (set-buffer log-buffer) - (revert-buffer t t)) - (setq log-buffer - (find-file-noselect log-file)) - (set-buffer log-buffer)) - (auto-save-mode nil) - (setq buffer-read-only t) - (goto-char (point-min)) - (search-forward error nil t 1)) - (re-search-forward "^l\\." nil t) - (re-search-forward "^ [^\n]+$" nil t)) - (let ((start (1+ (point)))) - (forward-char 1) - (re-search-forward "^$") - (concat "From the .log file...\n\n" - (buffer-substring start (point)))) - help))))) + (or (and (= (1+ TeX-error-pointer) + (length error-description-list)) + (with-current-buffer + (get-buffer-create (format " *%s*" log-file)) + (let ((modtime (file-attribute-modification-time + (file-attributes log-file)))) + (unless (and TeX--log-file-readin-modtime + (time-equal-p TeX--log-file-readin-modtime + modtime)) + (insert-file-contents log-file nil nil nil 'replace) + (setq TeX--log-file-readin-modtime modtime))) + (goto-char (point-min)) + (when (and (search-forward error nil t 1) + (re-search-forward "^l\\." nil t) + (re-search-forward "^ [^\n]+$" nil t)) + (let ((start (1+ (point)))) + (forward-char 1) + (re-search-forward "^$") + (concat "From the .log file...\n\n" + (buffer-substring start (point))))))) + help)))) (goto-char (point-min)) (TeX-special-mode) (TeX-pop-to-buffer old-buffer nil t))) -- 2.47.0