Cambiare automaticamente la directory corrente della modalità compilation?


16

Attualmente, il mio comando di compilazione è il seguente:

cd ~/somedir && ./somescript.sh

Questo impedisce a emacs di trovare il file in cui si verifica un errore (e di aprirlo).

Ovviamente posso eseguire M-x cdmanualmente ma c'è un modo per dire al buffer di modificare la sua directory corrente a livello di codice?


1
Anche questa è una cosa che ho cercato di fare. Idealmente, ci sarebbe qualcosa che puoi mettere in .dir-locals.el nella directory di base che funzionerebbe (gli hack che ho visto per impostare la directory predefinita lì causano effetti collaterali indesiderati, e impostarlo solo per la modalità compilation non sembra funzionare).
Julian Squires,

Risposte:


7

Alla fine, ho abbandonato affidandomi alla directory corrente in quanto era troppo invadente e altre cose come ido in cui la fine veniva influenzata ...

Invece, ho aggiunto la mia directory di build a compilation-search-path

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

Trovato su questa domanda: come regolare il percorso che l'errore di compilazione-goto di Emacs ottiene dal buffer di compilazione?

La domanda spiega anche che il matcher di directory può cambiare automaticamente la directory se vengono emesse alcune stringhe particolari:

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

Questo è anche apparentemente personalizzabile.


Sembra una soluzione solida. Se funziona per te, sentiti libero di accettarlo.
Malabarba,

Si noti che questo potrebbe non funzionare se è necessario che il sistema di generazione trovi alcuni file /path/to/build.
Andre Holzner,

5

È possibile semplicemente creare un buffer Dired della directory in cui si desidera richiamare il comando di compilazione, da utilizzare come ancora. Quando si desidera compilare, passare al buffer Dired ed eseguire il comando di compilazione. compileeseguirà il suo comando in questa directory del buffer Dired. Il vantaggio è che non è necessario M-x cdo attraversare le directory quando si desidera compilare.

Se lo usi projectile, ha un comando chiamato projectile-compileche esegue automaticamente il comando di compilazione nella radice del progetto riconosciuta da projectile.


4

Questo comando alternativo dovrebbe fare il trucco:

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

In alternativa, dopo aver eseguito la compilazione utilizzando il compilecomando normale , è possibile eseguire la valutazione (setq default-directory "~/somedir")nel *compilation*buffer. Ciò dovrebbe far funzionare l'errore di navigazione, ma potrebbe impedire agli recompileamici di fare la cosa giusta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.