Activer le mode projectile uniquement pour les fichiers des projets réels

8

Le projectile est assez bon, mais j'ai du mal à le faire allumer uniquement aux endroits où il serait efficace.

Si je comprends bien, les deux choix standard sont de l'activer manuellement, comme dans les principaux crochets de mode, ou de l'activer globalement avec projectile-global-mode. Je trouve que le premier n'est pas assez large; Je veux pouvoir accéder aux commandes de projectiles tout en visitant n'importe quel fichier d'un projet, quel que soit son type. Mais l'activation du mode à l'échelle mondiale est trop large; il s'allumé même lorsque vous visitez ces répertoires manifestement hors projet comme mon répertoire personnel, /tmp, /etc, etc.

Est - il un moyen standard pour activer projectile-modeuniquement lors de la visite d' un fichier qui vit dans un projet réel, comme cela pourrait être déterminé par, par exemple, la vérification de l'existence d'un .git, .svn, etc, répertoire dans un répertoire ancêtre du fichier en cours?

Sean
la source
Vérifier l'existence de .git, .svn... devrait être la valeur par défaut. Peut-être que vous devez vous y projectile-require-project-rootmettre nil.
Tu Do
Je viens de vérifier, et sa valeur est t. Mais le mode est toujours activé /etcpar exemple.
Sean
1
Quelle est votre version Projectile? Lorsque vous exécutez projectile-find-filessur de tels répertoires hors projet, Projectile vous donne simplement un message "Vous n'êtes pas sur un projet". Êtes-vous sûr d'exécuter la bonne commande?
Tu Do
2
Ah, OK, je vois ça. Mais je vois toujours Projectile[etc]dans la ligne de mode quand j'ouvre /etc. Il occupe un espace précieux sur la ligne de mode, et je préfère tout simplement ne pas activer le mode du tout dans les répertoires hors projet.
Sean

Réponses:

11

Il s'agit donc de la modeline. Vous pouvez configurer projectile-mode-linepour vérifier si vous êtes dans une racine de projet; si c'est le cas, s'affiche dans la modélisation, sinon n'affiche rien:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))
Tu Do
la source
4
Ce changement devrait être dans le projectile lui-même.
abo-abo
C'est certainement utile, mais le mode serait toujours techniquement actif, non? Idéalement, le mode ne serait même pas activé dans de tels cas.
Sean
2
@Sean à quoi ça sert? Il y a une raison pour laquelle c'est un mode mineur global. Y a-t-il quelque chose qui gêne si le mode global est actif, à part la modélisation? Lorsque le mode global est actif, il ne vous donne que les raccourcis clavier Projectile.
Tu Do
2
@ abo-abo Je pense aussi que cela devrait fonctionner comme ça plutôt que de montrer le courant default-directory. Je vais faire un PR.
Tu Do
J'ai mis cela dans mon fichier init et j'ai finalement remarqué une tonne d'erreurs dans le *Messages*tampon, car projectile-project-rootdéclenche une exception s'il est appelé à partir d'un répertoire non-projet. Cet appel de fonction doit donc être enveloppé dans un condition-case, et projectile-require-project-rootdoit également être lié à t.
Sean