¿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?


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.