¿Puedo hacer que el proyecto elegido del proyectil sea pegajoso y no seguir el búfer actual
On febrero 14, 2021 by admin¿Es posible hacer que el proyectil solo cambie de proyecto al llamar a projectile-switch-project, ¿no sigues los búferes?
Cuando cambio los búferes en emacs, el proyectil cambiará el proyecto al proyecto al que pertenece el búfer actual (si corresponde).
Normalmente trabajo en un proyecto pero también tener archivos abiertos de otros proyectos. Tengo un archivo de organización con mis elementos de trabajo y notas abiertas (que pertenece a mi proyecto de organización) y algunos scripts de prueba (de mi proyecto de scripts) y luego la fuente del proyecto en el que estoy trabajando.
Esto hace abrir archivos usando (helm) -projectile-find-file casi no tiene sentido, ya que generalmente tengo que cambiar a un búfer de ese proyecto primero, o hacer (helm) -projectile-switch-project. Y luego puedo (casi) también usar helm-find-files.
Aún quiero que el modo global de proyectiles esté activo, así que siempre puedo usar Cc pf para abrir un archivo de proyecto.
Comentarios
Respuesta
En general, los comandos de proyectiles llaman a projectile-project-root
para encontrar el proyecto actual, y eso funciona mirando el default-directory
actual.
Puede recomendar la función raíz del proyecto y hacer que devuelva un valor fijo en su lugar:
(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)
Esta implementación verificará si projectile-main-project
está configurado y devuelve eso. Si establece el proyecto principal en cero, obtendrá el comportamiento de proyectil predeterminado en su lugar.
Aquí hay un comando para cambiar el proyecto principal. Tenga en cuenta que debido a que «hemos recomendado projectile-project-root
anteriormente, esto desarma temporalmente el proyecto principal para permitir que el proyectil descubra el proyecto para el búfer actual y luego usa ese resultado.
(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))))
ACTUALIZAR
Si está utilizando una versión de Emacs que no tiene advice-add
(anterior a Emacs 24.4), puede lograr el mismo resultado usando defadvice
en su lugar:
(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))
Comentarios
- ¡Maravilloso! ¡Muy agradable! Muchísimas gracias. ¿Puedo usar defadvice o algo similar en su lugar? Yo ' m en 24.3. Pero, de nuevo, sería bueno actualizar =)
- Claro, podría usar defadvice en su lugar. En ese caso, no ' no tiene la práctica
:before-until
opción, por lo que debería utilizararound
y luego llamar explícitamente a través deprojectile-project-root
cuando no hay un conjunto de proyecto principal. - Para mi caso de uso relacionado, tiene sentido hacer algo similar pero utilizar un
:after-until
consejo. Dado queprojectile-project-root
devuelvenil
cuando está fuera de un proyecto. Por lo tanto, puedo usar el consejo para establecer un proyecto predeterminado . Esta lógica es más comocond
, donde programamos en una opción predeterminada final.
projectile-find-file
, incluso en diferentes proyectos, siempre debe incluir el archivo en la " principal " proyecto, ¿estoy en lo cierto? Si es así, actualmente ' no está implementado, pero creo que podría ser útil alternar un proyecto para que sea " main ".