2013-06-02 37 views
1

我做了一個函數,編譯當前乳膠文件:elisp的哨兵等待輸入

​​

當有錯誤,在編譯或pdflatex凍結了,我看到:

enter image description here

我目前的工作流程:

  1. 向上滾動查看錯誤
  2. kill-this-buffer - kill pdflatex進程
  3. delete-window - 關閉* async pdflatex *窗口並返回編輯狀態。

是否有可能跟蹤,該進程已停止並正在等待用戶輸入?我目前的哨兵只在「完成」事件中激活。所以我可以自動化我當前的工作流程。

+0

您是否知道AUCTeX模式? – Thomas

+0

@Thomas是的,我知道 – user4035

+2

你可以嘗試的一件事是將命令改爲'pdflatex legoscia

回答

3

[@Thomas:你不需要AUCTeX。內建latex-mode還爲該任務提供了一個C-c C-c綁定。 ]

一般來說,檢測一個進程是否在「等待我」是困難的或不可能的(最好你可能監視進程的CPU使用情況,如果它一直是0%,你可以決定它可能正在等待你,但即使這樣做也很棘手,因爲您需要找到適當的OS進程來監視,然後使用依賴於系統的操作來獲取CPU使用率)。乳膠模式通常通過在pdflatex的命令行上傳遞\nonstopmode\input來「解決」這個問題。

0

我有同樣的困難。以下似乎是確定的。

(defun latex-compile() 
    (interactive) 
    (save-buffer) 
    (set 'tex-to-pdf "pdflatex -interaction=nonstopmode") 
    (set 'file-name (shell-quote-argument (buffer-file-name))) 
    (set 'comm1 (concat tex-to-pdf " " file-name)) 
    (set-process-sentinel 
    (start-process-shell-command "latex-compile" 
       "*async latex-compile*" 
       comm1) 
    'tex-to-pdf-sentinel)) 
;;; 
(defun tex-to-pdf-sentinel (process event) 
    (cond 
    ((string-match-p "finished" event) 
    (message "latex-compile complete")) 
    ((string-match-p "\\(exited\\|dumped\\)" event) 
    (message "error in latex-compile")) 
    )) 

我意識到使用全局變量set是不可取的;這只是一個簡單的例子。

第一次完成時,您可以設置第二個sentilel,例如,以便查看器打開以顯示.pdf輸出,或者您希望確保每次運行bibtex。這可以節省重複呼叫C-c C-c in latex mode