Posso rendere appiccicoso il progetto scelto del proiettile e non seguire il buffer corrente
Su Febbraio 14, 2021 da adminÈ possibile fare in modo che il progetto cambi solo proiettile quando si chiama projectile-switch-project, e non segui i buffer?
Quando cambio i buffer in emacs, projectile commuterà il progetto al progetto a cui appartiene il buffer corrente (se esiste).
Di solito lavoro su un progetto ma avere file aperti anche da altri progetti. Ho un file org con i miei elementi di lavoro e note aperti (che appartiene al mio progetto org) e alcuni script di test (dal mio progetto script) e poi lorigine del progetto su cui sto lavorando.
Questo rende aprire i file usando (helm) -projectile-find-file quasi senza significato poiché di solito devo prima passare a un buffer da quel progetto, o fare (helm) -projectile-switch-project. E poi posso (quasi) altrettanto bene usare helm-find-files.
Voglio ancora la modalità globale del proiettile attiva, quindi posso sempre fare Cc pf per aprire un file di progetto.
Commenti
Rispondi
In generale, i comandi del proiettile chiamano projectile-project-root
per trovare il progetto corrente e quello funziona guardando lattuale default-directory
.
Puoi consigliare la funzione radice del progetto e fare in modo che restituisca un valore fisso:
(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)
Questa implementazione controllerà se projectile-main-project
è impostato e restituirlo. Se imposti il progetto principale a zero, otterrai invece il comportamento del proiettile predefinito.
Ecco un comando per cambiare il progetto principale. Tieni presente che, poiché abbiamo “consigliato projectile-project-root
sopra, questo disattiva temporaneamente il progetto principale per consentire al proiettile di capire il progetto per il buffer corrente, quindi usa quel risultato.
(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
Se stai utilizzando una versione di Emacs che “t non ha advice-add
(precedente a Emacs 24.4) puoi ottenere lo stesso risultato usando defadvice
invece:
(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))
Commenti
- Meraviglioso! Molto bella! Grazie mille. Posso invece usare defadvice o qualcosa di simile? I ' m il 24.3. Ma poi di nuovo, sarebbe bello aggiornare =)
- Certo, potresti usare defadvice invece. In tal caso, ' non hai la comoda
:before-until
opzione, quindi ti consigliamo di utilizzarearound
e quindi chiamare esplicitamente tramiteprojectile-project-root
quando non è impostato alcun progetto principale. - Per il mio caso duso correlato, ha senso fare qualcosa di simile ma per usare
:after-until
consiglio. Poichéprojectile-project-root
restituiscenil
quando è esterno a un progetto. Posso quindi utilizzare il consiglio per impostare un progetto predefinito . Questa logica è più simile acond
, dove programmiamo unopzione predefinita finale.
projectile-find-file
, anche in progetti diversi, dovrebbe sempre elencare il file nella " principale " progetto, ho ragione? In tal caso, attualmente ' non è implementato, ma penso che potrebbe essere utile impostare un progetto in " principale ".