В 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)
, Это позволит вам не помещать весь этот код в один хук.