Quand dois-je utiliser with-eval-after-load dans mes fichiers de configuration?

15

J'ai parcouru mes fichiers de configuration et je voulais faire un peu de nettoyage.

D'après ce que j'ai compris, with-eval-after-loadson corps serait évalué juste après le chargement du package correspondant. Tout en nettoyant mes fichiers de configuration et en les divisant encore plus, je voulais inclure chaque configuration de package avec with-eval-after-load. Tout s'est déroulé comme prévu jusqu'à ce que j'inclus la configuration de helmet helm-projectile.

Voici ce que j'avais en tête ( 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))

Après avoir redémarré Emacs, j'obtiens ce problème de taille de fenêtre:

emacs-window-size-issue

Voici comment je redimensionne ma fenêtre:

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

Je suppose que j'utilise mal with-eval-after-load, comment pourrait-on désinfecter sa configuration Emacs et s'assurer que rien ne casse, quel que soit le package installé?

Mathieu Marques
la source
C'est tout à fait bizarre. (Peut-être un bug?)
PythonNut
Avez-vous une idée de ce à quoi cela pourrait être lié? J'utilise le port OS X de railwaycat et je ne veux pas ajouter de problème auquel cela n'appartient pas :).
Mathieu Marques
8
J'ai essayé d'utiliser with-eval-after-loadpour envelopper toutes mes personnalisations liées aux packages une fois. Puis j'ai vu la lumière et j'ai commencé à utiliser à la use-packageplace.
itsjeyd
@itsjeyd Cela semble vraiment très pratique et pratique! J'ai cependant rencontré quelques problèmes: j'ai commenté (package-initialize)et remplacé par (require 'use-package)mais j'obtiendrai une erreur de fichier: impossible d'ouvrir le fichier de chargement, aucun fichier ou répertoire, use-package lors du redémarrage d'Emacs. Et pourtant, une fois Emacs démarré, je peux évaluer (require 'use-package)sans problème. Enfin, j'ai même essayé with-eval-after-load, toujours la même erreur. Le fichier lisez-moi n'est pas très clair sur la façon d' installer use-package lors de l'utilisation des packages de package.el.
Mathieu Marques
1
Montrez-nous votre .emacs, de préférence une version allégée qui illustre le problème avec le moins de lignes et le moins de packages externes possible. Cela a probablement à voir avec le moment de la configuration de la trame par rapport à la charge du package au démarrage . Mais sans voir votre code, nous ne pouvons pas faire grand-chose. Dites-nous également quelle version d'Emacs vous utilisez.
Gilles 'SO- arrête d'être méchant'

Réponses:

2

J'utilise with-eval-after-loadbeaucoup, principalement pour ajouter ou supprimer des éléments dans ou à partir de listes après que les valeurs par défaut ont été évaluées. De cette façon, je n'ai pas à suivre les modifications des valeurs par défaut.

Quant au problème de votre helminitialisation, la documentation recommande d' (require 'helm-config)être présent dans vos init.eldépendances.

J'ai trouvé qu'il est plus facile d'exiger simplement helm-configlors de l'initialisation plutôt que de compter dessus autoload, d'autant plus que je le chargerais presque immédiatement la plupart du temps de toute façon.

tak
la source
J'ai changé depuis lors à utiliser use-package, et même en exigeant, helm-configje reçois toujours le même problème. Voici ma configuration de configuration mise à jour: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques
1

Il s'avère que cela n'avait rien à voir avec l' helminitialisation (ou peu).

Dans ma quête éternelle d'optimiser le temps de démarrage d'Emacs, j'ai déplacé toutes les choses liées à l' interface au tout début de ma configuration. Cela inclut le pseudo plein écran que j'utilise.

Mettre la ligne correspondante avant le chargement du lisp lourd a résolu mon problème.

Voici ma configuration pour référence .

Mathieu Marques
la source