После недавнего изучения use-packageя решил портировать свою конфигурацию на него, но обнаружил, что не хочу отказываться от удобства использования package.elдля установки пакетов и их обновления. Я нашел это немного сложным для объединения use-packageи package.el.
Мне, как правило, интересно узнать, как люди объединяются use-packageс package.elсистемой, но для более конкретного вопроса продолжайте читать.
Вот что я хочу:
- Чтобы пакеты были установлены менеджером пакетов, чтобы я мог легко просматривать пакеты и постоянно обновлять их
list-packages. - Настраивать и загружать пакеты исключительно через
use-package, чтобы я мог легко видеть в моем файле инициализации, что именно я загружаю и как он настроен. - По желанию, я хотел бы также иметь возможность установить пакеты через
use-package«s:ensureключевое слово.
Если я правильно понимаю, я хочу очень мало того, что package-initializeделает, в основном только то, как это настраивает load-path. В настоящее время у меня есть это в моей конфигурации:
;(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)
Первая закомментированная строка такова, что Emacs 25 не добавляет (package-initialize)в мой файл инициализации. Бит с normal-top-level-add-subdirs-to-load-pathявляется приближением к тому, package-initializeчто сделало бы load-path, приближение, которое кажется достаточно хорошим.
Это, кажется, достигает моих желаний 1 и 2, но не 3. Если я пытаюсь использовать :ensure, я получаю сообщение об ошибке, говорящее, что package.elэто не инициализировано. Вызов исправил package-initializeбы это, но я хотел бы избежать этого, так как а) я не хочу, чтобы загружались все бесчисленные автозагрузки (я предпочитаю использовать use-packageдля создания именно тех автозагрузок, которые мне нужны), и б) я хочу иметь возможность легко Старайтесь не загружать определенные установленные пакеты в любое время (это легко сделать use-package).
У кого-нибудь есть рекомендации как это сделать?
package-initializeкоторое делает мой вопрос спорным.