texto ejemplos emacs lisp ocaml

ejemplos - Escribir extensiones de Emacs en otros idiomas además de Lisp



emacs lisp (6)

Me gustaría tomar una aplicación existente (escrita en OCaml) y crear una "interfaz" de Emacs (como, por ejemplo, el modo Emacs GDB). Preferiría hacer esto sin escribir un montón de código Lisp. En términos de MVC, me gustaría que la Vista sea Emacs, pero que el Modelo y el Controlador permanezcan (principalmente) OCaml.

¿Alguien sabe de una forma de escribir extensiones de Emacs en un idioma que no sea Lisp? Esto podría adoptar la forma de enlaces a la API de extensión de Emacs en otro idioma (por ejemplo, convertir OCaml en un lenguaje de extensión Emacs de primera clase) o un modo de interacción Emacs donde, por ejemplo, la extensión tenga un conducto en el que pueda escribir Expresiones de Emacs Lisp y lectura de valores de resultados.


No sé si esto funcionará para su problema particular, pero he estado haciendo algo similar usando la función shell-command-to-string:

(shell-command-to-string "bash -c /"script-to-exec args/"")

Así que, por ejemplo, tenemos scripts existentes escritos en python que manipularán un archivo, por lo que lo anterior me permite invocar el script a través de emacs lisp.

Una búsqueda rápida en Google encontró esta página que describe un sistema para escribir extensiones en Python, por lo que parece factible hacer lo que desea ... solo tendrá que ver si alguien ha escrito un marco similar para OCaml.


No hay una "API de extensión". Emacs Lisp está muy adentro y no se mueve.

Puede ejecutar comandos de Emacs desde su otro proceso. Eche un vistazo a Gnuserv.

Hay muchas aplicaciones donde Emacs es la Vista para un Modelo / Controlador en un proceso separado. La interfaz Emacs GDB es un buen ejemplo. No estoy seguro de un ejemplo más simple, tal vez sql-postgresql?


Desde el lado de los idiomas con tipado estático, hay algo que se ve bastante eficaz y bien presentado por Haskell:

https://github.com/knupfer/haskell-emacs

también es probable que haya algo útil para Scala para ser reutilizado en el proyecto Ensime (tiene un puente para Emacs y Vim):

https://github.com/ensime/ensime-server

Además, una rápida búsqueda en google reveló a otro candidato potencial para extender Emacs con un lenguaje FP clásico, OCaml; el proyecto tiene una gran cantidad de archivos fuente .ml , por lo que debe haber un puente Emacs-OCaml en alguna parte:

https://github.com/the-lambda-church/merlin


http://www.emacswiki.org/cgi-bin/emacs-en?CategoryExtensionLanguage es una lista de todos los lenguajes de extensión que no son Elisp que puede usar.

Parece ser un lenguaje dinámico centrado.

http://common-lisp.net/project/slime/ no aparece en esa lista, ya que no es un lenguaje de extensión, sino un puente Elisp-Common Lisp. Su código fuente mostraría cómo comunicarse de un lado a otro sobre los sockets.

Un IDE similar para Erlang es Distel, en http://fresh.homeunix.net/~luke/distel/ (actualmente abajo) y https://github.com/massemanet/distel .

¡Buena suerte!


Algunas extensiones API ahora son posibles con los entrantes emacs 25.1 y módulos dinámicos

Una biblioteca, emacs-ffi ofrece una interfaz de función extranjera basada en libffi .

Consulte la documentación completa en el archivo README .


Pruebe PyMacs , que permite extender Emacs en Python.

editar : enlace actualizado.