summaryrefslogtreecommitdiff
path: root/tex-continuous.el
diff options
context:
space:
mode:
Diffstat (limited to 'tex-continuous.el')
-rw-r--r--tex-continuous.el124
1 files changed, 65 insertions, 59 deletions
diff --git a/tex-continuous.el b/tex-continuous.el
index 95fe4b8..b66c9c0 100644
--- a/tex-continuous.el
+++ b/tex-continuous.el
@@ -50,39 +50,12 @@
"Run latexmk continuously, report errors via flymake."
:group 'tex)
+;;; Flymake Backend
+
(defcustom tex-continuous-report-multiple-labels t
"Non-nil means report multiple label errors via flymake."
:type 'boolean)
-(defcustom tex-continuous-command
- '("latexmk -pvc -shell-escape -pdf -view=none -e "
- ("$pdflatex=q/pdflatex %O -synctex=1 -interaction=nonstopmode %S/"))
- "Command to compile LaTeX documents.
-This is a list consisting of strings or lists of strings. It is
-compiled to a single string by concatenating the strings and quoting the
-lists, using system-specific quotes. To produce the compilation
-command, it is combined with an additional option to output build files
-to a directory (if `TeX-output-dir' is set) and the name of the master
-file."
- :type '(repeat (choice string (repeat string))))
-
-(defun tex-continuous--compilation-command ()
- "Return the command used to compile the current LaTeX document."
- (let ((quote
- (if (memq system-type '(ms-dos windows-nt))
- "\""
- "'")))
- (concat
- (mapconcat (lambda (item)
- (if (listp item)
- (concat quote (mapconcat #'identity item) quote)
- item))
- tex-continuous-command)
- (when TeX-output-dir
- (concat " -outdir=" (shell-quote-argument TeX-output-dir)))
- " "
- (shell-quote-argument (TeX-master-file "tex")))))
-
(defun tex-continuous--get-help (message)
"Return the AUCTeX help string for MESSAGE."
(let ((error-alist
@@ -98,10 +71,6 @@ file."
(interactive)
(message "%s" (tex-continuous--get-help (help-at-pt-kbd-string))))
-(defun tex-continuous--buffer-file-name ()
- "Return the file name of the current buffer, or its base buffer."
- (or buffer-file-name (buffer-file-name (buffer-base-buffer))))
-
(defun tex-continuous-process-item (type file line message offset _context
search-string _line-end bad-box
_error-point ignore)
@@ -119,7 +88,9 @@ is an error rather than a warning."
(save-restriction
(widen)
(cond
- ((file-equal-p file (tex-continuous--buffer-file-name))
+ ((file-equal-p
+ file
+ (or buffer-file-name (buffer-file-name (buffer-base-buffer))))
(when line
(if (eq type 'error)
(save-excursion
@@ -186,6 +157,63 @@ Return a list of triples as in the docstring of
(apply #'tex-continuous-process-item item))
(tex-continuous--error-list (TeX-master-output-file "log")))))
+(defvar-local tex-continuous--report-fn nil
+ "Function provided by Flymake for reporting diagnostics.")
+
+(defun tex-continuous--clone-indirect-buffer-hook ()
+ "Set `tex-continuous--report-fn' to nil after cloning an indirect buffer."
+ (setq tex-continuous--report-fn nil))
+
+(defun tex-continuous-flymake (report-fn &rest _args)
+ "Flymake backend for LaTeX based on latexmk.
+Save REPORT-FN in a local variable, called by `tex-continuous--timer' to
+report diagnostics."
+ (setq tex-continuous--report-fn report-fn))
+
+(defun tex-continuous-send-report ()
+ "Report to the Flymake backend."
+ (funcall
+ tex-continuous--report-fn
+ (mapcar
+ (lambda (datum)
+ (cl-destructuring-bind (error-p description region) datum
+ (flymake-make-diagnostic
+ (current-buffer) (car region) (cdr region)
+ (if error-p :error :warning)
+ description)))
+ (tex-continuous-process-log))))
+
+;;; Continuous Compilation
+
+(defcustom tex-continuous-command
+ '("latexmk -pvc -shell-escape -pdf -view=none -e "
+ ("$pdflatex=q/pdflatex %O -synctex=1 -interaction=nonstopmode %S/"))
+ "Command to compile LaTeX documents.
+This is a list consisting of strings or lists of strings. It is
+compiled to a single string by concatenating the strings and quoting the
+lists, using system-specific quotes. To produce the compilation
+command, it is combined with an additional option to output build files
+to a directory (if `TeX-output-dir' is set) and the name of the master
+file."
+ :type '(repeat (choice string (repeat string))))
+
+(defun tex-continuous--compilation-command ()
+ "Return the command used to compile the current LaTeX document."
+ (let ((quote
+ (if (memq system-type '(ms-dos windows-nt))
+ "\""
+ "'")))
+ (concat
+ (mapconcat (lambda (item)
+ (if (listp item)
+ (concat quote (mapconcat #'identity item) quote)
+ item))
+ tex-continuous-command)
+ (when TeX-output-dir
+ (concat " -outdir=" (shell-quote-argument TeX-output-dir)))
+ " "
+ (shell-quote-argument (TeX-master-file "tex")))))
+
(defun tex-continuous--compilation-buffer-name ()
"Return the name of the buffer used for LaTeX compilation."
(let ((master (abbreviate-file-name (expand-file-name (TeX-master-file)))))
@@ -214,7 +242,8 @@ This is the case if the current buffer is not modified, the current
buffer is a file, the current buffer has a log file, the log file is
newer than the current buffer, and the current latexmk compilation is
either in a watching state or has not updated recently."
- (when-let* ((file (tex-continuous--buffer-file-name))
+ (when-let* ((file
+ (or buffer-file-name (buffer-file-name (buffer-base-buffer))))
(log-file (TeX-master-output-file "log")))
(and
(when-let ((buf tex-continuous--compilation-buffer))
@@ -238,20 +267,6 @@ either in a watching state or has not updated recently."
(defvar tex-continuous-mode)
-(defvar-local tex-continuous--report-fn nil
- "Function provided by Flymake for reporting diagnostics.")
-
-(defun tex-continuous--clone-indirect-buffer-hook ()
- "Set `tex-continuous--report-fn' to nil after cloning an indirect buffer."
- (setq tex-continuous--report-fn nil))
-
-(defun tex-continuous-flymake (report-fn &rest _args)
- "Flymake backend for LaTeX based on latexmk.
-Save REPORT-FN in a local variable, called by `tex-continuous--timer' to
-report diagnostics."
- (when tex-continuous-mode
- (setq tex-continuous--report-fn report-fn)))
-
(defvar tex-continuous--timer nil
"Timer for reporting changes to the log file.")
@@ -260,16 +275,7 @@ report diagnostics."
(and tex-continuous-mode
tex-continuous--report-fn
(tex-continuous--fresh-p)
- (funcall
- tex-continuous--report-fn
- (mapcar
- (lambda (datum)
- (cl-destructuring-bind (error-p description region) datum
- (flymake-make-diagnostic
- (current-buffer) (car region) (cdr region)
- (if error-p :error :warning)
- description)))
- (tex-continuous-process-log)))))
+ (tex-continuous-send-report)))
(defvar-local tex-continuous--subscribed-buffers nil
"List of buffers subscribed to the current LaTeX compilation.")