Cuándo especificar el nombre de un paquete en use-package: asegurar etiqueta?


7

use-packagele permite instalar paquetes automáticamente usando la :ensureetiqueta. Puedes hacerlo de la siguiente manera

(use-package <package>
  :ensure t)

Pero para algunos paquetes que no funcionan, como auctex. En esos casos, puede especificar el paquete de la ensuresiguiente manera

(use-package tex
  :ensure auctex)

Según este blog / tutorial / sitio , la razón es

porque, una vez instalado, auctexanula el texpaquete.

¿Qué significa eso y cómo puedo saber cuándo hacer eso para otros paquetes?

Respuestas:


11

Pero para algunos paquetes eso no funciona. Tales como auctex.

La razón por la (use-package tex :ensure t)que no funciona auctexes porque auctexnombra un paquete GNU ELPA (ver (emacs) Packages), mientras que texnombra una característica (ver (elisp) Named Features) provista por el auctexpaquete.

En otras palabras, texnombra un archivo único tex.elque se distribuye como parte del auctexpaquete. Considere los siguientes ejemplos:

Escribiendo M-xpp-macroexpand-last-sexpRETcon 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 NAMEargumento ay use-packagesu :ensurepalabra 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 tsolo 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-shadowsRET.

Una mejor autoridad es la use-packagedocumentació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-packageestrofas 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-contribdistribució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-packagesolo pueden llegar muy lejos en el resumen.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.