package ecaml
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=fde3a15d57d5804ba80f7fef64a03c847ed7561923e497d31fa837d5e6071314
md5=2f2d18f8ed6d62159766c096e4fbea39
Description
Ecaml is a library for writing Emacs plugins in OCaml. It uses Emacs 25 support for plugins to load native OCaml compiled code.
Published: 03 Jan 2018
README
Emacs plugin in OCaml
Ecaml is a library for writing Emacs plugins in OCaml. It uses Emacs 25 support for plugins to load native OCaml code into Emacs.
Building a plugin
Using Jane Street jenga rules
Simply add (only_shared_object true)
to the executables
stanza in your jbuild. For instance:
(executables
((names (my_plugin))
(libraries (ecaml))
(only_shared_object true)))
Then build 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 example/
directory:
$ ocamlfind ocamlopt -linkpkg -package ecaml -thread -output-complete-obj \
-runtime-variant _pic -pp ppx-jane example_plugin.ml -o example_plugin.so
Links
As of Emacs version 25, Emacs supports plugins. Here is the API:
http://git.savannah.gnu.org/cgit/emacs.git/tree/src/emacs-module.h?id=e18ee60b02d08b2f075903005798d3d6064dc013
Here's a tutorial:
http://diobla.info/blog-archive/modules-tut.html
Here's an example plugin:
http://git.savannah.gnu.org/cgit/emacs.git/tree/modules/mod-test/mod-test.c?id=e18ee60b02d08b2f075903005798d3d6064dc013
Licensing
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.
Dependencies (7)
-
ocaml-migrate-parsetree
>= "0.4" & < "2.0.0"
-
jbuilder
>= "1.0+beta12"
-
ppx_jane
>= "v0.10" & < "v0.11"
-
ppx_driver
>= "v0.10" & < "v0.11"
-
expect_test_helpers_kernel
>= "v0.10" & < "v0.11"
-
core_kernel
>= "v0.10" & < "v0.11"
-
ocaml
>= "4.04.1"
Dev Dependencies
None
Used by
None
Conflicts
None