Variables in Zet

Variables in Zet

This page aims to outline how variables in zet work.

Variables are entries in Zet that have mutable state and can be addressed by a keyword. A variable is attached to a particular UUID item.

If necessary, create a new weewiki in the current directory.

$ weewiki create

Create a "hello world" message using rawsay. It will return the UUID.

$ weewiki zet rawsay "hello world"
fc2a5658-a598-4de6-abe8-cb8b9b0de505

All commands maintaining variables are done with the subcommand var. From now on, a command like new will mean weewiki zet var new.

Create a new variable that is tied to the newly created zet entry fc2a56 and call it foo. This is done with new

$ weewiki zet var new fc2a56 foo

By default, it is set to be empty. One can set it to be a message with set.

$ weewiki zet var set fc2a56 bar

Using get will return the current value. (This currently hasn't been implemented yet, but will be soon).

$ weewiki zet var get fc2a56 bar
>bar

Variables can also be set to be addresses of other items, which proves to be extremly helpful. They are the foundational building block for zetdo, a TODO app written on top of zet.

To explore this, first create two new groups "alpha" and "beta" using the zet mkgroup command. Also, make a new message again using rawsay.

$ weewiki zet mkgroup alpha
3a17096d-3091-4baf-811d-943095d9982e
$ weewiki zet mkgroup beta
bd970e28-9dc5-46c2-a290-9c9f0037d6be
$ weewiki zet rawsay "here is another message"
5cca6d4e-0994-4473-a447-0d1209d120e7

Create a state variable for entries 5cca6 and fc2a5, and use the (var) link command to set them both to the alpha group. Appending "@" tells the zet that it is a group, and will try to resolve it to find the UUID associated with it.

$ weewiki zet var new 5cca6 state
$ weewiki zet var link 5cca6 state @alpha
$ weewiki zet var new fc2a5 state
$ weewiki zet var link fc2a5 state @alpha

Using the lists command, one list all the zet entries associated with a particular variable set to a particular value.

To see the messages just created, look for all items with a variable state set to be @alpha.

$ weewiki zet var list state @alpha
2021-01-27 13:56:56     fc2a5658-a598-4de6-abe8-cb8b9b0de505    >hello world
2021-01-27 14:14:48     fc2a5658-a598-4de6-abe8-cb8b9b0de505    $foo:>bar
2021-01-27 14:27:51     5cca6d4e-0994-4473-a447-0d1209d120e7    >here is another message
2021-01-27 14:30:54     5cca6d4e-0994-4473-a447-0d1209d120e7    $state:#3a17096d-3091-4baf-811d-943095d9982e
2021-01-27 14:32:08     fc2a5658-a598-4de6-abe8-cb8b9b0de505    $state:#3a17096d-3091-4baf-811d-943095d9982e

But whoah, that's a lot of stuff! awk can be used to filter out some of the results

$ weewiki zet var list state @alpha | \
> awk -F "\t" '$3 ~ "^>" {print $1, substr($2, 1, 8), substr($3, 2)}'
2021-01-27 13:56:56 fc2a5658 hello world
2021-01-27 14:27:51 5cca6d4e here is another message

Setting the item fc2a5 state to be @beta removes it from this list, and puts it on a similar beta command.

$ weewiki var link fc2a5 state @beta
$ weewiki zet var list state @beta | \
> awk -F "\t" '$3 ~ "^>" {print $1, substr($2, 1, 8), substr($3, 2)}'
2021-01-27 13:56:56 fc2a5658 hello world

In practice, it's best to write these one-liners as shell scripts. This is basically how zetdo was born.


home | index