Коли я повинен використовувати з-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-window-size-issue

Ось так я змінюю розмір вікна:

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

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


Це надзвичайно химерно. (Можливо, помилка?)
PythonNut

Чи маєте ви якесь уявлення, з чим це могло бути пов'язано? Я використовую порт X OS Railcat, і я не хочу додавати питання, куди це не належить :).
Матьє Маркіс

8
Я спробував використати, with-eval-after-loadщоб перетворити всі мої налаштування, пов’язані з пакетом один раз. Потім я побачив світло і почав використовувати use-packageзамість цього.
itjeyd

@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.