# taro [mblaze](https://git.vuxu.org/mblaze) frontend in [uxn](https://wiki.xxiivv.com/site/uxn.html) and [crystal](https://crystal-lang.org) ## build and install 1. [Configure mblaze](https://git.vuxu.org/mblaze/about/man/mblaze-profile.5) 2. Install [uxn](https://git.sr.ht/~rabbits/uxn) and [crystal](https://crystal-lang.org/install/) 3. Edit [conf.cr](./conf.cr) and probably the `handle` function in [mread](./mread) 4. Run [build.sh](./build.sh) 5. Copy `taro-ctl` to your path ## usage The `taro-ls` window has three main areas: - Mailboxes: it's assumed by taro-ctrl that your inbox is named INBOX, and it exists; it's put first, and the rest are shown in alphabetical order - Mail List: your mail in the default scan-format given in your mblaze-profile is shown here - Actions: button list and initially hidden text input area Left clicking on a mailbox switches to that mailbox. Left-clicking on mail selects that mail. You can do multiselect by holding shift when clicking. Right-clicking on mail opens that mail (only the first in the selection if 2 or more are selected). You can also use the `Enter` key to open mail. The buttons on the bottom are as follows (with equivalent keybinds): - compose [`n`]: open a compose window to write new mail - refresh [`r`]: refresh the current mailbox - mark all read ['.']: this - search [`/`]: search mail with a regex (only headers, case sensitive) - refile [`m`]: move mail to the given folder - trash [`Del`]: move mail to the Trash folder, unless it's already in the Trash, in which case it's deleted There is a resize handle in the bottom right - clicking and dragging it resizes the window. If you try to decrypt/sign with either `pinenetry-tty` or `pinentry-curses`, GPG will attach it to the stdio of `taro-ctl`, not the terminal window where you are viewing/composing mail. Use a graphical pinentry program instead. ## TODO - Make `mread` more user friendly - Implement keybinds for changing mailbox, selecting/scrolling mail, resizing - Add options to search for case-insensitivity and including body content - Add option to refile to copy instead of move - Flag/star messages? I never use this fature if IMAP... - Real `uxn` implementaions of reader/compose windows? Probably overkill ## messages Messages are in the format `[1][2:3][...]`: - byte 1 is the message type - bytes 2 and 3 are the length of the message, in bytes - bytes 4 and beyond are the message itself (payload) - won't be present if the length is 0 Even messages go from `taro-ctl` to the `uxn` windows. - `0`: mailbox list (truncated to 4k - this should be enough) - `2`: list mail in current mailbox (or search results) (truncated to 32k - if you need more, use search) Odd messages go from the `uxn` windows to `taro-ctl`. - `1`: change/refresh mailbox; payload is the mailbox to read - `3`: mark all as read in current mailbox; no payload - `5`: search mail; payload is the regex - `7`: refile mail; payload is the beginning and end of the mmsg range in u16, and then the mailbox name - `9`: trash mail; payload is the beginning and end of the mmsg range in u16 - `11`: read mail; payload is a single u16 message number in the current sequence - `13`: compose mail; no payload