emacs - source - eval-after-load vs. modo hook
emacs para mac (1)
El código envuelto en eval-after-load
se ejecutará solo una vez, por lo que generalmente se usa para realizar una configuración única, como la configuración de valores y comportamiento globales predeterminados. Un ejemplo podría ser configurar un mapa de teclas predeterminado para un modo particular. En el código eval-after-load
, no hay noción del "búfer actual".
Los enganches de modo se ejecutan una vez para cada búfer en el que el modo está habilitado, por lo que se usan para la configuración por búfer. Los ganchos de modo se ejecutan más tarde que el código eval-after-load
; esto les permite realizar acciones basadas en información tal como si otros modos están habilitados en el búfer actual.
¿Hay alguna diferencia entre configurar cosas para un modo usando eval-after-load
y usar el modo hook?
He visto un código donde se utiliza define-key
dentro de un gancho de modo principal, y algún otro código donde se usa define-key
en el formulario eval-after-load
.
Actualizar:
Para una mejor comprensión, aquí hay un ejemplo del uso de ganchos de evaluación y de carga posterior con modo org. El código puede ejecutarse antes de (load "org")
o (require ''org)
o (package-initialize)
.
;; The following two lines of code set some org-mode options.
;; Usually, these can be outside (eval-after-load ...) and work.
;; In cases that doesn''t work, try using setq-default or set-variable
;; and putting them in (eval-after-load ...), if the
;; doc for the variables don''t say what to do.
;; Or use Customize interface.
(setq org-hide-leading-stars t)
(setq org-return-follows-link t)
;; "org" because C-h f org-mode RET says that org-mode is defined in org.el
(eval-after-load "org"
''(progn
;; Establishing your own keybindings for org-mode.
;; Variable org-mode-map is available only after org.el or org.elc is loaded.
(define-key org-mode-map (kbd "<C-M-return>") ''org-insert-heading-respect-content)
(define-key org-mode-map (kbd "<M-right>") nil) ; erasing a keybinding.
(define-key org-mode-map (kbd "<M-left>") nil) ; erasing a keybinding.
(defun my-org-mode-hook ()
;; The following two lines of code is run from the mode hook.
;; These are for buffer-specific things.
;; In this setup, you want to enable flyspell-mode
;; and run org-reveal for every org buffer.
(flyspell-mode 1)
(org-reveal))
(add-hook ''org-mode-hook ''my-org-mode-hook)))