Emacs packages in OCaml
Ecaml is a library for writing Emacs packages in OCaml. It uses Emacs 25 support for dynamic modules to load native OCaml code into Emacs.
Building a plugin
Compile your plugin using
(modes (native shared_object)) in the executable stanza of your dune file. See
example/dune for an example.
Using Jane Street jenga rules
(only_shared_object true) to the
executables stanza in your jbuild. For instance:
(executables ((names (my_plugin)) (libraries (ecaml)) (only_shared_object true)))
my_plugin.so with jenga. This has been tested in opam using jane-build.
Using other build systems
You need to use the
-output-complete-obj option of ocamlopt to produce a self-contained shared object file. For instance to build the plugin in the
$ ocamlfind ocamlopt -linkpkg -package ecaml -thread -output-complete-obj \ -runtime-variant _pic -pp ppx-jane example_plugin.ml -o example_plugin.so
As of Emacs version 25, Emacs supports plugins. Here is the API:
Here's a tutorial:
Here's an example plugin:
Note that Emacs modules must be GPL compatible, so you must make sure that your work based on Ecaml is released under a GPL compatible license.
Ecaml itself is released under the Apache 2.0 license which is GPL compatible.