taro/README.md

4.7 KiB

taro

mblaze frontend in uxn and crystal

build and install

  1. Install and configure mblaze
  2. Install uxn and crystal
  3. Edit config.cr and probably the mhandle function in taro-reader
  4. Run build.sh
  5. Copy taro-ctl to your path

usage

taro is a multi-window MUA with three types of windows:

  • taro-ls: the main uxn window where you will check your inbox and organize your mail
  • taro-reader: a terminal window that runs a shell script to read mail
  • taro-compose: a terminal window running mcom

The windows are managed by a master program, taro-ctl, which talks to them with messages (see below).

mail management

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, removing search query
  • mark all read ['.']: this
  • search [/]: search mail with a regex (only headers, case insensitive)
  • 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.

At the bottom-left, a small indicator will appear if you have a search query active. Performing the refresh action or switching mailboxes will make it disappear.

reading mail

Reading mail is currently done in a terminal that pipes the mail content into less and gives some keybind options:

  • q: quit
  • r: reply
  • 'f': forward
  • 'o': open an attachment - you are presented with the MIME structure of the mail with parts numbered and prompted to select a number to open. The programs to open each mimetype are in the aforementioned handle function of the script.
  • s: save an attachment - like o but selecting a MIME part saves it to the folder TARO_DOWNLOADS in config.cr

The attachment actions loop until you enter nothing or a non-numeric value. The whole script loops until you quit.

writing mail

Writing mail is currently done by opening a terminal and calling mcom, which lets you compose in your EDITOR of choice and prompts for additional action.

crypto

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

  • 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 (IPC)

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 (or from taro-ctl to itself).

  • 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
  • 15: push view update (keeps search query, for after replying/writing mail)