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]
lockedrcvstore
script that comes with ExMH (typical
location: /usr/lib/exmh*/misc/lockedrcvstore
).
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.
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.5, Apr 25 2003 jm