49 Paquetes Emacs Lisp

Emacs se amplía implementando características adicionales en paquetes, que son bibliotecas Emacs Lisp. Estas pueden ser escritas por Usted o proporcionadas por alguien más. Si quiere instalar tal paquete para que esté disponible en su futura sesión de Emacs, necesita compilarlo y ponerlo en un directorio donde Emacs busque bibliotecas Lisp. Vea 28.8 Bibliotecas de Código Lisp para Emacs, para más detalles sobre este método de instalación manual. Muchos paquetes proporcionan instrucciones de instalación y uso en el gran comentario cerca del principio del archivo Lisp; puede usar esas instrucciones para instalar y afinar el uso del paquete.

Los paquetes también pueden ser proporcionados por archivos de paquetes, que son grandes colecciones de paquetes Emacs Lisp. Cada paquete es un programa Emacs Lisp independiente, que a veces incluye otros componentes como un manual de información. Emacs incluye una herramienta que le permite descargar e instalar fácilmente paquetes de dichos archivos. El resto de este capítulo describe esta herramienta.

Para listar los paquetes disponibles para su instalación desde archivos de paquetes, escriba Alt-x list-packages RETURN (M-x list-packages RET). Aparecerá un búfer llamado *Packages* (Paquetes) con una lista de todos los paquetes. Puede instalar o desinstalar paquetes a través de este búfer. Ver 49.1 El Menú de Paquetes.

El comando C-h P (describe-package) pide el nombre de un paquete y muestra un búfer de ayuda describiendo los atributos del paquete y las características que implementa.

Por defecto, Emacs descarga paquetes de un archivo de paquetes mantenido por los desarrolladores de Emacs y alojado por el proyecto GNU. Opcionalmente, también puede descargar paquetes de archivos mantenidos por terceros. Ver 49.3 Instalación de Paquetes.

Para más información sobre cómo convertir un programa Emacs Lisp en un paquete instalable, vea Empaquetado en el Manual de Referencia de Emacs Lisp.

49.1 El Menú de Paquetes

El comando M-x list-packages muestra el menú de paquetes. Este es un búfer que lista todos los paquetes que Emacs conoce, uno en cada línea, con la siguiente información:

  • El nombre del paquete (por ejemplo, auctex).

  • El número de versión del paquete (por ejemplo, 11.86).

  • El estado del paquete, normalmente uno de los siguientes: available (disponible, puede descargarse del archivo de paquetes), installed (instalado), o built-in (incluido en Emacs por defecto). Ver 49.2 Estados de los Paquetes.

  • De qué archivo de paquetes proviene este paquete, si tiene más de un archivo de paquetes habilitado.

  • Una breve descripción del paquete.

El comando list-packages accede a la red, para recuperar la lista de paquetes disponibles de los servidores de archivo de paquetes. Si la red no está disponible, recurre a la lista recuperada más recientemente.

El comando principal a utilizar en el búfer de la lista de paquetes es el comando x. Si el paquete en cuestión aún no está instalado, este comando lo instalará. Si el paquete en cuestión ya está instalado, lo eliminará.

Los siguientes comandos están disponibles en el menú de paquetes:

h (h)

Imprime un breve mensaje que resume cómo utilizar el menú del paquete (package-menu-quick-help).

? (?)
RETURN (RET)

Muestra un búfer de ayuda para el paquete en la línea actual (package-menu-describe-package), similar a la ventana de ayuda mostrada por el comando C-h P (ver 49 Paquetes Emacs Lisp).

i (i)

Marca el paquete en la línea actual para su instalación (package-menu-mark-install). Si el estado del paquete es available, (disponible) esto añade un carácter I al principio de la línea; tecleando x (x, ver más abajo) se descargará e instalará el paquete.

d (d)

Marca el paquete en la línea actual para su eliminación (package-menu-mark-delete). Si el estado del paquete es installed (instalado), añade un carácter D al principio de la línea; tecleando x (x, ver más abajo) borrará el paquete. Consulte 49.4. Archivos de Paquete y Ddistribución de Directorios, para obtener información sobre lo que implica la eliminación de paquetes.

w (w)

Abre el sitio web del paquete en la línea actual en un navegador (package-browse-url). browse-url se usa para abrir el navegador.

~ (~)

Marca todos los paquetes obsoletos para su eliminación (package-menu-mark-obsolete-for-deletion). Marca para su eliminación todos los paquetes cuyo estado sea obsolete (obsoleto).

u (u)
DEL (DEL)

Elimina cualquier marca de instalación o borrado añadida previamente a la línea actual por un comando i o d (package-menu-mark-unmark).

U (U)

Marca todos los paquetes con una versión disponible más reciente para su actualización (package-menu-mark-upgrades). Esto coloca una marca de instalación en las nuevas versiones disponibles, y una marca de borrado en las antiguas versiones instaladas (marcadas con el estado obsolete). Por defecto, esto no marcará los paquetes incorporados para los que esté disponible una versión más reciente, pero personalizando package-install-upgrade-built-in puede cambiar esto. Consulte 49.3 Instalación de Paquetes. Si personaliza package-install-upgrade-built-in a un valor no nulo, asegúrese de revisar todos los paquetes incorporados que marca el comando U, para evitar actualizar paquetes incorporados que no desee sobrescribir.

x (x)

Descarga e instala todos los paquetes marcados con i, y sus dependencias; además, elimina todos los paquetes marcados con d (package-menu-execute). Esto también elimina las marcas. Si no hay paquetes marcados, este comando instalará el paquete bajo el punto (si no está instalado ya), o borrará el paquete bajo punto (si ya está instalado).

g (g)
r (r)

Actualiza la lista de paquetes (revert-buffer). Esto recupera la lista de paquetes disponibles del archivo de paquetes de nuevo, y vuelve a mostrar la lista de paquetes.

H (H)

Oculta paquetes cuyos nombres coincidan con una expresión regular (expreg) (package-menu-hide-package). Esta opción solicita una expresión regular y oculta los paquetes cuyos nombres coincidan. El valor por defecto de la expreg ocultará sólo el paquete cuyo nombre coincida, por lo que pulsando RETUTRN (RET) se ocultará el paquete actual.

(_ ((_)

Alterna entre la visibilidad de versiones antiguas de paquetes y también de versiones de archivos de menor prioridad (package-menu-toggle-hiding).

/ a_ (/ a_)

Filtra la lista de paquetes por archivo (package-menu-filter-by-archive). Esta opción solicita un archivo de paquetes (por ejemplo, gnu) y muestra sólo los paquetes de ese archivo. Puede especificar varios archivos escribiendo sus nombres separados por comas.

/ d_ (/ d_)

Filtra la lista de paquetes por descripción (package-menu-filter-by-description). Pide una expresión regular y muestra sólo los paquetes con descripciones que coincidan con esa expresión.

/ k_ (/ k_)

Filtra la lista de paquetes por palabra clave (package-menu-filter-by-keyword). Esta opción solicita una palabra clave (por ejemplo, games (juegos)) y muestra sólo los paquetes con esa palabra clave. Puede especificar varias palabras clave escribiéndolas separadas por comas.

/ N_ (/ N_)

Filtra la lista de paquetes por nombre o descripción (package-menu-filter-by-name-or-description). Solicita una expresión regular y muestra sólo los paquetes cuyo nombre o descripción coincidan con la expresión regular.

/ n_ (/ n_)

Filtra la lista de paquetes por nombre (package-menu-filter-by-name). Solicita una expresión regular y muestra sólo los paquetes cuyos nombres coincidan con ella.

/ a_ (/ s_)

Filtra la lista de paquetes por estado (package-menu-filter-by-status). Esto solicita uno o más estados (por ejemplo, available (disponible), ver 49.2 Estados de los Paquetes), y luego muestra sólo los paquetes con el estado coincidente. Puede especificar varios valores de estado escribiéndolos separados por comas.

/ v_ (/ v_)

Filtra la lista de paquetes por versión (package-menu-filter-by-version). Primero se pide uno de los símbolos de comparación <, > o = y una cadena de versión, y luego se muestran los paquetes cuyas versiones son correspondientemente inferiores, iguales o superiores a la versión que ha escrito.

/ m_ (/ m_)

Filtra la lista de paquetes por marca no vacía (package-menu-filter-marked). Esto muestra sólo los paquetes que han sido marcados para ser instalados o eliminados.

/ u_ (/ u_)

Filtra la lista de paquetes para mostrar sólo los paquetes para los que hay actualizaciones disponibles (package-menu-filter-upgradable). Por defecto, este filtro excluye los paquetes incorporados para los que hay disponible una versión más reciente, pero personalizando package-install-upgrade-built-in puede cambiar esto. Consulte 49.3 Instalación de Paquetes.

/ /_ (/ /_)

Borra el filtro aplicado actualmente a la lista de paquetes (package-menu-filter-clear).

Por ejemplo, puede instalar un paquete escribiendo i (i) en la línea que enumera ese paquete, seguido de x (x).

49.2 Estados de los Paquetes

Un paquete puede tener uno de los siguientes estados:

available (disponible)

El paquete no está instalado, pero puede descargarse e instalarse desde el archivo del paquete.

avail-obso (disponible pero obsoleto)

El paquete está disponible para su instalación, pero también existe una versión más reciente. Los paquetes con este estado están ocultos por defecto.

built-in (ya incorporado en el Editor)

El paquete está incluido en Emacs por defecto. No se puede eliminar a través del menú de paquetes, y por defecto no se tiene en cuenta para la actualización (pero se puede cambiar personalizando package-install-upgrade-built-in, ver 49.3 Instalación de Paquetes).

dependency (dependencia)

El paquete se instaló automáticamente para satisfacer una dependencia de otro paquete.

disable (deshabilitado)

El paquete se ha desactivado mediante la variable package-load-list.

external (externo)

El paquete no está incorporado y no procede del directorio especificado por package-user-dir (consulte 49.4. Archivos de Paquete y Ddistribución de Directorios Archivos de Paquete y disposición de directorios). Los paquetes externos se tratan de forma muy similar a los paquetes «integrados» y no se pueden eliminar.

held

El paquete se mantiene en una determinada versión, Ver 49.3 Instalación de Paquetes.

incompat (incompatible)

El paquete no puede instalarse por alguna razón, por ejemplo porque depende de paquetes desinstalables.

installed (instalado)

El paquete está instalado.

new (nuevo)

Equivale a available (disponible), excepto en que el paquete está disponible en el archivo de paquetes desde la última vez que invocó M-x list-packages.

obsolete (obsoleto)

El paquete es una versión instalada obsoleta; además de esta versión del paquete, también está instalada una versión más reciente.

49.3 Instalación de Paquetes

Los paquetes se instalan de forma más eficiente usando el menú de paquetes (ver 49.1 El Menú de Paquetes), pero también puede usar el comando M-x package-install. Este comando solicita el nombre de un paquete con el estado available (disponible) luego lo descarga y lo instala. Del mismo modo, si desea actualizar un paquete, puede utilizar el comando M-x package-upgrade, y si desea actualizar todos los paquetes, puede utilizar el comando M-x package-upgrade-all.

Por defecto, package-install no tiene en cuenta los paquetes integrados cuyas nuevas versiones están disponibles en los archivos. (Un paquete está incorporado si está incluido en la distribución de Emacs.) En particular, no mostrará los paquetes incorporados en la lista de candidatos a ser completados cuando escriba en su prompt. Pero si invoca package-install con un argumento prefijo, también considerará los paquetes incorporados que puedan ser actualizados. Puede hacer que este comportamiento sea el predeterminado personalizando la variable package-install-upgrade-built-in: si su valor no es nulo, package-install considerará los paquetes incorporados incluso cuando se invoque sin un argumento de prefijo. Tenga en cuenta que las órdenes del menú de paquetes (vea 49.1 El Menú de Paquetes) también se ven afectadas por package-install-upgrade-built-in.

Por el contrario,``package-upgrade`` y package-upgrade-all nunca tienen en cuenta los paquetes incorporados. Si desea utilizar estos comandos para actualizar algunos paquetes incorporados, necesita actualizar cada uno de ellos, una vez, ya sea mediante C-u M-x package-install RET, o personalizando package-install-upgrade-built-in a un valor no nulo, y luego actualizar el paquete una vez mediante el menú de paquetes, o mediante package-install.

Si personaliza package-install-upgrade-built-in a un valor no nulo, tenga mucho cuidado al usar comandos que actualizan muchos paquetes a la vez, como package-upgrade-all y U en el menú de paquetes: podrían sobrescribir paquetes incorporados que no pretendía reemplazar con versiones más recientes de los archivos. No utilice estos comandos de actualización masiva si sólo desea actualizar un pequeño número de paquetes incorporados.

Un paquete puede requerir la instalación de otros paquetes, porque depende de la funcionalidad proporcionada por ellos. Cuando Emacs instala un paquete, también descarga e instala automáticamente cualquier paquete necesario que no esté ya instalado. (Si un paquete requerido no está disponible de alguna manera, Emacs señala un error y detiene la instalación). La lista de requisitos de un paquete se muestra en su buffer de ayuda.

Por defecto, los paquetes se descargan de un único archivo de paquetes mantenido por los desarrolladores de Emacs. Esto se controla mediante la variable package-archives, cuyo valor es una lista de archivos de paquetes conocidos por Emacs. Cada elemento de la lista debe tener la forma (id . location), donde id es el nombre de un archivo de paquetes y location es la URL o nombre del directorio del archivo de paquetes. Puede alterar esta lista si desea usar archivos de paquetes de terceros, pero hágalo bajo su propia responsabilidad, y use sólo los de terceros en los que crea que puede confiar.

Los mantenedores de los archivos de paquetes pueden aumentar la confianza que puede tener en sus paquetes firmándolos. Generan un par de claves criptográficas privada/pública y utilizan la clave privada para crear un archivo de firma para cada paquete. Con la clave pública, puede utilizar los archivos de firma para verificar al creador del paquete y asegurarte de que el paquete no ha sido manipulado. La verificación de firmas utiliza el paquete GnuPG a través de la interfaz EasyPG (ver EasyPG en el Manual del Asistente EasyPG de Emacs). Una firma válida no es una garantía irrefutable de que un paquete no sea malicioso, por lo que debe ser precavido. Los archivos de paquetes deberían proporcionar instrucciones sobre cómo obtener su clave pública. Una forma es descargar la clave de un servidor como https://pgp.mit.edu/. Use M-x package-import-keyring para importar la clave a Emacs. El Editor almacena las claves de los paquetes en el directorio especificado por la variable package-gnupghome-dir, por defecto en el subdirectorio gnupg de package-user-dir, lo que hace que Emacs invoque GnuPG con la opción --homedir al verificar las firmas. Si package-gnupghome-dir es nil, la opción --homedir de GnuPG se omite. La clave pública para el archivo de paquetes GNU se distribuye con Emacs, en el etc/package-keyring.gpg. Emacs la usa automáticamente.

Si la opción de Usuario package-check-signature no es nula, Emacs intenta verificar las firmas cuando instala paquetes. Si la opción tiene el valor allow-unsigned, y se encuentra una configuración OpenPGP utilizable, se comprobarán los paquetes firmados, pero aún puede instalar un paquete que no esté firmado. Si utiliza algunos archivos que no firman sus paquetes, puede añadirlos a la lista package-unsigned-archives. (Si el valor es allow-unsigned y no se encuentra ningún OpenPGP utilizable, esta opción se trata como si su valor fuera nil). Si el valor es t, al menos una firma debe ser válida; si el valor es all, todas deben ser válidas.

Para más información sobre claves criptográficas y firmas, vea GnuPG en The GNU Privacy Guard Manual. Emacs viene con una interfaz para GNU Privacy Guard, ver EasyPG en Emacs EasyPG Assistant Manual.

Si tiene más de un archivo de paquetes habilitado, y algunos de ellos ofrecen diferentes versiones del mismo paquete, puede encontrar útil la opción package-pinned-packages. Puede añadir pares paquete/archivo a esta lista, para asegurarse de que el paquete especificado sólo se descarga del archivo especificado.

Otra opción útil cuando tiene varios archivos de paquetes activados es package-archive-priorities. Especifica la prioridad de cada archivo (los números más altos indican archivos de mayor prioridad). Por defecto, los archivos tienen prioridad cero, a menos que se especifique lo contrario en el valor de esta opción. Los paquetes de los archivos de menor prioridad no se mostrarán en el menú si el mismo paquete está disponible en un archivo de mayor prioridad. (Esto se controla mediante el valor de package-menu-hide-low-priority).

Una vez que un paquete se ha descargado, compilado en bytes e instalado, se pone a disposición de la sesión actual de Emacs. Hacer que un paquete esté disponible añade su directorio a load-path y carga sus autoloads (función que permite carga automática de otras funciones o paquetes). El efecto de estos autoloads varía de un paquete a otro. La mayoría de los paquetes sólo hacen disponibles algunos comandos nuevos, mientras que otros tienen efectos más amplios en la sesión de Emacs. Para más información, consulta la ayuda del paquete.

A los paquetes instalados automáticamente, Emacs los pone a disposición en todas las sesiones posteriores. Esto ocurre en el arranque, antes de procesar el archivo init pero después de procesar el archivo de inicio del Editor (ver 50.4.6. El Archivo de Inicio Temprano excepción, Emacs no hace disponibles los paquetes al inicio si se invoca con las opciones -q o --no-init-file (ver C.2 Opciones Iniciales).

Para evitar que Emacs haga automáticamente disponibles los paquetes al inicio, cambie la variable package-enable-at-startup a nil. Debe hacer esto en el archivo de inicio automático, ya que la variable se lee antes de cargar el archivo de inicio del Editor. Actualmente esta variable no puede establecerse a través de Personalizar.

Si tiene muchos paquetes instalados, puede mejorar los tiempos de arranque estableciendo la opción de usuario package-quickstart a t. Establecer esta opción hará que Emacs precalcule muchas cosas en lugar de recalcularlas en cada arranque de Emacs. Sin embargo, si hace esto, tendrá que ejecutar manualmente el comando package-quickstart-refresh cuando las activaciones necesiten ser cambiadas, como cuando cambia el valor de package-load-list.

Si ha establecido package-enable-at-startup como nil, puede hacer que los paquetes estén disponibles durante o después del inicio. Para que los paquetes instalados estén disponibles durante el arranque, llame a la función package-activate-all en su archivo de inicio. Para que los paquetes instalados estén disponibles después del arranque, invoque el comando M-: package-activate-all RET.

Para un control más preciso sobre qué paquetes están disponibles al inicio, puede utilizar la variable package-load-list. Su valor debe ser una lista. Un elemento de lista de la forma (nombre versión) le dice a Emacs que haga disponible la versión del paquete llamado nombre. Aquí, versión debe ser una cadena de versión (correspondiente a una versión específica del paquete), o t (que significa hacer disponible cualquier versión instalada), o nil (que significa ninguna versión; esto desactiva el paquete, impidiendo que esté disponible). Un elemento de la lista también puede ser el símbolo all, que significa poner a disposición la última versión instalada de cualquier paquete no nombrado por los otros elementos de la lista. El valor por defecto es '(all).

Por ejemplo, si establece package-load-list a '((muse "3.20") all), entonces Emacs sólo hace disponible la versión 3.20 del paquete muse, además de cualquier versión instalada de paquetes que no sean muse. Cualquier otra versión de muse que esté instalada será ignorada. El paquete muse aparecerá en el menú de paquetes con el estado held (retenido o congelado en esa versión).

El código byte de Emacs es bastante estable, pero es posible que se quede obsoleto, o que los archivos compilados dependan de macros que han cambiado en nuevas versiones de Emacs. Puede usar el comando M-x package-recompile para recompilar un paquete en particular, o M-x package-recompile-all para recompilar todos los paquetes. (Este último comando puede tardar bastante en ejecutarse si tienes muchos paquetes instalados).

49.4. Archivos de Paquete y Ddistribución de Directorios

Cada paquete se descarga del archivo de paquetes en forma de un único archivo de paquete, ya sea un fichero fuente de Emacs Lisp o un fichero tar que contiene múltiples ficheros fuente de Emacs Lisp y otros archivos. Los archivos de paquete son automáticamente recuperados, procesados y eliminados por los comandos de Emacs que los instalan. Normalmente, no necesitará tratar directamente con ellos, a menos que esté haciendo un paquete (ver Empaquetado en el Manual de Referencia de Emacs Lisp). Si alguna vez necesita instalar un paquete directamente desde un archivo de paquete, use el comando M-x package-install-file.

Una vez instalado, el contenido de un paquete se coloca en un subdirectorio de ~/.emacs.d/elpa/ (puede cambiar el nombre de ese directorio cambiando la variable package-user-dir). El subdirectorio del paquete se llama nombre-versión, donde nombre es el nombre del paquete y versión es su cadena de caracteres que corresponde a la versión.

Además de package-user-dir, Emacs busca los paquetes instalados en los directorios listados en package-directory-list. Estos directorios están pensados para que los package-directory-list hagan que los paquetes de Emacs estén disponibles en todo el sistema; el Editor nunca instala paquetes allí. Los subdirectorios de paquetes para package-user-dir están dispuestos de la misma manera que en paquete-usuario-dir.

Borrar un paquete (ver 49.1 El Menú de Paquetes) implica borrar el subdirectorio de paquetes correspondiente. Esto sólo funciona para paquetes instalados en package-use-dir si se le dice que actúe sobre un paquete en un directorio de paquetes de todo el sistema, la orden de borrado señala un error.

49.5. Obtener las Fuentes de los Paquetes

Por defecto package-install descarga un Tarball de un archivo de paquetes e instala sus ficheros. Esto puede ser inadecuado si desea hackear las fuentes del paquete y compartir sus cambios con otros. En ese caso, es posible que prefiera obtener directamente el código fuente y trabajar en él. Esto suele facilitar el desarrollo de parches y la notificación de errores.

Una forma de hacerlo es utilizar package-vc-install, para obtener el código fuente de un paquete directamente de la fuente. El comando también se asegurará automáticamente de que todos los archivos sean compilados en bytes y cargados automáticamente, al igual que con un paquete normal. Los paquetes instalados de esta forma se comportan como cualquier otro paquete. Puede actualizarlos usando package-upgrade o package-upgrade-all y borrarlos de nuevo usando package-delete. Incluso se muestran en el listado de paquetes normales. Si sólo desea clonar el código fuente de un paquete, sin añadirlo a la lista de paquetes, utilice package-vc-checkout.

Con la comprobación del código fuente, es posible que desee reproducir un error contra la versión de desarrollo actual o implementar una nueva característica para satisfacer un requisito. Si los metadatos del paquete indican cómo ponerse en contacto con el responsable, puede utilizar la orden package-report-bug para informar de un error por correo electrónico. Este informe incluirá todas las opciones de usuario que haya personalizado. Si ha realizado un cambio que desea compartir con los mantenedores, primero confirme sus cambios y luego utilice la orden package-vc-prepare-patch para compartirlo. Consulte 29.1.12.6. Preparación de Parches.

Si mantiene sus propios paquetes, puede que quiera usar una comprobación local en lugar de clonar un repositorio remoto. Puede hacerlo usando package-vc-install-from-checkout, que crea un enlace simbólico desde el directorio del paquete (vea 49.4. Archivos de Paquete y Ddistribución de Directorios) a su checkout e inicializa el código. Tenga en cuenta que podría tener que usar package-vc-rebuild para repetir la inicialización y actualizar las autocargas.

49.5.1 Especificar las Fuentes de los Paquetes

Para instalar un paquete desde el código fuente, Emacs debe saber dónde obtener el código fuente del mismo (como un repositorio de código) e información básica sobre la estructura del código (como el fichero principal en un paquete multi-fichero). La especificación de un paquete describe estas propiedades.

Cuando es soportado por un archivo de paquetes (ver Archivos de Paquetes en el Manual de Referencia de Emacs Lisp), Emacs puede descargar automáticamente la especificación de un paquete desde dicho archivo. Si el primer argumento pasado a package-vc-install es un símbolo que nombra un paquete, entonces Emacs usará la especificación proporcionada por el archivo para ese paquete.

;; Emacs descargará la especificación de BBDB desde GNU ELPA:
(package-vc-install 'bbdb)

El primer argumento de package-vc-install también puede ser una especificación de paquete. Esto le permite instalar paquetes fuente desde ubicaciones distintas a los archivos conocidos listados en la opción de usuario package-archives. Una especificación de paquete es una lista de la forma (nombre . spec), en la que spec debe ser una lista de propiedades utilizando cualquiera de las claves de la siguiente tabla.

Para definiciones de términos básicos para trabajar con repositorios de código y sistemas de control de versiones, vea 29.1.1.3 Conceptos de Control de Versiones.

:url

Una cadena que proporciona la URL que especifica el repositorio del que obtener el código fuente del paquete.

:branch

Una cadena que proporciona la revisión del código a instalar. No confundir con el número de versión de un paquete.

:lisp-dir

Una cadena que proporciona el nombre relativo al repositorio del directorio a utilizar para cargar las fuentes Lisp, que por defecto es el directorio raíz del repositorio.

:main-file

Cadena que proporciona el archivo principal del proyecto, del que se recopilarán los metadatos del paquete. Si no se proporciona, el valor predeterminado es el nombre del paquete con .el añadido.

:doc

Una cadena que proporciona el nombre relativo al repositorio del fichero de documentación a partir del cual construir un fichero Info. Puede ser un fichero Texinfo o un fichero Org.

:vc-backend

Un símbolo nombrando el backend VC a usar para descargar una copia del repositorio del paquete (ver 29.1.1.2 Sistemas de Control de Versiones Soportados ). Si se omite, Emacs intentará hacer una suposición basada en la URL proporcionada, o, en su defecto, el proceso volverá al valor de package-vc-default-backend.

;; Especificar la información manualmente:
(package-vc-install
  '(bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git"
           :lisp-dir "lisp"
           :doc "doc/bbdb.texi"))