Когда я должен использовать with-eval-after-load в моих файлах конфигурации?


15

Я просмотрел свои файлы конфигурации и хотел сделать некоторую очистку.

Насколько я понимаю with-eval-after-load, его тело будет оцениваться сразу после загрузки соответствующего пакета. Очистив мои файлы конфигурации и разделив их еще больше, я хотел заключить каждую конфигурацию пакета в with-eval-after-load. Все прошло как ожидалось, пока я не приложил конфигурацию для helmи helm-projectile.

Вот что я имел в виду ( lisp / init-helm.el ):

(with-eval-after-load 'helm
  (setq helm-mode-line-string "")
  (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
  (define-key global-map (kbd "C-c m") 'helm-imenu)
  (define-key global-map (kbd "C-x b") 'helm-buffers-list))

(with-eval-after-load 'helm-command
  (global-set-key (kbd "M-x") 'helm-M-x))

(with-eval-after-load 'helm-projectile
  (helm-projectile-on))

После перезапуска Emacs у меня возникает проблема с размером окна:

Emacs-окна-размерный вопрос

Вот как я изменяю размер моего окна:

(set-frame-parameter nil 'fullscreen 'fullboth)

Я предполагаю, что неправильно использую with-eval-after-load, как можно продезинфицировать его конфигурацию Emacs и убедиться, что ничего не сломалось, независимо от того, какой пакет установлен?


Это совершенно странно. (Возможно ошибка?)
PythonNut

Ты хоть представляешь, с чем это может быть связано? Я использую железнодорожный порт OS X и не хочу добавлять проблему, к которой это не относится :).
Матье Маркес

8
Я попытался использовать, with-eval-after-loadчтобы обернуть все мои настройки, связанные с пакетами, один раз. Затем я увидел свет и начал использовать use-packageвместо этого.
егоджайд

@itsjeyd Это выглядит очень удобно и удобно! Однако я столкнулся с некоторыми проблемами: я закомментировал (package-initialize)и заменил его, (require 'use-package)но я получу ошибку файла: не могу открыть файл загрузки, такой файл или каталог, use-package при перезапуске Emacs. И все же, как только Emacs запустится, я смогу начать (require 'use-package)без проблем. Наконец, я даже попробовал with-eval-after-load, все та же ошибка. В файле readme не очень ясно, как устанавливать use-package при использовании пакетов из package.el.
Матье Маркес

1
Покажите нам свою .emacs, предпочтительно урезанную версию, которая демонстрирует проблему с таким количеством строк и как можно меньшим количеством внешних пакетов. Это, вероятно, связано с синхронизацией настройки фрейма и загрузкой пакета во время запуска . Но не увидев ваш код, мы мало что можем сделать. Также скажите нам, какую версию Emacs вы используете.
Жиль "ТАК - перестань быть злым"

Ответы:


2

Я with-eval-after-loadчасто использую , в основном для добавления или удаления элементов в или из списков после оценки значений по умолчанию. Таким образом, мне не нужно отслеживать изменения значений по умолчанию.

Что касается проблемы с вашей helmинициализацией, документация рекомендует, чтобы (require 'helm-config)она присутствовала в ваших init.elили его зависимостях.

Я обнаружил, что проще просто потребовать helm-configво время инициализации, а не полагаться на него autoload, тем более что я все равно загружал бы его почти сразу большую часть времени.


Я изменил с тех пор, чтобы использовать use-package, и даже при необходимости helm-configя все еще получаю ту же проблему. Вот моя обновленная конфигурация конфигурации: bitbucket.org/angrybacon/dotemacs/src .
Матье Маркес

1

Оказывается, это не имеет ничего общего с helmинициализацией (или мало).

В своем вечном стремлении оптимизировать время запуска Emacs я перенес все связанные с интерфейсом вещи в самом начале своей конфигурации. Это включает в себя псевдоэкран, который я использую.

Помещение соответствующей строки до того, как какой-либо тяжелый список был загружен, устранило мою проблему.

Вот моя конфигурация для справки .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.