2010-12-06 6 views
7

Est-il possible de passer un drapeau "-yes" à la commande "recompiler" dans emacs? Excusez mon manque complet de (e) savoir-faire en lisp. Je suis tombé malade d'aller à l'extérieur emacs pour compiler mon code de latex, donc j'ajouté la liaison clé suivante à mes .emacs:emacs (recompiler -y)

(global-set-key (kbd "<f12>") 'recompile); 

Est-il possible de répondre automatiquement « oui » à l'invite suivante qui pourrait apparaître: "Un processus de compilation est en cours, le tuer (oui ou non)."

Aussi, est-il possible de faire la fenêtre qui s'ouvre et montre la sortie pour faire défiler vers le bas automatiquement. Les choses intéressantes sont typiquement là-bas. Peut-être est-il possible de chaîner la commande suivante après la recompilation: "C-x o, fin-de-tampon".

Merci!

+1

Ou peut-être vous pourriez juste passer '- stop-on-error' à 'pdflatex' (ou similaire). – cYrus

Répondre

7

est ici un code pour résoudre votre premier problème (interrompre la compilation en cours):

(defun interrupt-and-recompile() 
    "Interrupt old compilation, if any, and recompile." 
    (interactive) 
    (ignore-errors (kill-compilation)) 
    (recompile)) 

Pour votre deuxième problème (défilement de la sortie de la compilation), personnaliser simplement le réglage utilisateur compilation-scroll-output.

+0

Cela a fonctionné, merci. – qonf

2

Je dois d'une manière ou d'une autre mettre kill-compilation dans un ignore-errors avec Emacs 23.2 pour le faire fonctionner quand aucun processus n'est en cours d'exécution. Sinon, ça fonctionne très bien.

(defun interrupt-and-recompile() 
    "Interrupt old compilation, if any, and recompile." 
    (interactive) 
    (ignore-errors 
    (kill-compilation)) 
    (recompile) 
) 
2

Chaque fois que j'essayé d'utiliser kill-compilation avec le latex/pdflatex il ne fonctionne pas. Je suppose que c'est parce que le latex ne répond pas à SIGINT. Au lieu de cela, j'utilise le hack suivant, qui définit d'abord le bit process-kill-without-query du buffer compilation puis le ferme (ce qui tue le processus en cours).

(defun interrupt-and-recompile() 
    "Interrupt old compilation, if any, and recompile." 
    (interactive) 
    (ignore-errors 
    (process-kill-without-query 
     (get-buffer-process 
     (get-buffer "*compilation*")))) 
    (ignore-errors 
    (kill-buffer "*compilation*")) 
    (recompile) 
) 
Questions connexes