docs/master

diff discussion.roff @ 217:f3f65376bef9

A big bunch of corrections in 2.1 and 2.2.
author markus schnalke <meillo@marmaro.de>
date Sat, 14 Jul 2012 18:04:32 +0200
parents 9317d789cef9
children 8c537982d718
line diff
     1.1 --- a/discussion.roff	Fri Jul 13 18:35:36 2012 +0200
     1.2 +++ b/discussion.roff	Sat Jul 14 18:04:32 2012 +0200
     1.3 @@ -2,53 +2,60 @@
     1.4  .P
     1.5  This main chapter discusses the practical work accomplished in the
     1.6  mmh project.
     1.7 -It is structured along the goals set for the project.
     1.8 -The concrete work undertaken
     1.9 -is described in the examples of how the general goals were achieved.
    1.10 -The discussion compares the current version of mmh with the state of
    1.11 -nmh just before the mmh project started, i.e. fall 2011.
    1.12 -Current changes of nmh will be mentioned only as side notes.
    1.13 -.\" XXX where do I discuss the parallel development of nmh?
    1.14 +It is structured along the goals chosen for the project.
    1.15 +A selection of the work undertaken
    1.16 +is described.
    1.17 +.P
    1.18 +This discussion compares the present version of mmh with the state of
    1.19 +nmh at the time when the mmh project had started, i.e. fall 2011.
    1.20 +Recent changes in nmh are seldom part of the discussion.
    1.21 +Sometimes they are mentioned in side notes.
    1.22  .P
    1.23  For the reader's convenience, the structure of modern email systems
    1.24 -is depicted in the figure.
    1.25 +is depicted in the following figure.
    1.26  It illustrates the path a message takes from sender to recipient.
    1.27 -.sp
    1.28 +
    1.29 +.sp 1.5
    1.30  .KS
    1.31  .in 2c
    1.32  .so input/mail-agents.pic
    1.33  .KE
    1.34 -.sp
    1.35 +.sp 1.5
    1.36 +
    1.37  .LP
    1.38 -The ellipses denote mail agents, i.e. different jobs in email processing:
    1.39 +The ellipses denote mail agents, i.e. different jobs in email processing.
    1.40 +These are:
    1.41  .IP "Mail User Agent (MUA)
    1.42 -The only program the user interacts directly with.
    1.43 +The only program users directly interact with.
    1.44  It includes functions to compose new mail, display received mail,
    1.45  and to manage the mail storage.
    1.46 -Also called \fImail client\fP.
    1.47 +It is called a \fImail client\fP as well.
    1.48  .IP "Mail Submission Agent (MSA)
    1.49  A special kind of Mail Transfer Agent, used to submit mail into the
    1.50  mail transport system.
    1.51 +Often it is also called an MTA.
    1.52  .IP "Mail Transfer Agent (MTA)
    1.53  A node in the mail transport system.
    1.54 -Transfers incoming mail to a transport node nearer to the final destination.
    1.55 -It may be the final destination itself.
    1.56 +It transfers incoming mail to a transport node nearer to the
    1.57 +final destination.
    1.58 +An MTA may be the final destination itself.
    1.59  .IP "Mail Delivery Agent (MDA)
    1.60 -Delivers mail by storing it onto disk, usually according to a set of rules.
    1.61 +Delivers mail according to a set of rules.
    1.62 +Usually, the messages are stored to disk.
    1.63  .IP "Mail Retrieval Agent (MRA)
    1.64 -Initiates the transfer of mail from a remote server to the local machine.
    1.65 -(The dashed arrow represents the pull request.)
    1.66 -.P
    1.67 -The dashed boxes represent groups that usually reside on single machines.
    1.68 -The box on the lower left represents the sender's local system.
    1.69 +Initiates the transfer of mail from a remote location to the local machine.
    1.70 +(The dashed arrow in the figure represents the pull request.)
    1.71 +.LP
    1.72 +The dashed boxes represent entities that usually reside on single machines.
    1.73 +The box on the lower left represents the sender's system.
    1.74  The box on the upper left represents the first mail transfer node.
    1.75  The box on the upper right represents the transfer node responsible for the
    1.76  destination address.
    1.77 -The box on the lower right represents the recipient's local system.
    1.78 +The box on the lower right represents the recipient's system.
    1.79  Often, the boxes above the dotted line are servers on the Internet.
    1.80 -Many mail clients, including nmh, have all of the components below
    1.81 -the dotted line implemented.
    1.82 -Not so in mmh, which is an MUA only.
    1.83 +Many mail clients, including nmh, include all of the components below
    1.84 +the dotted line.
    1.85 +This is not the case for mmh; it implements the MUA only.
    1.86  
    1.87  
    1.88  
    1.89 @@ -59,9 +66,8 @@
    1.90  .H1 "Streamlining
    1.91  
    1.92  .P
    1.93 -MH once provided anything necessary for email handling.
    1.94 -The community around nmh has the similar understanding that nmh should
    1.95 -provide a complete email system.
    1.96 +MH once provided a complete email system.
    1.97 +The community around nmh tries to keep nmh in similar shape.
    1.98  In fundamental contrast, mmh shall be an MUA only.
    1.99  I believe that the development of all-in-one mail systems is obsolete.
   1.100  Today, email is too complex to be fully covered by a single project.
   1.101 @@ -69,28 +75,37 @@
   1.102  Instead, the aspects of email should be covered by multiple projects,
   1.103  which then can be combined to form a complete system.
   1.104  Excellent implementations for the various aspects of email already exist.
   1.105 -Just to name three examples: Postfix is a specialized MTA,
   1.106 -.\" XXX homepages verlinken
   1.107 -Procmail is a specialized MDA, and Fetchmail is a specialized MRA.
   1.108 +Just to name three examples: Postfix
   1.109 +.[
   1.110 +postfix website
   1.111 +.]
   1.112 +is a specialized MTA, Procmail
   1.113 +.[
   1.114 +procmail website
   1.115 +.]
   1.116 +is a specialized MDA, and Fetchmail
   1.117 +.[
   1.118 +fetchmail website
   1.119 +.]
   1.120 +is a specialized MRA.
   1.121  I believe that it is best to use such specialized tools instead of
   1.122 -providing the same function again as a side-component in the project.
   1.123 -.\" XXX mail agent picture here
   1.124 +providing the same function once more as a side component.
   1.125  .P
   1.126  Doing something well requires focusing on a small set of specific aspects.
   1.127 -Under the assumption that development focussed on a particular area
   1.128 -produces better results there, specialized projects will be superior
   1.129 +Under the assumption that development which is focussed on a particular
   1.130 +area produces better results there, specialized projects will be superior
   1.131  in their field of focus.
   1.132  Hence, all-in-one mail system projects \(en no matter if monolithic
   1.133  or modular \(en will never be the best choice in any of the fields.
   1.134 -Even in providing the best consistent all-in-one system, they are likely
   1.135 -to be beaten by projects that focus only on integrating existing mail
   1.136 -components to create a homogeneous system.
   1.137 +Even in providing the most consistent all-in-one system, they are likely
   1.138 +to be beaten by projects that focus exclusively on the creation
   1.139 +of a homogeneous system by integrating existing mail components.
   1.140  .P
   1.141 -The limiting resource in the community development of free software
   1.142 -is usually man power.
   1.143 +Usually, the limiting resource in the community development of
   1.144 +free software is man power.
   1.145  .\" XXX FIXME ref!
   1.146 -If the development power is spread over a large development area,
   1.147 -it becomes even more difficult to compete with the specialists in the
   1.148 +If the development effort is spread over a large development area,
   1.149 +it becomes more difficult to compete with the specialists in the
   1.150  various fields.
   1.151  The concrete situation for MH-based mail systems is even tougher,
   1.152  given their small and aged community, concerning both developers and users.
   1.153 @@ -104,23 +119,24 @@
   1.154  .H2 "Mail Transfer Facilities
   1.155  .Id mail-transfer-facilities
   1.156  .P
   1.157 -In contrast to nmh, which also provides mail submission and mail retrieval
   1.158 -agents, mmh is an MUA only.
   1.159 -This general difference initiated the development of mmh.
   1.160 -The removal of the mail transfer facilities was the first work task
   1.161 -in the mmh project.
   1.162 +The removal of the mail transfer facilities, effectively dropping the
   1.163 +MSA and MRA, had been the first work task in the mmh project.
   1.164 +The desire for this change initiated the creation of the mmh project.
   1.165  .P
   1.166  Focusing on one mail agent role only, is motivated by Eric Allman's
   1.167  experience with Sendmail.
   1.168 -He identified the limitation of Sendmail to the MTA task as one reason for
   1.169 -its success:
   1.170 +He identified the limitation of Sendmail
   1.171 +.[
   1.172 +sendmail website
   1.173 +.]
   1.174 +to the MTA task as one reason for its success:
   1.175  .[ [
   1.176  costales sendmail
   1.177  .], p. xviii]
   1.178  .QS
   1.179  Second, I limited myself to the routing function \(en
   1.180  I wouldn't write user agents or delivery back-ends.
   1.181 -This was a departure of the dominant through of the time,
   1.182 +This was a departure of the dominant thought of the time,
   1.183  in which routing logic, local delivery, and often the network code
   1.184  were incorporated directly into the user agents.
   1.185  .QE
   1.186 @@ -128,49 +144,52 @@
   1.187  In nmh, the MSA is called \fIMessage Transfer Service\fP (MTS).
   1.188  This facility, implemented by the
   1.189  .Pn post
   1.190 -command, established network connections and spoke SMTP to submit
   1.191 +command, establishes network connections and spoke SMTP to submit
   1.192  messages to be relayed to the outside world.
   1.193 -The changes in email demanded changes in this part of nmh as well.
   1.194 +When email transfer changed, this part needed to be changed as well.
   1.195  Encryption and authentication for network connections
   1.196  needed to be supported, hence TLS and SASL were introduced into nmh.
   1.197 -This added complexity to nmh without improving it in its core functions.
   1.198 -Also, keeping up with recent developments in the field of
   1.199 +This added complexity without improving the core functions.
   1.200 +Furthermore, keeping up with recent developments in the field of
   1.201  mail transfer requires development power and specialists.
   1.202 -In mmh, this whole facility was simply cut off.
   1.203 +In mmh, this whole facility was simply cut off
   1.204  .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
   1.205  .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3
   1.206 -.Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b
   1.207 +.Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b .
   1.208  Instead, mmh depends on an external MSA.
   1.209 -The only outgoing interface available to mmh is the
   1.210 +All outgoing mail in mmh goes through the
   1.211  .Pn sendmail
   1.212  command, which almost any MSA provides.
   1.213  If not, a wrapper program can be written.
   1.214  It must read the message from the standard input, extract the
   1.215  recipient addresses from the message header, and hand the message
   1.216  over to the MSA.
   1.217 -For example, a wrapper script for qmail would be:
   1.218 +For example, a wrapper script for qmail
   1.219 +.[
   1.220 +qmail website
   1.221 +.]
   1.222 +would be:
   1.223  .VS
   1.224  #!/bin/sh
   1.225  exec qmail-inject  # ignore command line arguments
   1.226  VE
   1.227  The requirement to parse the recipient addresses out of the message header 
   1.228 -is likely to be removed in the future.
   1.229 -Then mmh would pass the recipient addresses as command line arguments.
   1.230 +may be removed in the future.
   1.231 +Mmh could pass the recipient addresses as command line arguments.
   1.232  This appears to be the better interface.
   1.233 -.\" XXX implement it
   1.234  .P
   1.235  To retrieve mail, the
   1.236  .Pn inc
   1.237 -command acted as an MRA.
   1.238 -It established network connections
   1.239 -and spoke POP3 to retrieve mail from remote servers.
   1.240 +command in nmh acts as MRA.
   1.241 +It establishes network connections
   1.242 +and speaks POP3 to retrieve mail from remote servers.
   1.243  As with mail submission, the network connections required encryption and
   1.244 -authentication, thus TLS and SASL were added.
   1.245 +authentication, thus TLS and SASL were added to nmh.
   1.246  Support for message retrieval through IMAP will soon become necessary
   1.247  additions, too, and likewise for any other changes in mail transfer.
   1.248 -Not so for mmh because it has dropped the support for retrieving mail
   1.249 -from remote locations.
   1.250 -.Ci ab7b48411962d26439f92f35ed084d3d6275459c
   1.251 +But not in mmh because it has dropped the support for retrieving mail
   1.252 +from remote locations
   1.253 +.Ci ab7b48411962d26439f92f35ed084d3d6275459c .
   1.254  Instead, it depends on an external tool to cover this task.
   1.255  Mmh has two paths for messages to enter mmh's mail storage:
   1.256  (1) Mail can be incorporated with
   1.257 @@ -179,19 +198,20 @@
   1.258  .Pn rcvstore
   1.259  by reading them, one at a time, from the standard input.
   1.260  .P
   1.261 -With the removal of the MSA and MRA, mmh converted from an all-in-one
   1.262 -mail system to being an MUA only.
   1.263 +With the removal of the MSA and MRA, mmh converted from a complete
   1.264 +mail system to only an MUA.
   1.265  Now, of course, mmh depends on third-party software.
   1.266  An external MSA is required to transfer mail to the outside world;
   1.267  an external MRA is required to retrieve mail from remote machines.
   1.268 -Excellent implementations of such software exist,
   1.269 -which likely are superior than the internal version.
   1.270 -Additionally, the best suiting programs can be freely chosen.
   1.271 +Excellent implementations of such software exist.
   1.272 +They likely are superior to the internal versions that were removed.
   1.273 +Additionally, the best suiting programs can be chosen freely.
   1.274  .P
   1.275 -As it had already been possible to use an external MSA or MRA,
   1.276 -why not keep the internal version for convenience?
   1.277 -.\" XXX ueberleitung
   1.278 -The question whether there is sense in having a fall-back pager in all
   1.279 +As it had already been possible to use an external MSA and MRA,
   1.280 +why should the internal version not be kept for convenience?
   1.281 +.\" XXX commas correct?
   1.282 +Transfered to a different area,
   1.283 +the question whether there is sense in having a fall-back pager in all
   1.284  the command line tools, for the cases when
   1.285  .Pn more
   1.286  or
   1.287 @@ -199,7 +219,7 @@
   1.288  are not available, appears to be ridiculous.
   1.289  Of course, MSAs and MRAs are more complex than text pagers
   1.290  and not necessarily available but still the concept of orthogonal
   1.291 -design holds: ``Write programs that do one thing and do it well.''
   1.292 +design holds: ``Write programs that do one thing and do it well''.
   1.293  .[
   1.294  mcilroy unix phil
   1.295  p. 53
   1.296 @@ -215,61 +235,61 @@
   1.297  reasons that programs which have grown complex should be split.
   1.298  If it is conceptionally more elegant to have the MSA and MRA as
   1.299  separate projects then they should be separated.
   1.300 -In my opinion, this is the case here.
   1.301 -The RFCs propose this separation by clearly distinguishing the different
   1.302 -mail handling tasks [RFC\|821].
   1.303 -The small interfaces between the mail agents support the separation.
   1.304 +In my opinion, this is the case.
   1.305 +The RFCs suggest this separation by clearly distinguishing the
   1.306 +different mail handling tasks [RFC\|821].
   1.307 +The small interfaces between the mail agents support the
   1.308 +separation as well.
   1.309  .P
   1.310 -Email once had been small and simple.
   1.311 +Once, email had been small and simple.
   1.312  At that time,
   1.313  .Pn /bin/mail
   1.314  had covered everything there was to email and still was small and simple.
   1.315  Later, the essential complexity of email increased.
   1.316 -(Essential complexity is the complexity defined by the problem itself.\0
   1.317 -.[[
   1.318 +(Essential complexity is the complexity defined by the problem itself.\&
   1.319 +.[ [
   1.320  brooks no silver bullet
   1.321  .]])
   1.322 -Email systems reacted to this change: they grew.
   1.323 +Consequently, email systems grew.
   1.324  RFCs started to introduce the concept of mail agents to separate the
   1.325 -various tasks because they became more extensive and new tasks appeared.
   1.326 -As the mail systems grew even more, parts were split off.
   1.327 +various roles because they became more extensive and because
   1.328 +new roles appeared.
   1.329 +As mail system implementations grew, parts of them were split off.
   1.330  For instance, a POP server was included in the original MH;
   1.331  it was removed in nmh.
   1.332 -Now is the time to go one step further and split off the MSA and MRA, too.
   1.333 +Now is the time to go one step further and split off the MSA and MRA,
   1.334 +as well.
   1.335  Not only does this decrease the code size of the project,
   1.336  more importantly, it unburdens mmh of the whole field of
   1.337 -message transfer with all its implications for the project.
   1.338 +message transfer, with all its implications for the project.
   1.339  There is no more need for concern with changes in network transfer.
   1.340 -This independence is gained by depending on an external program
   1.341 -that covers the field.
   1.342 -Today, this is a reasonable exchange.
   1.343 +This independence is gained by depending on external components
   1.344 +that cover the field.
   1.345  .P
   1.346 -.\" XXX ueberleitung ???
   1.347 -Functionality can be added in three different ways:
   1.348 +In general, functionality can be added in three different ways:
   1.349  .LI 1
   1.350 -Implementing the function in the project itself.
   1.351 +By implementing the function in the project itself.
   1.352  .LI 2
   1.353 -Depending on a library that provides the function.
   1.354 +By depending on a library that provides the function.
   1.355  .LI 3
   1.356 -Depending on a program that provides the function.
   1.357 +By depending on a program that provides the function.
   1.358  .LP
   1.359  .\" XXX Rework sentence
   1.360  While implementing the function in the project itself leads to the
   1.361  largest increase in code size and requires the most maintenance
   1.362  and development work,
   1.363 -it increases the project's independence of other software the most.
   1.364 +it keeps the project's dependence on other software lowest.
   1.365  Using libraries or external programs requires less maintenance work
   1.366 -but introduces dependencies on external software.
   1.367 +but introduces dependencies on external projects.
   1.368  Programs have the smallest interfaces and provide the best separation,
   1.369  but possibly limit the information exchange.
   1.370  External libraries are more strongly connected than external programs,
   1.371  thus information can be exchanged in a more flexible manner.
   1.372  Adding code to a project increases maintenance work.
   1.373  .\" XXX ref
   1.374 -Implementing complex functions in the project itself adds
   1.375 -a lot of code.
   1.376 -This should be avoided if possible.
   1.377 -Hence, the dependencies only change in their character,
   1.378 +As implementing complex functions in the project itself adds
   1.379 +a lot of code, this should be avoided if possible.
   1.380 +Thus, the dependencies only change in their character,
   1.381  not in their existence.
   1.382  In mmh, library dependencies on
   1.383  .Pn libsasl2
   1.384 @@ -291,40 +311,54 @@
   1.385  Users of MH should not have problems setting up an external MSA and MRA.
   1.386  Also, the popular MSAs and MRAs have large communities and a lot
   1.387  of available documentation.
   1.388 -Choices for MSAs range from full-featured MTAs such as
   1.389 -.\" XXX refs
   1.390 -.I Postfix ,
   1.391 -over mid-size MTAs such as
   1.392 -.I masqmail
   1.393 -and
   1.394 -.I dma ,
   1.395 -to small forwarders such as
   1.396 -.I ssmtp
   1.397 -and
   1.398 -.I nullmailer .
   1.399 -Choices for MRAs include
   1.400 -.I fetchmail ,
   1.401 -.I getmail ,
   1.402 -.I mpop
   1.403 -and
   1.404 -.I fdm .
   1.405 +
   1.406 +Choices for MSAs range from small forwarders such as
   1.407 +.[
   1.408 +ssmtp website
   1.409 +.]
   1.410 +and,
   1.411 +.[
   1.412 +nullmailer website
   1.413 +.]
   1.414 +over mid-size MTAs including
   1.415 +.[
   1.416 +masqmail website
   1.417 +.]
   1.418 +and,
   1.419 +.[
   1.420 +dma dragonfly mail agent website
   1.421 +.]
   1.422 +up to full-featured MTAs as for instance.
   1.423 +.[
   1.424 +postfix website
   1.425 +.]
   1.426 +MRAs are provided for example by
   1.427 +.[ [
   1.428 +fetchmail website
   1.429 +.]
   1.430 +.[
   1.431 +getmail website
   1.432 +.]
   1.433 +.[
   1.434 +mpop website
   1.435 +.]
   1.436 +.[
   1.437 +fdm website
   1.438 +.]].
   1.439  
   1.440  
   1.441  .H2 "Non-MUA Tools
   1.442  .P
   1.443 -One goal of mmh is to remove the tools that are not part of the MUA's task.
   1.444 -Furthermore, any tools that do not significantly improve the MUA's job
   1.445 -should be removed.
   1.446 -Loosely related and rarely used tools distract from the lean appearance.
   1.447 -They require maintenance work without adding much to the core task.
   1.448 -By removing these tools, the project shall become more streamlined
   1.449 -and focused.
   1.450 -In mmh, the following tools are not available anymore:
   1.451 +One goal of mmh is to remove the tools that do not significantly
   1.452 +contribute to the MUA's job.
   1.453 +Loosely related and rarely used tools distract from a lean appearance,
   1.454 +and require maintenance work without adding much to the core task.
   1.455 +By removing these tools, mmh became more streamlined and focused.
   1.456  .BU
   1.457  .Pn conflict
   1.458  was removed
   1.459  .Ci 8b235097cbd11d728c07b966cf131aa7133ce5a9
   1.460 -because it is a mail system maintenance tool that is not MUA-related.
   1.461 +because it is a mail system maintenance tool and not MUA-related.
   1.462  It even checked
   1.463  .Fn /etc/passwd
   1.464  and
   1.465 @@ -343,7 +377,7 @@
   1.466  If users like to be informed of new mail, the shell's
   1.467  .Ev MAILPATH
   1.468  variable or graphical notifications are technically more appealing.
   1.469 -Writing directly to terminals is hardly ever desired today.
   1.470 +Writing to terminals directly is hardly ever desired today.
   1.471  If, though, one prefers this approach, the standard tool
   1.472  .Pn write
   1.473  can be used in a way similar to:
   1.474 @@ -375,7 +409,7 @@
   1.475  .VS
   1.476  ls -l /var/mail/meillo
   1.477  VE
   1.478 -It did distinguish between old and new mail, but
   1.479 +Yet, it distinguished between old and new mail, but
   1.480  these details can be retrieved with
   1.481  .Pn stat (1),
   1.482  too.
   1.483 @@ -391,10 +425,10 @@
   1.484  was removed
   1.485  .Ci 916690191222433a6923a4be54b0d8f6ac01bd02
   1.486  because the tool was in conflict with the philosophy of MH.
   1.487 -It provided an interactive shell to access the features of MH,
   1.488 -but it was not just a shell tailored to the needs of mail handling.
   1.489 -Instead, it was one large program that had several MH tools built in.
   1.490 -This conflicts with the major feature of MH of being a tool chest.
   1.491 +It provided an interactive shell to access the features of MH.
   1.492 +However, it was not just a shell tailored to the needs of mail handling,
   1.493 +but one large program that had several MH tools built in.
   1.494 +This conflicted with the major feature of MH of being a tool chest.
   1.495  .Pn msh 's
   1.496  main use case had been accessing Bulletin Boards, which have ceased to
   1.497  be popular.
   1.498 @@ -416,11 +450,11 @@
   1.499  .Pn msgchk
   1.500  are assumed to be rarely used and can be implemented in different ways,
   1.501  why should one keep them?
   1.502 -Removing them streamlines mmh.
   1.503 +Removing them streamlined mmh.
   1.504  .Pn viamail 's
   1.505  use case is now partly obsolete and partly covered by
   1.506  .Pn forw ,
   1.507 -hence there's no reason to still maintain it.
   1.508 +hence there is no reason to still maintain it.
   1.509  .Pn conflict
   1.510  is not related to the mail client, and
   1.511  .Pn msh
   1.512 @@ -428,13 +462,10 @@
   1.513  These two tools might still be useful, but they should not be part of mmh.
   1.514  .P
   1.515  Finally, there is
   1.516 -.Pn slocal .
   1.517 -.Pn slocal
   1.518 -is an MDA and thus not directly MUA-related.
   1.519 -It should be removed from mmh, because including it conflicts with
   1.520 +.Pn slocal ,
   1.521 +which is an MDA and thus not directly MUA-related.
   1.522 +It should be removed from mmh because including it conflicts with
   1.523  the idea that mmh is an MUA only.
   1.524 -.Pn slocal
   1.525 -should rather become a separate project.
   1.526  However,
   1.527  .Pn slocal
   1.528  provides rule-based processing of messages, like filing them into
   1.529 @@ -456,10 +487,10 @@
   1.530  .I procmail .
   1.531  Then
   1.532  .Pn slocal
   1.533 -could be installed without the complete MH system.
   1.534 +could be installed without a complete MH system.
   1.535  Likewise, mmh users could decide to use
   1.536  .I procmail
   1.537 -without having a second, unused MDA,
   1.538 +without having a second, unused MDA, i.e.
   1.539  .Pn slocal ,
   1.540  installed.
   1.541  That appears to be conceptionally the best solution.
   1.542 @@ -469,8 +500,8 @@
   1.543  I defer the decision over
   1.544  .Pn slocal
   1.545  out of a need for deeper investigation.
   1.546 -In the meanwhile, it remains part of mmh.
   1.547 -However, its continued existence is not significant because
   1.548 +In the meanwhile, it remains part of mmh
   1.549 +as its continued existence is not significant;
   1.550  .Pn slocal
   1.551  is unrelated to the rest of the project.
   1.552  
   1.553 @@ -488,16 +519,16 @@
   1.554  .Pn mhl
   1.555  to have the files formatted.
   1.556  With MIME, this approach was not sufficient anymore.
   1.557 -MIME messages can consist of multiple parts. Some parts are not
   1.558 -directly displayable and text content might be encoded in
   1.559 -foreign charsets.
   1.560 +MIME messages can consist of multiple parts.
   1.561 +Some parts, like binary attachments or text content in foreign charsets,
   1.562 +are not directly displayable.
   1.563  .Pn show 's
   1.564  understanding of messages and
   1.565  .Pn mhl 's
   1.566  display capabilities could not cope with the task any longer.
   1.567  .P
   1.568  Instead of extending these tools, additional tools were written from
   1.569 -scratch and added to the MH tool chest.
   1.570 +scratch and were added to the MH tool chest.
   1.571  Doing so is encouraged by the tool chest approach.
   1.572  Modular design is a great advantage for extending a system,
   1.573  as new tools can be added without interfering with existing ones.
   1.574 @@ -505,7 +536,9 @@
   1.575  .Pn mhn .
   1.576  The command
   1.577  .Cl "mhn -show 42
   1.578 -would show the MIME message numbered 42.
   1.579 +had then shown the message number
   1.580 +.Fn 42 ,
   1.581 +interpreting MIME.
   1.582  With the 1.0 release of nmh in February 1999, Richard Coleman finished
   1.583  the split of
   1.584  .Pn mhn
   1.585 @@ -540,13 +573,13 @@
   1.586  .Pn mhshow ,
   1.587  whatever was more appropriate.
   1.588  .P
   1.589 -Having two similar tools for essentially the same task is redundant.
   1.590 -Usually, users would not distinguish between
   1.591 +Having two similar tools for basically the same task is redundancy.
   1.592 +Usually, users do not distinguish between
   1.593  .Pn show
   1.594  and
   1.595  .Pn mhshow
   1.596  in their daily mail reading.
   1.597 -Having two separate display programs was therefore mainly unnecessary
   1.598 +Having two separate display programs was therefore unnecessary
   1.599  from a user's point of view.
   1.600  Besides, the development of both programs needed to be in sync,
   1.601  to ensure that the programs behaved in a similar way,
   1.602 @@ -557,19 +590,19 @@
   1.603  MIME messages, although it is the other way round.
   1.604  As
   1.605  .Pn mhshow
   1.606 -had already been able to display non-MIME messages, it appeared natural
   1.607 +already had been able to display non-MIME messages, it appeared natural
   1.608  to drop
   1.609  .Pn show
   1.610  in favor of using
   1.611  .Pn mhshow
   1.612 -exclusively.
   1.613 -.Ci 4c1efddfd499300c7e74263e57d8aa137e84c853
   1.614 +exclusively
   1.615 +.Ci 4c1efddfd499300c7e74263e57d8aa137e84c853 .
   1.616  Removing
   1.617  .Pn show
   1.618 -is no loss in function, because functionally
   1.619 +is no loss in function, because
   1.620  .Pn mhshow
   1.621  covers it completely.
   1.622 -The old behavior of
   1.623 +Yet, the old behavior of
   1.624  .Pn show
   1.625  can still be emulated with the simple command line:
   1.626  .VS
   1.627 @@ -586,27 +619,24 @@
   1.628  It is clear that such a rename may confuse future developers when
   1.629  trying to understand the history.
   1.630  Nevertheless, I consider the convenience on the user's side,
   1.631 -to call
   1.632 -.Pn show
   1.633 -when they want a message to be displayed, to outweigh the inconvenience
   1.634 -on the developer's side when understanding the project history.
   1.635 +to outweigh the inconvenience for understanding the evolution
   1.636 +of the tools.
   1.637  .P
   1.638  To prepare for the transition,
   1.639  .Pn mhshow
   1.640  was reworked to behave more like
   1.641  .Pn show
   1.642 -first.
   1.643 -(cf. Sec.
   1.644 -.Cf mhshow )
   1.645 +first (cf. Sec.
   1.646 +.Cf mhshow ).
   1.647  .\" XXX code commits?
   1.648  Once the tools behaved more alike, the replacing appeared to be
   1.649  even more natural.
   1.650  Today, mmh's new
   1.651  .Pn show
   1.652 -has become the one single message display program once more,
   1.653 +has become the one single message display program once again,
   1.654  with the difference
   1.655  that today it handles MIME messages as well as non-MIME messages.
   1.656 -The outcome of the transition is one program less to maintain,
   1.657 +The outcomes of the transition are one program less to maintain,
   1.658  no second display program for users to deal with,
   1.659  and less system complexity.
   1.660  .P
   1.661 @@ -645,16 +675,16 @@
   1.662  Additionally, there is the cost of choice itself.
   1.663  The code complexity directly affects the developers.
   1.664  Less tested code affects both users and developers.
   1.665 -The problem of choice affects the users, for once by having to choose,
   1.666 +The problem of choice affects the users, for once by having to choose
   1.667  but also by more complex interfaces that require more documentation.
   1.668  Whenever options add few advantages but increase the complexity of the
   1.669  system, they should be considered for removal.
   1.670  I have reduced the number of project-specific configure options from 
   1.671 -fifteen to three.
   1.672 +15 to 3.
   1.673  
   1.674  .U3 "Mail Transfer Facilities
   1.675  .P
   1.676 -With the removal of the mail transfer facilities five configure
   1.677 +With the removal of the mail transfer facilities 5 configure
   1.678  options vanished:
   1.679  .P
   1.680  The switches
   1.681 @@ -664,7 +694,7 @@
   1.682  had activated the support for transfer encryption and authentication.
   1.683  .\" XXX cf
   1.684  .\" XXX gruende kurz wiederholen
   1.685 -This is not needed anymore.
   1.686 +They are not needed anymore.
   1.687  .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3
   1.688  .Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b
   1.689  .P
   1.690 @@ -673,11 +703,11 @@
   1.691  The configure switch
   1.692  .Sw --enable-pop
   1.693  activated the message retrieval facility.
   1.694 -The code area that would be conditionally compiled in for TLS and SASL
   1.695 -support had been small.
   1.696 -The conditionally compiled code area for POP support had been much larger.
   1.697 -Whereas the code base changes would only slightly change on toggling
   1.698 -TLS or SASL support, it changed much on toggling POP support.
   1.699 +Whereas the code area that had been conditionally compiled in
   1.700 +for TLS and SASL support was small,
   1.701 +the conditionally compiled code area for POP support was much larger.
   1.702 +The code base had only changed slightly on toggling TLS or SASL
   1.703 +support but it had changed much on toggling POP support.
   1.704  The changes in the code base could hardly be overviewed.
   1.705  By having POP support togglable, a second code base had been created,
   1.706  one that needed to be tested.
   1.707 @@ -689,12 +719,12 @@
   1.708  .P
   1.709  Two other options only specified default configuration values:
   1.710  .Sw --with-mts
   1.711 -defined the default transport service.
   1.712 -.Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
   1.713 +defined the default transport service
   1.714 +.Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 .
   1.715  With
   1.716  .Sw --with-smtpservers
   1.717 -default SMTP servers could be specified.
   1.718 -.Ci 128545e06224233b7e91fc4c83f8830252fe16c9
   1.719 +default SMTP servers could be specified
   1.720 +.Ci 128545e06224233b7e91fc4c83f8830252fe16c9 .
   1.721  Both of them became irrelevant when the SMTP transport service was removed.
   1.722  .\" XXX code ref
   1.723  In mmh, all messages are handed over to
   1.724 @@ -712,38 +742,29 @@
   1.725  the configure option
   1.726  .Sw --with-hash-backup
   1.727  to change the default to the hash character `\f(CW#\fP'.
   1.728 -The choice was probably personal preference, because first, the
   1.729 -option was named
   1.730 -.Sw --with-backup-prefix.
   1.731 -and had the prefix character as argument.
   1.732 -But giving the hash character as argument caused too many problems
   1.733 -for Autoconf,
   1.734 -thus the option was limited to use the hash character as the default prefix.
   1.735 -This supports the assumption, that the choice for the hash was
   1.736 -personal preference only.
   1.737 -Being related or not, words that start with the hash character
   1.738 +This choice was probably personal preference, but,
   1.739 +being related or not, words that start with the hash character
   1.740  introduce a comment in the Unix shell.
   1.741  Thus, the command line
   1.742  .Cl "rm #13 #15
   1.743  calls
   1.744  .Pn rm
   1.745 -without arguments because the first hash character starts the comment
   1.746 +without arguments because the first hash character starts a comment
   1.747  that reaches until the end of the line.
   1.748  To delete the backup files,
   1.749  .Cl "rm ./#13 ./#15"
   1.750  needs to be used.
   1.751 -Using the hash as backup prefix can be seen as a precaution against
   1.752 -data loss.
   1.753 +Thus, using the hash as backup prefix may be seen as a precaution
   1.754 +against backup loss.
   1.755  .P
   1.756  First, I removed the configure option but added the profile entry
   1.757 -.Pe backup-prefix ,
   1.758 -which allows to specify an arbitrary string as backup prefix.
   1.759 -.Ci 6c40d481d661d532dd527eaf34cebb6d3f8ed086
   1.760 -Profile entries are the common method to change mmh's behavior.
   1.761 +.Pe Backup-Prefix ,
   1.762 +which allowed to specify an arbitrary string as backup prefix
   1.763 +.Ci 6c40d481d661d532dd527eaf34cebb6d3f8ed086 .
   1.764  This change did not remove the choice but moved it to a location where
   1.765 -it suited better.
   1.766 +it suited better, in my eyes.
   1.767  .P
   1.768 -Eventually, however, the new trash folder concept
   1.769 +Eventually however, the new trash folder concept
   1.770  (cf. Sec.
   1.771  .Cf trash-folder )
   1.772  removed the need for the backup prefix completely.
   1.773 @@ -780,21 +801,22 @@
   1.774  posix 1992
   1.775  .]
   1.776  respectively.)
   1.777 -As a first step, these two tools were hard-coded as defaults.
   1.778 -.Ci 5d43a99db70c12a673028c7758c20cbe3e13ef5f
   1.779 +As a first step, these two tools were hard-coded as defaults
   1.780 +.Ci 5d43a99db70c12a673028c7758c20cbe3e13ef5f .
   1.781  Not changed were the
   1.782  .Pe editor
   1.783  and
   1.784  .Pe moreproc
   1.785  profile entries, which allowed the user to override the system defaults.
   1.786 -Later, the concept was reworked to respect the standard environment
   1.787 -variables
   1.788 +Later, the concept was reworked again to respect the standard
   1.789 +environment variables
   1.790  .Ev VISUAL
   1.791  and
   1.792  .Ev PAGER
   1.793  if they are set.
   1.794  Today, mmh determines the editor to use in the following order,
   1.795 -taking the first available and non-empty item:
   1.796 +taking the first available and non-empty item
   1.797 +.Ci f85f4b7ae62e3d05a945dcd46ead51f0a2a89a9b :
   1.798  .LI 1
   1.799  Environment variable
   1.800  .Ev MMHEDITOR
   1.801 @@ -811,10 +833,8 @@
   1.802  Command
   1.803  .Pn vi .
   1.804  .LP
   1.805 -.Ci f85f4b7ae62e3d05a945dcd46ead51f0a2a89a9b
   1.806 -.P
   1.807 -The pager to use is determined in a similar order,
   1.808 -also taking the first available and non-empty item:
   1.809 +The pager to use is determined in a similar order
   1.810 +.Ci 0c4214ea2aec6497d0d67b436bbee9bc1d225f1e :
   1.811  .LI 1
   1.812  Environment variable
   1.813  .Ev MMHPAGER
   1.814 @@ -830,99 +850,98 @@
   1.815  Command
   1.816  .Pn more .
   1.817  .LP
   1.818 -.Ci 0c4214ea2aec6497d0d67b436bbee9bc1d225f1e
   1.819 -.P
   1.820  By respecting the
   1.821  .Ev VISUAL /\c
   1.822  .Ev EDITOR
   1.823  and
   1.824  .Ev PAGER
   1.825  environment variables,
   1.826 -the new behavior confirms better to the common style on Unix systems.
   1.827 -Additionally, the new approach is more uniform and clearer to users.
   1.828 +the new behavior complies with the common style on Unix systems.
   1.829 +It is more uniform and clearer for users.
   1.830  
   1.831  
   1.832  .U3 "ndbm
   1.833  .P
   1.834  .Pn slocal
   1.835 -used to depend on
   1.836 -.I ndbm ,
   1.837 -a database library.
   1.838 -The database is used to store the `\fLMessage-ID\fP's of all
   1.839 -messages delivered.
   1.840 -This enables
   1.841 +used to depend on the database library
   1.842 +.I ndbm .
   1.843 +The database is used to store the
   1.844 +.Hd Message-ID
   1.845 +header field values of all messages delivered.
   1.846 +This enabled
   1.847  .Pn slocal
   1.848  to suppress delivering the same message to the same user twice.
   1.849 -(This features was enabled by the
   1.850 +This features was enabled by the
   1.851  .Sw -suppressdup
   1.852 -switch.)
   1.853 +switch.
   1.854  .P
   1.855 -A variety of versions of the database library exist.
   1.856 +As a variety of versions of the database library exist,
   1.857  .[
   1.858  wolter unix incompat notes dbm
   1.859  .]
   1.860 -Complicated autoconf code was needed to detect them correctly.
   1.861 +complicated autoconf code was needed to detect them correctly.
   1.862  Furthermore, the configure switches
   1.863  .Sw --with-ndbm=ARG
   1.864  and
   1.865  .Sw --with-ndbmheader=ARG
   1.866  were added to help with difficult setups that would
   1.867 -not be detected automatically or correctly.
   1.868 +not be detected automatically or not correctly.
   1.869  .P
   1.870  By removing the suppress duplicates feature of
   1.871  .Pn slocal ,
   1.872  the dependency on
   1.873  .I ndbm
   1.874 -vanished and 120 lines of complex autoconf code could be saved.
   1.875 -.Ci ecd6d6a20cb7a1507e3a20d6c4cb3a1cf14c6bbf
   1.876 -The change removed functionality too, but that is minor to the
   1.877 -improvement by dropping the dependency and the complex autoconf code.
   1.878 +vanished and 120 lines of complex autoconf code could be saved
   1.879 +.Ci ecd6d6a20cb7a1507e3a20d6c4cb3a1cf14c6bbf .
   1.880 +The change removed functionality but that is considered minor to the
   1.881 +improvement of dropping the dependency and the complex autoconf code.
   1.882  .\" XXX argument: slocal ist sowieso nicht teil vom mmh kern
   1.883  
   1.884 -.U3 "mh-e Support
   1.885 +.U3 "MH-E Support
   1.886  .P
   1.887  The configure option
   1.888  .Sw --disable-mhe
   1.889 -was removed when the mh-e support was reworked. 
   1.890 -Mh-e is the Emacs front-end to MH.
   1.891 +was removed when the MH-E support was reworked. 
   1.892 +MH-E is the Emacs front-end to MH.
   1.893 +.[
   1.894 +mh-e emacs website
   1.895 +.]
   1.896  It requires MH to provide minor additional functions.
   1.897  The
   1.898  .Sw --disable-mhe
   1.899 -configure option could switch these extensions off.
   1.900 -After removing the support for old versions of mh-e,
   1.901 +configure option had switched off these extensions.
   1.902 +After removing the support for old versions of MH-E,
   1.903  only the
   1.904  .Sw -build
   1.905  switches of
   1.906  .Pn forw
   1.907  and
   1.908  .Pn repl
   1.909 -are left to be mh-e extensions.
   1.910 +are left to be MH-E extensions.
   1.911  They are now always built in because they add little code and complexity.
   1.912  In consequence, the
   1.913  .Sw --disable-mhe
   1.914  configure option was removed
   1.915 -.Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643
   1.916 -Removing the option removed a second code setup that would have
   1.917 -needed to be tested.
   1.918 -.\" XXX datum?
   1.919 -This change was first accomplished in nmh and thereafter merged into mmh.
   1.920 -.P
   1.921 -The interface changes in mmh require mh-e to be adjusted in order
   1.922 -to be able to use mmh as back-end.
   1.923 -This will require minor changes to mh-e, but removing the
   1.924 -.Sw -build
   1.925 -switches would require more rework.
   1.926 +.Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643 .
   1.927 +Dropping the option also removed a variant of the code base
   1.928 +that would have needed to be tested.
   1.929 +This change was undertaken in January 2012 in nmh and
   1.930 +thereafter merged into mmh.
   1.931 +
   1.932  
   1.933  .U3 "Masquerading
   1.934  .P
   1.935  The configure option
   1.936  .Sw --enable-masquerade
   1.937  could take up to three arguments:
   1.938 -`draft_from', `mmailid', and `username_extension'.
   1.939 +.Ar draft_from ,
   1.940 +.Ar mmailid ,
   1.941 +and
   1.942 +.Ar username_extension .
   1.943  They activated different types of address masquerading.
   1.944  All of them were implemented in the SMTP-speaking
   1.945  .Pn post
   1.946 -command, which provided an MSA.
   1.947 +command.
   1.948  Address masquerading is an MTA's task and mmh does not cover
   1.949  this field anymore.
   1.950  Hence, true masquerading needs to be implemented in the external MTA.
   1.951 @@ -935,8 +954,10 @@
   1.952  .I username
   1.953  to
   1.954  .I fakeusername
   1.955 -mapping, based on the password file's GECOS field.
   1.956 -The man page
   1.957 +mapping, based on the
   1.958 +.Fn passwd 's
   1.959 +GECOS field.
   1.960 +Nmh's man page
   1.961  .Mp mh-tailor (5)
   1.962  described the use case as being the following:
   1.963  .QS
   1.964 @@ -965,17 +986,24 @@
   1.965  environment variable, to it.
   1.966  This provided support for the
   1.967  .I user-extension
   1.968 -feature of qmail and the similar
   1.969 +feature of qmail
   1.970 +.[ [
   1.971 +sill qmail handbook
   1.972 +.], p. 141]
   1.973 +and the similar
   1.974  .I "plussed user
   1.975 -processing of sendmail.
   1.976 -The decision to remove this username_extension masquerading was
   1.977 -motivated by the fact that
   1.978 +processing of Sendmail.
   1.979 +.[ [
   1.980 +sendmail costales
   1.981 +.], p. 476]
   1.982 +The decision to remove this username_extension masquerading
   1.983 +was motivated by the fact that
   1.984  .Pn spost
   1.985 -had not supported it already.
   1.986 -.Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9
   1.987 -Username extensions are possible in mmh, but less convenient to use.
   1.988 +had not supported it yet.
   1.989 +Username extensions can be used in mmh, but less convenient.
   1.990  .\" XXX covered by next paragraph
   1.991  .\" XXX format file %(getenv USERNAME_EXTENSION)
   1.992 +.Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9
   1.993  .P
   1.994  The
   1.995  .I draft_from
   1.996 @@ -985,20 +1013,19 @@
   1.997  .Hd From
   1.998  header field as SMTP envelope sender.
   1.999  Sender addresses could be replaced completely.
  1.1000 -.Ci b14ea6073f77b4359aaf3fddd0e105989db9
  1.1001  Mmh offers a kind of masquerading similar in effect, but
  1.1002  with technical differences.
  1.1003  As mmh does not transfer messages itself, the local MTA has final control
  1.1004 -over the sender's address. Any masquerading mmh introduces may be reverted
  1.1005 -by the MTA.
  1.1006 +over the sender's address.
  1.1007 +Any masquerading mmh introduces may be reverted by the MTA.
  1.1008  In times of pedantic spam checking, an MTA will take care to use
  1.1009  sensible envelope sender addresses to keep its own reputation up.
  1.1010  Nonetheless, the MUA can set the
  1.1011  .Hd From
  1.1012 -header field and thereby propose
  1.1013 -a sender address to the MTA.
  1.1014 +header field and thereby propose a sender address to the MTA.
  1.1015  The MTA may then decide to take that one or generate the canonical sender
  1.1016  address for use as envelope sender address.
  1.1017 +.Ci b14ea6073f77b4359aaf3fddd0e105989db9
  1.1018  .P
  1.1019  In mmh, the MTA will always extract the recipient and sender from the
  1.1020  message header (\c
  1.1021 @@ -1015,12 +1042,13 @@
  1.1022  Two configure options remain in mmh.
  1.1023  One is the locking method to use:
  1.1024  .Sw --with-locking=[dot|fcntl|flock|lockf] .
  1.1025 -The idea of removing all methods except the portable dot locking
  1.1026 +The idea of removing all methods except the portable
  1.1027 +.I "dot locking
  1.1028  and having that one as the default is appealing, but this change
  1.1029  requires deeper technical investigation into the topic.
  1.1030  The other option,
  1.1031  .Sw --enable-debug ,
  1.1032 -compiles the programs with debugging symbols and does not strip them.
  1.1033 +compiles the programs with debugging symbols.
  1.1034  This option is likely to stay.
  1.1035  
  1.1036  
  1.1037 @@ -1028,11 +1056,14 @@
  1.1038  
  1.1039  .H2 "Command Line Switches
  1.1040  .P
  1.1041 -The command line switches of MH tools are similar to the X Window style.
  1.1042 +The command line switches of MH tools follow a style similar to
  1.1043 +the X Window System style.
  1.1044  .\" XXX ref
  1.1045 -They consist of a single dash (`\fL-\fP') followed by a word.
  1.1046 +The switches consist of a single dash (`\fL-\fP') followed by a word.
  1.1047 +For example
  1.1048 +.Cl -truncate .
  1.1049  To ease typing, the word can be abbreviated, given the remaining
  1.1050 -prefix remains unambiguous.
  1.1051 +prefix is unambiguous.
  1.1052  If no other switch starts with the letter `t', then any of
  1.1053  .Cl "-truncate" ,
  1.1054  .Cl "-trunc" ,
  1.1055 @@ -1060,16 +1091,15 @@
  1.1056  Switches change the behavior of programs.
  1.1057  Programs that do one thing in one way require no switches.
  1.1058  In most cases, doing something in exactly one way is too limiting.
  1.1059 -If there is basically one task to accomplish, but it should be done
  1.1060 -in various ways, switches are a good approach to alter the behavior
  1.1061 -of a program.
  1.1062 +If one task should be accomplished in various ways,
  1.1063 +switches are a good approach to alter the behavior of a program.
  1.1064  Changing the behavior of programs provides flexibility and customization
  1.1065 -to users, but at the same time it complicates the code, documentation and
  1.1066 -usage of the program.
  1.1067 +to users, but at the same time it complicates the code,
  1.1068 +the documentation, and the usage of the program.
  1.1069  .\" XXX: Ref
  1.1070  Therefore, the number of switches should be kept small.
  1.1071 -A small set of well-chosen switches does no harm.
  1.1072 -But usually, the number of switches increases over time.
  1.1073 +A small set of well-chosen switches is best.
  1.1074 +Usually, the number of switches increases over time.
  1.1075  Already in 1985, Rose and Romine have identified this as a major
  1.1076  problem of MH:
  1.1077  .[ [
  1.1078 @@ -1087,11 +1117,11 @@
  1.1079  suffers mightily from this.
  1.1080  .QE
  1.1081  .P
  1.1082 -Being reluctant to adding new switches \(en or `options',
  1.1083 -as Rose and Romine call them \(en is one part of a counter-action,
  1.1084 +Being reluctant to adding new switches (or \fIoptions\fP,
  1.1085 +as Rose and Romine call them) is one part of a counter-action,
  1.1086  the other part is removing hardly used switches.
  1.1087 -Nmh's tools had lots of switches already implemented,
  1.1088 -hence, cleaning up by removing some of them was the more important part
  1.1089 +Nmh's tools have lots of switches already implemented.
  1.1090 +Hence, cleaning up by removing some of them was the more important part
  1.1091  of the counter-action.
  1.1092  Removing existing functionality is always difficult because it
  1.1093  breaks programs that use these functions.
  1.1094 @@ -1105,7 +1135,10 @@
  1.1095  Rose and Romine added in a footnote,
  1.1096  ``[...]
  1.1097  .Pn send
  1.1098 -will no doubt acquire an endless number of switches in the years to come.''
  1.1099 +will no doubt acquire an endless number of switches in the years to come''
  1.1100 +.[ [
  1.1101 +rose romine real work
  1.1102 +.], p. 12].
  1.1103  Although clearly humorous, the comment points to the nature of the problem.
  1.1104  Refusing to add any new switches would encounter the problem at its root,
  1.1105  but this is not practical.
  1.1106 @@ -1123,20 +1156,21 @@
  1.1107  At the time of writing, no more than 4 visible switches and 1 hidden switch
  1.1108  have remained in mmh's
  1.1109  .Pn send .
  1.1110 -These numbers include two generic switches,
  1.1111 +These numbers include the two generic switches,
  1.1112  .Sw -help
  1.1113  and
  1.1114  .Sw -Version .
  1.1115 +.P
  1.1116  Hidden switches are ones not documented.
  1.1117  In mmh, 12 tools have hidden switches.
  1.1118  9 of them are
  1.1119  .Sw -debug
  1.1120  switches, the other 6 provide special interfaces for internal use.
  1.1121  .P
  1.1122 -The figure displays the number of switches for each of the tools
  1.1123 +The following figure displays the number of switches for each of the tools
  1.1124  that is available in both nmh and mmh.
  1.1125  The tools are sorted by the number of switches they had in nmh.
  1.1126 -Visible and hidden switches were counted,
  1.1127 +Both visible and hidden switches were counted,
  1.1128  but not the generic help and version switches.
  1.1129  Whereas in the beginning of the project, the average tool had 11 switches,
  1.1130  now it has no more than 5 \(en only half as many.
  1.1131 @@ -1158,39 +1192,37 @@
  1.1132  I looked through the
  1.1133  .Mp mh-chart (7)
  1.1134  man page to identify the tools with apparently too many switches.
  1.1135 -Then considering the value of each of the switches by examining
  1.1136 -the tool's man page and source code, aided by recherche and testing.
  1.1137 -This way, the removal of functions was suggested by the aim to reduce
  1.1138 -the number of switches per command.
  1.1139 +Then I considered the benefit of each switch by examining
  1.1140 +the tool's man page and source code, aided by literature research
  1.1141 +and testing.
  1.1142  
  1.1143  
  1.1144  .U3 "Draft Folder Facility
  1.1145  .P
  1.1146  A change early in the project was the complete transition from
  1.1147 -the single draft message to the draft folder facility.
  1.1148 -.Ci 337338b404931f06f0db2119c9e145e8ca5a9860
  1.1149 +the single draft message to the draft folder facility
  1.1150 +.Ci 337338b404931f06f0db2119c9e145e8ca5a9860 .
  1.1151  .\" XXX ref to section ...
  1.1152  The draft folder facility was introduced in the mid-eighties, when
  1.1153  Rose and Romine called it a ``relatively new feature''.
  1.1154  .[
  1.1155  rose romine real work
  1.1156  .]
  1.1157 -Since then, the facility had existed but was inactive by default.
  1.1158 -The default activation and the related rework of the tools made it
  1.1159 -possible to remove the
  1.1160 +Since then, the facility was included, inactive by default.
  1.1161 +By making it permanently active and by related rework of the tools, the
  1.1162  .Sw -[no]draftfolder ,
  1.1163  and
  1.1164  .Sw -draftmessage
  1.1165 -switches from
  1.1166 +switches could be removed from
  1.1167  .Pn comp ,
  1.1168  .Pn repl ,
  1.1169  .Pn forw ,
  1.1170  .Pn dist ,
  1.1171  .Pn whatnow ,
  1.1172  and
  1.1173 -.Pn send .
  1.1174 -.Ci 337338b404931f06f0db2119c9e145e8ca5a9860
  1.1175 -The only flexibility removed with this change is having multiple
  1.1176 +.Pn send
  1.1177 +.Ci 337338b404931f06f0db2119c9e145e8ca5a9860 .
  1.1178 +The only flexibility lost with this change is having multiple
  1.1179  draft folders within one profile.
  1.1180  I consider this a theoretical problem only.
  1.1181  At the same time, the
  1.1182 @@ -1202,9 +1234,9 @@
  1.1183  .Pn send
  1.1184  was removed.
  1.1185  The special treatment of \fIthe\fP draft message became irrelevant after
  1.1186 -the rework of the draft system.
  1.1187 +the rework of the draft system
  1.1188  (cf. Sec.
  1.1189 -.Cf draft-folder )
  1.1190 +.Cf draft-folder ).
  1.1191  Furthermore,
  1.1192  .Pn comp
  1.1193  no longer needs a
  1.1194 @@ -1220,14 +1252,15 @@
  1.1195  had the switches
  1.1196  .Sw -[no]inplace
  1.1197  to either annotate the message in place and thus preserve hard links,
  1.1198 -or annotate a copy to replace the original message, breaking hard links.
  1.1199 +or annotate a copy to replace the original message.
  1.1200 +The latter approach broke hard links.
  1.1201  Following the assumption that linked messages should truly be the
  1.1202 -same message, and annotating it should not break the link, the
  1.1203 +same message and annotating it should not break the link, the
  1.1204  .Sw -[no]inplace
  1.1205  switches were removed and the previous default
  1.1206  .Sw -inplace
  1.1207 -was made the only behavior.
  1.1208 -.Ci c8195849d2e366c569271abb0f5f60f4ebf0b4d0
  1.1209 +was made the definitive behavior
  1.1210 +.Ci c8195849d2e366c569271abb0f5f60f4ebf0b4d0 .
  1.1211  The
  1.1212  .Sw -[no]inplace
  1.1213  switches of
  1.1214 @@ -1235,13 +1268,13 @@
  1.1215  .Pn forw ,
  1.1216  and
  1.1217  .Pn dist
  1.1218 -could be removed, too, as they were simply passed through to
  1.1219 +could be removed, as well, as they were simply passed through to
  1.1220  .Pn anno .
  1.1221  .P
  1.1222  .Pn burst
  1.1223  also had
  1.1224  .Sw -[no]inplace
  1.1225 -switches, but with different meaning.
  1.1226 +switches, but with a different meaning.
  1.1227  With
  1.1228  .Sw -inplace ,
  1.1229  the digest had been replaced by the table of contents (i.e. the
  1.1230 @@ -1249,7 +1282,7 @@
  1.1231  after this message, renumbering all following messages.
  1.1232  Also, any trailing text of the digest was lost, though,
  1.1233  in practice, it usually consists of an end-of-digest marker only.
  1.1234 -Nontheless, this behavior appeared less elegant than the
  1.1235 +Nonetheless, this behavior appeared less elegant than the
  1.1236  .Sw -noinplace
  1.1237  behavior, which already had been the default.
  1.1238  Nmh's
  1.1239 @@ -1284,68 +1317,64 @@
  1.1240  In consequence, the following two lines equaled:
  1.1241  .VS
  1.1242  scan -form scan.mailx
  1.1243 -scan -format "`cat .../scan.mailx`"
  1.1244 +scan -format "`cat /path/to/scan.mailx`"
  1.1245  VE
  1.1246  The
  1.1247  .Sw -format
  1.1248  switches were dropped in favor for extending the
  1.1249  .Sw -form
  1.1250 -switches.
  1.1251 -.Ci f51956be123db66b00138f80464d06f030dbb88d
  1.1252 -If their argument starts with an equal sign (`='),
  1.1253 +switches
  1.1254 +.Ci f51956be123db66b00138f80464d06f030dbb88d .
  1.1255 +If their argument starts with an equal sign (`\fL=\fP'),
  1.1256  then the rest of the argument is taken as a format string,
  1.1257  otherwise the arguments is treated as the name of a format file.
  1.1258  Thus, now the following two lines equal:
  1.1259  .VS
  1.1260  scan -form scan.mailx
  1.1261 -scan -form "=`cat .../scan.mailx`"
  1.1262 +scan -form "=`cat /path/to/scan.mailx`"
  1.1263  VE
  1.1264  This rework removed the prefix collision between
  1.1265  .Sw -form
  1.1266  and
  1.1267  .Sw -format .
  1.1268 -Now, typing
  1.1269 -.Sw -fo
  1.1270 -suffices to specify form or format string.
  1.1271 +Typing `\fL-fo\fP' is sufficient to specify form file or format string.
  1.1272  .P
  1.1273  The different meaning of
  1.1274  .Sw -format
  1.1275  for
  1.1276 +.Pn forw
  1.1277 +and
  1.1278  .Pn repl
  1.1279 -and
  1.1280 -.Pn forw
  1.1281  was removed in mmh.
  1.1282  .Pn forw
  1.1283  was completely switched to MIME-type forwarding, thus removing the
  1.1284 -.Sw -[no]format .
  1.1285 -.Ci 6e271608b7b9c23771523f88d23a4d3593010cf1
  1.1286 +.Sw -[no]format
  1.1287 +.Ci 6e271608b7b9c23771523f88d23a4d3593010cf1 .
  1.1288  For
  1.1289  .Pn repl ,
  1.1290  the
  1.1291  .Sw -[no]format
  1.1292  switches were reworked to
  1.1293  .Sw -[no]filter
  1.1294 -switches.
  1.1295 -.Ci 67411b1f95d6ec987b4c732459e1ba8a8ac192c6
  1.1296 +switches
  1.1297 +.Ci 67411b1f95d6ec987b4c732459e1ba8a8ac192c6 .
  1.1298  The
  1.1299  .Sw -format
  1.1300  switches of
  1.1301  .Pn send
  1.1302  and
  1.1303  .Pn post ,
  1.1304 -which had a third meaning,
  1.1305 -were removed likewise.
  1.1306 -.Ci f3cb7cde0e6f10451b6848678d95860d512224b9
  1.1307 +which had a third meaning, were removed likewise
  1.1308 +.Ci f3cb7cde0e6f10451b6848678d95860d512224b9 .
  1.1309  Eventually, the ambiguity of the
  1.1310  .Sw -format
  1.1311 -switches was resolved by not anymore having any such switch in mmh.
  1.1312 +switches is resolved by not having such switches anymore in mmh.
  1.1313  
  1.1314  
  1.1315  .U3 "MIME Tools
  1.1316  .P
  1.1317 -The MIME tools, which were once part of
  1.1318 +The MIME tools, which once were part of
  1.1319  .Pn mhn
  1.1320 -.\" XXX
  1.1321  (whatever that stood for),
  1.1322  had several switches that added little practical value to the programs.
  1.1323  The
  1.1324 @@ -1354,22 +1383,22 @@
  1.1325  .Pn mhbuild
  1.1326  and
  1.1327  .Pn mhlist
  1.1328 -were removed, doing real size calculations always now
  1.1329 -.Ci 8d8f1c3abc586c005c904e52c4adbfe694d2201c ,
  1.1330 -as nmh's
  1.1331 +were removed
  1.1332 +.Ci 8d8f1c3abc586c005c904e52c4adbfe694d2201c .
  1.1333 +Real size calculations are done always now because nmh's
  1.1334  .Mp mhbuild (1)
  1.1335 -man page states
  1.1336 -``This provides an accurate count at the expense of a small delay.''
  1.1337 -This small delay is not noticable on modern systems.
  1.1338 +man page states that
  1.1339 +``This provides an accurate count at the expense of a small delay''
  1.1340 +with the small delay not being noticable on modern systems.
  1.1341  .P
  1.1342  The
  1.1343  .Sw -[no]check
  1.1344  switches were removed together with the support for
  1.1345  .Hd Content-MD5
  1.1346 -header fields [RFC\|1864].
  1.1347 -.Ci 31dc797eb5178970d68962ca8939da3fd9a8efda
  1.1348 +header fields [RFC\|1864]
  1.1349  (cf. Sec.
  1.1350  .Cf content-md5 )
  1.1351 +.Ci 31dc797eb5178970d68962ca8939da3fd9a8efda .
  1.1352  .P
  1.1353  The
  1.1354  .Sw -[no]ebcdicsafe
  1.1355 @@ -1377,16 +1406,16 @@
  1.1356  .Sw -[no]rfc934mode
  1.1357  switches of
  1.1358  .Pn mhbuild
  1.1359 -were removed because they are considered obsolete.
  1.1360 +were removed because they are considered obsolete
  1.1361  .Ci 01a3480928da485b4d6109d36d751dfa71799d58
  1.1362 -.Ci 3363e2624dce0eb8164cf8b3f1ab385c8ff72e88
  1.1363 +.Ci 3363e2624dce0eb8164cf8b3f1ab385c8ff72e88 .
  1.1364  .P
  1.1365  Content caching of external MIME parts, activated with the
  1.1366  .Sw -rcache
  1.1367  and
  1.1368  .Sw -wcache
  1.1369 -switches was completely removed.
  1.1370 -.Ci d1fefd9f614e4dc3cda16da6c69133c1b2005269
  1.1371 +switches was completely removed
  1.1372 +.Ci d1fefd9f614e4dc3cda16da6c69133c1b2005269 .
  1.1373  External MIME parts are rare today, having a caching facility
  1.1374  for them appears to be unnecessary.
  1.1375  .P
  1.1376 @@ -1396,9 +1425,9 @@
  1.1377  Therefore,
  1.1378  .Pn mhl
  1.1379  could be simplified to a large extend, reducing the number of its
  1.1380 -switches from 21 to 6.
  1.1381 +switches from 21 to 6
  1.1382  .Ci 350ad6d3542a07639213cf2a4fe524e829c1e7b6
  1.1383 -.Ci 0e46503be3c855bddaeae3843e1b659279c35d70
  1.1384 +.Ci 0e46503be3c855bddaeae3843e1b659279c35d70 .
  1.1385  
  1.1386  
  1.1387  
  1.1388 @@ -1410,31 +1439,31 @@
  1.1389  displaying the header line makes little sense.
  1.1390  Hence, the
  1.1391  .Sw -[no]header
  1.1392 -switch was removed and headers are never printed.
  1.1393 -.Ci 601cc73d1fa05ce96faa728f036d6c51b91701c7
  1.1394 +switch was removed and headers are never printed
  1.1395 +.Ci 601cc73d1fa05ce96faa728f036d6c51b91701c7 .
  1.1396  .P
  1.1397  In
  1.1398  .Pn mhlist ,
  1.1399  the
  1.1400  .Sw -[no]header
  1.1401 -switches were removed, too.
  1.1402 -.Ci b24f96523aaf60e44e04a3ffb1d22e69a13a602f
  1.1403 -But in this case headers are always printed,
  1.1404 -because the output is not self-explaining.
  1.1405 +switches were removed, as well
  1.1406 +.Ci b24f96523aaf60e44e04a3ffb1d22e69a13a602f .
  1.1407 +In this case, the headers are printed always because the output
  1.1408 +is not self-explaining.
  1.1409  .P
  1.1410  .Pn scan
  1.1411  also had
  1.1412  .Sw -[no]header
  1.1413  switches.
  1.1414 -Printing the header had been sensible until the introduction of
  1.1415 -format strings made it impossible to display the column headings.
  1.1416 +Printing this header had been sensible until the introduction of
  1.1417 +format strings made it impossible to display column headings.
  1.1418  Only the folder name and the current date remained to be printed.
  1.1419 -As this information can be perfectly retrieved by
  1.1420 +As this information can be perfectly generated with
  1.1421  .Pn folder
  1.1422  and
  1.1423  .Pn date ,
  1.1424 -consequently, the switches were removed.
  1.1425 -.Ci c477dc5d1d03fa6d9a8ab3dd3508c63cbddc044e
  1.1426 +the switches were removed
  1.1427 +.Ci c477dc5d1d03fa6d9a8ab3dd3508c63cbddc044e .
  1.1428  .P
  1.1429  By removing all
  1.1430  .Sw -header
  1.1431 @@ -1459,20 +1488,20 @@
  1.1432  .Pn dist ,
  1.1433  and
  1.1434  .Pn whatnow
  1.1435 -was removed, but it can now be replaced by specifying
  1.1436 +was removed and replaced by specifying
  1.1437  .Sw -editor
  1.1438 -with an empty argument.
  1.1439 -.Ci 75fca31a5b9d5c1a99c74ab14c94438d8852fba9
  1.1440 +with an empty argument
  1.1441 +.Ci 75fca31a5b9d5c1a99c74ab14c94438d8852fba9 .
  1.1442  (Specifying
  1.1443  .Cl "-editor /bin/true
  1.1444 -is nearly the same, only differing by the previous editor being set.)
  1.1445 +is nearly the same. It differs only in setting the previous editor.)
  1.1446  .P
  1.1447  The more important change is the removal of the
  1.1448  .Sw -nowhatnowproc
  1.1449 -switch.
  1.1450 -.Ci ee4f43cf2ef0084ec698e4e87159a94c01940622
  1.1451 -This switch had introduced an awkward behavior, as explained in nmh's
  1.1452 -man page for
  1.1453 +switch
  1.1454 +.Ci ee4f43cf2ef0084ec698e4e87159a94c01940622 .
  1.1455 +This switch had once introduced an awkward behavior,
  1.1456 +as explained in nmh's man page for
  1.1457  .Mp comp (1):
  1.1458  .QS
  1.1459  The
  1.1460 @@ -1499,15 +1528,12 @@
  1.1461  .P
  1.1462  Effectively, the
  1.1463  .Sw -nowhatnowproc
  1.1464 -switch creates only a draft message.
  1.1465 +switch caused only only a draft message to be created.
  1.1466  As
  1.1467  .Cl "-whatnowproc /bin/true
  1.1468 -causes the same behavior, the
  1.1469 +does the same, the
  1.1470  .Sw -nowhatnowproc
  1.1471  switch was removed for being redundant.
  1.1472 -Likely, the
  1.1473 -.Sw -nowhatnowproc
  1.1474 -switch was intended to be used by front-ends.
  1.1475  
  1.1476  
  1.1477  
  1.1478 @@ -1522,16 +1548,17 @@
  1.1479  and
  1.1480  .Sw -mmdf
  1.1481  switches.
  1.1482 +The behavior of
  1.1483  .Sw -mbox
  1.1484 -is the sole behavior now.
  1.1485 -.Ci 3916ab66ad5d183705ac12357621ea8661afd3c0
  1.1486 +is the sole behavior now
  1.1487 +.Ci 3916ab66ad5d183705ac12357621ea8661afd3c0 .
  1.1488  Further rework in both tools made the
  1.1489  .Sw -file
  1.1490 -switch unnecessary.
  1.1491 -.Ci ca1023716d4c2ab890696f3e41fa0d94267a940e
  1.1492 +switch unnecessary
  1.1493 +.Ci ca1023716d4c2ab890696f3e41fa0d94267a940e .
  1.1494  
  1.1495  .BU
  1.1496 -Mmh's tools will no longer clear the screen (\c
  1.1497 +Mmh's tools do no longer clear the screen (\c
  1.1498  .Pn scan 's
  1.1499  and
  1.1500  .Pn mhl 's
  1.1501 @@ -1539,12 +1566,12 @@
  1.1502  switches
  1.1503  .Ci e57b17343dcb3ff373ef4dd089fbe778f0c7c270
  1.1504  .Ci 943765e7ac5693ae177fd8d2b5a2440e53ce816e ).
  1.1505 -Neither will
  1.1506 +Neither does
  1.1507  .Pn mhl
  1.1508  ring the bell (\c
  1.1509  .Sw -[no]bell
  1.1510  .Ci e11983f44e59d8de236affa5b0d0d3067c192e24 )
  1.1511 -nor page the output itself (\c
  1.1512 +nor does it page the output itself (\c
  1.1513  .Sw -length
  1.1514  .Ci 5b9d883db0318ed2b84bb82dee880d7381f99188 ).
  1.1515  .\" XXX Ref
  1.1516 @@ -1554,16 +1581,16 @@
  1.1517  .Pn mhl
  1.1518  and
  1.1519  .Pn show /\c
  1.1520 -.Pn mhshow .
  1.1521 -.Ci 39e87a75b5c2d3572ec72e717720b44af291e88a
  1.1522 +.Pn mhshow
  1.1523 +.Ci 39e87a75b5c2d3572ec72e717720b44af291e88a .
  1.1524  
  1.1525  .BU
  1.1526  In order to avoid prefix collisions among switch names, the
  1.1527  .Sw -version
  1.1528  switch was renamed to
  1.1529  .Sw -Version
  1.1530 -(with capital `V').
  1.1531 -.Ci 32b2354dbaf4bf934936eb5b102a4a3d2fdd209a
  1.1532 +(with capital `V')
  1.1533 +.Ci 32b2354dbaf4bf934936eb5b102a4a3d2fdd209a .
  1.1534  Every program has the
  1.1535  .Sw -version
  1.1536  switch but its first three letters collided with the
  1.1537 @@ -1604,61 +1631,17 @@
  1.1538  switches of
  1.1539  .Pn scan
  1.1540  .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173
  1.1541 -is a bug fix, supported by the comments
  1.1542 +is a bug fix.
  1.1543 +This is supported by the comments
  1.1544  ``\-[no]reverse under #ifdef BERK (I really HATE this)''
  1.1545  by Rose and
  1.1546  ``Lists messages in reverse order with the `\-reverse' switch.
  1.1547 -This should be considered a bug.'' by Romine in the documentation.
  1.1548 -.\" XXX Ref: welche datei genau.
  1.1549 -The question remains why neither Rose and Romine had fixed this
  1.1550 -bug in the eighties when they wrote these comments nor has anyone
  1.1551 -thereafter.
  1.1552 +This should be considered a bug'' by Romine in the changelogs.
  1.1553 +The question remains why neither Rose nor Romine have fixed this
  1.1554 +bug in the eighties when they wrote these comments.
  1.1555  
  1.1556  
  1.1557 -.ig
  1.1558  
  1.1559 -forw: [no]dashstuffing(mhl)
  1.1560 -
  1.1561 -mhshow: [no]pause [no]serialonly
  1.1562 -
  1.1563 -mhmail: resent queued
  1.1564 -inc: snoop, (pop)
  1.1565 -
  1.1566 -mhl: [no]faceproc folder sleep
  1.1567 -	[no]dashstuffing(forw) digest list volume number issue number
  1.1568 -
  1.1569 -prompter: [no]doteof
  1.1570 -
  1.1571 -refile: [no]preserve [no]unlink [no]rmmproc
  1.1572 -
  1.1573 -send: [no]forward [no]mime [no]msgid
  1.1574 -	[no]push split [no]unique (sasl) width snoop [no]dashstuffing
  1.1575 -	attach attachformat
  1.1576 -whatnow: (noedit) attach
  1.1577 -
  1.1578 -slocal: [no]suppressdups
  1.1579 -
  1.1580 -spost: [no]filter [no]backup width [no]push idanno
  1.1581 -	[no]check(whom) whom(whom)
  1.1582 -
  1.1583 -whom: ???
  1.1584 -
  1.1585 -..
  1.1586 -
  1.1587 -
  1.1588 -.ig
  1.1589 -
  1.1590 -.P
  1.1591 -In the best case, all switches are unambiguous on the first character,
  1.1592 -or on the three-letter prefix for the `no' variants.
  1.1593 -Reducing switch prefix collisions, shortens the necessary prefix length
  1.1594 -the user must type.
  1.1595 -Having less switches helps best.
  1.1596 -
  1.1597 -..
  1.1598 -
  1.1599 -
  1.1600 -.\" XXX: whatnow prompt commands
  1.1601  
  1.1602  
  1.1603  
  1.1604 @@ -1670,7 +1653,7 @@
  1.1605  increasingly extended.
  1.1606  New features entered the project and became alternatives to the
  1.1607  existing behavior.
  1.1608 -Relics from several decades have gathered in the code base,
  1.1609 +Relics from several decades have gathered in the code base
  1.1610  but seldom obsolete features were dropped.
  1.1611  This section describes the removing of old code
  1.1612  and the modernizing of the default setup.
  1.1613 @@ -1681,15 +1664,14 @@
  1.1614  
  1.1615  .H2 "Code Relics
  1.1616  .P
  1.1617 -My position regarding the removal of obsolete functions of mmh,
  1.1618 -.\" XXX ``in order to remove old code,''
  1.1619 +My position regarding the removal of obsolete code
  1.1620  is much more revolutional than the nmh community appreciates.
  1.1621 -Working on an experimental version, I was quickly able to drop
  1.1622 -functionality I considered ancient.
  1.1623 +Working on an experimental version, I was able to quickly drop
  1.1624 +functionality that I considered ancient.
  1.1625  The need for consensus with peers would have slowed this process down.
  1.1626  Without the need to justify my decisions, I was able to rush forward.
  1.1627 +.P
  1.1628  In December 2011, Paul Vixie motivated the nmh developers to just
  1.1629 -.\" XXX ugs
  1.1630  do the work:
  1.1631  .[
  1.1632  paul vixie edginess nmh-workers
  1.1633 @@ -1724,7 +1706,7 @@
  1.1634  .\" XXX ``exp. work'' schon oft gesagt
  1.1635  
  1.1636  
  1.1637 -.U3 "Forking
  1.1638 +.U3 "Process Forking
  1.1639  .P
  1.1640  Being a tool chest, MH creates many processes.
  1.1641  In earlier times
  1.1642 @@ -1766,8 +1748,8 @@
  1.1643  I replaced all calls to
  1.1644  .Fu vfork()
  1.1645  with calls to
  1.1646 -.Fu fork() .
  1.1647 -.Ci 40821f5c1316e9205a08375e7075909cc9968e7d
  1.1648 +.Fu fork()
  1.1649 +.Ci 40821f5c1316e9205a08375e7075909cc9968e7d .
  1.1650  .P
  1.1651  Related to the costs of
  1.1652  .Fu fork()
  1.1653 @@ -1779,14 +1761,14 @@
  1.1654  .Fu fork()
  1.1655  calls in the code were wrapped into loops to retry the
  1.1656  .Fu fork()
  1.1657 -several times, to increase the chances to succeed, eventually.
  1.1658 +several times, to increase the chances to succeed eventually.
  1.1659  On modern systems, a failing
  1.1660  .Fu fork()
  1.1661  call is unusual.
  1.1662  Hence, in the rare case when
  1.1663  .Fu fork()
  1.1664 -fails, mmh programs simply abort.
  1.1665 -.Ci 5fbf37ee68e018998ada61eeab73e035b26834b6
  1.1666 +fails, mmh programs simply abort
  1.1667 +.Ci 5fbf37ee68e018998ada61eeab73e035b26834b6 .
  1.1668  
  1.1669  
  1.1670  .U3 "Header Fields
  1.1671 @@ -1799,13 +1781,13 @@
  1.1672  messages [RFC\|4880, RFC\|3156].
  1.1673  Hence, the support for
  1.1674  .Hd Encrypted
  1.1675 -header fields is removed in mmh.
  1.1676 -.Ci 064527f7b57ab050e5af13e15ad99aeeab125857
  1.1677 +header fields is removed in mmh
  1.1678 +.Ci 064527f7b57ab050e5af13e15ad99aeeab125857 .
  1.1679  .BU
  1.1680  The native support for
  1.1681  .Hd Face
  1.1682 -header fields has been removed, as well.
  1.1683 -.Ci 8e5be81f784682822f5e868c1bf3c8624682bd23
  1.1684 +header fields has been removed, as well
  1.1685 +.Ci 8e5be81f784682822f5e868c1bf3c8624682bd23 .
  1.1686  This feature is similar to the
  1.1687  .Hd X-Face
  1.1688  header field in its intent,
  1.1689 @@ -1818,7 +1800,7 @@
  1.1690  .Hd X-Face ,
  1.1691  although it re-uses the
  1.1692  .Hd Face
  1.1693 -header field.
  1.1694 +header field name.
  1.1695  It was invented in 2005 and supports colored PNG images.
  1.1696  None of the Face systems described here is popular today.
  1.1697  Hence, mmh has no direct support for them.
  1.1698 @@ -1840,26 +1822,29 @@
  1.1699  .Hd Content-MD5
  1.1700  header field superfluous.
  1.1701  Not a single one out of 4\|200 messages from two decades
  1.1702 -in an nmh-workers mailing list archive contains a
  1.1703 +in the nmh-workers mailing list archive
  1.1704 +.[
  1.1705 +nmh-workers mailing list archive website
  1.1706 +.]
  1.1707 +contains a
  1.1708  .Hd Content-MD5
  1.1709  header field.
  1.1710  Neither did any of the 60\|000 messages in my personal mail storage.
  1.1711 -Removing the support for this header field,
  1.1712 +Removing the support for this header field
  1.1713 +.Ci 31dc797eb5178970d68962ca8939da3fd9a8efda ,
  1.1714  removed the last place where MD5 computation was needed.
  1.1715 -.Ci 31dc797eb5178970d68962ca8939da3fd9a8efda
  1.1716  Hence, the MD5 code could be removed as well.
  1.1717  Over 500 lines of code vanished by this one change.
  1.1718  
  1.1719  
  1.1720  .U3 "MMDF maildrop support
  1.1721  .P
  1.1722 -This type of format is conceptionally similar to the mbox format,
  1.1723 +This type of maildrop format is conceptionally similar to the mbox format,
  1.1724  but uses a different message delimiter (`\fL\\1\\1\\1\\1\fP',
  1.1725  commonly written as `\fL^A^A^A^A\fP', instead of `\fLFrom\0\fP').
  1.1726  Mbox is the de-facto standard maildrop format on Unix,
  1.1727  whereas the MMDF maildrop format is now forgotten.
  1.1728 -By dropping the MMDF maildrop format support,
  1.1729 -mbox became the only packed mailbox format supported in mmh.
  1.1730 +Mbox remains as the only packed mailbox format, supported in mmh.
  1.1731  .P
  1.1732  The simplifications within the code were moderate.
  1.1733  Mainly, the reading and writing of MMDF mailbox files was removed.
  1.1734 @@ -1867,12 +1852,12 @@
  1.1735  .Pn packf
  1.1736  and
  1.1737  .Pn rcvpack
  1.1738 -could be removed.
  1.1739 -.Ci 3916ab66ad5d183705ac12357621ea8661afd3c0
  1.1740 +could be removed
  1.1741 +.Ci 3916ab66ad5d183705ac12357621ea8661afd3c0 .
  1.1742  In the message parsing function
  1.1743  .Fn sbr/m_getfld.c ,
  1.1744 -knowledge of MMDF packed mail boxes was removed.
  1.1745 -.Ci 684ec30d81e1223a282764452f4902ed4ad1c754
  1.1746 +knowledge of MMDF packed mail boxes was removed
  1.1747 +.Ci 684ec30d81e1223a282764452f4902ed4ad1c754 .
  1.1748  Further code structure simplifications may be possible there,
  1.1749  because only one single packed mailbox format is left to be supported.
  1.1750  I have not worked on them yet because
  1.1751 @@ -1887,9 +1872,7 @@
  1.1752  The program
  1.1753  .Pn prompter
  1.1754  queries the user to fill in a message form.
  1.1755 -When used by
  1.1756 -.Pn comp
  1.1757 -as
  1.1758 +When used as
  1.1759  .Cl "comp -editor prompter" ,
  1.1760  the resulting behavior is similar to
  1.1761  .Pn mailx .
  1.1762 @@ -1940,9 +1923,8 @@
  1.1763  .H2 "Attachments
  1.1764  .P
  1.1765  The mind model of email attachments is unrelated to MIME.
  1.1766 -Although the MIME RFCs [RFC\|2045\(enRFC\|2049] define the technical
  1.1767 -requirements for having attachments, they do not mention the word
  1.1768 -attachment.
  1.1769 +Although the MIME RFCs [RFC\|2045\(en2049] define the technical
  1.1770 +requirements for having attachments, they do not mention the term.
  1.1771  Instead of attachments, MIME talks about ``multi-part message bodies''
  1.1772  [RFC\|2045], a more general concept.
  1.1773  Multi-part messages are messages
  1.1774 @@ -1951,7 +1933,7 @@
  1.1775  [RFC\|2046].
  1.1776  MIME keeps its descriptions generic;
  1.1777  it does not imply specific usage models.
  1.1778 -One usage model became prevalent: attachments.
  1.1779 +Today, one usage model is prevalent: attachments.
  1.1780  The idea is having a main text document with files of arbitrary kind
  1.1781  attached to it.
  1.1782  In MIME terms, this is a multi-part message having a text part first
  1.1783 @@ -1970,11 +1952,11 @@
  1.1784  .U3 "Composing MIME Messages
  1.1785  .P
  1.1786  In order to improve the situation on the message composing side,
  1.1787 -Jon Steinhart had added an attachment system to nmh in 2002.
  1.1788 -.Ci 7480dbc14bc90f2d872d434205c0784704213252
  1.1789 +Jon Steinhart had added an attachment system to nmh in 2002
  1.1790 +.Ci 7480dbc14bc90f2d872d434205c0784704213252 .
  1.1791  In the file
  1.1792  .Fn docs/README-ATTACHMENTS ,
  1.1793 -he described his motivation to do so as such:
  1.1794 +he described his motivation to do so:
  1.1795  .QS
  1.1796  Although nmh contains the necessary functionality for MIME message
  1.1797  handing [sic!], the interface to this functionality is pretty obtuse.
  1.1798 @@ -1992,18 +1974,17 @@
  1.1799  are sent.
  1.1800  .QE
  1.1801  .LP
  1.1802 -Unfortunately, the attachment system,
  1.1803 -like any new facilities in nmh,
  1.1804 +Unfortunately, the attachment system, like every new facilities in nmh,
  1.1805  was inactive by default.
  1.1806  .P
  1.1807 -During my work in Argentina, I tried to improve the attachment system.
  1.1808 -But, because of great opposition in the nmh community,
  1.1809 -my patch died as a proposal on the mailing list, after long discussions.
  1.1810 +During my time in Argentina, I tried to improve the attachment system.
  1.1811 +But, after long discussions my patch died as a proposal on the
  1.1812 +mailing list because of great opposition in the nmh community.
  1.1813  .[
  1.1814  nmh-workers attachment proposal
  1.1815  .]
  1.1816 -In January 2012, I extended the patch and applied it to mmh.
  1.1817 -.Ci 8ff284ff9167eff8f5349481529332d59ed913b1
  1.1818 +In January 2012, I extended the patch and applied it to mmh
  1.1819 +.Ci 8ff284ff9167eff8f5349481529332d59ed913b1 .
  1.1820  In mmh, the attachment system is active by default.
  1.1821  Instead of command line switches, the
  1.1822  .Pe Attachment-Header
  1.1823 @@ -2041,11 +2022,11 @@
  1.1824  .Cl "Attach: +bob 30 42" ,
  1.1825  the given messages in the specified folder will be attached.
  1.1826  This allowed to simplify
  1.1827 -.Pn forw .
  1.1828 -.Ci f41f04cf4ceca7355232cf7413e59afafccc9550
  1.1829 +.Pn forw
  1.1830 +.Ci f41f04cf4ceca7355232cf7413e59afafccc9550 .
  1.1831  .P
  1.1832  Closely related to attachments is non-ASCII text content,
  1.1833 -because it requires MIME too.
  1.1834 +because it requires MIME as well.
  1.1835  In nmh, the user needed to call `mime' at the WhatNow prompt
  1.1836  to have the draft converted to MIME.
  1.1837  This was necessary whenever the draft contained non-ASCII characters.
  1.1838 @@ -2084,13 +2065,13 @@
  1.1839  compositions directly, the full power of
  1.1840  .Pn mhbuild
  1.1841  can still be accessed.
  1.1842 -Given no attachment headers are included, the user can create
  1.1843 +Given no attachment headers are included, users can create
  1.1844  .Pn mhbuild
  1.1845  composition drafts like in nmh.
  1.1846 -Then, at the WhatNow prompt, he needs to invoke
  1.1847 +Then, at the WhatNow prompt, they can invoke
  1.1848  .Cl "edit mhbuild
  1.1849 -to convert it to MIME.
  1.1850 -Because the resulting draft does neither contain non-ASCII characters
  1.1851 +to convert the draft to MIME.
  1.1852 +Because the resulting draft neither contains non-ASCII characters
  1.1853  nor has it attachment headers, the attachment system will not touch it.
  1.1854  .P
  1.1855  The approach taken in mmh is tailored towards today's most common case:
  1.1856 @@ -2104,24 +2085,26 @@
  1.1857  .Pn mhbuild
  1.1858  composition drafts had one notable advantage over attachment headers:
  1.1859  The user provides the appropriate MIME types for files to include.
  1.1860 -The attachment system needs to find out the correct MIME type itself.
  1.1861 -This is a difficult task, yet it spares the user irritating work.
  1.1862 +The new attachment system needs to find out the correct MIME type itself.
  1.1863 +This is a difficult task.
  1.1864  Determining the correct MIME type of content is partly mechanical,
  1.1865  partly intelligent work.
  1.1866  Forcing the user to find out the correct MIME type,
  1.1867  forces him to do partly mechanical work.
  1.1868  Letting the computer do the work can lead to bad choices for difficult
  1.1869  content.
  1.1870 -For mmh, the latter option was chosen.
  1.1871 +For mmh, the latter option was chosen to spare the user the work
  1.1872 +.Ci 3baec236a39c5c89a9bda8dbd988d643a21decc6 .
  1.1873  .P
  1.1874  Determining the MIME type by the suffix of the file name is a dumb
  1.1875  approach, yet it is simple to implement and provides good results
  1.1876  for the common cases.
  1.1877 +If no MIME type can be determined, text content is sent as `text/plain',
  1.1878 +anything else under the generic fall-back type `application/octet-stream'.
  1.1879  Mmh implements this approach in the
  1.1880  .Pn print-mimetype
  1.1881 -script.
  1.1882 -.Ci 4b5944268ea0da7bb30598a27857304758ea9b44
  1.1883 -Using it is the default choice.
  1.1884 +script
  1.1885 +.Ci 4b5944268ea0da7bb30598a27857304758ea9b44 .
  1.1886  .P
  1.1887  A far better, though less portable, approach is the use of
  1.1888  .Pn file .
  1.1889 @@ -2129,41 +2112,36 @@
  1.1890  Unfortunately, its capabilities and accuracy varies from system to system.
  1.1891  Additionally, its output was only intended for human beings,
  1.1892  but not to be used by programs.
  1.1893 -It varies much.
  1.1894  Nevertheless, modern versions of GNU
  1.1895  .Pn file ,
  1.1896 -which is prevalent on the popular GNU/Linux systems,
  1.1897 +which are prevalent on the popular GNU/Linux systems,
  1.1898  provide MIME type output in machine-readable form.
  1.1899 -Although this solution is highly system-dependent,
  1.1900 +Although this solution is system-dependent,
  1.1901  it solves the difficult problem well.
  1.1902  On systems where GNU
  1.1903  .Pn file ,
  1.1904  version 5.04 or higher, is available it should be used.
  1.1905  One needs to specify the following profile entry to do so:
  1.1906 -.Ci 3baec236a39c5c89a9bda8dbd988d643a21decc6
  1.1907  .VS
  1.1908  Mime-Type-Query: file -b --mime
  1.1909  VE
  1.1910  .LP
  1.1911  Other versions of
  1.1912  .Pn file
  1.1913 -might possibly be usable with wrapper scripts to reformat the output.
  1.1914 +might possibly be usable with wrapper scripts that reformat the output.
  1.1915  The diversity among
  1.1916  .Pn file
  1.1917  implementations is great; one needs to check the local variant.
  1.1918  .P
  1.1919 -If no MIME type can be determined, text content gets sent as
  1.1920 -`text/plain' and anything else under the generic fall-back type
  1.1921 -`application/octet-stream'.
  1.1922  It is not possible in mmh to override the automatic MIME type guessing
  1.1923  for a specific file.
  1.1924  To do so, either the user would need to know in advance for which file
  1.1925 -the automatic guessing fails, or the system would require interaction.
  1.1926 +the automatic guessing fails or the system would require interaction.
  1.1927  I consider both cases impractical.
  1.1928  The existing solution should be sufficient.
  1.1929  If not, the user may always fall back to
  1.1930  .Pn mhbuild
  1.1931 -composition drafts and ignore the attachment system.
  1.1932 +composition drafts and bypass the attachment system.
  1.1933  
  1.1934  
  1.1935  .U3 "Storing Attachments
  1.1936 @@ -2208,23 +2186,22 @@
  1.1937  Tar files are not extracted automatically any more.
  1.1938  Thus, the rest of the file system will not be touched.
  1.1939  .Ci 94c80042eae3383c812d9552089953f9846b1bb6
  1.1940 -.LP
  1.1941 -Now, the outcome of mmh's
  1.1942 +.P
  1.1943 +In mmh, the result of
  1.1944  .Cl "mhstore -auto
  1.1945  can be foreseen from the output of
  1.1946  .Cl "mhlist -verbose" .
  1.1947 -.P
  1.1948 -The
  1.1949 +Although the
  1.1950  .Sw -noauto
  1.1951 -mode is seen to be more powerful but less convenient.
  1.1952 -On the other hand,
  1.1953 +mode is considered to be more powerful, it is less convenient and
  1.1954  .Sw -auto
  1.1955 -is safe now and
  1.1956 -storing attachments under their original name is intuitive.
  1.1957 +is safe now.
  1.1958 +Additionally, storing attachments under their original name
  1.1959 +is intuitive.
  1.1960  Hence,
  1.1961  .Sw -auto
  1.1962 -serves better as the default option.
  1.1963 -.Ci 3410b680416c49a7617491af38bc1929855a331d
  1.1964 +serves better as the default option
  1.1965 +.Ci 3410b680416c49a7617491af38bc1929855a331d .
  1.1966  .P
  1.1967  Files are stored into the directory given by the
  1.1968  .Pe Nmh-Storage
  1.1969 @@ -2234,12 +2211,12 @@
  1.1970  .Pe mhstore-store-*
  1.1971  profile entries.
  1.1972  .P
  1.1973 -Still, in both modes, existing files get overwritten silently.
  1.1974 +Still existing files get overwritten silently in both modes.
  1.1975  This can be considered a bug.
  1.1976  Yet, each other behavior has its draw-backs, too.
  1.1977  Refusing to replace files requires adding a
  1.1978  .Sw -force
  1.1979 -option.
  1.1980 +switch.
  1.1981  Users will likely need to invoke
  1.1982  .Pn mhstore
  1.1983  a second time with
  1.1984 @@ -2260,16 +2237,16 @@
  1.1985  MIME parts of type message/external-body are not automatically retrieved
  1.1986  anymore.
  1.1987  Instead, information on how to retrieve them is output.
  1.1988 -Not supporting this rare case saved nearly one thousand lines of code.
  1.1989 -.Ci 55e1d8c654ee0f7c45b9361ce34617983b454c32
  1.1990 +Not supporting this rare case saved nearly one thousand lines of code
  1.1991 +.Ci 55e1d8c654ee0f7c45b9361ce34617983b454c32 .
  1.1992  .\" XXX mention somewhere else too: (The profile entry `nmh-access-ftp'
  1.1993  .\"     and sbr/ruserpass.c for reading ~/.netrc are gone now.)
  1.1994 -`application/octet-stream; type=tar' is not special anymore.
  1.1995 -Automatically extracting such MIME parts had been the dangerous part
  1.1996 -of the
  1.1997 +The MIME type `application/octet-stream; type=tar' is not special anymore.
  1.1998 +The automatically extracting of such MIME parts had been the
  1.1999 +dangerous part of the
  1.2000  .Sw -auto
  1.2001 -mode.
  1.2002 -.Ci 94c80042eae3383c812d9552089953f9846b1bb6
  1.2003 +mode
  1.2004 +.Ci 94c80042eae3383c812d9552089953f9846b1bb6 .
  1.2005  
  1.2006  
  1.2007  
  1.2008 @@ -2277,23 +2254,23 @@
  1.2009  .P
  1.2010  The program
  1.2011  .Pn mhshow
  1.2012 -had been written to display MIME messages.
  1.2013 +was written to display MIME messages.
  1.2014  It implemented the conceptional view of the MIME RFCs.
  1.2015  Nmh's
  1.2016  .Pn mhshow
  1.2017 -handled each MIME part independently, presenting them separately
  1.2018 +handles each MIME part independently, presenting them separately
  1.2019  to the user.
  1.2020  This does not match today's understanding of email attachments,
  1.2021  where displaying a message is seen to be a single, integrated operation.
  1.2022  Today, email messages are expected to consist of a main text part
  1.2023  plus possibly attachments.
  1.2024 -They are not any more seen to be arbitrary MIME hierarchies with
  1.2025 +They are no more seen to be arbitrary MIME hierarchies with
  1.2026  information on how to display the individual parts.
  1.2027  I adjusted
  1.2028  .Pn mhshow 's
  1.2029  behavior to the modern view on the topic.
  1.2030  .P
  1.2031 -One should note that this section completely ignores the original
  1.2032 +(One should note that this section completely ignores the original
  1.2033  .Pn show
  1.2034  program, because it was not capable to display MIME messages
  1.2035  and is no longer part of mmh.
  1.2036 @@ -2304,7 +2281,7 @@
  1.2037  .Pn show
  1.2038  in mmh, this section uses the name
  1.2039  .Pn mhshow ,
  1.2040 -in order to avoid confusion.
  1.2041 +in order to avoid confusion.)
  1.2042  .P
  1.2043  In mmh, the basic idea is that
  1.2044  .Pn mhshow
  1.2045 @@ -2312,19 +2289,19 @@
  1.2046  Therefore,
  1.2047  .Pn mhshow
  1.2048  invokes a pager session for all its output,
  1.2049 -whenever it prints to a terminal.
  1.2050 -.Ci a4197ea6ffc5c1550e8b52d5a654bcaaaee04a4e
  1.2051 +whenever it prints to a terminal
  1.2052 +.Ci a4197ea6ffc5c1550e8b52d5a654bcaaaee04a4e .
  1.2053  In consequence,
  1.2054  .Pn mhl
  1.2055 -does no more invoke a pager.
  1.2056 -.Ci 0e46503be3c855bddaeae3843e1b659279c35d70
  1.2057 +does no more invoke a pager
  1.2058 +.Ci 0e46503be3c855bddaeae3843e1b659279c35d70 .
  1.2059  With
  1.2060  .Pn mhshow
  1.2061  replacing the original
  1.2062  .Pn show ,
  1.2063 -output from
  1.2064 +the output of
  1.2065  .Pn mhl
  1.2066 -does not go to the terminal directly, but through
  1.2067 +no longer goes to the terminal directly, but through
  1.2068  .Pn mhshow .
  1.2069  Hence,
  1.2070  .Pn mhl
  1.2071 @@ -2335,30 +2312,32 @@
  1.2072  The only place in mmh, where a pager is invoked is
  1.2073  .Pn mhshow .
  1.2074  .P
  1.2075 +In the intended setup, only text content is be displayed,
  1.2076 +in a single pager session.
  1.2077 +Non-text content needs to be converted to text by appropriate
  1.2078 +.Pe mhshow-show-*
  1.2079 +profile entries before, if this is possible and wanted.
  1.2080 +A common example for this are PDF files.
  1.2081 +.ig \"XXX
  1.2082  .Pe mhshow-show-*
  1.2083  profile entries can be used to display MIME parts in a specific way.
  1.2084 -For instance, PDF and Postscript files could be converted to plain text
  1.2085  to display them in the terminal.
  1.2086 -In mmh, MIME parts will always be displayed serially.
  1.2087 +..
  1.2088 +In mmh, MIME parts are always displayed serially.
  1.2089  The request to display the MIME type `multipart/parallel' in parallel
  1.2090  is ignored.
  1.2091 -It is simply treated as `multipart/mixed'.
  1.2092 -.Ci d0581ba306a7299113a346f9b4c46ce97bc4cef6
  1.2093 -This could already be requested with the, now removed,
  1.2094 +It is simply treated as `multipart/mixed'
  1.2095 +.Ci d0581ba306a7299113a346f9b4c46ce97bc4cef6 .
  1.2096 +This was already possible to requested with the, now removed,
  1.2097  .Sw -serialonly
  1.2098  switch of
  1.2099  .Pn mhshow .
  1.2100  As MIME parts are always processed exclusively, i.e. serially,
  1.2101 -the `%e' escape in
  1.2102 +the `\fL%e\fP' escape in
  1.2103  .Pe mhshow-show-*
  1.2104 -profile entries became useless and was thus removed.
  1.2105 -.Ci a20d405db09b7ccca74d3e8c57550883da49e1ae
  1.2106 +profile entries became useless and was thus removed
  1.2107 +.Ci a20d405db09b7ccca74d3e8c57550883da49e1ae .
  1.2108  .P
  1.2109 -In the intended setup, only text content would be displayed.
  1.2110 -Non-text content would be converted to text by appropriate
  1.2111 -.Pe mhshow-show-*
  1.2112 -profile entries before, if possible and wanted.
  1.2113 -All output would be displayed in a single pager session.
  1.2114  Other kinds of attachments are ignored.
  1.2115  With
  1.2116  .Pe mhshow-show-*
  1.2117 @@ -2370,12 +2349,12 @@
  1.2118  to the native charset.
  1.2119  Therefore,
  1.2120  .Pe mhshow-charset-*
  1.2121 -profile entries used to be needed.
  1.2122 +profile entries were needed.
  1.2123  In mmh, the conversion is performed automatically by piping the
  1.2124  text through the
  1.2125  .Pn iconv
  1.2126 -command, if necessary.
  1.2127 -.Ci 2433122c20baccb10b70b49c04c6b0497b5b3b60
  1.2128 +command, if necessary
  1.2129 +.Ci 2433122c20baccb10b70b49c04c6b0497b5b3b60 .
  1.2130  Custom
  1.2131  .Pe mhshow-show-*
  1.2132  rules for textual content might need a
  1.2133 @@ -2411,9 +2390,9 @@
  1.2134  .P
  1.2135  Nmh offers no direct support for digital signatures and message encryption.
  1.2136  This functionality needed to be added through third-party software.
  1.2137 -In mmh, the functionality should be included because it
  1.2138 -is a part of modern email and likely wanted by users of mmh.
  1.2139 -A fresh mmh installation should support signing and encrypting
  1.2140 +In mmh, the functionality is included because it
  1.2141 +is a part of modern email and is likely wanted by users of mmh.
  1.2142 +A fresh mmh installation supports signing and encrypting
  1.2143  out-of-the-box.
  1.2144  Therefore, Neil Rickert's
  1.2145  .Pn mhsign
  1.2146 @@ -2423,24 +2402,26 @@
  1.2147  .[
  1.2148  neil rickert mhsign mhpgp
  1.2149  .]
  1.2150 -were included into mmh
  1.2151 +were included
  1.2152  .Ci f45cdc98117a84f071759462c7ae212f4bc5ab2e
  1.2153  .Ci 58cf09aa36e9f7f352a127158bbf1c5678bc6ed8 .
  1.2154  The scripts fit well because they are lightweight and
  1.2155  similar of style to the existing tools.
  1.2156 -Additionally, no licensing difficulties appeared,
  1.2157 +Additionally, no licensing difficulties appeared
  1.2158  as they are part of the public domain.
  1.2159  .P
  1.2160  .Pn mhsign
  1.2161  handles the signing and encrypting part.
  1.2162  It comprises about 250 lines of shell code and interfaces between
  1.2163 -.Pn gnupg
  1.2164 -and
  1.2165 -the MH system.
  1.2166 +.Pn gnupg "
  1.2167 +.[
  1.2168 +gnupg website
  1.2169 +.]
  1.2170 +and the MH system.
  1.2171  It was meant to be invoked manually at the WhatNow prompt, but in mmh,
  1.2172  .Pn send
  1.2173  invokes
  1.2174 -.pn mhsign
  1.2175 +.Pn mhsign
  1.2176  automatically
  1.2177  .Ci c7b5e1df086bcc37ff40163ee67571f076cf6683 .
  1.2178  Special header fields were introduced to request this action.
  1.2179 @@ -2449,14 +2430,14 @@
  1.2180  header field,
  1.2181  .Pn send
  1.2182  will initiate the signing.
  1.2183 -The signing key is either chosen automatically or specified by the
  1.2184 +The signing key is either chosen automatically or it is specified by the
  1.2185  .Pe Pgpkey
  1.2186  profile entry.
  1.2187  .Pn send
  1.2188 -always create signatures using the PGP/MIME standard, \" REF XXX
  1.2189 -but by manually invoking
  1.2190 -.Pn mhsign ,
  1.2191 -old-style non-MIME signatures can be created as well.
  1.2192 +always create signatures using the PGP/MIME standard [RFC\|4880],
  1.2193 +but by invoking
  1.2194 +.Pn mhsign
  1.2195 +manually, old-style non-MIME signatures can be created as well.
  1.2196  To encrypt an outgoing message, the draft needs to contain an
  1.2197  .Hd Enc
  1.2198  header field.
  1.2199 @@ -2475,7 +2456,7 @@
  1.2200  is the companion to
  1.2201  .Pn mhsign .
  1.2202  It verifies signatures and decrypts messages.
  1.2203 -Encrypted messages can either be temporarily decrypted for display
  1.2204 +Encrypted messages can be either temporarily decrypted and displayed
  1.2205  or permanently decrypted and stored into the current folder.
  1.2206  Currently,
  1.2207  .Pn mhpgp
  1.2208 @@ -2484,21 +2465,21 @@
  1.2209  .Pn show
  1.2210  and
  1.2211  .Pn mhstore
  1.2212 -to verify signatures and decrypt messages as needs
  1.2213 -is planned but not realized yet.
  1.2214 +to verify signatures and decrypt messages as needed
  1.2215 +is planned but not yet realized.
  1.2216  .P
  1.2217 -Both scripts were written for nmh, hence they needed to be adjust
  1.2218 +Both scripts were written for nmh.
  1.2219 +Hence they needed to be adjust
  1.2220  according to the differences between nmh and mmh.
  1.2221  For instance, they use the backup prefix no longer.
  1.2222  Furthermore, compatibility support for old PGP features was dropped.
  1.2223  .P
  1.2224  The integrated message signing and encrypting support is one of the
  1.2225  most recent features in mmh.
  1.2226 -It has not yet had the time to mature.
  1.2227 +It has not had the time to mature.
  1.2228  User feedback and personal experience need to be accumulated to
  1.2229  direct the further development of the facility.
  1.2230 -Although the feedback and experience is still missing,
  1.2231 -it seems to be worthwhile to consider adding
  1.2232 +Already it seems to be worthwhile to consider adding
  1.2233  .Sw -[no]sign
  1.2234  and
  1.2235  .Sw -[no]enc
  1.2236 @@ -2527,9 +2508,9 @@
  1.2237  .Id draft-folder
  1.2238  .P
  1.2239  In the beginning, MH had the concept of a draft message.
  1.2240 -This is the file
  1.2241 +This was a file named
  1.2242  .Fn draft
  1.2243 -in the MH directory, which is treated special.
  1.2244 +in the MH directory, which was treated special.
  1.2245  On composing a message, this draft file was used.
  1.2246  When starting to compose another message before the former one was sent,
  1.2247  the user had to decide among:
  1.2248 @@ -2540,8 +2521,8 @@
  1.2249  .LI 3
  1.2250  Preserving the old draft by refiling it to a folder.
  1.2251  .LP
  1.2252 -It was only possible to work in alternation on multiple drafts.
  1.2253 -Therefore, the current draft needed to be refiled to a folder and
  1.2254 +Working on multiple drafts was only possible in alternation.
  1.2255 +For that, the current draft needed to be refiled to a folder and
  1.2256  another one re-used for editing.
  1.2257  Working on multiple drafts at the same time was impossible.
  1.2258  The usual approach of switching to a different MH context did not
  1.2259 @@ -2561,7 +2542,8 @@
  1.2260  the draft file at a static location.
  1.2261  This is simple in simple cases but the concept does not scale for more
  1.2262  complex cases.
  1.2263 -The concept of the draft message is too limited for the problem.
  1.2264 +The concept of the draft message is too limited for the problem
  1.2265 +it tries to solve.
  1.2266  Therefore the draft folder was introduced.
  1.2267  It is the more powerful and more natural concept.
  1.2268  The draft folder is a folder like any other folder in MH.
  1.2269 @@ -2573,7 +2555,7 @@
  1.2270  The trivial part of the work was activating the draft folder with a
  1.2271  default name.
  1.2272  I chose the name
  1.2273 -.Fn +drafts
  1.2274 +.Fn +drafts ,
  1.2275  for obvious reasons.
  1.2276  In consequence, the command line switches
  1.2277  .Sw -draftfolder
  1.2278 @@ -2584,8 +2566,8 @@
  1.2279  new concept.
  1.2280  For nearly three decades, the tools needed to support two draft handling
  1.2281  approaches.
  1.2282 -By fully switching to the draft folder, the tools could be simplified
  1.2283 -by dropping the awkward draft message handling code.
  1.2284 +By fully switching to the draft folder, the tools could be
  1.2285 +simplified by dropping the awkward draft message handling code.
  1.2286  .Sw -draft
  1.2287  switches were removed because operating on a draft message is no longer
  1.2288  special.
  1.2289 @@ -2603,11 +2585,13 @@
  1.2290  .Sw -[no]use
  1.2291  for switching between two modes:
  1.2292  .LI 1
  1.2293 -.Sw -use
  1.2294 -to modify an existing draft.
  1.2295 +Modifying an existing draft, with
  1.2296 +.Sw -use .
  1.2297  .LI 2
  1.2298 -.Sw -nouse
  1.2299 -to compose a new draft, possibly taking some existing message as template.
  1.2300 +Composing a new draft, possibly taking some existing message as template,
  1.2301 +with
  1.2302 +.Sw -nouse ,
  1.2303 +the default.
  1.2304  .LP
  1.2305  In either case, the behavior of
  1.2306  .Pn comp
  1.2307 @@ -2623,17 +2607,19 @@
  1.2308  takes the draft folder as its default folder.
  1.2309  .P
  1.2310  Dropping the draft message concept in favor for the draft folder concept,
  1.2311 -removed special cases with regular cases.
  1.2312 +replaced special cases with regular cases.
  1.2313  This simplified the source code of the tools, as well as the concepts.
  1.2314  In mmh, draft management does not break with the MH concepts
  1.2315  but applies them.
  1.2316  .Cl "scan +drafts" ,
  1.2317  for instance, is a truly natural request.
  1.2318 +.P
  1.2319  Most of the work was already performed by Rose in the eighties.
  1.2320  The original improvement of mmh is dropping the old draft message approach
  1.2321 -and thus simplifying the tools, the documentation and the system as a whole.
  1.2322 +and thus simplifying the tools, the documentation,
  1.2323 +and the system as a whole.
  1.2324  Although my part in the draft handling improvement was small,
  1.2325 -it was an important one.
  1.2326 +it was important.
  1.2327  
  1.2328  
  1.2329  .U3 "Trash Folder
  1.2330 @@ -2655,8 +2641,7 @@
  1.2331  VE
  1.2332  In such a setup, the original message could be restored
  1.2333  within the grace time interval by stripping the
  1.2334 -backup prefix from the file name.
  1.2335 -But the user could not rely on this statement.
  1.2336 +backup prefix from the file name \(en usually but not always.
  1.2337  If the last message of a folder with six messages (\fL1-6\fP) was removed,
  1.2338  message
  1.2339  .Fn 6 ,
  1.2340 @@ -2665,10 +2650,10 @@
  1.2341  If then a new message entered the same folder, it would be named with
  1.2342  the number one above the highest existing message number.
  1.2343  In this case the message would be named
  1.2344 -.Fn 6
  1.2345 -then.
  1.2346 +.Fn 6 ,
  1.2347 +reusing the number.
  1.2348  If this new message would be removed as well,
  1.2349 -then the backup of the former message is overwritten.
  1.2350 +then the backup of the former message becomes overwritten.
  1.2351  Hence, the ability to restore removed messages did not only depend on
  1.2352  the sweeping cron job but also on the removing of further messages.
  1.2353  It is undesirable to have such obscure and complex mechanisms.
  1.2354 @@ -2676,17 +2661,16 @@
  1.2355  ``Removed files are restorable within a seven-day grace time.''
  1.2356  With the addition ``... unless a message with the same name in the
  1.2357  same folder is removed before.'' the statement becomes complex.
  1.2358 -A user will hardly be able to keep track of any removal to know
  1.2359 +A user will hardly be able to keep track of all removals to know
  1.2360  if the assertion still holds true for a specific file.
  1.2361  In practice, the real mechanism is unclear to the user.
  1.2362 -The consequences of further removals are not obvious.
  1.2363  .P
  1.2364 -Furthermore, the backup files are scattered within the whole mail storage.
  1.2365 -This complicates managing them.
  1.2366 -It is possible with the help of
  1.2367 +Furthermore, the backup files were scattered within the whole mail storage.
  1.2368 +This complicated managing them.
  1.2369 +It was possible with the help of
  1.2370  .Pn find ,
  1.2371 -but everything would be more convenient
  1.2372 -if the deleted messages would be collected in one place.
  1.2373 +but everything is more convenient
  1.2374 +if the deleted messages are collected in one place.
  1.2375  .P
  1.2376  The profile entry
  1.2377  .Pe rmmproc
  1.2378 @@ -2695,27 +2679,30 @@
  1.2379  was introduced very early to improve the situation.
  1.2380  It could be set to any command, which would be executed to remove
  1.2381  the specified messages.
  1.2382 -This would override the default action described above.
  1.2383 -Refiling the to-be-removed files to a trash folder is the usual example.
  1.2384 +This had overridden the default action, described above.
  1.2385 +Refiling the to-be-removed files to a trash folder was the usual example.
  1.2386  Nmh's man page
  1.2387  .Mp rmm (1)
  1.2388  proposes to set the
  1.2389  .Pe rmmproc
  1.2390  to
  1.2391  .Cl "refile +d
  1.2392 -to move messages to the trash folder,
  1.2393 -.Fn +d ,
  1.2394 +to move messages to the trash folder
  1.2395 +.Fn +d
  1.2396  instead of renaming them with the backup prefix.
  1.2397 -The man page proposes additionally the expunge command
  1.2398 +The man page additionally proposes the expunge command
  1.2399  .Cl "rm `mhpath +d all`
  1.2400  to empty the trash folder.
  1.2401  .P
  1.2402 -Removing messages in such a way has advantages.
  1.2403 +Removing messages in such a way has advantages:
  1.2404 +.LI 1
  1.2405  The mail storage is prevented from being cluttered with removed messages
  1.2406  because they are all collected in one place.
  1.2407  Existing and removed messages are thus separated more strictly.
  1.2408 +.LI 2
  1.2409  No backup files are silently overwritten.
  1.2410 -But most important is the ability to keep removed messages in the MH domain.
  1.2411 +.LI 3
  1.2412 +Most important, however, removed messages are kept in the MH domain.
  1.2413  Messages in the trash folder can be listed like those in any other folder.
  1.2414  Deleted messages can be displayed like any other messages.
  1.2415  .Pn refile
  1.2416 @@ -2740,8 +2727,8 @@
  1.2417  .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173
  1.2418  .Ci ca0b3e830b86700d9e5e31b1784de2bdcaf58fc5
  1.2419  .P
  1.2420 -Dropping the legacy approach and converting to the new approach completely
  1.2421 -simplified the code base.
  1.2422 +Dropping the legacy approach and converting to the new approach
  1.2423 +completely, simplified the code base.
  1.2424  The relationship between
  1.2425  .Pn rmm
  1.2426  and
  1.2427 @@ -2750,8 +2737,8 @@
  1.2428  In mmh,
  1.2429  .Pn rmm
  1.2430  invokes
  1.2431 -.Pn refile ,
  1.2432 -which used to be the other way round.
  1.2433 +.Pn refile .
  1.2434 +That used to be the other way round.
  1.2435  Yet, the relationship is simpler now.
  1.2436  Loops, like described in nmh's man page for
  1.2437  .Mp refile (1),
  1.2438 @@ -2789,52 +2776,53 @@
  1.2439  .H2 "Modern Defaults
  1.2440  .P
  1.2441  Nmh has a bunch of convenience-improving features inactive by default,
  1.2442 -although one can expect every new user wanting to have them active.
  1.2443 +although one can expect every new user to want them active.
  1.2444  The reason they are inactive by default is the wish to stay compatible
  1.2445  with old versions.
  1.2446 -But what is the definition for old versions?
  1.2447 +But what are old versions?
  1.2448  Still, the highly useful draft folder facility has not been activated
  1.2449  by default although it was introduced over twenty-five years ago.
  1.2450  .[
  1.2451  rose romine real work
  1.2452  .]
  1.2453  The community seems not to care.
  1.2454 -This is one of several examples that require new users to first build up
  1.2455 -a profile before they can access the modern features of nmh.
  1.2456 +.P
  1.2457 +In nmh, new users are required to first build up
  1.2458 +a profile before they can access the modern features.
  1.2459  Without an extensive profile, the setup is hardly usable
  1.2460  for modern emailing.
  1.2461  The point is not the customization of the setup,
  1.2462  but the need to activate generally useful facilities.
  1.2463 -.P
  1.2464 -Yet, the real problem lies less in enabling the features, as this is
  1.2465 -straight forward as soon as one knows what he wants.
  1.2466 +Yet, the real problem lies less in enabling the features,
  1.2467 +as this is straight forward as soon as one knows what he wants.
  1.2468  The real problem is that new users need deep insight into the project
  1.2469 -to find out about inactive features nmh already provides.
  1.2470 +to discover the available but inactive features.
  1.2471  To give an example, I needed one year of using nmh
  1.2472  before I became aware of the existence of the attachment system.
  1.2473  One could argue that this fact disqualifies my reading of the
  1.2474  documentation.
  1.2475  If I would have installed nmh from source back then, I could agree.
  1.2476 -Yet, I had used a prepackaged version and had expected that it would
  1.2477 +Yet, I had used a pre-packaged version and had expected that it would
  1.2478  just work.
  1.2479  Nevertheless, I had been convinced by the concepts of MH already
  1.2480  and I am a software developer,
  1.2481  still I required a lot of time to discover the cool features.
  1.2482  How can we expect users to be even more advanced than me,
  1.2483 -just to allow them use MH in a convenient and modern way?
  1.2484 +just to enable them to use MH in a convenient and modern way?
  1.2485  Unless they are strongly convinced of the concepts, they will fail.
  1.2486  I have seen friends of me giving up disappointed
  1.2487  before they truly used the system,
  1.2488  although they had been motivated in the beginning.
  1.2489 -They suffer hard enough to get used to the tool chest approach,
  1.2490 +New users suffer hard enough to get used to the tool chest approach,
  1.2491  we developers should spare them further inconveniences.
  1.2492  .P
  1.2493  Maintaining compatibility for its own sake is bad,
  1.2494 -because the code base collects more and more compatibility code.
  1.2495 +because the code base will collect more and more compatibility code.
  1.2496  Sticking to the compatibility code means remaining limited;
  1.2497  whereas adjusting to the changes renders the compatibility unnecessary.
  1.2498 -Keeping unused alternatives in the code is a bad choice as they likely
  1.2499 -gather bugs, by not being well tested.
  1.2500 +Keeping unused alternatives in the code for longer than a short
  1.2501 +grace time is a bad choice as they likely
  1.2502 +gather bugs by not being constantly tested.
  1.2503  Also, the increased code size and the greater number of conditions
  1.2504  increase the maintenance costs.
  1.2505  If any MH implementation would be the back-end of widespread
  1.2506 @@ -2842,42 +2830,42 @@
  1.2507  important.
  1.2508  Yet, it appears as if this is not the case.
  1.2509  Hence, compatibility is hardly important for technical reasons.
  1.2510 -Its importance originates rather from personal reasons.
  1.2511 +Its importance originates from personal reasons rather.
  1.2512  Nmh's user base is small and old.
  1.2513 -Changing the interfaces would cause inconvenience to long-term users of MH.
  1.2514 -It would force them to change their many years old MH configurations.
  1.2515 +Changing the interfaces causes inconvenience to long-term users of MH.
  1.2516 +It forces them to change their many years old MH configurations.
  1.2517  I do understand this aspect, but by sticking to the old users,
  1.2518 -new users are kept away.
  1.2519 -Yet, the future lies in new users.
  1.2520 +new users are kept from entering the world of MH.
  1.2521 +But the future lies in new users.
  1.2522  In consequence, mmh invites new users by providing a convenient
  1.2523  and modern setup, readily usable out-of-the-box.
  1.2524  .P
  1.2525  In mmh, all modern features are active by default and many previous
  1.2526 -approaches are removed or only accessible in manual ways.
  1.2527 +approaches are removed or only accessible in a manual way.
  1.2528  New default features include:
  1.2529  .BU
  1.2530  The attachment system (\c
  1.2531 -.Hd Attach ).
  1.2532 -.Ci 8ff284ff9167eff8f5349481529332d59ed913b1
  1.2533 +.Hd Attach )
  1.2534 +.Ci 8ff284ff9167eff8f5349481529332d59ed913b1 .
  1.2535  .BU
  1.2536  The draft folder facility (\c
  1.2537 -.Fn +drafts ).
  1.2538 -.Ci 337338b404931f06f0db2119c9e145e8ca5a9860
  1.2539 +.Fn +drafts )
  1.2540 +.Ci 337338b404931f06f0db2119c9e145e8ca5a9860 .
  1.2541  .BU
  1.2542  The unseen sequence (`u')
  1.2543  .Ci c2360569e1d8d3678e294eb7c1354cb8bf7501c1
  1.2544 -and the sequence negation prefix (`!').
  1.2545 -.Ci db74c2bd004b2dc9bf8086a6d8bf773ac051f3cc
  1.2546 +and the sequence negation prefix (`!')
  1.2547 +.Ci db74c2bd004b2dc9bf8086a6d8bf773ac051f3cc .
  1.2548  .BU
  1.2549 -Quoting the original message in the reply.
  1.2550 -.Ci 67411b1f95d6ec987b4c732459e1ba8a8ac192c6
  1.2551 +Quoting the original message in the reply
  1.2552 +.Ci 67411b1f95d6ec987b4c732459e1ba8a8ac192c6 .
  1.2553  .BU
  1.2554 -Forwarding messages using MIME.
  1.2555 -.Ci 6e271608b7b9c23771523f88d23a4d3593010cf1
  1.2556 +Forwarding messages using MIME
  1.2557 +.Ci 6e271608b7b9c23771523f88d23a4d3593010cf1 .
  1.2558  .LP
  1.2559 -In consequence, a setup with a profile that defines only the path to the
  1.2560 +An mmh setup with a profile that defines only the path to the
  1.2561  mail storage, is already convenient to use.
  1.2562 -Again, Paul Vixie's ``edginess'' call supports the direction I took:
  1.2563 +Again, Paul Vixie's supports the direction I took:
  1.2564  ``the `main branch' should just be modern''.
  1.2565  .[
  1.2566  paul vixie edginess nmh-workers