Voinko tehdä valitusta projektista tahmean, enkä noudata nykyistä puskuria
On helmikuu 14, 2021 by adminVoinko saada ammuksen vaihtaa vain projektia kutsuttaessa ammuksen vaihto-projektia ja etkö seuraa puskureita?
Kun vaihdan puskureita emacsissa, projektiili vaihtaa projektin projektiin, johon nykyinen puskuri kuuluu (jos sellaisia on).
Työskentelen yleensä projektissa mutta tiedostot ovat avoinna myös muista projekteista. Minulla on org-tiedosto, jossa työkohteet ja muistiinpanot ovat auki (joka kuuluu org-projektiini) ja joitain testiskriptejä (komentosarjaprojektistani) ja sitten projektin lähde, jota työskentelen.
Tämä tekee tiedostojen avaaminen (helm) -projectile-find–tiedostolla lähes merkityksetön, koska minun on yleensä vaihdettava ensin puskuriin kyseisestä projektista tai tehtävä (helm) -projectile-switch-project. Ja sitten voin (melkein) yhtä hyvin käyttää helm-find-tiedostoja.
Haluan silti, että ammuksen globaali tila on aktiivinen, jotta voin aina tehdä kopio-pf: n projektitiedoston avaamiseksi.
Kommentit
Vastaa
Ammuntakomennot kutsuvat yleensä projectile-project-root
etsimään nykyinen projekti ja että toimii tarkastelemalla nykyistä default-directory
.
Voit neuvoa projektin juuritoimintoa ja antaa sen palauttaa kiinteän arvon:
(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)
Tämä toteutus tarkistaa, onko projectile-main-project
on asetettu ja palauta se. Jos asetat pääprojektiksi nollan, saat sen sijaan oletetun ammuksen käyttäytymisen.
Tässä on komento muuttaa pääprojektia. Huomaa, että koska olemme ”neuvoneet projectile-project-root
yllä, tämä keskeyttää pääprojektin väliaikaisesti, jotta ammuksen voi selvittää nykyisen puskurin projekti ja käyttää sitten tulosta.
(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))))
PÄIVITYS
Jos käytät Emacs-versiolla, jolla ei ole advice-add
(vanhempi kuin Emacs 24.4), voit saavuttaa saman tuloksen käyttämällä defadvice
:
(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))
Kommentit
- Ihana! Oikein mukava! Kiitos paljon. Voinko käyttää sen sijaan neuvoja tai jotain vastaavaa? I ' m 24.3-kanavalla. Mutta jälleen kerran, olisi mukavaa päivittää =)
- Toki, voit käyttää sen sijaan neuvoja. Siinä tapauksessa sinulla ' ei ole kätevää vaihtoehtoa
:before-until
, joten haluat käyttääaround
neuvoja ja soita sitten nimenomaisestiprojectile-project-root
-palveluun, kun pääprojektijoukkoa ei ole. - Aiheeseen liittyvässä käyttötapauksessa on järkevää tehdä jotain vastaavaa vaan käyttää
:after-until
neuvoja. Koskaprojectile-project-root
palauttaanil
projektin ulkopuolella. Siksi voin käyttää neuvoja oletus -projektin asettamiseen. Tämä logiikka on enemmän kuincond
, jossa ohjelmoimme viimeisen oletusvaihtoehdon.
projectile-find-file
, jopa eri projekteissa, sen tulisi aina luetella tiedosto " main " projekti, olenko oikeassa? Jos näin on, sitä ' ei tällä hetkellä toteuteta, mutta mielestäni voi olla hyödyllistä vaihtaa projekti " main ".