Aktifkan mode proyektil hanya untuk file dalam proyek aktual

8

Proyektilnya cukup bagus, tetapi saya merasa sulit untuk menyalakannya hanya di tempat-tempat yang efektif.

Seperti yang saya pahami, dua pilihan standar adalah untuk mengaktifkannya secara manual, seperti dalam mode kait utama, atau untuk mengaktifkannya secara global projectile-global-mode. Saya menemukan yang pertama tidak cukup luas; Saya ingin dapat mengakses perintah proyektil saat mengunjungi file apa pun dalam suatu proyek, terlepas dari jenisnya. Tetapi mengaktifkan mode secara global terlalu luas; itu akan dihidupkan bahkan ketika mengunjungi seperti nyata direktori non-proyek sebagai direktori rumah saya, /tmp, /etc, dll

Apakah ada cara standar untuk mengaktifkan projectile-modehanya ketika mengunjungi sebuah file yang hidup dalam sebuah proyek yang sebenarnya, sebagaimana yang ditentukan oleh, katakanlah, memeriksa keberadaan .git, .svn, dll, direktori dalam beberapa direktori leluhur file saat ini?

Sean
sumber
Memeriksa keberadaan .git, .svn... harus menjadi default. Mungkin Anda memiliki projectile-require-project-rootpengaturan untuk nil.
Tu Do
Saya baru saja memeriksa, dan nilainya t. Tetapi mode masih diaktifkan /etcmisalnya.
Sean
1
Apa versi Proyektil Anda? Ketika Anda menjalankan projectile-find-filesdirektori non-proyek seperti itu, Proyektil hanya memberi Anda pesan "Anda tidak ada dalam proyek". Apakah Anda yakin menjalankan perintah yang benar?
Tu Do
2
Ah, oke, saya melihat itu. Tapi saya masih melihat Projectile[etc]di baris mode ketika saya membuka /etc. Ini membutuhkan real estate baris mode yang berharga, dan saya lebih suka tidak mengaktifkan mode sama sekali di direktori non-proyek.
Sean

Jawaban:

11

Jadi, ini tentang sang modeline. Anda dapat mengatur projectile-mode-lineuntuk memeriksa apakah Anda berada di root proyek; jika demikian, ditampilkan dalam modeline, jika tidak menampilkan apa-apa:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))
Tu Do
sumber
4
Perubahan itu harus dalam proyektil itu sendiri.
abo-abo
Ini jelas berguna, tetapi mode ini secara teknis masih aktif, bukan? Idealnya mode bahkan tidak akan diaktifkan dalam kasus seperti itu.
Sean
2
@ Jadi untuk apa? Ada alasan mengapa ini adalah mode minor global. Apakah ada sesuatu yang menghalangi jika mode global aktif, selain dari modeline? Ketika mode global aktif, semua yang dilakukannya adalah memberi Anda binding kunci Proyektil.
Tu Do
2
@ abo-abo Saya juga berpikir itu harus bekerja seperti ini daripada menunjukkan arus default-directory. Saya akan membuat PR.
Tu Do
Saya meletakkan ini di file init saya, dan akhirnya menemukan satu ton kesalahan dalam *Messages*buffer, karena projectile-project-rootmenimbulkan pengecualian jika dipanggil dari direktori non-proyek. Sehingga panggilan fungsi perlu dibungkus dengan condition-case, dan juga projectile-require-project-rootharus terikat t.
Sean