Deseo distribuir un paquete elisp que use json.el ( http://edward.oconnor.cx/2006/03/json.el ). Necesito que esto funcione para versiones de emacs que no vienen con json preinstalado (como OSX, que viene con emacs 22.1). ¿Hay alguna forma recomendada para enviar un paquete de terceros como json con mi paquete?
Voy a distribuir esto en forma de fuente directamente a los clientes.
locate-library
, o simplemente actuar en(require 'json nil :noerror)
caso de falla, para determinar sijson
ya está disponible y, de no ser así, agregar el subdirectorio para su propia copia alload-path
anteriorrequire
.json.el
con tu biblioteca? Simplemente incluya(require 'json)
y agregue una nota en el Comentario (comentarios de encabezado de archivo) que le indica a los usuarios dónde obtenerlajson.el
. Eso es educado, suficiente y fácil para los usuarios. Si su biblioteca realmente no lo requierejson.el
, y es simplemente agradable o solo se necesita para algunas funciones (no todas), entonces use(require 'json nil t)
y agregue condiciones en su código que prueben su presencia (por ejemplo,featurep
orfboundp
oboundp
). También puede usar(require 'json nil t)
en una definición de función dada.Respuestas:
Como otros han señalado si estás apuntando a Emacs 23 o incluso 22, no tienes un "paquete" sino solo una biblioteca. Los "paquetes" no existen en Emacs antes de Emacs 24 cuando se agregó el administrador de paquetes.
Agrupando con una biblioteca
Agrúpalo.
Dado que no hay una forma estándar de instalar bibliotecas antes de los paquetes, puede agrupar json.el en lo que le dé a sus usuarios, supongo que es una especie de archivo. Tendrán que instalarlo manualmente de todos modos y, por lo tanto, pueden elegir los archivos que necesiten: solo su biblioteca para usuarios de Emacs 24/25, su biblioteca + json.el para aquellos con versiones anteriores.
Mientras documente esto, no causará ningún problema.
Paquete con un paquete
No lo empaque en absoluto.
Sin embargo, si crea un paquete adecuado para Emacs 24 y versiones posteriores, no debe incluirlo
json.el
.El administrador de paquetes instalará con gusto su copia incluida
json.el
junto con su biblioteca real. Dado que los paquetes son lo primero enload-path
su copia incluidajson.el
, ahora anularán la integrada, causando todo tipo de problemas para los paquetes que esperan una versión más reciente dejson.el
.El camino a seguir (en mi opinión)
Cree dos distribuciones de su paquete:
json.el
, sin metadatos del paquete, para usuarios de versiones anteriores de Emacs.Lo único que debe tener en cuenta es cuando los usuarios de versiones anteriores de Emacs actualicen a Emacs 24. En este caso, deberán eliminar manualmente la instalación anterior de su biblioteca
json.el
e instalar nuevamente el paquete Emacs 24 adecuado.Una alternativa
Si no desea mantener dos distribuciones diferentes, puede agruparlas
json.el
, pero con un nombre diferente, por ejemplomy-library-json-compat.el
. Con un nombre diferente, su copia de paquetejson.el
nunca anulará la incorporada.Dado que las funciones y los símbolos en la copia agrupada seguirían en conflicto con la incorporada, debe tener cuidado de no cargar su copia agrupada cuando
json.el
esté disponible, pero esto es fácil:Emacs intentará cargar
json.el
, y en su defecto, volverá a su copia agrupada con un nombre diferente.El verdadero camino a seguir (en mi opinión)
Indique a sus usuarios que actualicen a Emacs 24. La última versión de Emacs 22 es hace ocho (!) Años, la última versión de Emacs 23 aún hace cuatro años. Ambas versiones están desactualizadas y carecen de muchas características, y muchos paquetes (por ejemplo, Magit) solo admiten Emacs 24 en la actualidad. Emacs 22/23 es un callejón sin salida y no hay forma de avanzar.
Actualizar a Emacs 24 es bastante fácil: la distribución más moderna de Linux incluye al menos Emacs 24.1 en sus repositorios de paquetes. Para OS X, hay paquetes de aplicaciones preconstruidos disponibles, y el último Emacs 24 estable está incluido en el popular administrador de paquetes OS X Homebrew.
fuente