Skip to content
/ mibu Public

Pure Zig library for low-level terminal manipulation.

License

Notifications You must be signed in to change notification settings

xyaman/mibu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Warning

This library is a WIP and may have breaking changes and bugs.

mibu

mibu is pure Zig library for low-level terminal manipulation.

Tested with zig version 0.13.0

Features

  • Allocation free.
  • UTF-8 support.
  • Style (bold, italic, underline, etc).
  • Termios / Raw mode.
  • 8-16 colors.
  • True Color (24-bit RGB).
  • Cursor controls.
  • Clear(Erase) functions.
  • Key events.
  • Partial Mouse events. (Click, Scroll, Release)

How to use

First we add the library as a dependency in our build.zig.zon file.

.dependencies = .{
    .string = .{
        .url = "https://github.com/xyaman/mibu/archive/refs/heads/main.zip",
        //the correct hash will be suggested by the zig compiler, you can copy it from there
    }
}

And we add it to build.zig file.

const mibu_dep = b.dependency("mibu", .{
    .target = target,
    .optimize = optimize,
});

exe.root_module.addImport("mibu", mibu_dep.module("mibu"));

Now we can use the library in our code.

const std = @import("std");
const mibu = @import("mibu");
const color = mibu.color;

pub fn main() void {
    std.debug.print("{s}Hello World in purple!\n", .{color.print.bgRGB(97, 37, 160)});
}

Getting Started

See the examples directory

You can run the examples with the following command:

# Prints text with different colors
zig build color

# Prints what key you pressed, until you press `q` or `ctrl+c`
zig build event

zig build alternate_screen

TODO

  • Mouse events
    • Left, middle, right click
    • Scroll up, down
    • Release
    • Modifiers (shift, ctrl, alt)
    • Move
    • Click and move (drag)
  • Support all keys events

Projects that use mibu