zsh-module

Crates.iozsh-module
lib.rszsh-module
version0.3.0
sourcesrc
created_at2023-01-16 12:23:02.036099
updated_at2023-02-01 00:01:45.377542
descriptionA High-level framework for creating zsh modules
homepage
repository
max_upload_size
id760138
size29,215
Diegovsky (Diego Augusto) (Diegovsky)

documentation

README

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)
}
Commit count: 0

cargo fmt