В emacs, как я могу добавить функцию в ловушку, если функция еще не определена?

Я установил некоторые вещи из ELPA, а именно зла и разделителей радуги.

Чтобы они запускались при загрузке emacs, я бы добавил что-то вроде:

(evil-mode)
(global-rainbow-delimiters-mode)

В моем файле init.el.

Однако, поскольку я установил их из ELPA, они не загружаются до тех пор, пока не будет загружен мой init.el, и поэтому оба символа не определены.

Насколько я понимаю, это также мешает мне делать что-то вроде

(add-hook 'after-init-hook 'global-rainbow-delimiters-mode)

Как я могу обойти это?

Постскриптум: Эта проблема была вызвана тем, что я не звонил (package-initialize) в начале моего init.el, который загрузил бы все вещи, установленные с использованием пакетов (evilmode и rainbow-delimiters - всего два из них) в правильное время

3 ответа

Решение

Ваш add-hook Решение будет работать.

Там, 'global-rainbow-delimiters-mode это просто имя, оно будет преобразовано в функцию позже, когда add-hook вызывается, и функция будет существовать к тому времени.

Документация ELPA действительно упоминает этот метод, хотя, кажется, рассматривает его как последнее средство.

AFAIU, компиляция файла инициализации - не очень хорошая идея, но до сих пор не связанная.

Ваш хук не работает, так как он запускается после прочтения инициализации, но до загрузки материала Вам нужна функция для запуска после загрузки из ELPA.

Попробуйте eval-after-load

Вы также можете инициализировать ваши пакеты заранее (package-initialize), Это позволит вам не помещать весь этот код в один хук.

Другие вопросы по тегам