Mengubah mode kompilasi direktori saat ini secara otomatis?

16

Saat ini, perintah kompilasi saya adalah sebagai berikut:

cd ~/somedir && ./somescript.sh

Ini mencegah emacs dari menemukan file di mana kesalahan terjadi (dan membukanya).

Tentu saja saya dapat menjalankannya M-x cdsecara manual tetapi apakah ada cara untuk memberitahu buffer untuk mengubah direktori saat ini secara terprogram?

Thomas Moulard
sumber
1
Ini adalah sesuatu yang saya coba lakukan juga. Idealnya, akan ada sesuatu yang dapat Anda letakkan di .dir-locals.el di direktori basis yang akan bekerja (hacks saya telah melihat untuk mengatur direktori-default di sana menyebabkan efek samping yang tidak diinginkan, dan pengaturan hanya untuk kompilasi-mode tidak sepertinya berhasil).
Julian Squires

Jawaban:

7

Akhirnya, saya meninggalkan mengandalkan direktori saat ini karena terlalu mengganggu dan hal-hal lain seperti ido di mana akhirnya terpengaruh ...

Sebagai gantinya, saya menggunakan direktori build saya yang ditambahkan ke compilation-search-path

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

Ditemukan pada pertanyaan ini: Bagaimana cara menyesuaikan lintasan yang didapat kompilasi-goto-kesalahan Emacs dari buffer kompilasi?

Pertanyaannya juga menjelaskan bahwa pencocokan direktori dapat mengubah direktori secara otomatis jika beberapa string tertentu dipancarkan:

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

Ini juga bisa disesuaikan rupanya.

Thomas Moulard
sumber
Ini terlihat seperti solusi yang kuat. Jika itu berhasil untuk Anda, silakan menerimanya.
Malabarba
Perhatikan bahwa ini mungkin tidak berfungsi jika Anda perlu membangun sistem menemukan beberapa file di /path/to/build.
Andre Holzner
5

Anda cukup membuat buffer Dired dari direktori tempat Anda ingin menjalankan perintah kompilasi, untuk berfungsi sebagai jangkar. Saat Anda ingin mengkompilasi, beralihlah ke buffer Dired dan jalankan perintah kompilasi. compileakan menjalankan perintahnya di direktori buffer Dired ini. Keuntungan dari ini adalah Anda tidak perlu M-x cdatau melintasi direktori ketika Anda ingin mengkompilasi.

Jika Anda menggunakan projectile, itu memiliki perintah bernama projectile-compileyang secara otomatis menjalankan perintah kompilasi pada root proyek yang dikenali oleh projectile.

Tu Do
sumber
4

Perintah alternatif ini harus melakukan trik:

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

Atau, setelah Anda menjalankan kompilasi menggunakan compileperintah biasa , Anda dapat mengevaluasi (setq default-directory "~/somedir")dalam *compilation*buffer. Itu seharusnya membuat navigasi kesalahan berfungsi, tetapi mungkin berhenti recompiledan teman-teman melakukan hal yang benar.

sanityinc
sumber