email client in uxn + xrxs
  • C 70.4%
  • Shell 23.8%
  • Makefile 5.8%
Find a file
2026-03-22 18:45:33 -06:00
mblaze finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
xrxs finish reimplementing 2026-03-19 12:02:19 -06:00
.gitignore finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
.mailmap experimental mailmap 2024-01-23 21:40:25 -07:00
build.sh finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
config finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
font.uf2 finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -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
LICENSE path traversal fix, license, update to 0.2.7 2024-05-05 11:09:16 -06:00
mkfile migrate backend to xrxs, start fresh on new frontend code 2026-03-17 16:37:43 -06:00
README.md finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
screenshot.png finish migration to xrxs and uf2; v0.3.0 2026-03-19 14:17:47 -06:00
taro-reader fix taro-reader 2026-03-20 00:39:20 -06:00
taro.c fix off by one in the length of the 9p/trashcmd buffer 2026-03-20 11:44:54 -06:00
taro.desktop taro-ls: add theme, font-loading support, more keybinds, finishing touches; build, readme, assets... 2023-03-27 22:54:20 -06:00
taro.svg taro-ls: add theme, font-loading support, more keybinds, finishing touches; build, readme, assets... 2023-03-27 22:54:20 -06:00
taro.tal fix listbox hilight drawing, use VERSION macro 2026-03-22 18:45:33 -06:00

taro

mblaze frontend in uxn and xrxs

screenshot - taro.rom showing Archives/2025 mailbox selected with a search query active listing mail from the uxn mailing list, and a reader window partially occluding it reading the "Annoncing Superfly" email, with a prompt at the bottom for managing attachments, replying, forwarding, or quitting

build and install

  1. Install and configure mblaze (as well as probably mbsync and msmtp)
  2. Install uxn and plan9port
  3. Edit config and probably the mhandle function in taro-reader (see next section)
  4. Run build.sh
  5. Copy taro-ctl to your path

configuration

taro-ctl

The config file is processed into a bunch of constants for the backend by the build script. Adjust them to your needs:

  • MBOX_ROOT: the directory where your maildirs are.
  • TARO_LIB: the directory where your runtime files (taro-ls rom, taro-reader script, .theme and font.icn files, etc.) will be installed to, as well as a copy of uxnemu
  • TARO_DOWNLOADS: directory where attachments are downloaded to.
  • UXN_EMU: name the uxnemu will be copied to - this is a hack to set the _NET_WM_CLASS.
  • TARO_ENV: environment variables as you type them in the terminal, that you can use for the READER_PROG and COMPOSE_PROG commands
  • READER_PROG: command to spawn to read mail - by default it calls the st terminal with some environment variables and options set, and runs taro-reader
  • COMPOSE_PROG: command to spawn to write mail - by default it calls the st terminal with some environment variables and options set and runs mcom from mblaze

taro-ls

The .theme file format is supported - it can be crafted with nasu and should be located at TARO_LIB/.theme. The following details the purpose (and default) of each color:

  1. Background and text color when hilighted (black)
  2. Foreground/text color (whitish gray)
  3. Hilight, scrollbar, button hover color (turquoise)
  4. Alternate color (medium gray)

The default font.uf2 included with the program is a modified Geneva font. Any uf2 font will work, but if it isn't monospace the mscan lines in the mailbox won't line up.

usage

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

  • taro.rom: 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

taro.rom is a display layer that simply calls out to the taro.9p service for all its operations. taro.9p can also be run by itself to be manipulated programatically or by an assistive technology.

The 9p filesystem is exposed at $TARO_LIB/n.

mail management

The taro.rom window has three main areas:

  • Mailboxes: it's assumed by taro 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 on mail 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

The search button will be hilighted while a search query is active.

There is a resize handle in the bottom right - clicking and dragging it resizes the window.

Additional keybindings:

  • [shift+]tab: change mailboxes
  • up/down: navigate through mail
  • shift+<up|down>: naive multiselect
  • alt+<up|down|left|right>: resize

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.9p, not the terminal window where you are viewing/composing mail. Use a graphical pinentry program instead.

what it doesn't do

  • manage your contacts (there are other programs for this)
  • manage your calendar (and that)
  • add/remove mailboxes (how many times a year do you do this?)

9p service

The 9p service exposes the following files:

  • ctl: write-only ctl file for receiving commands
  • boxes: list of mailboxes
  • `mbox': contents of the selected mailbox

The ctl file accepts the following commands:

  • mbox BOX: switch to the mailbox BOX (clears search query)
  • search REGEX: apply the search query REGEX
  • refile START:END DEST: move the mail denoted by the range to the mailbox DEST
  • trash START:END: move the mail denoted by the range to the trash, or delete it forever if the current mailbox is Trash
  • markread: mark all mail in the current mailbox as read
  • compose: open a terminal and compose a new mail with mcom
  • read MMSG: open a terminal and read the mail denoted by MMSG in taro-reader

license

Taro is distributed under the MIT license. Use it however, just give credit.