¿Cómo debo agrupar json con mi paquete elisp?


7

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.


1
Si admite versiones de Emacs <23, probablemente sea mejor no usar el término "paquete" (que implica ELPA). "Biblioteca" es el término más agnóstico.
phils

2
Una opción sería usar locate-library, o simplemente actuar en (require 'json nil :noerror)caso de falla, para determinar si jsonya está disponible y, de no ser así, agregar el subdirectorio para su propia copia al load-pathanterior require.
phils

2
¿Por qué necesitas enviar json.elcon 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 obtenerla json.el. Eso es educado, suficiente y fácil para los usuarios. Si su biblioteca realmente no lo requiere json.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, featurepor fboundpo boundp). También puede usar (require 'json nil t)en una definición de función dada.
Dibujó el

El Emacs-22 incorporado de OSX no solo es antiguo, sino que también está paralizado por su falta de soporte de GUI, por lo que es mejor no usarlo.
Stefan

Respuestas:


7

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 incluirlojson.el .

El administrador de paquetes instalará con gusto su copia incluida json.eljunto con su biblioteca real. Dado que los paquetes son lo primero en load-pathsu copia incluida json.el, ahora anularán la integrada, causando todo tipo de problemas para los paquetes que esperan una versión más reciente de json.el.

El camino a seguir (en mi opinión)

Cree dos distribuciones de su paquete:

  • Un paquete de Emacs adecuado para Emacs 24 y superior, por ejemplo, un TAR con los metadatos del paquete correspondiente. Incluso podría alojar un pequeño repositorio de paquetes con su paquete para distribuir actualizaciones a los usuarios de Emacs 24 automáticamente.
  • Un archivo TAR con su biblioteca y 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.ele 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 ejemplo my-library-json-compat.el. Con un nombre diferente, su copia de paquete json.elnunca 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.elesté disponible, pero esto es fácil:

(unless (require 'json nil 'no-error)
  (require 'json "my-library-json-compat"))

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.

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.