mirror of
https://hacklab.nilfm.cc/taro
synced 2024-10-22 14:31:48 +00:00
94 lines
4.5 KiB
Markdown
94 lines
4.5 KiB
Markdown
# 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. [Install and 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 [config.cr](./config.cr) and probably the `mhandle` function in [taro-reader](./taro-reader)
|
|
4. Run [build.sh](./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.
|
|
|
|
### 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)
|