Jak generować i aktywować automatyczne ładowanie pakietów lokalnych?

9

Oczywiste jest, że nie wszystkie pakiety lokalne / niestandardowe / osobiste powinny zostać oficjalnie wydane i byłoby głupotą, aby skorzystać z wbudowanego wsparcia zarządzania pakietami. Zastanawiam się, jak wygenerować i aktywować automatyczne ładowanie pakietów lokalnych? Podobnie package.eljest w przypadku zainstalowanych pakietów z ELPA. Aby uniknąć ponownego wynalezienia koła, czy istnieje sposób, aby „udawać”, że jakiś katalog lokalny (z podkatalogami, z których każdy jest pakietem lokalnym / niestandardowym / osobistym) to ELPA? Jestem również otwarty na to, el-getczy taki scenariusz może być obsługiwany na przykład przez niestandardowe przepisy.

Jestem pewien, że zadanie jest dość powszechne i każdy, kto używa Emacsa na poziomie zaawansowanym, prędzej czy później dojdzie do tego. Czy ktoś mógłby podzielić się swoimi doświadczeniami w tej dziedzinie?

Alexander Shukaev
źródło
3
update-directory-autoloadsmoże być używany niezależnie od dowolnego menedżera pakietów.
npostavs
@npostavs, wiem, ale to nie jest rekurencyjne i nie jest w tym przypadku kompleksowym rozwiązaniem. Na pewno to nie wystarczy i musiałbym zawinąć to we własną implementację.
Alexander Shukaev,
1. Możesz podać listę reżimów (np. Reż i jego potomków) update-directory-autoloads, aby w efekcie uczynić go rekurencyjnym. 2. Możesz użyć update-file-autoloadsdla każdego pliku, który Cię interesuje, bez względu na katalog, w którym się znajduje.
Drew
FYI: package.eljest również nierekurencyjne (tzn. Nie obsługuje pakietów ze źródłami w podkatalogach).
npostavs
Skonfigurowałem lokalną MELPA w systemie Linux. Nie mam dobrego rozwiązania dla systemu Windows. Naprawdę chciałbym, żeby emacs wspierał tego typu rzeczy po wyjęciu z pudełka. Może warto sprawdzić pakiet use, aby zobaczyć, czy to możliwe.
eflanigan00

Odpowiedzi:

7

Prawidłowym rozwiązaniem (IMO) jest użycie menedżera pakietów, który ma wyraźne wsparcie dla tego przypadku użycia. Byłoby to straight.el, co napisałem w tym celu.

Możesz przeczytać pełną dokumentację, w tym porównania z innymi menedżerami pakietów, w README , więc zostanę przy tym, jak możesz użyć, straight.elaby rozwiązać konkretny problem.

  1. Umieść swoje repozytorium w ~/.emacs.d/straight/repos/<my-repo>.
  2. Załaduj za pomocą

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Jesteś skończony. Za każdym razem, gdy wprowadzasz zmiany w kodzie źródłowym, generowanie autoloada i kompilacja bajtów zostaną ponownie wykonane (przy następnym uruchomieniu Emacsa). Dostajesz także takie rzeczy, jak zarządzanie zależnościami, opcjonalna automatyzacja kontroli wersji itp. Za darmo.

  4. Kiedy (jeśli) chcesz opublikować pakiet, po prostu go wypchnij i zmodyfikuj przepis, aby wskazywał na to repozytorium Git.
  5. Można również skorzystać straight.elz use-package, jeśli wolisz (tylko cukier To składnia w przeważającej części).
Radon Rosborough
źródło
3

W systemie Linux wykonuję następujące czynności:

Konfiguruję lokalne repozytorium melpy poprzez klonowanie melpy.

Zmieniam przepisy, które chcę wskazywać na moje lokalne pakiety. Oto:local-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

Następnie z typu local-mepla make alllub w make recipies/ace-windowcelu zbudowania pakietówlocal-melpa/packages

Następnie make packages/archive-contents, która zapełnia listę pakietów.

Następnie w użyciu do naśladowania, aby emacs powiedział mojej lokalnej melpie

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

Nie wymyśliłem, jak uruchomić makew systemie Windows. Ale mogę budować pakiety w local-melpasystemie Linux i kopiować je do systemu Windows, a emacs poprawnie je rozumie i instaluje.

Zaletą tego jest to, że mogę zresetować w dowolnym momencie, usuwając mój ~/.emacs.d/elpa/*katalog i instalując niestandardowe aktualizacje w dowolnym pakiecie.

eflanigan00
źródło
Być może quelpa byłaby również interesująca?
npostavs
Myślę, że masz rację npostavs. Muszę usiąść i spojrzeć na to.
eflanigan00
2

Jeśli zastąpiłeś już zainstalowany pakiet inną wersją, a brakuje Ci tylko pliku autoloads, możesz go użyć do wygenerowania pakietu:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

Uznałem, że jest to łatwiejsze niż korzystanie z automatycznych narzędzi do aktualizacji katalogu, kiedy muszę obniżyć pakiet do wcześniejszej wersji.

Myślę, że tak naprawdę nie odpowiedziałem na twoje pytanie. Na razie pozostawię tę odpowiedź tutaj, ale moja odpowiedź jest bardziej odpowiednia tutaj: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Andreas Raster
źródło