Kiedy powinienem używać opcji-eval-after-load w moich plikach konfiguracyjnych?


15

Przejrzałem moje pliki konfiguracyjne i chciałem trochę wyczyścić.

Zrozumiałem, with-eval-after-loadże jego ciało zostanie ocenione zaraz po załadowaniu powiązanego pakietu. Oczyszczając moje pliki konfiguracji i dzieląc je jeszcze bardziej, chciałem dołączyć każdą konfigurację pakietu with-eval-after-load. Wszystko poszło zgodnie z oczekiwaniami, dopóki nie załączyłem konfiguracji dla helmi helm-projectile.

Oto, co miałem na myśli ( 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))

Po ponownym uruchomieniu Emacsa pojawia się problem z rozmiarem okna:

emacs-window-size-problem

Oto jak zmieniam rozmiar mojego okna:

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

Zgaduję, że niewłaściwie używam with-eval-after-load, w jaki sposób można zdezynfekować jego konfigurację Emacsa i upewnić się, że nic się nie zepsuje bez względu na to, jaki pakiet jest zainstalowany?


To jest całkowicie dziwne. (Być może błąd?)
PythonNut

Czy masz pojęcie, z czym to może być związane? Korzystam z portu OS X railwaycat i nie chcę dodawać problemu, w którym to nie należy :).
Mathieu Marques

8
Próbowałem użyć raz, with-eval-after-loadaby zawinąć wszystkie moje dostosowania związane z pakietami. Potem zobaczyłem światło i zacząłem używać use-package.
itsjeyd

@itsjeyd To naprawdę wygląda bardzo przydatne i wygodne! Wpadłem jednak w pewne kłopoty: skomentowałem (package-initialize)i zastąpiłem go, (require 'use-package)ale dostanę Błąd pliku: nie można otworzyć pliku ładowania, nie ma takiego pliku lub katalogu, użyj pakietu podczas ponownego uruchamiania Emacsa. A jednak, kiedy Emacs zaczął, mogę ewaluować (require 'use-package)bez problemu. Wreszcie nawet próbowałem with-eval-after-load, wciąż ten sam błąd. Plik Readme nie jest zbyt jasny w kwestii instalacji use-package podczas korzystania z pakietów z pliku package.el.
Mathieu Marques

1
Pokaż nam swoją .emacs, najlepiej uproszczoną wersję, która pokazuje problem z jak najmniejszą liczbą wierszy i jak najmniejszą liczbą zewnętrznych pakietów. Prawdopodobnie ma to związek z czasem konfiguracji ramki w porównaniu do obciążenia pakietu podczas uruchamiania . Ale bez zobaczenia twojego kodu niewiele możemy zrobić. Powiedz nam także, której wersji Emacsa używasz.
Gilles „SO- przestań być zły”

Odpowiedzi:


2

with-eval-after-loadDużo używam , głównie do dodawania lub usuwania elementów do lub z list po ocenie wartości domyślnych. W ten sposób nie muszę śledzić zmian wartości domyślnych.

Jeśli chodzi o problem z helminicjalizacją, dokumentacja zaleca, aby (require 'helm-config)był obecny w twojej init.elzależności lub w jej zależnościach.

Przekonałem się, że łatwiej jest po prostu wymagać helm-configpodczas inicjalizacji, niż polegać autoload, zwłaszcza, że ​​i tak ładowałbym ją niemal natychmiast.


Od tego czasu zmieniłem się na używanie use-package, a nawet gdy wymagam helm-config, wciąż otrzymuję ten sam problem. Oto moja zaktualizowana konfiguracja konfiguracji: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques

1

Okazuje się, że nie miało to nic wspólnego z helminicjalizacją (lub niewielką).

W mojej wiecznej pogoni za optymalizacją czasu uruchamiania Emacsa przeniosłem wszystkie rzeczy związane z interfejsem na samym początku mojej konfiguracji. Obejmuje to pseudo pełny ekran, którego używam.

Umieszczenie odpowiedniej linii przed załadowaniem któregoś z ciężkich seplindów naprawiło mój problem.

Oto moja konfiguracja w celach informacyjnych .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.