Attiva la modalità proiettile solo per i file nei progetti reali


8

Il proiettile è piuttosto eccezionale, ma trovo difficile accenderlo solo in luoghi dove sarebbe efficace.

A quanto ho capito, le due scelte standard sono di attivarlo manualmente, come nei principali hook di modalità, o di abilitarlo a livello globale con projectile-global-mode. Trovo il primo non abbastanza ampio; Voglio essere in grado di accedere ai comandi del proiettile mentre visualizzi qualsiasi file in un progetto, indipendentemente dal suo tipo. Ma attivare la modalità a livello globale è troppo ampio; si ottiene acceso anche quando la visita di tali manifestamente le directory non-progetto come la mia home directory, /tmp, /etc, etc.

C'è un modo standard per attivare projectile-modesolo quando si visita un file che vive in un progetto vero e proprio, in quanto potrebbero essere determinati da, diciamo, verificare l'esistenza di una .git, .svn, ecc, directory in qualche antenato directory del file corrente?


Verificare l'esistenza di .git, .svn... dovrebbe essere l'impostazione predefinita. Forse devi avere l' projectile-require-project-rootimpostazione nil.
Tu Do

Ho appena controllato e il suo valore è t. Ma la modalità è ancora attivata, /etcad esempio.
Sean,

1
Qual è la tua versione di Projectile? Quando si esegue projectile-find-filessu tali directory non di progetto, Projectile ti dà semplicemente un messaggio "Non sei su un progetto". Sei sicuro di eseguire il comando giusto?
Tu Do

2
Ah, ok, lo vedo. Ma vedo ancora Projectile[etc]nella riga della modalità quando apro /etc. Occupa preziose proprietà in modalità linea e preferirei non attivare affatto la modalità in directory non di progetto.
Sean,

Risposte:


11

Quindi, riguarda la modeline. È possibile impostare projectile-mode-lineper verificare se ci si trova in una radice del progetto; in tal caso, viene visualizzato nella modeline, altrimenti non viene visualizzato nulla:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))

4
Quel cambiamento dovrebbe essere nel proiettile stesso.
abo-ABO

Questo è sicuramente utile, ma la modalità sarebbe ancora tecnicamente attiva, giusto? Idealmente la modalità non verrebbe nemmeno attivata in tali casi.
Sean,

2
@Sean a cosa serve? C'è una ragione per cui è una modalità secondaria globale. C'è qualcosa che si frappone se la modalità globale è attiva, a parte la modeline? Quando la modalità globale è attiva, tutto ciò che fa è darti le associazioni dei tasti del proiettile.
Tu Do

2
@ abo-abo Penso anche che dovrebbe funzionare così anziché mostrare la corrente default-directory. Farò un PR.
Tu Do

Ho inserito questo nel mio file init e alla fine ho notato un sacco di errori nel *Messages*buffer, perché projectile-project-rootsolleva un'eccezione se chiamato da una directory non di progetto. Quindi quella chiamata di funzione deve essere racchiusa in a condition-casee projectile-require-project-rootdeve anche essere associata t.
Sean,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.