Changer le répertoire courant du mode de compilation automatiquement?

16

Actuellement, ma commande de compilation est la suivante:

cd ~/somedir && ./somescript.sh

Cela empêche emacs de trouver le fichier dans lequel une erreur se produit (et de l'ouvrir).

Bien sûr, je peux exécuter M-x cdmanuellement mais existe-t-il un moyen de dire au tampon de changer son répertoire actuel par programme?

Thomas Moulard
la source
1
C'est quelque chose que j'ai essayé de faire aussi. Idéalement, il y aurait quelque chose que vous pouvez mettre dans .dir-locals.el dans le répertoire de base qui fonctionnerait (les hacks que j'ai vus pour définir le répertoire par défaut provoquent des effets secondaires indésirables, et le définir uniquement pour le mode de compilation ne fonctionne pas semble pas fonctionner).
Julian Squires

Réponses:

7

Enfin, j'ai abandonné de compter sur le répertoire actuel car il était trop intrusif et d'autres choses comme ido où la fin était affectée ...

Au lieu de cela, j'utilise ajouté mon répertoire de construction à compilation-search-path

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

Trouvé sur cette question: Comment ajuster le chemin que l'erreur de compilation-goto d'Emacs obtient du tampon de compilation?

La question explique également que le matcher de répertoires peut changer le répertoire automatiquement si certaines chaînes particulières sont émises:

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

Ceci est également personnalisable apparemment.

Thomas Moulard
la source
Cela ressemble à une solution robuste. Si cela fonctionne pour vous, n'hésitez pas à l'accepter.
Malabarba
Notez que cela peut ne pas fonctionner si vous avez besoin que le système de construction trouve des fichiers dans /path/to/build.
Andre Holzner
5

Vous pouvez simplement créer un tampon Dired du répertoire où vous souhaitez appeler la commande de compilation, pour servir d'ancre. Lorsque vous souhaitez compiler, basculez vers le tampon Dired et exécutez la commande de compilation. compileexécutera sa commande dans ce répertoire du tampon Dired. L'avantage de ceci est que vous n'avez pas à M-x cdparcourir les répertoires lorsque vous souhaitez compiler.

Si vous utilisez projectile, il a une commande nommée projectile-compilequi exécute automatiquement la commande de compilation à la racine du projet reconnue par projectile.

Tu Do
la source
4

Cette commande alternative devrait faire l'affaire:

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

Alternativement, après avoir exécuté la compilation à l'aide de la compilecommande standard , vous pouvez évaluer (setq default-directory "~/somedir")dans le *compilation*tampon. Cela devrait faire fonctionner la navigation d'erreur, mais cela pourrait empêcher les recompileamis de faire la bonne chose.

sanityinc
la source