email client in uxn + crystal
Find a file
2023-03-23 16:23:30 -06:00
.gitignore first commit - resizable uxn window lists inbox and crystal module can talk to it 2023-03-14 23:39:19 -06:00
build.sh first commit - resizable uxn window lists inbox and crystal module can talk to it 2023-03-14 23:39:19 -06:00
conf.cr shell out for reader and compose windows - this should work for a while; v0.1.0 2023-03-23 07:44:41 -06:00
mread improve readme and mread 2023-03-23 16:23:30 -06:00
README.md improve readme and mread 2023-03-23 16:23:30 -06:00
taro-ctl.cr shell out for reader and compose windows - this should work for a while; v0.1.0 2023-03-23 07:44:41 -06:00
taro-ls.tal shell out for reader and compose windows - this should work for a while; v0.1.0 2023-03-23 07:44:41 -06:00

taro

mblaze frontend in uxn and crystal

build and install

  1. Configure mblaze
  2. Install uxn and crystal
  3. Edit conf.cr and probably the handle function in mread
  4. Run 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
  • 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