You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

72 lines
2.6 KiB

;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.
;; Thanks to ffevotte https://github.com/ffevotte/emacs.d/blob/master/setup-compile.el
;; Parse LaTeX output to determine the source file
(defun ff/compilation-error-latex-file ()
"Analyse the LaTeX output to find the source file in which an error was reported."
(condition-case nil
(save-excursion
(save-match-data
(let ((found nil)
(bound (point))
beg
filename)
(while (not found)
;; Search backward for an opening paren
(search-backward "(" nil)
;; Try to find a matching closing paren
(condition-case nil
(save-excursion
(goto-char (scan-sexps (point) 1))
(when (or (> (point) bound) ;; Closing paren after the error message
(not (looking-back ")"))) ;; Non-matching closing delimiter
(setq found t)))
;; Unbalanced expression
((error)
(setq found t))))
;; Extract filename
(setq beg (1+ (point)))
(re-search-forward "[[:space:]]" nil)
(setq filename (buffer-substring beg (- (point) 1)))
(list filename))))
;; Unexpected error
((error)
nil)))
;; Unfill "LaTeX Warning" lines
(defun ff/compilation-LaTeX-filter ()
(interactive)
(save-excursion
(goto-char compilation-filter-start)
(setq buffer-read-only nil)
(while (re-search-forward "^LaTeX Warning: " nil t)
(while (not (re-search-forward "\\.$" (line-end-position) t))
(end-of-line)
(delete-char 1)
(beginning-of-line)))
(setq buffer-read-only t)))
(add-hook 'compilation-filter-hook 'ff/compilation-LaTeX-filter)
(require 'compile)
(add-to-list 'compilation-error-regexp-alist 'latex-warning)
(add-to-list 'compilation-error-regexp-alist-alist
'(latex-warning
"^LaTeX Warning: .* on input line \\([[:digit:]]+\\)\\.$" ;; Regular expression
ff/compilation-error-latex-file ;; Filename
1 ;; Line number
nil ;; Column number
1)) ;; Type (warning)