Ragadóssá tudom tenni a kiválasztott lövedéket, és nem tudom-e követni az aktuális puffert
On február 14, 2021 by adminLehetséges-e a lövedéket csak projektet váltani a lövedék-kapcsoló-projekt meghívásakor, és nem követi a puffereket?
Amikor puffereket váltok az emacs-ben, a lövedék átkapcsol a projektre arra a projektre, amelyhez az aktuális puffer tartozik (ha van ilyen).
Általában egy projekten dolgozom de más projektekből is nyissanak fájlokat. Van egy org fájlom, amelyen meg vannak nyitva a munkám és a jegyzeteim (ami az org projektemhez tartozik), valamint néhány teszt szkript (az én szkript projektemből), majd a projekt forrása, amin dolgozom.
Ez megkönnyíti a fájlok megnyitása a (helm) -projectile-find-file használatával szinte értelmetlen, mivel általában előbb át kell váltanom egy pufferre ettől a projekttől, vagy meg kell csinálnom (helm) -projectile-switch-project. És akkor (szinte) ugyanolyan jól tudom használni a helm-find-fájlokat.
Még mindig aktívnak szeretném a lövedék globális módját, így mindig meg tudom csinálni a Cc pf fájlt a projektfájl megnyitásához.
Megjegyzések
Válasz
Általában a lövedékparancsok felhívják a projectile-project-root
-t az aktuális projekt megkereséséhez, és hogy úgy működik, hogy megnézi az aktuális default-directory
.
Tanácsot adhat a projekt gyökérfüggvényének, és helyette rögzített értéket adhat vissza:
(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)
Ez a megvalósítás ellenőrzi, hogy a div id = “47c81dda23″>
be van állítva, és adja vissza ezt. Ha nullára állítja a fő projektet, akkor az alapértelmezett lövedék viselkedést kapja meg.
Itt van egy parancs a fő projekt megváltoztatására. Vegye figyelembe, hogy mivel fentebb “div div = = 8d94793717″>
tanácsot kaptunk, ez ideiglenesen kikapcsolja a fő projektet, hogy a lövedék kitalálja az aktuális puffer projektjét, majd felhasználja ezt az eredményt.
(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
Ha az Emacs olyan verziója, amelynek nincs “div id =” 61851dd140 “>
(régebbi, mint az Emacs 24.4 verzió), ugyanazt az eredményt érheti el a defadvice
használatával:
(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))
Megjegyzések
- Csodálatos! Nagyon szép! Nagyon szépen köszönjük. Használhatok helyette defadvice-t vagy valami hasonlót? I ' m a 24.3-on. De megint jó lenne frissíteni =)
- Persze, használhatna helyette defadvice-t. Ebben az esetben nincs ' nincs a praktikus
:before-until
opció, ezért aaround
tanácsot, majd kifejezetten felhívja aprojectile-project-root
szolgáltatást, ha nincs fő projektkészlet. - A kapcsolódó felhasználási esetemben van értelme hasonlót tenni hanem a
:after-until
tanácsok felhasználására. Mivel aprojectile-project-root
a projekten kívülinil
eredményt adja vissza. Ezért felhasználhatom a tanácsot egy alapértelmezett projekt beállításához. Ez a logika inkább hasonlít acond
fájlhoz, ahol egy utolsó alapértelmezett opciót programozunk.
projectile-find-file
futtatásakor, még a különböző projektekben is, mindig a " main " projekt, igazam van? Ha igen, akkor jelenleg ' nincs végrehajtva, de úgy gondolom, hogy hasznos lehet egy projektet " main ".