projectile – ¿Puedo hacer que el proyecto elegido por el proyectil sea pegajoso y no seguir el búfer actual?

Pregunta:

¿Es posible hacer que los proyectos de cambio de proyectiles solo cambien al llamar a project-switch-project y no seguir los búferes?

Cuando cambio de búfer 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 tengo 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 que abrir archivos usando (helm) -projectile-find-file casi no tenga 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.

Sin embargo, todavía quiero que el modo global de proyectiles esté activo, por lo que siempre puedo hacer Cc pf para abrir un archivo de proyecto.

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 asesorar a 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 lo devolverá. Si configura 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 indicado anteriormente projectile-project-root , esto desarma temporalmente el proyecto principal para permitir que el proyectil descubra el proyecto para el búfer actual y luego use 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 defadvice 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))

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım