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
23KB
474 行代码(不包括注释)
Emacs模块绑定
此crate提供对最近在Emacs 25中引入的新Emacs模块
功能的访问。它是一个基本的FFI,API相对简单。请查看源代码以获取详细信息。
用法或如何用几个简单步骤编写氧化的Emacs模块
- 将此项目克隆到某个
$EMB_PATH
- 创建一个新的Cargo
lib
项目,例如my_fancy_module
- 在一个编辑器中打开
Cargo.toml
,并- 将以下内容添加到
[lib]
部分(注意:目前只有Rust nightly正确处理此部分) - 添加以下依赖项
libc = "0.2.14" emacs_module_bindings = { path = "$EMB_PATH" }
- 将以下内容添加到
- 将以下内容添加到您的
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 }
- 执行
cargo build
- 如果您使用的是OS X,请将
target/debug/libmy_fancy_module.dylib
复制到target/debug/libmy_fancy_module.so
- 使用以下代码在Emacs中加载它
(require 'my-fancy-module "/path/to/libmy_fancy_module.so")
。注意,这需要Emacs配置和编译时使用--with-modules
标志。
依赖项
~3–5MB
~100K SLoC