email client in uxn + crystal
Find a file
2023-03-23 23:36:20 -06:00
.gitignore refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
build.sh refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
config.cr refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
lesskey refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
README.md refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
taro-ctl.cr refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
taro-ls.tal refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00
taro-reader refactor mread into taro-reader, clean up some code, fix mouse bug in taro-ls 2023-03-23 23:36:20 -06:00

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
  • 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.

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.

  • 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