mhthread - sort an MH folder into 'threaded' order
mhthread [options] +folder
mhthread [options] /path/to/folder
options accepted: [-debug] [-no-write] [-fast] [-lock]
This will thread an MH folder. It re-orders the messages (as sortm(1) would do), and annotates each one with a new header, "X-MH-Thread-Markup", which can be displayed by scan(1).
Together, this results in the messages being displayed in "threaded" order, as in trn(1) or mutt(1).
Sequences will be rewritten appropriately. The folder will also be "packed", as if 'folder -pack' had been run; see folder(1).
Here's some sample output from scan(1), after threading the folder:
430 03/23 mathew 3 [Asrg] Re: [OffTopic - NNTP]
431 03/23 Kee Hinckley 5 |- [Asrg] Re: [OffTopic - NNTP]
432 -03/23 Chuq Von Rospach 11 | |- Parameters for success? (was Re: [A
433 03/23 To:Chuq Von Rospa 4 | | \- Re: Parameters for success? (was
434 03/23 Matt Sergeant 3 | \- Re: [Asrg] Re: [OffTopic - NNTP]
435 03/23 Chuq Von Rospach 7 \- Re: [Asrg] Re: [OffTopic - NNTP]
Use an on-disk cache to speed up operation.
Use a folder-wide lock-file to synchronize access to folders, so that multiple processes will not stomp on each other's changes or cause folder corruption. If you use this, you should ensure that you also use a locking version of other tools, such as the lockedrcvstore
script that comes with ExMH (typical location: /usr/lib/exmh*/misc/lockedrcvstore
).
Do not rewrite the messages; instead, output a line for each message noting the actions that would be taken.
Output debugging info to stderr.
Note that options will also be read from the mhthread
entry in your .mh_profile
file, in traditional MH style.
To display the results in scan(1) output, use something like the following for the subject-display part of the scan.form file:
%(decode{x-mh-thread-markup})%(decode{subject})
If you do not have a "scan.form" file of your own, you will need to set it up. This functionality is accessed using the -form or -format switches to the scan(1) command. To use this, copy the /etc/nmh/scan.default file to your ~/Mail dir and modify it with the above line, then add
scan: -form scan.form
to your ~/.mh_profile.
Copy this script to somewhere in your path, called mhthread
. Then run that whenever you want to re-thread the folder, in the same way you would folder -pack
, sortm
or similar.
Copy this script to somewhere in your path, called mhthread
.
Add the following function to your ~/.tk/exmh/user.tcl
file:
proc Folder_Thread {} {
global exmh
Background_Wait
Exmh_Status "Threading folder..." blue
if {[Ftoc_Changes "Thread"] == 0} then {
if {[catch {MhExec mhthread +$exmh(folder)} err]} {
Exmh_Status $err error
} else {
# finish off by using the ExMH packing logic to redisplay folder
Folder_Pack
# then show the first unseen message
Msg_ShowUnseen
}
}
}
Next, you need to rebuild the tclIndex
file. Run tclsh
and type:
auto_mkindex ~/.tk/exmh *.tcl
Now add a button to run this function. To do this, you must exit ExMH first, then edit the ~/.exmh/exmh-defaults
file and add these files at the top of the file:
*Fops.ubuttonlist: thread
*Fops.thread.text: Thread
*Fops.thread.command: Folder_Thread
Restart ExMH, and there should be a new button marked Thread on the folder button-bar. Press this to re-thread the current folder.
The threading algorithm uses the In-Reply-To, Message-Id and References headers. Thanks to JWZ for guidance, in the form of his page on threading at http://www.jwz.org/doc/threading.html
.
The 'X-MH-Thread-Markup' headers are encoded using RFC-2047 encoding, using 'no-break space' characters for whitespace, as otherwise MH's scan(1) format code will strip them. Here's an example of the results:
X-MH-Thread-Markup: =?US-ASCII?Q?=a0=a0=a0=a0=5c=2d=a0?=
dealing with private sequences (stored in .mh_profile); limiting displayed thread-depth to keep UI readable (so far has not been a problem).
duplicate messages will always be shuffled in order each time mhthread
is run, due to handling of identical Message-Ids.
Latest version can be found at http://jmason.org/software/mhthread/ .
Justin Mason, jm dash mhthread dash nospam at jmason dot org
version = 1.7, Jul 25 2003 jm