Hello, I have modified TeX-LaTeX-sentinel a bit for my uses and I think other AUCTeX users could benefit from these modifications. The motivation is that I wanted to be able to get an idea of the number of warnings and bad boxes and be able to see them if I explicitly call TeX-error-overview, while still being shown that overview if there are errors -- working with colleagues it is sometimes difficult to maintain a zero-warning life-style.
Attached is an incomplete patch. Here is a summary of changes: - `TeX-error-overview-open-after-TeX-run` can have the value `errors` in which case only if there are errors would the TeX-error-overview open. - When there are no errors, the number of warnings and bad boxes are always displayed. Also, rather than have several possible messages after compilation, the message is always something like: XXX: successfully formatted {29} pages A -- B or in some unusual cases XXX: faced problems formatting {29} pages A -- B where `A` is something like (with 4 warnings and 5 bad boxes) and `B` is something like rerun Bibtex. or unresolved citations. I find this a bit cleaner especially when I couple it with a "buffer-local" display rule for TeX-error-overview buffers and disable the selection of the error overview window when automatically opened after TeX-run. -- Al
diff --git a/tex.el b/tex.el index 6f8267ac..c5675f0a 100644 --- a/tex.el +++ b/tex.el @@ -8623,12 +8623,29 @@ Open the error overview if errors or warnings to show." (if TeX-parse-all-errors (TeX-parse-all-errors)) + + (let ((counts (make-hash-table)) + rerun-msg) + (mapc (lambda (entry) + (let ((type (nth 0 entry))) + (puthash + type + (1+ (gethash type counts 0)) + counts))) + TeX-error-list) + (if (and (with-current-buffer TeX-command-buffer - TeX-error-overview-open-after-TeX-run) + (and TeX-error-overview-open-after-TeX-run + (or (not (eq TeX-error-overview-open-after-TeX-run + 'errors)) + (gethash 'error counts)))) (TeX-error-overview-make-entries (TeX-master-directory) (TeX-active-buffer))) (TeX-error-overview)) - (cond ((TeX-TeX-sentinel-check process name)) + + (setq TeX-command-next nil) + (unless (TeX-TeX-sentinel-check process name) + (cond ((and (save-excursion (re-search-forward "^Package biblatex Warning: Please (re)run Biber on the file" @@ -8640,9 +8657,9 @@ errors or warnings to show." (append TeX-file-extensions BibTeX-file-extensions TeX-Biber-file-extensions))))) - (message "%s%s" "You should run Biber to get citations right, " - (TeX-current-pages)) - (setq TeX-command-next (with-current-buffer TeX-command-buffer + (setq rerun-msg "run Biber") + (setq TeX-command-next + (with-current-buffer TeX-command-buffer TeX-command-Biber))) ((and (save-excursion (re-search-forward @@ -8654,96 +8671,89 @@ errors or warnings to show." (append TeX-file-extensions BibTeX-file-extensions TeX-Biber-file-extensions))))) - (message "%s%s" "You should run BibTeX to get citations right, " - (TeX-current-pages)) + (setq rerun-msg "run BibTeX") (setq TeX-command-next (with-current-buffer TeX-command-buffer TeX-command-BibTeX))) ((re-search-forward "Package biblatex Warning: Please rerun LaTeX" nil t) - (message "%s%s" "You should run LaTeX again, " (TeX-current-pages)) + (setq rerun-msg "run LaTeX") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^(biblatex)\\W+Page breaks have changed" nil t) - (message "%s%s" "You should run LaTeX again - page breaks have changed, " - (TeX-current-pages)) + (setq rerun-msg "rerun LaTeX for page breaks") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^\\(?:LaTeX Warning: Label(s)\\|\ Package natbib Warning: Citation(s)\\)" nil t) - (message "%s%s" "You should run LaTeX again to get references right, " - (TeX-current-pages)) + (setq rerun-msg "rerun LaTeX for references") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^\\(?:(rerunfilecheck)\\|Package hyperref Warning:\\)\\W+\ Rerun to get outlines right" nil t) - (message "%s%s" "You should run LaTeX again to get outlines right, " - (TeX-current-pages)) + (setq rerun-msg "rerun LaTeX for outlines") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^LaTeX Warning: Reference" nil t) - (message "%s%s%s" name ": there were unresolved references, " - (TeX-current-pages)) - (let (dvi2pdf) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) - (setq TeX-command-next dvi2pdf) - (setq TeX-command-next TeX-command-Show)))) + (setq rerun-msg "unresolved references")) ((re-search-forward "^\\(?:LaTeX Warning: Citation\\|\ Package natbib Warning:.*undefined citations\\)" nil t) - (message "%s%s%s" name ": there were unresolved citations, " - (TeX-current-pages)) - (let (dvi2pdf) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) - (setq TeX-command-next dvi2pdf) - (setq TeX-command-next TeX-command-Show)))) + (setq rerun-msg "unresolved citations")) ((re-search-forward "^No file .*\\.\\(toc\\|lof\\|lot\\)\\.$" nil t) - (message "%s" (concat "You should run LaTeX again to get " - (upcase (match-string-no-properties 1)) - " right")) + (setq rerun-msg (concat "run LaTeX for " + (upcase (match-string-no-properties 1)))) (setq TeX-command-next TeX-command-default)) ((re-search-forward "Package longtable Warning: Table widths have \ changed\\. Rerun LaTeX\\." nil t) - (message - "%s" "You should run LaTeX again to get table formatting right") + (setq rerun-msg "rerun LaTeX for table formatting") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^hf-TikZ Warning: Mark '.*' changed\\. \ Rerun to get mark in right position\\." nil t) - (message - "%s" "You should run LaTeX again to get TikZ marks in right position") + (setq rerun-msg "rerun LaTeX for TikZ marks") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^Package Changebar Warning: \ Changebar info has changed." nil t) - (message - "%s" "You should run LaTeX again to get the change bars right") - (setq TeX-command-next TeX-command-default)) - ((re-search-forward "^LaTeX Warning: Endnotes may have changed. \ -Rerun to get them right" nil t) - (message - "%s" "You should run LaTeX again to get the endnotes right") + (setq rerun-msg "rerun LaTeX for endnotes") (setq TeX-command-next TeX-command-default)) ((re-search-forward "^\\* xsim warning: \"rerun\"" nil t) - (message - "%s" "You should run LaTeX again to synchronize exercise properties") - (setq TeX-command-next TeX-command-default)) - ((re-search-forward - TeX-LaTeX-sentinel-banner-regexp nil t) + (setq rerun-msg "rerun LaTeX for exercise properties") + (setq TeX-command-next TeX-command-default))) + (let* ((warnings (and TeX-debug-warnings (TeX-LaTeX-sentinel-has-warnings))) (bad-boxes (and TeX-debug-bad-boxes (TeX-LaTeX-sentinel-has-bad-boxes))) - (add-info (when (or warnings bad-boxes) + (add-info (if (or warnings bad-boxes) (concat " (with " - (when warnings "warnings") + (when warnings + (propertize + (format "%d warnings" + (gethash 'warning counts 0)) + 'face + 'TeX-error-description-warning)) (when (and warnings bad-boxes) " and ") - (when bad-boxes "bad boxes") - ")")))) - (message "%s" (concat name ": successfully formatted " - (TeX-current-pages) add-info))) + (when bad-boxes + (propertize + (format "%d bad boxes" + (gethash 'bad-box counts 0)) + 'face + 'TeX-error-description-warning)) + ")") + "")) + (msg (format "%s: %%s %s%s%s" + name + (TeX-current-pages) + add-info + (if rerun-msg + (concat " -- " rerun-msg) + "")))) + (if (re-search-forward TeX-LaTeX-sentinel-banner-regexp nil t) + (progn + (message msg "successfully formatted") + (unless TeX-command-next (let (dvi2pdf) (if (with-current-buffer TeX-command-buffer (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) (setq TeX-command-next dvi2pdf) - (setq TeX-command-next TeX-command-Show)))) - (t - (message "%s%s%s" name ": problems after " (TeX-current-pages)) - (setq TeX-command-next TeX-command-default))) + (setq TeX-command-next TeX-command-Show))))) + (message msg "faced problems formatting") + (unless TeX-command-next + (setq TeX-command-next TeX-command-default))))) ;; Check whether the idx file changed. (let (idx-file) @@ -8770,7 +8780,7 @@ Rerun to get them right" nil t) (run-hook-with-args 'TeX-after-compilation-finished-functions (with-current-buffer TeX-command-buffer (expand-file-name - (TeX-active-master (TeX-output-extension))))))) + (TeX-active-master (TeX-output-extension)))))))) ;; should go into latex.el? --pg (defun TeX-BibTeX-sentinel (_process _name)