Emacs Module Bindings

This crate provides access to the new Emacs module functionality recently introduced in Emacs 25. It's a basic FFI with a relatively straightforward API. Have have a look at the source for details.

Usage aka How to write an oxidized Emacs module in a few easy steps

  1. Clone this project to some $EMB_PATH
  2. Create a new Cargo lib project, say my_fancy_module
  3. Open up Cargo.toml in an editor, and:
  4. Add the following to your src/lib.rs: ```` Rust extern crate libc; extern crate emacsmodulebindings as emacs;

    use emacs::emacs_module::{EmacsEnv, EmacsRT, EmacsVal};

    /// This states that the module is GPL-compliant. /// Emacs won't load the module if this symbol is undefined.

    [no_mangle]

    [allow(nonuppercase_globals)]

    pub static pluginisGPLcompatible: libc::cint = 0;

    [no_mangle]

    pub extern "C" fn emacsmoduleinit(ert: *mut EmacsRT) -> libc::cint { let env = emacs::getenvironment(ert);

    // Add any other things you need the module to do here

    emacs::provide(env, "my-fancy-module"); 0 } ````

  5. Execute cargo build
  6. If you're on OS X, copy target/debug/libmy_fancy_module.dylib to target/debug/libmy_fancy_module.so
  7. Load it in emacs with (require 'my-fancy-module "/path/to/libmy_fancy_module.so"). Note that this requires Emacs to be configured and compiled with the --with-modules flag.