Po niedawnym zapoznaniu się z use-package
tym zdecydowałem się na przeniesienie do niego konfiguracji, ale nie chciałem rezygnować z wygody package.el
instalowania pakietów i aktualizowania ich. Uważam, że to trochę trudne do połączenia use-package
i package.el
.
Zasadniczo jestem zainteresowany nauczeniem się, jak ludzie łączą się use-package
z package.el
systemem, ale aby uzyskać bardziej szczegółowe pytanie, czytaj dalej.
Oto czego chcę:
- Aby pakiety zostały zainstalowane przez menedżera pakietów, dzięki czemu mogę łatwo przeglądać pakiety i aktualizować je
list-packages
. - Aby skonfigurować i ładować pakiety wyłącznie przez
use-package
, dzięki czemu mogę łatwo zobaczyć w moim pliku init dokładnie to, co ładuję i jak to jest skonfigurowane. - Opcjonalnie, chciałbym być w stanie zainstalować pakiety poprzez
use-package
„s:ensure
słowa kluczowego.
Jeśli dobrze rozumiem, bardzo mało chcę tego, co package-initialize
robi, w zasadzie tylko sposób, w jaki to konfiguruje load-path
. Obecnie mam to w mojej konfiguracji:
;(package-initialize)
(setq package-enable-at-startup nil)
(let ((default-directory "~/.emacs.d/elpa"))
(normal-top-level-add-subdirs-to-load-path))
(require 'use-package)
Pierwsza komentowana linia jest taka, że Emacs 25 nie dodaje pomocniczo (package-initialize)
do mojego pliku init. Bit z normal-top-level-add-subdirs-to-load-path
jest przybliżeniem tego package-initialize
, co by czyniło load-path
, przybliżeniem, które wydaje się wystarczająco dobre.
To wydaje się spełniać moje pragnienia 1 i 2, ale nie 3. Jeśli spróbuję użyć :ensure
, pojawi się komunikat o błędzie informujący, że package.el
nie został zainicjowany. Wywołanie package-initialize
to naprawiłoby to, ale chcę tego uniknąć, ponieważ a) nie chcę, aby ładowane były wszystkie niezliczone autoloady (wolę use-package
tworzyć dokładnie te autoloady, których potrzebuję), i b) chcę mieć możliwość łatwego unikaj ładowania niektórych zainstalowanych pakietów, kiedy tylko chcę (co jest łatwe do zrobienia use-package
).
Czy ktoś ma zalecenie, jak to zrobić?
package-initialize
co sprawia, że moje pytanie jest dyskusyjne.