Quando executo M-x compile
, gera um novo subshell para executar meu comando de compilação. Assim que o comando de compilação retornar, o processo do shell será interrompido. Eu posso ver por que isso seria desejável na maioria dos casos, mas atualmente estou em uma situação em que não é útil.
Atualmente, estou trabalhando em um ambiente de compilação especializado, que exige algumas etapas iniciais para configurar a compilação antes de executar o compilador. Enquanto o ambiente persistir, só preciso executar as etapas de configuração uma vez. Mas quando eu uso, M-x compile
isso significa que tenho que executar as etapas sempre que desejar compilar ou recompilar.
Existe uma maneira de gerar um subshell que persistirá em segundo plano? Um que M-x compile
e M-x gdb
pode usar cada vez que eles precisam para executar um processo shell?
Motivação:
Eu tenho um programa (que chamaremos xcc
) que cria código C para plataformas especiais. Para criar meu código, começo primeiro xcc
pelo tcsh
prompt:
$ xcc
O programa leva mais de 10 segundos para carregar e, em seguida, posso inserir comandos no prompt interativo
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
As etapas acima podem ser construídas em uma macro personalizada, buildmyprog.macro
para que eu possa executá-la diretamente do shell ou do emacs comM-x compile
$ xcc buildmyprog.macro
O principal problema dessa abordagem é o fato de que o xcc
programa leva 10 segundos para carregar, antes mesmo da compilação começar. Eu me cansei o suficiente de esperar os 10 segundos extras toda vez que compilei que comecei a correr xcc
em um ansi-term
buffer separado. Agora, depois de modificar e salvar o código, mudo para o ansi-term
buffer e corro
xcc>> build myprogram
Isso funciona bem, mas toda vez que eu mudo para esse buffer, penso: "Não seria ótimo se eu simplesmente pressionasse F7
e meu comando de compilação fosse enviado para a instância já em execução do xcc
?"
comint-send-input
. Isso é basicamente o que você está fazendo manualmente, convertê-lo em elisp não deve ser muito difícil (especialmente se comparado à configuração do comint).