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 compileisso 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 compilee M-x gdbpode 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 xccpelo tcshprompt:
$ 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.macropara 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 xccprograma 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 xccem um ansi-termbuffer separado. Agora, depois de modificar e salvar o código, mudo para o ansi-termbuffer 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 F7e 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).