#emacs #module #bindings #symbol #basic #mut #emacs-val

emacs_module_bindings

Rust库,用于创建Emacs模块

4个版本

使用旧的Rust 2015

0.7.0 2017年12月9日
0.6.2 2017年12月3日
0.6.1 2017年11月7日
0.6.0 2017年8月19日

#22 in #emacs

BSD-3-Clause

23KB
474 行代码(不包括注释)

Emacs模块绑定

此crate提供对最近在Emacs 25中引入的新Emacs模块功能的访问。它是一个基本的FFI,API相对简单。请查看源代码以获取详细信息。

用法或如何用几个简单步骤编写氧化的Emacs模块

  1. 将此项目克隆到某个$EMB_PATH
  2. 创建一个新的Cargo lib项目,例如my_fancy_module
  3. 在一个编辑器中打开Cargo.toml,并
    • 将以下内容添加到[lib]部分(注意:目前只有Rust nightly正确处理此部分)
    • 添加以下依赖项
    libc = "0.2.14"
    emacs_module_bindings = { path = "$EMB_PATH" }
    
  4. 将以下内容添加到您的src/lib.rs
    extern crate libc;
    extern crate emacs_module_bindings 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(non_upper_case_globals)]
    pub static plugin_is_GPL_compatible: libc::c_int = 0;
    
    #[no_mangle]
    pub extern "C" fn emacs_module_init(ert: *mut EmacsRT) -> libc::c_int {
        let env = emacs::get_environment(ert);
    
        // Add any other things you need the module to do here
    
        emacs::provide(env, "my-fancy-module");
        0
    }
    
  5. 执行cargo build
  6. 如果您使用的是OS X,请将target/debug/libmy_fancy_module.dylib复制到target/debug/libmy_fancy_module.so
  7. 使用以下代码在Emacs中加载它(require 'my-fancy-module "/path/to/libmy_fancy_module.so")。注意,这需要Emacs配置和编译时使用--with-modules标志。

依赖项

~3–5MB
~100K SLoC