#module #zsh #framework #built-in #command #string #free

nightly zsh-module

A High-level framework for creating zsh modules

6 releases

0.3.0 Feb 1, 2023
0.2.2 Jan 19, 2023
0.1.1 Jan 16, 2023

#185 in FFI

MIT license

30KB
614 lines

Zsh Module   Latest Version

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.
  • Use zsh's current stdin fd.
    • You can use std::io::stdin, but it can break in specific ocasions.
  • 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