Lorsque je l'exécute, M-x compile
il génère un nouveau sous-shell pour exécuter ma commande de compilation. Dès que la commande de compilation revient, le processus shell est tué. Je peux voir pourquoi cela serait souhaitable dans la plupart des cas, mais je suis actuellement dans une situation où cela n'est pas utile.
Je travaille actuellement dans un environnement de build spécialisé qui nécessite que je prenne quelques mesures initiales pour configurer la build avant d'exécuter le compilateur. Tant que l'environnement persiste, je n'ai besoin d'effectuer les étapes de configuration qu'une seule fois. Mais lorsque j'utilise M-x compile
cela signifie que je dois faire les étapes chaque fois que je veux compiler ou recompiler.
Existe-t-il un moyen de générer un sous-shell qui persistera en arrière-plan? Un que M-x compile
et M-x gdb
peut utiliser chaque fois qu'ils ont besoin d'exécuter un processus shell?
Motivation:
J'ai un programme (que nous appellerons xcc
) qui construit du code C pour des plateformes spéciales. Afin de construire mon code, je commence d'abord xcc
par l' tcsh
invite:
$ xcc
Le programme prend plus de 10 secondes à charger, puis je peux entrer des commandes à l'invite interactive
xcc>> add target myprogram
xcc>> set source myprogram $PROJDIR/src/
xcc>> set includes myprogram $PROJDIR/include/
xcc>> set type myprogram primitive
xcc>> set inputs myprogram int8,int8
xcc>> set outputs myprogram fix16,fix16
xcc>> build myprogram
Les étapes ci-dessus peuvent être intégrées dans une macro personnalisée buildmyprog.macro
afin que je puisse l'exécuter directement à partir du shell ou d'Emacs avecM-x compile
$ xcc buildmyprog.macro
Le principal problème de cette approche est le fait qu'il faut au xcc
programme 10 secondes pour se charger, avant même que la compilation ne commence. Je me suis assez fatigué d'attendre les 10 secondes supplémentaires chaque fois que j'ai compilé que j'ai commencé à courir xcc
dans un ansi-term
dans un tampon séparé. Maintenant, après avoir modifié et enregistré le code, je passe au ansi-term
tampon et je lance
xcc>> build myprogram
Cela fonctionne très bien, mais chaque fois que je passe à ce tampon, je pense: "Ne serait-ce pas génial si je pouvais simplement pousser F7
et que ma commande de compilation serait envoyée à l'instance déjà en cours d'exécution de xcc
?"
comint-send-input
. C'est essentiellement ce que vous faites à la main, le convertir en elisp ne devrait pas être très difficile (surtout par rapport à la configuration de comint).