Das aktuelle Verzeichnis des Kompilierungsmodus automatisch ändern?

16

Derzeit lautet mein Kompilierungsbefehl wie folgt:

cd ~/somedir && ./somescript.sh

Dies verhindert, dass Emacs die Datei findet, in der ein Fehler auftritt (und öffnet).

Natürlich kann ich M-x cdmanuell ausführen, aber gibt es eine Möglichkeit, den Puffer anzuweisen, sein aktuelles Verzeichnis programmgesteuert zu ändern?

Thomas Moulard
quelle
1
Das ist etwas, was ich auch versucht habe. Im Idealfall gibt es etwas, das Sie in .dir-locals.el im Basisverzeichnis ablegen können, was funktionieren würde (Hacks, die ich gesehen habe, um das Standardverzeichnis dort zu setzen, verursachen unerwünschte Nebenwirkungen, und das Einstellen nur für den Kompilierungsmodus tut es nicht scheint nicht zu funktionieren).
Julian Squires

Antworten:

7

Schließlich gab ich es auf, mich auf das aktuelle Verzeichnis zu verlassen, da es zu aufdringlich war und andere Dinge wie ido, wo das Ende davon betroffen war ...

Stattdessen benutze ich mein Build-Verzeichnis hinzugefügt compilation-search-path

(add-to-list 'compilation-search-path "/path/to/build")

Gefunden bei dieser Frage: Wie kann man den Pfad anpassen, den Emacs 'Kompilierungsfehler aus dem Kompilierungspuffer erhält?

Die Frage erklärt auch, dass der Verzeichnisvergleicher das Verzeichnis automatisch ändern kann, wenn bestimmte Zeichenfolgen ausgegeben werden:

Entering directory `...'
... 
Leaving directory `...'

Dies ist anscheinend auch anpassbar.

Thomas Moulard
quelle
Dies sieht nach einer robusten Lösung aus. Wenn es für Sie funktioniert, können Sie es gerne akzeptieren.
Malabarba
Beachten Sie, dass dies möglicherweise nicht funktioniert, wenn das Build-System einige Dateien in finden muss /path/to/build.
Andre Holzner
5

Sie können einfach einen Dired-Puffer des Verzeichnisses erstellen, in dem Sie den Kompilierungsbefehl aufrufen möchten, um als Anker zu dienen. Wenn Sie kompilieren möchten, wechseln Sie in den Dired-Puffer und führen Sie den Kompilierungsbefehl aus. compileDer Befehl wird in diesem Verzeichnis des Dired-Puffers ausgeführt. Dies hat den Vorteil, dass Sie M-x cdzum Kompilieren keine Verzeichnisse benötigen oder durchlaufen müssen.

Bei Verwendung projectiledieses Befehls wird projectile-compileder Kompilierungsbefehl automatisch im Projektstamm ausgeführt, der von erkannt wird projectile.

Tu Do
quelle
4

Dieser alternative Befehl sollte den Trick machen:

(defun compile-in-dir (dir command)
  (interactive "DCompile in directory: \nsCommand: ")
  (let ((default-directory dir))
    (compile command)))

Alternativ können Sie, nachdem Sie die Kompilierung mit dem regulären compileBefehl ausgeführt haben, (setq default-directory "~/somedir")im *compilation*Puffer auswerten . Das sollte dazu führen, dass die Fehlernavigation funktioniert, kann aber dazu führen, dass recompileFreunde nicht mehr das Richtige tun.

sanityinc
quelle