# zui
**Repository Path**: zdharma/zui
## Basic Information
- **Project Name**: zui
- **Description**: The Rapid Application Development textual user interface library for Zsh.
- **Primary Language**: Shell
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-02-05
- **Last Updated**: 2024-06-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
❮ ZI ❯ - ⬢ ZUI
- [Introduction](#introduction)
- [ZUI – CGI+DHTML-like User Interface Library for Zsh / ZCurses](#zui-cgidhtml-like-user-interface-library-for-zsh--zcurses)
- [Hello World](#hello-world)
- [Installation](#installation)
- [ZI](#zi)
- [Antigen](#antigen)
- [Oh-My-Zsh](#oh-my-zsh)
- [Zgen](#zgen)
## Introduction
### ZUI – CGI+DHTML-like User Interface Library for Zsh / ZCurses
This is a RAD (Rapid Application Development) textual user interface library for Zsh. It in many aspects resembles typical CGI+(D)HTML setup. There are:
- generators ran on "server" side (basic Zshell-code that is just generating text!),
- event loop that turns the generated text into document with active elements (buttons, anchors, toggle buttons, text fields, list boxes),
- mechanism to regenerate document parts from the original generators.
So, a Zshell code generates text. It is then turned into document with hyperlinks. DHTML-like calls are possible that will regenerate document parts on the fly. Page can be also reloaded with input data, just like an HTML page.
A voiced [video tutorial](https://youtu.be/TfZ8b_RS_Bg) shows how to create an application – Nmap network scanner frontend.
> See also [ZSTYLES](ZSTYLES.md)
## Hello World
```zsh
# Started from Zle or from command line
-zui_std_cleanup deserialize:"zui-demo-hello-world"
-zui_std_init app:"zui-demo-hello-world" app_name:"ZUI Hello World"
emulate -LR zsh -o extendedglob -o typesetsilent -o warncreateglobal
-zui_std_init2 # after emulate -LR
-zui_std_store_default_app_config b:border 1
demo_generator_A() {
local mod="$1" ice="$2"
# Content, no hyper-links
reply=( "Hello World from ${ZUI[YELLOW]}ZUI${ZUI[FMT_END]}! Module $mod, instance $ice." )
# Non-selectable lines Hops to jump with [ and ] Local anchors
reply2=( ) reply3=( 1 ) reply4=( )
}
## Start application ##
zui-event-loop 1:demo_generator_A
-zui_std_cleanup serialize
```
Other example which uses list-box: [zui-demo-list-box](https://github.com/z-shell/zui/blob/main/demos/zui-demo-list-boxes)
The API is described at the [wiki](https://github.com/z-shell/zui/wiki). Checkout [screenshots](https://github.com/z-shell/zui/wiki/Screenshots)
and [Asciinema recordings](https://github.com/z-shell/zui/wiki/Asciinema).
## Installation
**The plugin is "standalone"**, which means that only sourcing it is needed. So to
install, unpack `zui` somewhere and add
```zsh
source {where-zui-is}/zui.plugin.zsh
```
to `zshrc`.
If using a plugin manager, then `ZI` is recommended, but you can use any
other too, and also install with `Oh My Zsh` (by copying directory to
`~/.oh-my-zsh/custom/plugins`).
### [ZI](https://github.com/z-shell/zi)
Add `zi load z-shell/zui` to your `.zshrc` file. ZI will handle
the rest automatically the next time you start zsh. To update
(i.e. to pull from origin) issue `zi update z-shell/zui`.
### Antigen
Add `antigen bundle z-shell/zui` to your `.zshrc` file. Antigen will handle
cloning the plugin for you automatically the next time you start zsh.
### Oh-My-Zsh
1. `cd ~/.oh-my-zsh/custom/plugins`
2. `git clone git@github.com:z-shell/zui.git`
3. Add `zui` to your plugin list
### Zgen
Add `zgen load z-shell/zui` to your .zshrc file in the same place you're doing
your other `zgen load` calls in.
> Issues: [Z-Shell/zui](https://github.com/z-shell/zui/issues)