Active el modo proyectil solo para archivos en proyectos reales

8

El proyectil es bastante bueno, pero me resulta difícil encenderlo solo en lugares donde sería efectivo.

Según tengo entendido, las dos opciones estándar son activarlo manualmente, como en los ganchos de modo principal, o habilitarlo globalmente projectile-global-mode. Me parece que el primero no es lo suficientemente amplio; Quiero poder acceder a comandos de proyectiles mientras visito cualquier archivo en un proyecto, independientemente de su tipo. Pero activar el modo globalmente es demasiado amplio; que se excita aun cuando visite esos directorios manifiestamente ajenas al proyecto como mi directorio personal, /tmp, /etc, etc.

¿Hay una manera estándar para activar projectile-modesolamente cuando se visita un fichero que vive en un proyecto real, que pudieran determinarse por, por ejemplo, la comprobación de la existencia de una .git, .svn, etc, directorio en algún directorio ancestro del archivo actual?

Sean
fuente
La comprobación de la existencia de .git, .svn... debe ser el valor por defecto. Tal vez tienes que projectile-require-project-rootconfigurarlo nil.
Tu Do
Acabo de comprobar, y su valor es t. Pero el modo todavía está activado, /etcpor ejemplo.
Sean
1
¿Cuál es tu versión de proyectil? Cuando se ejecuta projectile-find-filesen dichos directorios que no son de proyecto, Projectile simplemente le da un mensaje "No está en un proyecto". ¿Estás seguro de que ejecutas el comando correcto?
Tu Do
2
Ah, está bien, ya veo eso. Pero todavía veo Projectile[etc]en la línea de modo cuando abro /etc. Ocupa un valioso espacio real de línea de modo, y prefiero simplemente no activar el modo en absoluto en directorios que no son de proyecto.
Sean

Respuestas:

11

Entonces, se trata de la línea de modelo. Puede configurar projectile-mode-linepara verificar si está en la raíz de un proyecto; si es así, se muestra en la línea de modo, de lo contrario no muestra nada:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))
Tu Do
fuente
44
Ese cambio debería estar en el proyectil mismo.
abo-abo
Esto es definitivamente útil, pero el modo técnicamente aún estaría activo, ¿verdad? Idealmente, el modo ni siquiera se activaría en tales casos.
Sean
2
@Sean ¿para qué sirve? Hay una razón por la cual es un modo menor global. ¿Hay algo en el camino si el modo global está activo, aparte de la línea de modelo? Cuando el modo global está activo, todo lo que hace es darle las asociaciones de teclas del proyectil.
Tu Do
2
@ abo-abo También creo que debería funcionar así en lugar de mostrar la corriente default-directory. Haré un PR.
Tu Do
Puse esto en mi archivo init, y finalmente noté una tonelada de errores en el *Messages*búfer, porque projectile-project-rootgenera una excepción si se llama desde un directorio que no es del proyecto. Por lo tanto, esa llamada de función debe estar envuelta en a condition-case, y también projectile-require-project-rootdebe estar vinculada t.
Sean