6 releases
0.3.0 | Feb 1, 2023 |
---|---|
0.2.2 | Jan 19, 2023 |
0.1.1 | Jan 16, 2023 |
#185 in FFI
30KB
614 lines
Zsh Module
This is a high level crate that allows you to define your own zsh module. It is in a very early state but it can be used to define commands.
In the future, most zsh module functionality will be added. Feel free to send a PR if you would like to add more functionality :)
Features:
- Define custom builtin commands
- Define and query used flags
- Call into
zsh
- Query environment variables
- As a workaround: can be done using the
std::os
APIs.
- As a workaround: can be done using the
- Use zsh's current
stdin
fd.- You can use
std::io::stdin
, but it can break in specific ocasions.
- You can use
- Define custom builtin math functions
- Define custom global variables
- More to come!
Getting started
Take a look at our online documentation for a quick guide.
Example module
Making a module is very easy, here's an excerpt from our example module greeter
use zsh_module::{Builtin, MaybeError, Module, ModuleBuilder, Opts};
// Notice how this module gets installed as `rgreeter`
zsh_module::export_module!(rgreeter, setup);
struct Greeter;
impl Greeter {
fn greet_cmd(&mut self, _name: &str, _args: &[&str], _opts: Opts) -> MaybeError {
println!("Hello, world!");
Ok(())
}
}
fn setup() -> Result<Module, Box<dyn std::error::Error>> {
let module = ModuleBuilder::new(Greeter)
.builtin(Greeter::greet_cmd, Builtin::new("greet"))
.build();
Ok(module)
}
Dependencies
~0.5–7MB
~50K SLoC