An open API service indexing awesome lists of open source software.

https://github.com/janestreet/ecaml

Writing Emacs plugin in OCaml
https://github.com/janestreet/ecaml

Last synced: 8 months ago
JSON representation

Writing Emacs plugin in OCaml

Awesome Lists containing this project

README

          

# 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

First you build the plugin as a shared object (e.g. `my_plugin.so`).
Then you use `bin/dump-ecaml.sh` to dump a wrapper Elisp file
which will perform top-level definitions and load that shared object.

### Using Dune

Compile your plugin using `(modes (native shared_object))` in the executable
stanza of your dune file. See [`example/dune.example`](example/dune.example)
for an example.

### Using Jane Street jenga rules

Simply add `(only_shared_object true)` to the `executables` stanza in
your jbuild. For instance:

```scheme
(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](https://github.com/janestreet/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:

```shell
$ 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.