¿Cambiar el modo actual de compilación del directorio actual automáticamente?

16

Actualmente, mi comando de compilación es el siguiente:

cd ~/somedir && ./somescript.sh

Esto evita que emacs encuentre el archivo en el que ocurre un error (y lo abre).

Por supuesto, puedo ejecutarlo M-x cdmanualmente, pero ¿hay alguna manera de decirle al búfer que cambie su directorio actual mediante programación?

Thomas Moulard
fuente
1
Esto es algo que he estado tratando de hacer también. Idealmente, habría algo que puede poner en .dir-locals.el en el directorio base que funcionaría (los hacks que he visto para establecer el directorio predeterminado allí causan efectos secundarios indeseables, y configurarlo solo para el modo de compilación no funciona) Parece que no funciona).
Julian Squires

Respuestas:

7

Finalmente, dejé de confiar en el directorio actual, ya que era demasiado intrusivo y otras cosas como ido donde terminaba siendo afectado ...

En cambio, uso agregado mi directorio de compilación a compilation-search-path

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

Encontrado en esta pregunta: ¿Cómo ajustar la ruta que el compilación-error de compilación de Emacs obtiene del búfer de compilación?

La pregunta también explica que el comparador de directorios puede cambiar el directorio automáticamente si se emiten algunas cadenas particulares:

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

Esto también es personalizable aparentemente.

Thomas Moulard
fuente
Esto parece una solución robusta. Si funciona para usted, siéntase libre de aceptarlo.
Malabarba
Tenga en cuenta que esto puede no funcionar si necesita que el sistema de compilación encuentre algunos archivos /path/to/build.
Andre Holzner
5

Simplemente puede hacer un búfer Dired del directorio donde desea invocar el comando de compilación, para servir como un ancla. Cuando desee compilar, cambie al búfer Dired y ejecute el comando de compilación. compileejecutará su comando en este directorio del búfer Dired. La ventaja de esto es que no tienes queM-x cd atravesar directorios cuando desee compilar.

Si lo usa projectile, tiene un comando llamado projectile-compileque ejecuta automáticamente el comando de compilación en la raíz del proyecto reconocido por projectile.

Tu Do
fuente
4

Este comando alternativo debería hacer el truco:

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

Alternativamente, después de ejecutar la compilación utilizando el compilecomando regular , puede evaluar (setq default-directory "~/somedir")en el *compilation*búfer. Eso debería hacer que el error de navegación funcione, pero podría detenerse recompiley que los amigos hagan lo correcto.

sanityinc
fuente