Czy zmieniasz automatycznie bieżący katalog trybu kompilacji?

16

Obecnie moje polecenie kompilacji wygląda następująco:

cd ~/somedir && ./somescript.sh

Zapobiega to znalezieniu przez emacsa pliku, w którym wystąpił błąd (i jego otwarciu).

Oczywiście, że mogę uruchomić M-x cdręcznie, ale czy istnieje sposób, aby nakazać buforowi programową zmianę bieżącego katalogu?

Thomas Moulard
źródło
1
To też próbowałem zrobić. Idealnie byłoby coś, co można umieścić w katalogu .dir-locals.el w katalogu podstawowym, który by działał (włamania, które widziałem, aby ustawić tam domyślny katalog, powodują niepożądane skutki uboczne, a ustawienie go tylko w trybie kompilacji nie powoduje wydaje się, że działa).
Julian Squires

Odpowiedzi:

7

Wreszcie porzuciłem poleganie na bieżącym katalogu, ponieważ był on zbyt nachalny i inne rzeczy, takie jak ido, na które miało wpływ zakończenie.

Zamiast tego używam dodanego mojego katalogu kompilacji compilation-search-path

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

Znalazłem to pytanie: Jak dostosować ścieżkę, którą błąd kompilacji-goto Emacsa pobiera z bufora kompilacji?

Pytanie wyjaśnia również, że moduł dopasowywania katalogu może automatycznie zmienić katalog, jeśli zostaną wyemitowane określone ciągi znaków:

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

Najwyraźniej można to również dostosować.

Thomas Moulard
źródło
To wygląda na solidne rozwiązanie. Jeśli to działa, możesz to zaakceptować.
Malabarba
Pamiętaj, że może to nie działać, jeśli potrzebujesz systemu kompilacji, w którym znajdziesz niektóre pliki /path/to/build.
Andre Holzner,
5

Możesz po prostu utworzyć bufor Dired katalogu, w którym chcesz wywołać polecenie kompilacji, aby służył jako kotwica. Aby skompilować, przejdź do bufora Dired i uruchom polecenie kompilacji. compileuruchomi polecenie w tym katalogu bufora Dired. Zaletą tego jest to, że nie musisz przeglądać M-x cdkatalogów, gdy chcesz skompilować.

Jeśli używasz projectile, ma polecenia o nazwie projectile-compile, która automatycznie uruchamia kompilacji polecenie w katalogu głównym projektu uznanego przez projectile.

Do zrobienia
źródło
4

To alternatywne polecenie powinno załatwić sprawę:

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

Alternatywnie, po uruchomieniu kompilacji za pomocą zwykłego compilepolecenia, możesz ewaluować (setq default-directory "~/somedir")w *compilation*buforze. To powinno sprawić, że nawigacja po błędach zadziała, ale może przestać, recompilea znajomi nie zrobią tego, co należy.

sanityinc
źródło