Aktivieren Sie den Projektilmodus nur für Dateien in tatsächlichen Projekten

8

Projektil ist ziemlich gut, aber ich finde es schwierig, es nur an Stellen einzuschalten, an denen es effektiv wäre.

Soweit ich weiß, besteht die beiden Standardoptionen darin, es manuell einzuschalten, wie bei Hooks im Hauptmodus, oder es global zu aktivieren projectile-global-mode. Ich finde das erstere nicht breit genug; Ich möchte in der Lage sein, auf Projektilbefehle zuzugreifen, während ich eine Datei in einem Projekt unabhängig von ihrem Typ besuche . Das globale Einschalten des Modus ist jedoch zu weit gefasst. es wird auch eingeschaltet , wenn eine solche offensichtlich nicht-Projektverzeichnisse wie mein Home - Verzeichnis Besuch /tmp, /etcetc.

Gibt es eine Standardmethode zur Aktivierung projectile-modenur , wenn eine Datei , die Leben in einem konkreten Projekt zu besuchen, könnten wie, sagen sie, die Überprüfung für die Existenz eines bestimmt werden .git, .svnusw., Verzeichnis in einigem Vorfahren Verzeichnis der aktuellen Datei?

Sean
quelle
Die Überprüfung auf das Vorhandensein von .git, .svn... sollte die Standardeinstellung sein. Vielleicht müssen Sie projectile-require-project-rootEinstellungen vornehmen nil.
Tu Do
Ich habe es gerade überprüft und sein Wert ist t. Aber der Modus ist /etczum Beispiel immer noch aktiviert .
Sean
1
Was ist Ihre Projectile-Version? Wenn Sie projectile-find-filesin solchen Nicht-Projekt-Verzeichnissen ausgeführt werden, erhalten Sie von Projectile einfach die Meldung "Sie sind nicht in einem Projekt". Sind Sie sicher, dass Sie den richtigen Befehl ausführen?
Tu Do
2
Ah, OK, das sehe ich. Aber ich sehe immer noch Projectile[etc]in der Moduszeile, wenn ich öffne /etc. Es nimmt wertvollen Platz in der Moduszeile ein, und ich möchte den Modus in Nicht-Projektverzeichnissen lieber überhaupt nicht aktivieren.
Sean

Antworten:

11

Es geht also um die Modeline. Sie können festlegen projectile-mode-line, ob Sie sich in einem Projektstamm befinden. Wenn ja, wird in der Modeline angezeigt, andernfalls wird nichts angezeigt:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))
Tu Do.
quelle
4
Diese Änderung sollte im Projektil selbst sein.
abo-abo
Das ist definitiv nützlich, aber der Modus wäre technisch immer noch aktiv, oder? Idealerweise würde der Modus in solchen Fällen nicht einmal aktiviert.
Sean
2
@ Sean, wofür? Es gibt einen Grund, warum es sich um einen globalen Nebenmodus handelt. Stört etwas, wenn der globale Modus aktiv ist, abgesehen von der Modeline? Wenn der globale Modus aktiv ist, erhalten Sie lediglich die Projektilschlüsselbindungen.
Tu Do
2
@ abo-abo Ich denke auch, dass es so funktionieren sollte, anstatt dann den Strom zu zeigen default-directory. Ich werde eine PR machen.
Tu Do
Ich habe dies in meine Init-Datei eingefügt und schließlich eine Menge Fehler im *Messages*Puffer festgestellt , da projectile-project-rootbeim Aufruf aus einem Nicht-Projekt-Verzeichnis eine Ausnahme ausgelöst wird. Dieser Funktionsaufruf muss also in a eingeschlossen condition-caseund auch projectile-require-project-rootan gebunden werden t.
Sean