Puis-je rendre le projet choisi collant et ne pas suivre le tampon actuel
On février 14, 2021 by adminEst-il possible de faire basculer le projectile uniquement lors de lappel de projectile-switch-project, et ne pas suivre les tampons?
Quand je change de tampon dans emacs, projectile basculera le projet vers le projet auquel appartient le tampon actuel (le cas échéant).
Je travaille habituellement sur un projet mais ouvrez également les fichiers dautres projets. Jai un fichier dorganisation avec mes éléments de travail et mes notes ouverts (qui appartient à mon projet dorganisation) et quelques scripts de test (de mon projet de scripts), puis la source du projet sur lequel je travaille.
Cela fait ouvrir des fichiers à laide de (helm) -projectile-find-file presque sans signification puisque je dois généralement passer dabord à un tampon de ce projet, ou faire (helm) -projectile-switch-project. Et puis je peux (presque) aussi bien utiliser des fichiers helm-find.
Je veux toujours que le mode global projectile soit actif pour que je puisse toujours faire Cc pf pour ouvrir un fichier projet.
Commentaires
Réponse
En général, les commandes projectile appellent projectile-project-root
pour trouver le projet en cours, et que fonctionne en regardant le default-directory
actuel.
Vous pouvez conseiller la fonction racine du projet et lui faire renvoyer une valeur fixe à la place:
(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)
Cette implémentation vérifiera si projectile-main-project
est défini et renvoie cela. Si vous définissez le projet principal sur nil, vous obtiendrez le comportement par défaut du projectile à la place.
Voici une commande pour changer le projet principal. Notez que parce que nous « avons conseillé projectile-project-root
ci-dessus, cela désactive temporairement le projet principal pour permettre à projectile de déterminer le projet pour le tampon actuel, puis utilise ce résultat.
(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
Si vous utilisez une version dEmacs qui na pas advice-add
(plus ancienne que Emacs 24.4) vous pouvez obtenir le même résultat en utilisant defadvice
à la place:
(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))
Commentaires
- Merveilleux! Très beau! Merci beaucoup. Puis-je utiliser defadvice ou quelque chose de similaire à la place? Je ' m sur 24.3. Mais là encore, ce serait bien de mettre à jour =)
- Bien sûr, vous pouvez utiliser defadvice à la place. Dans ce cas, vous navez ' que loption
:before-until
pratique, vous voudrez donc utiliseraround
puis appelez explicitement viaprojectile-project-root
lorsquil ny a pas densemble de projets principal. - Pour mon cas dutilisation associé, il est logique de faire quelque chose de similaire mais pour utiliser les conseils
:after-until
. Puisqueprojectile-project-root
renvoienil
en dehors dun projet. Je peux donc utiliser les conseils pour définir un projet default . Cette logique ressemble plus àcond
, où nous programmons une option finale par défaut.
projectile-find-file
, même dans différents projets, il doit toujours répertorier le fichier dans le " main ", ai-je raison? Si tel est le cas, actuellement ' nest pas implémenté, mais je pense quil peut être utile de basculer un projet sur " main ".