Quiero agregar un enlace de tecla específico al modo látex:
(define-key latex-mode-map (kbd "<f6>") 'my-latex-defun)
Al mismo tiempo, quiero configurarlo solo cuando se carga el modo específico. Por lo tanto, me gustaría saber si existe una preferencia (mejor práctica) entre usar el gancho apropiado ( latex-mode-hook
) para lograr eso o usar la cláusula (with-eval-after-load "tex-mode" ...
para ajustar la definición de enlace de clave. Probé ambos y funcionan bien, sin embargo, me pregunto cuál es la forma correcta de hacerlo.
with-eval-after-load
se carga una vez , por lo que un cambio de mapa de teclas va allí. Los ganchos se cargan cada vez que se ejecuta el modo , por ejemplo, al cargar un nuevo archivo asociado con el modo, o como se define el gancho. Cargaría, por ejemplo,flyspell-mode
ohl-line-mode
en un gancho. En miinit.el
usowith-eval-after-load
aproximadamente 160 veces yadd-hook
110 veces. Un init flojo es un buen init (IMO).Respuestas:
Un init perezoso es un buen init.
(IMO)
Cuándo usar
with-eval-after-load
with-eval-after-load
se carga una vez cuando una determinada característica o archivo se carga por primera vez, por lo que un cambio de mapa de teclas va claramente dentro de uno de estos. No menos importante porque el mapa de teclas puede no ser conocido en el tiempo de inicio [intente algo como(define-key message-mode-map (kbd "C-c f") 'Footnote-add-footnote)
enemacs -q
]. Un gancho no es una buena solución aquí ya que vincula la función a una tecla cada vez que se inicia el gancho. Como notas de tarsius , puedes leer más sobre por qué no hacerlolocal-set-key
en ganchos.Finalmente, tenga en cuenta que
with-eval-after-load
de GNU Emacs 24.4 es un envoltorio de 2 líneaseval-after-load
dondebody
no es necesario citarlo.Cuando usar ganchos
Los ganchos son una lista de funciones cargadas cada vez que se cumple un criterio, por ejemplo, se inicia un modo determinado. Un uso común de los ganchos es cargar modos menores, como
flyspell-mode
ohl-line-mode
. Por ej(add-hook 'org-agenda-mode-hook 'hl-line-mode)
. Como señala Rémi ,add-hooks
es inteligente y hará lo correcto incluso si la variable de gancho aún no se ha cargado. No obstante, tengo muchas cláusulas como las siguientes, que pueden ser insignificantes para aumentar la velocidad, pero da un sentido de organización y estructura de dependencia:¿Por qué agregar al gancho después
org-agenda
? Como siempre,C-h v org-agenda-mode-hook C-j
entrega. El gancho se defineorg-agenda.el
como se muestra en*help*
.Cargando funciones adicionales
with-eval-after-load
with-eval-after-load
También es importante para cargar funciones adicionales. Probablemente desee algo como(with-eval-after-load 'org (require 'org-inlinetask))
cargar las tareas en línea de la organización. A ver por qué(find-library "org-inlinetask")
. Dado queorg-inlinetasks.el
directamente(require 'org)
, todo lo buenoautoload
que sus amables encargados del mantenimiento de Emacs tuvieron mucho cuidado en proporcionar será "ignorado" y todoorg.el(c)
será cargado.Pero, ¿qué
defun
pasa si su (personal) se requiere varios lugares? Si es realmente quisquilloso, puede poner losdefun
s en otro archivoload-path
y agregarautoload
cookies, o puede decirle a Emacs dónde encontrar la función con laautoload
función. Entonces algo como esto funcionaría:O podrías simplemente
require
org
como a su vez tiraríacdlatex
Y, sinceramente, la defuncion personal no va a importar mucho para el tiempo de inicio la mayor parte del tiempo. Las 1150 líneas de defuns personales (84 defuns) en mi
init.el
agrega 0.02s sobre Emacs de vainilla.Medición del tiempo de inicialización
Una manera fácil de aproximar el tiempo de inicialización es
(punto de referencia contra
emacs -q
.Pero para obtener una aproximación más detallada de dónde se encuentran los cuellos de botella de inicialización, consulte Joe Schafer's
esup
.Finalmente, el tiempo de carga no desaparece mágicamente. Solo lo está empujando hacia adelante (en la medida en que usa todas las funciones en cada sesión).
fuente
with-eval-after-load
sin perder las ventajas de la inicialización diferida?Además de sus sugerencias
eval-after-load
y el uso de un gancho, permítanme sugeriruse-package.el
. Puedes hacer lo que necesites conLaTeX no se cargará hasta después de que lo solicite.
Solo como una nota al margen: el uso cuidadoso de
use-package
ha reducido mis tiempos de inicio a menos de un segundo. (Solía tomar alrededor de cuatro segundos).fuente
use-package
se enviará con Emacs 25.