Cuando lo ejecuto M-x compile
genera una nueva subshell para ejecutar mi comando de compilación. Tan pronto como el comando de compilación regresa, el proceso de shell se cierra. Puedo ver por qué esto sería deseable en la mayoría de los casos, pero actualmente estoy en una situación en la que no es útil.
Estoy trabajando en un entorno de compilación especializado en este momento que requiere que tome algunos pasos iniciales para configurar la compilación antes de ejecutar el compilador. Mientras el entorno persista, solo necesito hacer los pasos de configuración una vez. Pero cuando lo uso M-x compile
significa que tengo que hacer los pasos cada vez que quiero compilar o recompilar.
¿Hay alguna forma de generar una subshell que persista en segundo plano? Uno que M-x compile
y M-x gdb
puede utilizar cada vez que necesitan para ejecutar un proceso de shell?
Motivación:
Tengo un programa (que llamaremos xcc
) que construye el código C para plataformas especiales. Para construir mi código, primero comienzo xcc
desde el tcsh
indicador:
$ xcc
El programa tarda más de 10 segundos en cargar, y luego puedo ingresar comandos en su solicitud interactiva
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
Los pasos anteriores pueden integrarse en una macro personalizada buildmyprog.macro
para que pueda ejecutarla directamente desde el shell o desde emacs conM-x compile
$ xcc buildmyprog.macro
El principal problema con este enfoque es el hecho de que el xcc
programa tarda 10 segundos en cargarse, incluso antes de que comience la compilación. Me cansé lo suficiente de esperar los 10 segundos adicionales cada vez que compilé que comencé a correr xcc
en un ansi-term
búfer separado. Ahora, después de modificar y guardar el código, cambio al ansi-term
búfer y ejecuto
xcc>> build myprogram
Esto funciona bien, pero cada vez que cambio a ese búfer pienso: "¿No sería genial si pudiera empujar F7
y enviar mi comando de compilación a la instancia ya en ejecución xcc
?"
comint-send-input
. Eso es básicamente lo que está haciendo a mano, convertirlo a elisp no debería ser muy difícil (especialmente en comparación con la configuración de la comint).