Kann ich das vom Projektil ausgewählte Projekt klebrig machen und nicht dem aktuellen Puffer folgen?
On Februar 14, 2021 by adminIst es möglich, nur Projektilwechselprojekte durchzuführen, wenn projectile-switch-project aufgerufen wird, und Nicht den Puffern folgen?
Wenn ich die Puffer in Emacs wechsle, wechselt das Projektil das Projekt zu dem Projekt, zu dem der aktuelle Puffer gehört (falls vorhanden).
Normalerweise arbeite ich an einem Projekt Sie können jedoch auch Dateien aus anderen Projekten öffnen. Ich habe eine Organisationsdatei mit geöffneten Arbeitselementen und Notizen (die zu meinem Organisationsprojekt gehören) und einigen Testskripten (aus meinem Skriptprojekt) und dann die Quelle des Projekts, an dem ich arbeite.
Dies macht Das Öffnen von Dateien mit (helm) -projectile-find-file ist fast bedeutungslos, da ich normalerweise zuerst zu einem Puffer aus diesem Projekt wechseln oder (helm) -projectile-switch-project ausführen muss. Und dann kann ich (fast) genauso gut Helm-Find-Dateien verwenden.
Ich möchte jedoch weiterhin, dass der globale Projektilmodus aktiv ist, sodass ich immer Cc pf ausführen kann, um eine Projektdatei zu öffnen.
Kommentare
- Wenn ich das richtig verstanden habe, möchten Sie eine aktive " main " -Projekt und wenn
projectile-find-file
ausgeführt wird, sollte die Datei auch in verschiedenen Projekten immer im " main " Projekt, bin ich richtig? Wenn ja, ist es derzeit ' nicht implementiert, aber ich denke, es könnte nützlich sein, ein Projekt auf " main ". - Ja, genau. Ich habe den Code gelesen, um zu sehen, ob ich mit dem Projektil-Schalter-Projekt-Haken etwas Kluges tun kann, aber ' kann mir nichts einfallen lassen.
Antwort
Im Allgemeinen rufen Projektilbefehle projectile-project-root
auf, um das aktuelle Projekt zu finden funktioniert anhand des aktuellen default-directory
.
Sie können die Projektstammfunktion empfehlen und stattdessen einen festen Wert zurückgeben lassen:
(defvar projectile-main-project "~/projects/foo") (defun use-main-project (&rest args) "Skip calling `projectile-project-root" when there is a main project defined." (when projectile-main-project projectile-main-project)) (advice-add #"projectile-project-root :before-until #"use-main-project)
Diese Implementierung prüft, ob projectile-main-project
ist gesetzt und gibt das zurück. Wenn Sie das Hauptprojekt auf Null setzen, erhalten Sie stattdessen das Standardverhalten des Projektils.
Hier ist ein Befehl zum Ändern des Hauptprojekts. Beachten Sie, dass, da wir oben projectile-project-root
empfohlen haben, das Hauptprojekt vorübergehend deaktiviert wird, damit das Projektil das Projekt für den aktuellen Puffer ermitteln kann, und dann dieses Ergebnis verwendet.
(defun set-main-project (&optional dir) "Set the projectile main project based on the current buffer. When called with argument DIR, make that main project instead." (interactive) (if dir (setq projectile-main-project dir) (let ((current-project)) (let ((projectile-main-project nil)) (setq current-project (projectile-project-root))) (setq projectile-main-project current-project))))
UPDATE
Wenn Sie verwenden Bei einer Version von Emacs ohne advice-add
(älter als Emacs 24.4) können Sie dasselbe Ergebnis erzielen, indem Sie stattdessen defadvice
verwenden:
(defadvice projectile-project-root ( around use-main-project activate) "Use the current main project, if any." (if projectile-main-project (setq ad-return-value projectile-main-project) ad-do-it))
Kommentare
- Wunderbar! Sehr schön! Vielen Dank. Kann ich stattdessen defadvice oder ähnliches verwenden? Ich ' bin am 24.3. Aber andererseits wäre es schön, ein Upgrade durchzuführen =)
- Sicher, Sie könnten stattdessen defadvice verwenden. In diesem Fall haben Sie ' nicht die praktische Option
:before-until
, daher möchten Siearound
Ratschläge und rufen Sie dann explizit dieprojectile-project-root
auf, wenn kein Hauptprojekt festgelegt ist. - Für meinen verwandten Anwendungsfall ist es sinnvoll, etwas Ähnliches zu tun Verwenden Sie jedoch den Rat
:after-until
. Daprojectile-project-root
nil
außerhalb eines Projekts zurückgibt. Ich kann daher den Rat verwenden, um ein Standard -Projekt festzulegen. Diese Logik ähnelt ehercond
, wobei wir eine endgültige Standardoption programmieren.
Schreibe einen Kommentar