Quando M-x compile
lo eseguo genera una nuova subshell per eseguire il mio comando di compilazione. Non appena ritorna il comando di compilazione, il processo di shell viene interrotto. Posso capire perché questo sarebbe auspicabile nella maggior parte dei casi, ma attualmente mi trovo in una situazione in cui non è utile.
Sto lavorando in un ambiente di build specializzato in questo momento che richiede che io faccia alcuni passi iniziali per impostare la build prima di eseguire il compilatore. Finché l'ambiente persiste, ho solo bisogno di eseguire i passaggi di installazione una volta. Ma quando lo uso M-x compile
significa che devo fare i passaggi ogni volta che voglio compilare o ricompilare.
C'è un modo in cui posso generare una subshell che persisterà in background? Uno che M-x compile
e M-x gdb
può usare ogni volta che devono eseguire un processo di shell?
Motivazione:
Ho un programma (che chiameremo xcc
) che costruisce il codice C per piattaforme speciali. Per compilare il mio codice, inizio innanzitutto xcc
dal tcsh
prompt:
$ xcc
Il caricamento del programma richiede 10+ secondi, quindi posso inserire i comandi al suo prompt interattivo
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
I passaggi precedenti possono essere integrati in una macro personalizzata in buildmyprog.macro
modo che io possa eseguirlo direttamente dalla shell o da Emacs conM-x compile
$ xcc buildmyprog.macro
Il problema principale con questo approccio è il fatto che il xcc
caricamento del programma richiede 10 secondi, prima ancora che inizi la compilazione. Mi sono stancato abbastanza di aspettare i 10 secondi in più ogni volta che ho compilato che ho iniziato a correre xcc
in un ansi-term
buffer separato. Ora dopo aver modificato e salvato il codice, passo al ansi-term
buffer ed eseguo
xcc>> build myprogram
Funziona bene, ma ogni volta che passo a quel buffer penso: "Non sarebbe fantastico se potessi semplicemente spingere F7
e il mio comando di compilazione verrebbe inviato all'istanza già in esecuzione di xcc
?"
comint-send-input
. Questo è fondamentalmente quello che stai facendo a mano, convertirlo in elisp non dovrebbe essere molto difficile (soprattutto se paragonato all'impostazione del comando).