about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-07-22 21:36:46 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-07-22 21:36:46 +0200
commit5927a3f2e37eb58585934bc0925c063796d9f49d (patch)
treecfb97090cc3565eb8f7a427123af950470c43e08
parent9a3d45785e0c116159f90cce3f19cc2769baa1fb (diff)
downloadmblaze-5927a3f2e37eb58585934bc0925c063796d9f49d.tar.gz
mblaze-5927a3f2e37eb58585934bc0925c063796d9f49d.tar.xz
mblaze-5927a3f2e37eb58585934bc0925c063796d9f49d.zip
add manpages
-rw-r--r--man/mcomp.177
-rw-r--r--man/mdirs.142
-rw-r--r--man/mflag.1114
-rw-r--r--man/mhdr.148
-rw-r--r--man/minc.143
-rw-r--r--man/mless.155
-rw-r--r--man/mlist.194
-rw-r--r--man/mmime.167
-rw-r--r--man/mmsg.575
-rw-r--r--man/mscan.160
-rw-r--r--man/mseq.150
-rw-r--r--man/msetseq.143
-rw-r--r--man/mshow.1113
-rw-r--r--man/msort.163
-rw-r--r--man/mthread.151
15 files changed, 995 insertions, 0 deletions
diff --git a/man/mcomp.1 b/man/mcomp.1
new file mode 100644
index 0000000..ea69b65
--- /dev/null
+++ b/man/mcomp.1
@@ -0,0 +1,77 @@
+.Dd July 22, 2016
+.Dt MCOMP 1
+.Os
+.Sh NAME
+.Nm mcomp ,
+.Nm mrepl
+.Nd compose new, reply to, and send mail
+.Sh SYNOPSIS
+.Nm mcomp
+.Op Ar recipient
+.Nm mrepl
+.Ar msg
+.Sh DESCRIPTION
+.Nm mcomp
+creates a new draft mail and runs an editor.
+After editing, a loop is started where the user can re-edit, send or
+cancel the mail.
+.Pp
+.Nm mrepl
+behaves like
+.Nm mcomp
+but fills the draft such that the mail will be a reply to the message
+.Ar msg .
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Sh MENU COMMANDS
+.Bl -tag -width 2n
+.It Ic s
+Send the mail.
+The MIME version will be used when one has been created.
+.It Ic c
+Cancel sending and quit
+.Nm
+after displaying the file name of the draft.
+.It Ic m
+Run
+.Xr mmime 1
+on the draft, and show the result of
+.Ic mshow -t .
+.It Ic e
+Re-run the editor on the draft.
+.El
+.Sh ENVIRONMENT
+.Bl -tag -width Ds
+.It Ev EDITOR
+Editor used to compose mail.
+.El
+.Sh FILES
+.Bl -tag -width Ds
+.It Pa snd.*
+Draft messages (kept in current directory)
+.It Pa ~/.santoku/headers
+Default headers for each mail.
+(Put your
+.Sq Li From\&:
+line there.)
+.It Pa ~/.signature
+Default signature.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmime 1 ,
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mdirs.1 b/man/mdirs.1
new file mode 100644
index 0000000..457eeaa
--- /dev/null
+++ b/man/mdirs.1
@@ -0,0 +1,42 @@
+.Dd July 22, 2016
+.Dt MDIRS 1
+.Os
+.Sh NAME
+.Nm mdirs
+.Nd list maildirs, recursively
+.Sh SYNOPSIS
+.Nm
+.Ar dirs\ ...
+.Sh DESCRIPTION
+.Nm
+scans the given directories for Maildir folders and prints them line by line.
+It understands Maildir and Maildir++.
+.Pp
+There are currently no options.
+.Pp
+To
+.Nm ,
+a Maildir folder is a directory containing
+a directory
+.Pa cur
+and a directory
+.Pa new .
+By the Maildir++ convention, nested Maildir folders
+need to start with
+.Sq Li \&. .
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr find 1
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mflag.1 b/man/mflag.1
new file mode 100644
index 0000000..d3b0eed
--- /dev/null
+++ b/man/mflag.1
@@ -0,0 +1,114 @@
+.Dd July 22, 2016
+.Dt MFLAG 1
+.Os
+.Sh NAME
+.Nm mflag
+.Nd manipulate Maildir mail flags
+.Sh SYNOPSIS
+.Nm
+.Op Fl DFPRST
+.Op Fl X Ar str
+.br
+.Op Fl dfprst
+.Op Fl x Ar str
+.br
+.Op Fl v
+.Op Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+flags changes the flags of the given
+.Ar msgs
+according to the options.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl D
+Mark
+.Ar msgs
+as draft.
+.It Fl F
+Mark
+.Ar msgs
+as flagged.
+.It Fl P
+Mark
+.Ar msgs
+as passed (resent/forwarded/bounced).
+.It Fl R
+Mark
+.Ar msgs
+as replied.
+.It Fl S
+Mark
+.Ar msgs
+as seen.
+.It Fl T
+Mark
+.Ar msgs
+as trashed.
+.It Fl X Ar str
+Mark
+.Ar msgs
+as with the chracters in
+.Ar str .
+.It Fl d
+Unmark
+.Ar msgs
+as draft.
+.It Fl f
+Unmark
+.Ar msgs
+as flagged.
+.It Fl p
+Unmark
+.Ar msgs
+as passed (resent/forwarded/bounced).
+.It Fl r
+Unmark
+.Ar msgs
+as replied.
+.It Fl s
+Unmark
+.Ar msgs
+as seen.
+.It Fl t
+Unmark
+.Ar msgs
+as trashed.
+.It Fl x Ar str
+Unmark
+.Ar msgs
+as with the chracters in
+.Ar str .
+(Remember to use uppercase characters.)
+.It Fl v
+Read Maildir mails from stdin (or the use the whole current sequence, if
+used interactively) and print the transformed list of file names.
+.Pp
+Can be used to keep the sequence intact in advent of renames.
+.El
+.Pp
+Note that the
+.Pa cur
+link is updated in all cases, when affected.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Pp
+.Lk https://cr.yp.to/proto/maildir.html "Using maildir format"
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mhdr.1 b/man/mhdr.1
new file mode 100644
index 0000000..b0ff12b
--- /dev/null
+++ b/man/mhdr.1
@@ -0,0 +1,48 @@
+.Dd July 22, 2016
+.Dt MHDR 1
+.Os
+.Sh NAME
+.Nm mhdr
+.Nd show mail headers
+.Sh SYNOPSIS
+.Nm
+.Op Fl Ar header
+.Op Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+prints the mail headers of the given
+.Ar msgs .
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+If no
+.Ar msgs
+are passed,
+.Nm
+will default to the current message.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl Ar header
+Only print the value of the header
+.Sq Ar header Ns Li \&: .
+.Pp
+By default, print all headers in normalized form (lowercase and unfolded).
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/minc.1 b/man/minc.1
new file mode 100644
index 0000000..ff1d3be
--- /dev/null
+++ b/man/minc.1
@@ -0,0 +1,43 @@
+.Dd July 22, 2016
+.Dt MINC 1
+.Os
+.Sh NAME
+.Nm minc
+.Nd incorporate new Maildir mail
+.Sh SYNOPSIS
+.Nm
+.Op Fl q
+.Ar dirs\ ...
+.Sh DESCRIPTION
+.Nm
+incorporates new mail in the given
+.Ar dirs
+by moving them from
+.Pa new
+to
+.Pa cur
+and adjusting the file names.
+.Pp
+By default, the new Maildir files are printed line by line.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl q
+Don't print the new Maildir files.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Lk https://cr.yp.to/proto/maildir.html "Using maildir format"
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mless.1 b/man/mless.1
new file mode 100644
index 0000000..c0a3a9c
--- /dev/null
+++ b/man/mless.1
@@ -0,0 +1,55 @@
+.Dd July 22, 2016
+.Dt MLESS 1
+.Os
+.Sh NAME
+.Nm mless
+.Nd interactive wrapper around mshow
+.Sh SYNOPSIS
+.Nm
+.Op Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+runs
+.Xr less 1
+on the output of
+.Xr mshow 1
+for the given messages.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+When no messages are passed and standard input is from a pipe,
+.Xr msetseq 1
+will be called and
+.Nm
+is run on the resulting sequence.
+The first "file" of the less instance will be the output of
+.Xr mscan 1 .
+This makes
+.Nm
+convenient for use at the end of a pipe.
+.Pp
+.Nm
+will start
+.Xr less 1
+displaying the current message if possible.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr less 1 ,
+.Xr mscan 1 ,
+.Xr msetseq 1 ,
+.Xr mshow 1 ,
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mlist.1 b/man/mlist.1
new file mode 100644
index 0000000..89fc673
--- /dev/null
+++ b/man/mlist.1
@@ -0,0 +1,94 @@
+.Dd July 22, 2016
+.Dt MLIST 1
+.Os
+.Sh NAME
+.Nm mlist
+.Nd list mesages in Maildir folders
+.Sh SYNOPSIS
+.Nm
+.Op Fl DFPRST
+.Op Fl X Ar str
+.br
+.Op Fl dfprst
+.Op Fl x Ar str
+.br
+.Op Fl N | Fl n | Fl C | Fl c
+.br
+.Op Fl i
+.Ar dirs\ ...
+.Sh DESCRIPTION
+.Nm
+lists all messages in the Maildir folders
+.Ar dirs
+line by line.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl D
+Only list messages marked as draft.
+.It Fl F
+Only list messages marked as flagged.
+.It Fl P
+Only list messages marked as passed (resent/forwarded/bounced).
+.It Fl R
+Only list messages marked as replied-to.
+.It Fl S
+Only list messages marked as seen.
+.It Fl T
+Only list messages marked as trashed.
+.It Fl X Ar str
+Only list messages marked with the chracters in
+.Ar str .
+.It Fl d
+Don't list messages marked as draft.
+.It Fl f
+Don't list messages marked as flagged.
+.It Fl p
+Don't list messages marked as passed (resent/forwarded/bounced).
+.It Fl r
+Don't list messages marked as replied-to.
+.It Fl s
+Don't list messages marked as seen.
+.It Fl t
+Don't list messages marked as trashed.
+.It Fl x Ar str
+Don't list messages marked with the chracters in
+.Ar str .
+(Remember to use uppercase characters.)
+.It Fl C
+Only list messages in
+.Pa cur .
+.It Fl N
+Only list messages in
+.Pa new .
+.It Fl c
+Don't list messages in
+.Pa cur .
+.It Fl n
+Don't list messages in
+.Pa new .
+.It Fl i
+Don't print filenames, instead print a single line summary for each
+folder with the number of unseen, flagged and total messages, as well
+as the folder name.
+.El
+.Pp
+Multiple options are regarded as a conjunction.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr find 1
+.Pp
+.Lk https://cr.yp.to/proto/maildir.html "Using maildir format"
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mmime.1 b/man/mmime.1
new file mode 100644
index 0000000..7565aae
--- /dev/null
+++ b/man/mmime.1
@@ -0,0 +1,67 @@
+.Dd July 22, 2016
+.Dt MMIME 1
+.Os
+.Sh NAME
+.Nm mmime
+.Nd encode MIME mails
+.Sh SYNOPSIS
+.Nm
+.Ar files\ ...
+.Sh DESCRIPTION
+.Nm
+encodes the
+.Ar files
+given as arguments into a MIME message.
+.Pp
+If there is more than one file, a
+.Sq Li multipart/mixed
+mail is generated.
+.Pp
+With no arguments,
+.Nm
+generates a
+.Sq Li multipart/mixed
+mail from standard input,
+extending the header as neccessary,
+and replacing body lines looking like
+.D1 Li # Ns Ar type Pa filename
+with a MIME part having Content-Type
+.Ar type
+consisting of the contents of
+.Pa filename .
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Rs
+.%A N. Freed
+.%A N. Borenstein
+.%B Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
+.%R RFC 2045
+.%D November 1996
+.Re
+.Rs
+.%A N. Freed
+.%A N. Borenstein
+.%B Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
+.%R RFC 2046
+.%D November 1996
+.Re
+.Rs
+.%A N. Freed
+.%A N. Borenstein
+.%B MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text
+.%R RFC 2047
+.%D November 1996
+.Re
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mmsg.5 b/man/mmsg.5
new file mode 100644
index 0000000..b01d3b8
--- /dev/null
+++ b/man/mmsg.5
@@ -0,0 +1,75 @@
+.Dd July 22, 2016
+.Dt MMSG 5
+.Os
+.Sh NAME
+.Nm mmsg
+.Nd Santoku message argument syntax
+.Sh DESCRIPTION
+This manpage documents the message syntax used
+by the tools
+.Xr mflag 1 ,
+.Xr mhdr 1 ,
+.Xr mless 1 ,
+.Xr mrepl 1 ,
+.Xr mscan 1 ,
+.Xr mseq 1 ,
+.Xr mshow 1 ,
+.Xr msort 1 ,
+.Xr mthread 1 .
+.Pp
+In general, you can always pass a file name as a message,
+if it contains a
+.Sq Li \&/
+character.
+Use
+.Sq Li \&./
+to prefix messages in the current directory.
+.Pp
+Sequences have the format
+.Sq Ar start Ns Li \&: Ns Ar stop ,
+where
+.Ar start
+and
+.Ar stop
+are one-based indexes into the sequence.
+Negative numbers count from the end.
+If
+.Ar start
+is the empty string,
+.Li 1
+will be used instead.
+If
+.Ar stop
+is the empty string,
+.Li \&-1
+will be used instead.
+Thus,
+.Sq Li \&:
+represents the whole sequence.
+If the sequence does not contain a
+.Sq Li \&: ,
+it is considered to be a single message, equivalent to the range
+.Sq Ar start Ns Li \&: Ns Ar start
+of size one.
+.Pp
+There are four special shortcuts:
+.Bl -tag -width 3n
+.It Sq Li \&.
+refers to the current message.
+Additionally, the syntax
+.Sq Li \&.+ Ns Ar N
+and
+.Sq Li \&.- Ns Ar N
+can be used to refer to messages relative to the current message.
+.It Sq Li \&+
+refers to the next message (like
+.Sq Li \&.+1 ) .
+.It Sq Li \&-
+refers to the previous message (like
+.Sq Li \&.-1 ) .
+.It Sq Li \&$
+refers to the last message (like
+.Sq Li -1 ) .
+.El
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
diff --git a/man/mscan.1 b/man/mscan.1
new file mode 100644
index 0000000..6c7055a
--- /dev/null
+++ b/man/mscan.1
@@ -0,0 +1,60 @@
+.Dd July 22, 2016
+.Dt MSCAN 1
+.Os
+.Sh NAME
+.Nm mscan
+.Nd print a one line per message mail listing
+.Sh SYNOPSIS
+.Nm
+.Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+prints a one line summary for each message.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+If no
+.Ar msgs
+are passed,
+.Nm
+reads file names from standard input,
+or uses the mails in the current sequence when used interactively.
+.Pp
+For each message,
+.Nm
+prints
+flags,
+the sequence number (if applicable),
+the date,
+the originator,
+and the subject of the message.
+.Sh FLAGS
+.Bl -tag -width 2n -compact
+.It Li \&>
+The current message
+.It Li \&.
+A seen message
+.It Li x
+A trashed message
+.It Li \&*
+A flagged message
+.It Li \&-
+A replied-to message
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mseq.1 b/man/mseq.1
new file mode 100644
index 0000000..0a938a8
--- /dev/null
+++ b/man/mseq.1
@@ -0,0 +1,50 @@
+.Dd July 22, 2016
+.Dt MSEQ 1
+.Os
+.Sh NAME
+.Nm mseq
+.Nd print messages from mail sequence
+.Sh SYNOPSIS
+.Nm
+.Op Fl n
+.Op Fl r
+.Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+prints messages in the mail sequence.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+If no
+.Ar msgs
+are passed and
+.Nm
+is used interactively,
+.Nm
+prints all messages in the sequence.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl n
+Print the sequence numbers of the
+.Ar msgs .
+.It Fl r
+Remove leading indentation from the file names.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/msetseq.1 b/man/msetseq.1
new file mode 100644
index 0000000..a07af7d
--- /dev/null
+++ b/man/msetseq.1
@@ -0,0 +1,43 @@
+.Dd July 22, 2016
+.Dt MSETSEQ 1
+.Os
+.Sh NAME
+.Nm msetseq
+.Nd set mail sequence
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Sh DESCRIPTION
+.Nm
+sets the mail sequence to the file names passed on standard input.
+.Pp
+When used in a pipe,
+.Nm
+will also output the full sequence, so it can be used in a pipe.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl a
+Append to the mail sequence instead of replacing it.
+.El
+.Sh ENVIRONMENT
+.Bl -tag -width Ds
+.It Ev MAILMAP
+File were the sequence is stored.
+(Default:
+.Pa ~/.santoku/map )
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mshow.1 b/man/mshow.1
new file mode 100644
index 0000000..7a3924e
--- /dev/null
+++ b/man/mshow.1
@@ -0,0 +1,113 @@
+.Dd July 22, 2016
+.Dt MSHOW 1
+.Os
+.Sh NAME
+.Nm mshow
+.Nd render mail and extract MIME parts
+.Sh SYNOPSIS
+.Nm
+.Op Fl h Ar headers
+.Op Fl qrHL
+.Op Ar msgs\ ...
+.Nm
+.Fl x Ar msg
+.Ar parts\ ...
+.Nm
+.Fl O Ar msg
+.Ar parts\ ...
+.Nm
+.Fl t
+.Ar msgs\ ...
+.Nm
+.Fl R
+.Ar msg
+.Sh DESCRIPTION
+By default,
+.Nm
+renders the passed messages to standard output.
+See
+.Xr mmsg 5
+for the message argument syntax.
+If used interactively and no messages are given,
+displays the current message.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl h Ar headers
+Display the headers in the colon-separated list
+.Ar headers
+instead of the default headers
+.Sq Li from:subject:to:cc:date: .
+.It Fl q
+Don't render the body, stop after header output.
+.It Fl r
+Don't render the body, print raw body.
+.It Fl H
+Don't decode the headers, print all raw headers.
+.It Fl L
+Don't filter the headers, print all decoded headers.
+.It Fl x Ar msg
+Switch to extraction mode: extract
+.Ar parts
+from the message
+.Ar msg
+into files.
+.Ar parts
+can be specified by number or file name.
+.It Fl O Ar msg
+Switch to extraction mode: extract
+.Ar parts
+from the message
+.Ar msg
+to standard output.
+.Ar parts
+can be specified by number or file name.
+.It Fl t
+Switch to list mode: list all MIME parts
+of each
+.Ar msg .
+.It Fl R Ar msg
+Render the text parts from
+.Ar msg ,
+suitable for use in a reply.
+.El
+.Sh FILTERS
+.Nm
+by default decodes all
+.Sq Li text/* ,
+.Sq Li message/rfc822 ,
+.Sq Li multipart/*
+parts,
+and re-encodes them into UTF-8 if necessary.
+.Pp
+Other filters can be specified in the file
+.Pa ~/.santoku/filter
+in the format
+.D1 Ar type/subtype Ns Li \&: Ar command
+or
+.D1 Ar type Ns Li \&: Ar command
+.Nm
+will then spawn a pipe to
+.Ar command ,
+write the MIME part
+and display the output.
+The environment variable
+.Ev PIPE_CHARSET
+will be set to the charset declared in the MIME part,
+if known.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/msort.1 b/man/msort.1
new file mode 100644
index 0000000..5e12cd0
--- /dev/null
+++ b/man/msort.1
@@ -0,0 +1,63 @@
+.Dd July 22, 2016
+.Dt MSORT 1
+.Os
+.Sh NAME
+.Nm msort
+.Nd sort mail messages
+.Sh SYNOPSIS
+.Nm
+.Op Fl r
+.Op Fl f | Fl d | Fl s | Fl F | Fl M | Fl S
+.Op Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+sorts mail messages according to various orders.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+If no messages are passed,
+.Nm
+will read file names from standard input,
+or use the default sequence if used interactively.
+.Pp
+.Nm
+prints the sorted messages line by line.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl r
+Reverse order.
+.It Fl f
+Sort by
+.Sq Li From: .
+.It Fl d
+Sort by date.
+.It Fl s
+Sort by
+.Sq Li Subject\&:
+(modulo various variants of
+.Sq Li Re: ) .
+.It Fl F
+Sort by file name, using proper order for numbers in file names.
+.It Fl M
+Sort by message file modification time.
+.It Fl S
+Sort by message file size.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/man/mthread.1 b/man/mthread.1
new file mode 100644
index 0000000..d653d28
--- /dev/null
+++ b/man/mthread.1
@@ -0,0 +1,51 @@
+.Dd July 22, 2016
+.Dt MTHREAD 1
+.Os
+.Sh NAME
+.Nm mthread
+.Nd thread mail messages
+.Sh SYNOPSIS
+.Nm
+.Op Fl v
+.Ar msgs\ ...
+.Sh DESCRIPTION
+.Nm
+groups messages together in parent/child relationships based on
+which messages are replies to which others.
+See
+.Xr mmsg 5
+for the message argument syntax.
+.Pp
+If no messages are passed,
+.Nm
+will read file names from standard input,
+or use the default sequence if used interactively.
+.Pp
+.Nm
+prints the threaded messages line by line, indented according to their
+depth in the message tree.
+Unresolved Message-IDs are printed as-is.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl v
+Do not prune unresolved Message-IDs at the top-level.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mmsg 5
+.Pp
+.Lk https://www.jwz.org/doc/threading.html "Message threading"
+.Sh AUTHORS
+.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
+.Sh LICENSE
+.Nm
+is in the public domain.
+.Pp
+To the extent possible under law,
+the creator of this work
+has waived all copyright and related or
+neighboring rights to this work.
+.Pp
+.Lk http://creativecommons.org/publicdomain/zero/1.0/