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