Alterando o diretório atual do modo de compilação automaticamente?

16

Atualmente, meu comando de compilação é o seguinte:

cd ~/somedir && ./somescript.sh

Isso evita que o emacs encontre o arquivo no qual ocorre um erro (e abra-o).

Claro que posso executar M-x cdmanualmente, mas existe uma maneira de dizer ao buffer para alterar seu diretório atual programaticamente?

Thomas Moulard
fonte
1
Isso é algo que tenho tentado fazer também. Idealmente, haveria algo que você pode colocar em .dir-locals.el no diretório base que funcionaria (os hacks que vi para definir o diretório padrão causam efeitos colaterais indesejáveis ​​e defini-lo apenas para o modo de compilação) parece funcionar).
Julian Squires

Respostas:

7

Finalmente, eu abandonei a confiar no diretório atual, pois era muito intrusivo e outras coisas como ido, onde acabam sendo afetadas ...

Em vez disso, eu adicionei meu diretório de compilação ao compilation-search-path

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

Encontrado nesta pergunta: Como ajustar o caminho que o erro de compilação-goto-erro do Emacs obtém do buffer de compilação?

A pergunta também explica que o correspondente de diretório pode alterar o diretório automaticamente se algumas cadeias de caracteres específicas forem emitidas:

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

Isso também é personalizável, aparentemente.

Thomas Moulard
fonte
Parece uma solução robusta. Se funcionar para você, fique à vontade para aceitá-lo.
Malabarba
Observe que isso pode não funcionar se você precisar que o sistema de compilação encontre alguns arquivos /path/to/build.
21819 Andre Holzner
5

Você pode simplesmente criar um buffer Dired do diretório em que deseja chamar o comando compile, para servir como uma âncora. Quando você deseja compilar, alterne para o buffer Dired e execute o comando compile. compileexecutará seu comando nesse diretório do buffer Dired. A vantagem disso é que você não precisa M-x cdatravessar diretórios quando deseja compilar.

Se você usar projectile, ele possui um comando nomeado projectile-compileque executa automaticamente o comando compile na raiz do projeto reconhecida por projectile.

Tu Do
fonte
4

Este comando alternativo deve fazer o truque:

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

Como alternativa, depois de executar a compilação usando o compilecomando regular , você pode avaliar (setq default-directory "~/somedir")no *compilation*buffer. Isso deve fazer com que a navegação por erro funcione, mas pode parar recompilee os amigos de fazerem a coisa certa.

sanityinc
fonte