Wenn ich M-x compile
es ausführe, wird eine neue Subshell erzeugt, um meinen Kompilierungsbefehl auszuführen. Sobald der Kompilierungsbefehl zurückgegeben wird, wird der Shell-Prozess beendet. Ich kann sehen, warum dies in den meisten Fällen wünschenswert wäre, aber ich bin derzeit in einer Situation, in der es nicht hilfreich ist.
Ich arbeite gerade in einer speziellen Build-Umgebung, die einige erste Schritte zum Einrichten des Builds erfordert, bevor der Compiler ausgeführt wird. Solange die Umgebung bestehen bleibt, muss ich die Einrichtungsschritte nur einmal ausführen. Aber wenn ich es benutze M-x compile
, bedeutet das, dass ich die Schritte jedes Mal ausführen muss, wenn ich kompilieren oder neu kompilieren möchte.
Gibt es eine Möglichkeit, eine Subshell zu erzeugen, die im Hintergrund verbleibt? Einer, M-x compile
und M-x gdb
jedes Mal , wenn sie benötigen , können einen Shell - Prozess laufen zu lassen?
Motivation:
Ich habe ein Programm (das wir aufrufen werden xcc
), das C-Code für spezielle Plattformen erstellt. Um meinen Code zu erstellen, beginne ich zuerst mit xcc
der tcsh
Eingabeaufforderung:
$ xcc
Das Laden des Programms dauert mehr als 10 Sekunden, und dann kann ich an der interaktiven Eingabeaufforderung Befehle eingeben
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
Die obigen Schritte können in ein benutzerdefiniertes Makro integriert werden, buildmyprog.macro
sodass ich es direkt von der Shell oder von Emacs mit ausführen kannM-x compile
$ xcc buildmyprog.macro
Das Hauptproblem bei diesem Ansatz ist die Tatsache, dass das xcc
Laden des Programms 10 Sekunden dauert , bevor die Kompilierung überhaupt beginnt. Ich habe müde genug um die zusätzlichen 10 Sekunden jedes Mal , wenn ich zusammengestellt warten , dass ich laufen begonnen haben , xcc
in eine ansi-term
in einem separaten Puffer. Nachdem ich den Code geändert und gespeichert habe, wechsle ich zum ansi-term
Puffer und führe ihn aus
xcc>> build myprogram
Das funktioniert gut, aber jedes Mal, wenn ich zu diesem Puffer wechsle, denke ich: "Wäre es nicht großartig, wenn ich nur pushen könnte F7
und mein Kompilierungsbefehl an die bereits laufende Instanz von gesendet würde xcc
?"
comint-send-input
. Das ist im Grunde das, was Sie von Hand tun. Die Konvertierung in Elisp sollte nicht sehr schwierig sein (insbesondere im Vergleich zum Einrichten des Comint).