Quando devo usar with-eval-after-load nos meus arquivos de configuração?


15

Examinei meus arquivos de configuração e queria fazer uma limpeza.

Meu entendimento with-eval-after-loadera que seu corpo seria avaliado logo após o carregamento do pacote relacionado. Enquanto limpava meus arquivos de configuração e os dividia ainda mais, queria incluir todas as configurações de pacotes with-eval-after-load. Tudo correu como esperado até eu anexar a configuração para helme helm-projectile.

Aqui está o que eu tinha em mente ( 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))

Depois de reiniciar o Emacs, recebo este problema de tamanho de janela:

emacs-window-size-issue

É assim que redimensiono minha janela:

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

Suponho que estou usando indevidamente with-eval-after-load, como higienizar sua configuração do Emacs e garantir que nada quebre, independentemente do pacote instalado?


Isso é totalmente bizarro. (Possivelmente um bug?)
PythonNut

Você tem alguma idéia do que isso possa estar relacionado? Estou usando a porta OS X da railwaycat e não quero adicionar um problema em que isso não pertença :).
Mathieu Marques

8
Tentei usar with-eval-after-loadpara quebrar todas as minhas personalizações relacionadas ao pacote uma vez. Então eu vi a luz e comecei a usar use-package.
Itsjeyd 19/05

@itsjeyd Parece muito prático e conveniente! No entanto, encontrei alguns problemas: comentei (package-initialize)e o substituí por, (require 'use-package)mas receberei Erro de arquivo: Não é possível abrir o arquivo de carregamento, nenhum arquivo ou diretório, use-package ao reiniciar o Emacs. E, no entanto, uma vez Emacs começou posso eval (require 'use-package)com nenhum problema. Finalmente, eu até tentei with-eval-after-load, ainda o mesmo erro. O leia-me não é muito claro sobre como instalar use-package ao usar pacotes do package.el.
Mathieu Marques

1
Mostre-nos a sua .emacs, preferencialmente, uma versão simplificada que demonstre o problema com o mínimo de linhas e o menor número possível de pacotes externos. Provavelmente, isso tem a ver com o tempo da configuração do quadro versus a carga do pacote durante a inicialização . Mas sem ver seu código, não há muito o que fazer. Diga-nos também qual versão do Emacs você está usando.
Gilles 'SO- stop be evil'

Respostas:


2

Eu uso with-eval-after-loadmuito, principalmente para adicionar ou remover elementos de ou para listas depois que os valores padrão foram avaliados. Dessa forma, não preciso acompanhar as alterações nos valores padrão.

Quanto ao problema com sua helminicialização, a documentação recomenda a (require 'helm-config)presença em init.elsuas dependências.

Descobri que é mais fácil exigir apenas helm-configdurante a inicialização do que confiar autoload, especialmente porque eu a carregaria quase imediatamente na maioria das vezes.


Eu mudei desde então para usar use-packagee, mesmo exigindo helm-config, continuo com o mesmo problema. Aqui está a minha configuração atualizada: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques

1

Acontece que não tinha nada a ver com helminicialização (ou pouco).

Na minha eterna busca para otimizar o tempo de inicialização do Emacs, movi todas as coisas relacionadas à interface no início da minha configuração. Isso inclui a pseudo tela cheia que eu uso.

Colocar a linha correspondente antes que qualquer um dos pesados ​​lisp fosse carregado solucionou meu problema.

Aqui está minha configuração para referência .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.