現在の latex ファイルをコンパイルする関数を作成しました。
;close the *async pdflatex* window, when pdflatex finishes
(defun latex-sentinel (process event)
(message event)
(cond ((string-match-p "finished" event)
(progn
(kill-buffer "*async pdflatex*")
(message "pdflatex done")
(delete-other-windows)))))
(defun latex-compile ()
"Runs pdflatex on current file"
(interactive)
(let* ((file-name (shell-quote-argument (buffer-file-name)))
(process (start-process-shell-command
"pdflatex"
"*async pdflatex*"
(concat "pdflatex " file-name))))
(set-process-sentinel process 'latex-sentinel)
(setq new-window (split-window-below 40))
(set-window-buffer new-window "*async pdflatex*")
(other-window 1)))
(add-hook 'LaTeX-mode-hook (lambda ()
(define-key LaTeX-mode-map (kbd "<f2>") 'latex-compile)))
コンパイル中にエラーが発生すると、pdflatex がフリーズし、次のように表示されます。
私の現在のワークフロー:
- 上にスクロールしてエラーを表示します
- kill-this-buffer - pdflatex プロセスを強制終了します
- delete-window - *async pdflatex* ウィンドウを閉じて編集に戻ります。
プロセスが停止し、ユーザー入力を待っていることを追跡することは可能ですか? 私の現在の歩哨は、「終了」イベントでのみアクティブになります。そのため、現在のワークフローを自動化できました。