Pero para algunos paquetes eso no funciona. Tales como auctex
.
La razón por la (use-package tex :ensure t)
que no funciona auctex
es porque auctex
nombra un paquete GNU ELPA (ver (emacs) Packages
), mientras que tex
nombra una característica (ver (elisp) Named Features
) provista por el auctex
paquete.
En otras palabras, tex
nombra un archivo único tex.el
que se distribuye como parte del auctex
paquete. Considere los siguientes ejemplos:
Escribiendo M-xpp-macroexpand-last-sexp
RETcon punto después
(use-package tex
:ensure t)
da una forma que se reduce a
(progn
(use-package-ensure-elpa 'tex '(t) 'nil)
(require 'tex nil t))
mientras que haciendo lo mismo con
(use-package tex
:ensure auctex)
efectivamente se expande a
(progn
(use-package-ensure-elpa 'tex '(auctex) 'nil)
(require 'tex nil t))
Esto ilustra la diferencia de propósito entre el NAME
argumento ay use-package
su :ensure
palabra clave. El primero declara a qué característica nombrada pertenece el resto de la estrofa / por defecto, con exactamente el mismo significado que en with-eval-after-load
; ver (elisp) Hooks for Loading
.
Este último solo pide que se instalen los paquetes dados a través del segundo argumento de la función use-package-ensure-elpa
, donde t
solo significa el paquete nombrado por el actual NAME
. use-package-ensure-elpa
, a su vez, llamadas package-install
; para detalles sobre esto ver (emacs) Package Installation
.
Según este blog / tutorial / sitio, la razón es
porque, una vez instalado, auctex anula el paquete tex.
Qué significa eso
Desafortunadamente, esto es a la vez incorrecto y engañoso. "Anulación" generalmente se refiere a reemplazar o parchear mono funcionalidad existente, por ejemplo, a través de consejos . Cuando un paquete proporciona la misma característica con nombre que otro, ocultando a este último de las funciones de carga de Emacs, esto se denomina "sombreado".
La distribución de AUCTeX anula y amplía varias funciones integradas relacionadas con TeX, pero no oculta ninguna biblioteca incorporada. Puede confirmar esto inspeccionando el resultado de M-xlist-load-path-shadows
RET.
Una mejor autoridad es la use-package
documentación en sí: https://github.com/jwiegley/use-package/#package-installation .
¿Cómo puedo saber cuándo hacer eso para otros paquetes?
Depende tanto de cómo desee agrupar sus use-package
estrofas como del nombre del paquete correspondiente. Por ejemplo, si desea poner todas o la mayoría de sus configuraciones relacionadas con Org en una sola (use-package org ...)
, pero quiere usar la org-plus-contrib
distribución de Org en lugar de la integrada, entonces debería escribir
(use-package org
:ensure org-plus-contrib
...)
No escribirias
(use-package org-plus-contrib
:ensure t
...)
porque no hay un nombre de archivo org-plus-contrib.el
, incluso si hay un paquete con el nombre org-plus-contrib
. De manera similar, no escribirías
(use-package auctex
:ensure t
...)
por la misma razón - no hay una característica llamada auctex
(no es un archivo auctex.el
, pero no llama (provide 'auctex)
).
Tenga en cuenta que ninguna de estas discrepancias / semánticas son específicas de use-package
; Estas son todas las características (potentes y útiles) de Emacs que use-package
solo pueden llegar muy lejos en el resumen.