Mercurial > docs > master
comparison ch03.roff @ 100:6ae7dc4a3a02
Included changes proposed by Lydi.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Tue, 19 Jun 2012 10:54:50 +0200 |
parents | d894191d7a33 |
children | e8e6adb14beb |
comparison
equal
deleted
inserted
replaced
99:468c2bdc6b1a | 100:6ae7dc4a3a02 |
---|---|
8 Current changes of nmh will be mentioned only as side notes. | 8 Current changes of nmh will be mentioned only as side notes. |
9 .\" XXX where do I discuss the parallel development of nmh? | 9 .\" XXX where do I discuss the parallel development of nmh? |
10 | 10 |
11 | 11 |
12 | 12 |
13 .H1 "Stream-lining | 13 .H1 "Stream-Lining |
14 | 14 |
15 .P | 15 .P |
16 MH had been considered an all-in-one system for mail handling. | 16 MH had been considered an all-in-one system for mail handling. |
17 The community around nmh has a similar understanding. | 17 The community around nmh has a similar understanding. |
18 In fundamental difference, mmh shall be a MUA only. | 18 In fundamental difference, mmh shall be a MUA only. |
27 I believe that it is best to use such specialized tools instead of | 27 I believe that it is best to use such specialized tools instead of |
28 providing the same function again as a side-component in the project. | 28 providing the same function again as a side-component in the project. |
29 .P | 29 .P |
30 Doing something well, requires to focus on a small set of specific aspects. | 30 Doing something well, requires to focus on a small set of specific aspects. |
31 Under the assumption that focused development produces better results | 31 Under the assumption that focused development produces better results |
32 in the particular area, specialized projects will likely be superior | 32 in the particular area, specialized projects will be superior |
33 in their field of focus. | 33 in their field of focus. |
34 Hence, all-in-one mail system projects \(en no matter if monolithic | 34 Hence, all-in-one mail system projects \(en no matter if monolithic |
35 or modular \(en will never be the best choice in any of the fields. | 35 or modular \(en will never be the best choice in any of the fields. |
36 Even in providing the best consistent all-in-one system they are likely | 36 Even in providing the best consistent all-in-one system they are likely |
37 to be beaten by projects that focus only on integrating existing mail | 37 to be beaten by projects that focus only on integrating existing mail |
45 The concrete situation for MH-based mail systems is even tougher, | 45 The concrete situation for MH-based mail systems is even tougher, |
46 given the small and aged community, including both developers and users, | 46 given the small and aged community, including both developers and users, |
47 it has. | 47 it has. |
48 .P | 48 .P |
49 In consequence, I believe that the available development resources | 49 In consequence, I believe that the available development resources |
50 should be focused on the point where MH is most unique. | 50 should focus on the point where MH is most unique. |
51 This is clearly the user interface \(en the MUA. | 51 This is clearly the user interface \(en the MUA. |
52 Peripheral parts should be removed to stream-line mmh for the MUA task. | 52 Peripheral parts should be removed to stream-line mmh for the MUA task. |
53 | 53 |
54 | 54 |
55 .H2 "Removal of the Mail Transfer Facilities | 55 .H2 "Mail Transfer Facilities |
56 .P | 56 .P |
57 In contrast to nmh, which also provides mail submission and mail retrieval | 57 In contrast to nmh, which also provides mail submission and mail retrieval |
58 agents, mmh is a MUA only. | 58 agents, mmh is a MUA only. |
59 This general difference in the view on the character of nmh | 59 This general difference initiated the development of mmh. |
60 initiated the development of mmh. | |
61 Removing the mail transfer facilities had been the first work task | 60 Removing the mail transfer facilities had been the first work task |
62 in the mmh project. | 61 in the mmh project. |
63 .P | 62 .P |
64 The MSA is called \fIMessage Transfer Service\fP (MTS) in nmh. | 63 The Mail Submission Agent (MSA) is called |
64 \fIMessage Transfer Service\fP (MTS) in nmh. | |
65 The facility established network connections and spoke SMTP to submit | 65 The facility established network connections and spoke SMTP to submit |
66 messages for relay to the outside world. | 66 messages for relay to the outside world. |
67 This part was implemented by the | 67 This part was implemented by the |
68 .Pn post | 68 .Pn post |
69 command. | 69 command. |
93 exec qmail-inject | 93 exec qmail-inject |
94 VE | 94 VE |
95 The requirement to parse the recipient addresses out of the message header | 95 The requirement to parse the recipient addresses out of the message header |
96 is likely to be removed in the future. | 96 is likely to be removed in the future. |
97 Then mmh would give the recipient addresses as command line arguments. | 97 Then mmh would give the recipient addresses as command line arguments. |
98 This is clearly the better interface, but mmh does not provide it yet. | 98 This appears to be the better interface. |
99 .\" XXX implement it | 99 .\" XXX implement it |
100 .P | 100 .P |
101 To retrieve mail, the | 101 To retrieve mail, the |
102 .Pn inc | 102 .Pn inc |
103 command established network connections | 103 command acted as Mail Retrieval Agent (MRA). |
104 It established network connections | |
104 and spoke POP3 to retrieve mail from remote servers. | 105 and spoke POP3 to retrieve mail from remote servers. |
105 As with mail submission, the network connections required encryption and | 106 As with mail submission, the network connections required encryption and |
106 authentication, thus TLS and SASL were added. | 107 authentication, thus TLS and SASL were added. |
107 Support for message retrieval through IMAP will become necessary | 108 Support for message retrieval through IMAP will become necessary |
108 to be added soon, too, and so on for any changes in mail transfer. | 109 to be added soon, too, and likewise for any other changes in mail transfer. |
109 Mmh has dropped the support for retrieving mail from remote locations. | 110 Not so for mmh because it has dropped the support for retrieving mail |
111 from remote locations. | |
110 .Ci ab7b48411962d26439f92f35ed084d3d6275459c | 112 .Ci ab7b48411962d26439f92f35ed084d3d6275459c |
111 Instead, it depends on an external tool to cover this task. | 113 Instead, it depends on an external tool to cover this task. |
112 In mmh there exist two paths for messages to enter mmh's mail storage: | 114 In mmh exist two paths for messages to enter mmh's mail storage: |
113 (1) Mail can be incorporate with | 115 (1) Mail can be incorporated with |
114 .Pn inc | 116 .Pn inc |
115 from the system maildrop, or (2) with | 117 from the system maildrop, or (2) with |
116 .Pn rcvstore | 118 .Pn rcvstore |
117 by reading them, one at a time, from the standard input. | 119 by reading them, one at a time, from the standard input. |
118 .P | 120 .P |
119 With the removal of the MSA and MRA, mmh converted from an all-in-one | 121 With the removal of the MSA and MRA, mmh converted from an all-in-one |
120 mail system to being a MUA only. | 122 mail system to being a MUA only. |
121 Following the Unix philosophy, it now focuses on one job and | |
122 tries to do that one well. | |
123 Not only the programs follow that tenet but also the project itself does so. | |
124 Now, of course, mmh depends on third-party software. | 123 Now, of course, mmh depends on third-party software. |
125 An external MSA is required to transfer mail to the outside world; | 124 An external MSA is required to transfer mail to the outside world; |
126 an external MRA is required to retrieve mail from remote machines. | 125 an external MRA is required to retrieve mail from remote machines. |
127 There exist excellent implementations of such software, | 126 There exist excellent implementations of such software, |
128 which do this specific task likely better than the internal | 127 which do this specific task likely better than the internal |
135 the command line tools, for the cases when | 134 the command line tools, for the cases when |
136 .Pn more | 135 .Pn more |
137 or | 136 or |
138 .Pn less | 137 .Pn less |
139 aren't available, appears to be ridiculous. | 138 aren't available, appears to be ridiculous. |
140 Now, an MSA or MRA is more complex than a text pager | 139 Of course, MSAs and MRAs are more complex than text pagers |
141 and not necessarily available but still the concept of orthogonal | 140 and not necessarily available but still the concept of orthogonal |
142 design holds: ``Write programs that do one thing and do it well.'' | 141 design holds: ``Write programs that do one thing and do it well.'' |
143 .[ | 142 .[ |
144 mcilroy unix phil | 143 mcilroy unix phil |
145 p. 53 | 144 p. 53 |
151 to the programs but to the project itself. | 150 to the programs but to the project itself. |
152 In other words: | 151 In other words: |
153 ``Develop projects that focus on one thing and do it well.'' | 152 ``Develop projects that focus on one thing and do it well.'' |
154 Projects grown complex should be split for the same reasons programs grown | 153 Projects grown complex should be split for the same reasons programs grown |
155 complex should be split. | 154 complex should be split. |
156 If it is conceptionally more elegant to have the MSA and MRA | 155 If it is conceptionally more elegant to have the MSA and MRA as |
157 separate projects then they should be separated. | 156 separate projects then they should be separated. |
158 This is the case here, in my opinion. | 157 This is the case here, in my opinion. |
159 The RFCs propose this separation by clearly distinguishing the different | 158 The RFCs propose this separation by clearly distinguishing the different |
160 mail handling tasks. | 159 mail handling tasks. |
161 .[ | 160 .[ |
162 rfc 821 | 161 rfc 821 |
163 .] | 162 .] |
164 The small interfaces between the mail agents support the separation. | 163 The small interfaces between the mail agents support the separation. |
165 .P | 164 .P |
166 In the beginning, email had been small and simple. | 165 In the beginning, email had been small and simple. |
167 (\c | 166 At that time, |
168 .Pn /bin/mail | 167 .Pn /bin/mail |
169 had once covered anything there was to email and still had been small | 168 had covered anything there was to email and still had been small |
170 and simple.) | 169 and simple. |
171 Then the essential complexity of email increased. | 170 Later, the essential complexity of email increased. |
172 (Essential complexity is the complexity defined by the problem itself.\0 | 171 (Essential complexity is the complexity defined by the problem itself.\0 |
173 .[[ | 172 .[[ |
174 brooks no silver bullet | 173 brooks no silver bullet |
175 .]]) | 174 .]]) |
176 Email systems reacted to this change: They grew. | 175 Email systems reacted to this change: They grew. |
177 RFCs started to introduce mail agents and separated the various tasks | 176 RFCs started to introduce the concept of mail agents to separate the |
178 because the existing tasks became more extensive and new tasks appeared. | 177 various tasks because they became more extensive and new tasks appeared. |
179 Again, email systems grew, or they split parts off. | 178 As the mail systems grew even more, parts were split off. |
180 In nmh, for instance, the POP server, which the original MH had included, | 179 In nmh, for instance, the POP server, which was included in the original |
181 was removed. | 180 MH, was removed. |
182 Now is the time to go one step further and remove the MSA and MRA, too. | 181 Now is the time to go one step further and split the MSA and MRA off, too. |
183 Not only does this decrease the code size of the project, | 182 Not only does this decrease the code size of the project, |
184 but, more important, it unburdens mmh of the whole field of | 183 but, more important, it unburdens mmh of the whole field of |
185 message transfer with all its implications for the project. | 184 message transfer with all its implications for the project. |
186 There's no more need to concern with changes in network transfer. | 185 There is no more need to concern with changes in network transfer. |
187 This independence is received by depending on an external program | 186 This independence is received by depending on an external program |
188 that covers the field. | 187 that covers the field. |
189 Today, this is a reasonable exchange. | 188 Today, this is a reasonable exchange. |
190 .P | 189 .P |
191 Function can be added in three different ways: | 190 Functionality can be added in three different ways: |
192 .BU | 191 .BU |
193 Implementing the function originally in the project. | 192 Implementing the function originally in the project. |
194 .BU | 193 .BU |
195 Depending on a library that provides the function. | 194 Depending on a library that provides the function. |
196 .BU | 195 .BU |
205 but possibly limit the information exchange. | 204 but possibly limit the information exchange. |
206 External libraries are stronger connected than external programs, | 205 External libraries are stronger connected than external programs, |
207 thus information can be exchanged more flexible. | 206 thus information can be exchanged more flexible. |
208 Adding code to a project increases maintenance work. | 207 Adding code to a project increases maintenance work. |
209 .\" XXX ref | 208 .\" XXX ref |
210 Implementing complex functions originally in the project will add | 209 Implementing complex functions originally in the project adds |
211 a lot of code. | 210 a lot of code. |
212 This should be avoided if possible. | 211 This should be avoided if possible. |
213 Hence, the dependencies only change in kind, not in their existence. | 212 Hence, the dependencies only change in kind, not in their existence. |
214 In mmh, library dependencies on | 213 In mmh, library dependencies on |
215 .Pn libsasl2 | 214 .Pn libsasl2 |
247 .I mpop | 246 .I mpop |
248 and | 247 and |
249 .I fdm . | 248 .I fdm . |
250 | 249 |
251 | 250 |
252 .H2 "Removal of non-MUA Tools | 251 .H2 "Non-MUA Tools |
253 .P | 252 .P |
254 One goal of mmh is to remove the tools that are not part of the MUA's task. | 253 One goal of mmh is to remove the tools that are not part of the MUA's task. |
255 Further more, any tools that don't improve the MUA's job significantly | 254 Further more, any tools that don't improve the MUA's job significantly |
256 should be removed. | 255 should be removed. |
257 Loosely related and rarely used tools distract from the lean appearance. | 256 Loosely related and rarely used tools distract from the lean appearance. |
258 They require maintenance work without adding much to the core task. | 257 They require maintenance work without adding much to the core task. |
259 On removing these tools, the project shall become more stream-lined | 258 By removing these tools, the project shall become more stream-lined |
260 and focused. | 259 and focused. |
261 In mmh the following tools are not available anymore: | 260 In mmh the following tools are not available anymore: |
262 .BU | 261 .BU |
263 .Pn conflict | 262 .Pn conflict |
264 was removed | 263 was removed |
280 because its use case of writing to the user's terminal | 279 because its use case of writing to the user's terminal |
281 on receiving of mail is obsolete. | 280 on receiving of mail is obsolete. |
282 If users like to be informed of new mail, the shell's | 281 If users like to be informed of new mail, the shell's |
283 .Ev MAILPATH | 282 .Ev MAILPATH |
284 variable or graphical notifications are technically more appealing. | 283 variable or graphical notifications are technically more appealing. |
285 Writing directly to a terminals is hardly ever wanted today. | 284 Writing directly to terminals is hardly ever wanted today. |
286 If though one wants to have it this way, the standard tool | 285 If though one wants to have it this way, the standard tool |
287 .Pn write | 286 .Pn write |
288 can be used in a way similar to: | 287 can be used in a way similar to: |
289 .VS | 288 .VS |
290 scan -file - | write `id -un` | 289 scan -file - | write `id -un` |
310 .Pn msgchk | 309 .Pn msgchk |
311 provided hardly more information than: | 310 provided hardly more information than: |
312 .VS | 311 .VS |
313 ls -l /var/mail/meillo | 312 ls -l /var/mail/meillo |
314 VE | 313 VE |
315 It did distinguished between old and new mail, but | 314 It did distinguish between old and new mail, but |
316 this detail information and can be retrieved with | 315 this detail information can be retrieved with |
317 .Pn stat (1), | 316 .Pn stat (1), |
318 too. | 317 too. |
319 A very small shell script could be written to output the information | 318 A small shell script could be written to print the information |
320 in a similar way, if truly necessary. | 319 in a similar way, if truly necessary. |
321 As mmh's | 320 As mmh's |
322 .Pn inc | 321 .Pn inc |
323 only incorporates mail from the user's local maildrop, | 322 only incorporates mail from the user's local maildrop, |
324 and thus no data transfers over slow networks are involved, | 323 and thus no data transfers over slow networks are involved, |
342 .Pn vmh | 341 .Pn vmh |
343 and | 342 and |
344 .Pn wmh , | 343 .Pn wmh , |
345 saved more than 7\|000 lines of C code \(en | 344 saved more than 7\|000 lines of C code \(en |
346 about 15\|% of the project's original source code amount. | 345 about 15\|% of the project's original source code amount. |
347 .P | 346 Having less code \(en with equal readability, of course \(en |
348 Having less code (with equal readability, of course) | |
349 for the same functionality is an advantage. | 347 for the same functionality is an advantage. |
350 Less code means less bugs and less maintenance work. | 348 Less code means less bugs and less maintenance work. |
351 As | 349 As |
352 .Pn rcvtty | 350 .Pn rcvtty |
353 and | 351 and |
367 .P | 365 .P |
368 Finally, there's | 366 Finally, there's |
369 .Pn slocal . | 367 .Pn slocal . |
370 .Pn slocal | 368 .Pn slocal |
371 is an MDA and thus not directly MUA-related. | 369 is an MDA and thus not directly MUA-related. |
372 It should be removed, because including it is a violation | 370 It should be removed from mmh, because including it conflicts with |
373 of the idea that mmh is a MUA only. | 371 the idea that mmh is a MUA only. |
374 It should become a separate project. | 372 .Pn slocal |
373 should rather become a separate project. | |
375 However, | 374 However, |
376 .Pn slocal | 375 .Pn slocal |
377 provides rule-based processing of messages, like filing them into | 376 provides rule-based processing of messages, like filing them into |
378 different folders, which is otherwise not available in mmh. | 377 different folders, which is otherwise not available in mmh. |
379 Although | 378 Although |
380 .Pn slocal | 379 .Pn slocal |
381 does neither pull in dependencies nor does it include a separate | 380 does neither pull in dependencies nor does it include a separate |
382 technical area (cf. Sec. XXX), | 381 technical area (cf. Sec. XXX), still, |
383 still it accounts for about 1\|000 lines of code that need to be maintained. | 382 it accounts for about 1\|000 lines of code that need to be maintained. |
384 As | 383 As |
385 .Pn slocal | 384 .Pn slocal |
386 is almost self-standing, it should be split off into a separate project. | 385 is almost self-standing, it should be split off into a separate project. |
387 This would cut the strong connection between the MUA mmh and the MDA | 386 This would cut the strong connection between the MUA mmh and the MDA |
388 .Pn slocal . | 387 .Pn slocal . |
389 For anyone not using MH, | 388 For anyone not using MH, |
390 .Pn slocal | 389 .Pn slocal |
391 would become yet another independent MDA, like | 390 would become yet another independent MDA, like |
392 .I procmail . | 391 .I procmail . |
393 The need to install a complete MH system to have | 392 Then |
394 .Pn slocal | 393 .Pn slocal |
395 would be gone. | 394 could be installed without the complete MH system. |
396 Likewise, mmh users could decide to use | 395 Likewise, mmh users could decide to use |
397 .I procmail | 396 .I procmail |
398 without having a second, unused MDA, | 397 without having a second, unused MDA, |
399 .Pn slocal , | 398 .Pn slocal , |
400 installed. | 399 installed. |
401 That's conceptionally the best solution. | 400 That appears to be conceptionally the best solution. |
402 Yet, | 401 Yet, |
403 .Pn slocal | 402 .Pn slocal |
404 is not split off. | 403 is not split off. |
405 I feel unsure with removing it from mmh. | 404 I defer the decision over |
406 Hence, I defer the decision over | |
407 .Pn slocal . | |
408 In the meanwhile | |
409 .Pn slocal | 405 .Pn slocal |
410 does not hurt because it is unrelated to the rest of mmh. | 406 in need for deeper investigation. |
407 In the meanwhile, it remains part of mmh. | |
408 That does not hurt because | |
409 .Pn slocal | |
410 is unrelated to the rest of the project. | |
411 | 411 |
412 | 412 |
413 .H2 "\fLshow\fP and \fPmhshow\fP | 413 .H2 "\fLshow\fP and \fPmhshow\fP |
414 .P | 414 .P |
415 Since the very beginning \(en already in the first concept paper \(en | 415 Since the very beginning \(en already in the first concept paper \(en |
418 .Pn show | 418 .Pn show |
419 mapped message numbers and sequences to files and invoked | 419 mapped message numbers and sequences to files and invoked |
420 .Pn mhl | 420 .Pn mhl |
421 to have the files formatted. | 421 to have the files formatted. |
422 With MIME, this approach wasn't sufficient anymore. | 422 With MIME, this approach wasn't sufficient anymore. |
423 MIME messages can consist of multiple parts, some of which aren't | 423 MIME messages can consist of multiple parts. Some parts are not |
424 directly displayable, further more text content might be encoded in | 424 directly displayable and text content might be encoded in |
425 foreign charsets. | 425 foreign charsets. |
426 .Pn show 's | 426 .Pn show 's |
427 understanding of messages and | 427 understanding of messages and |
428 .Pn mhl 's | 428 .Pn mhl 's |
429 display capabilities couldn't cope with the task any longer. | 429 display capabilities couldn't cope with the task any longer. |
485 to ensure that the programs behaved in a similar way, | 485 to ensure that the programs behaved in a similar way, |
486 because they were used like a single tool. | 486 because they were used like a single tool. |
487 Different behavior would have surprised the user. | 487 Different behavior would have surprised the user. |
488 .P | 488 .P |
489 Today, non-MIME messages are rather seen to be a special case of | 489 Today, non-MIME messages are rather seen to be a special case of |
490 MIME messages, although it's the other way round. | 490 MIME messages, although it is the other way round. |
491 As | 491 As |
492 .Pn mhshow | 492 .Pn mhshow |
493 had already be able to display non-MIME messages, it appeared natural | 493 had already be able to display non-MIME messages, it appeared natural |
494 to drop | 494 to drop |
495 .Pn show | 495 .Pn show |
547 .Pn show . | 547 .Pn show . |
548 But there is no chance; | 548 But there is no chance; |
549 supporting MIME demands for higher essential complexity. | 549 supporting MIME demands for higher essential complexity. |
550 | 550 |
551 | 551 |
552 .H2 "Removal of Configure Options | 552 .H2 "Configure Options |
553 .P | 553 .P |
554 Customization is a double-edged sword. | 554 Customization is a double-edged sword. |
555 It allows better suiting setups, but not for free. | 555 It allows better suiting setups, but not for free. |
556 There is the cost of code complexity to be able to customize. | 556 There is the cost of code complexity to be able to customize. |
557 There is the cost of less tested setups, because there are | 557 There is the cost of less tested setups, because there are |
558 more possible setups and especially corner-cases. | 558 more possible setups and especially corner-cases. |
559 And, there is the cost of choice itself. | 559 And, there is the cost of choice itself. |
560 The code complexity directly affects the developers. | 560 The code complexity directly affects the developers. |
561 Less tested code affects both, users and developers. | 561 Less tested code affects both, users and developers. |
562 The problem of choice affects the users, for once by having to | 562 The problem of choice affects the users, for once by having to |
563 choose, but also by complexer interfaces that require more documentation. | 563 choose, but also by more complex interfaces that require more documentation. |
564 Whenever options add little advantages, they should be considered for | 564 Whenever options add little advantages, they should be considered for |
565 removal. | 565 removal. |
566 I have reduced the number of project-specific configure options from | 566 I have reduced the number of project-specific configure options from |
567 fifteen to three. | 567 fifteen to three. |
568 | 568 |
596 Still, conditional compilation of a code base creates variations | 596 Still, conditional compilation of a code base creates variations |
597 of the original program. | 597 of the original program. |
598 More variations require more testing and maintenance work. | 598 More variations require more testing and maintenance work. |
599 .P | 599 .P |
600 Two other options only specified default configuration values: | 600 Two other options only specified default configuration values: |
601 .Sw --with-mts=[smtp|sendmail] | 601 .Sw --with-mts |
602 defined the default transport service. | 602 defined the default transport service, either |
603 .Ar smtp | |
604 or | |
605 .Ar sendmail . | |
603 In mmh this fixed to | 606 In mmh this fixed to |
604 .Ar sendmail . | 607 .Ar sendmail . |
605 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 | 608 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 |
606 With | 609 With |
607 .Sw --with-smtpservers=[server1...] | 610 .Sw --with-smtpservers |
608 default SMTP servers for the | 611 default SMTP servers for the |
609 .Ar smtp | 612 .Ar smtp |
610 transport service could be specified. | 613 transport service could be specified. |
611 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9 | 614 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9 |
612 Both of them became irrelevant. | 615 Both of them became irrelevant. |
622 to change the default to the hash symbol `\f(CW#\fP'. | 625 to change the default to the hash symbol `\f(CW#\fP'. |
623 The choice was probably personal preference, because first, the | 626 The choice was probably personal preference, because first, the |
624 option was named | 627 option was named |
625 .Sw --with-backup-prefix. | 628 .Sw --with-backup-prefix. |
626 and had the prefix symbol as argument. | 629 and had the prefix symbol as argument. |
627 Because giving the hash symbol as argument caused to many problems | 630 But giving the hash symbol as argument caused too many problems |
628 for configure, | 631 for Autoconf, |
629 the option was limited to use the hash symbol as the default prefix. | 632 thus the option was limited to use the hash symbol as the default prefix. |
630 This makes me believe, that the choice for the hash was personal preference. | 633 This supports the assumption, that the choice for the hash was |
631 Being it related or not, words that start with the hash symbol | 634 personal preference only. |
635 Being related or not, words that start with the hash symbol | |
632 introduce a comment in the Unix shell. | 636 introduce a comment in the Unix shell. |
633 Thus, the command line | 637 Thus, the command line |
634 .Cl "rm #13 #15 | 638 .Cl "rm #13 #15 |
635 calls | 639 calls |
636 .Pn rm | 640 .Pn rm |
637 without arguments because the first hash symbol starts the comment | 641 without arguments because the first hash symbol starts the comment |
638 that reaches until the end of the line. | 642 that reaches until the end of the line. |
639 To delete the backup files, | 643 To delete the backup files, |
640 .Cl "rm ./#13 ./#15" | 644 .Cl "rm ./#13 ./#15" |
641 needs to be used. | 645 needs to be used. |
642 Using the hash as backup prefix can be seen as a precaution agains | 646 Using the hash as backup prefix can be seen as a precaution against |
643 data loss. | 647 data loss. |
644 .P | 648 .P |
645 I removed the configure option but added the profile entry | 649 I removed the configure option but added the profile entry |
646 .Pe backup-prefix , | 650 .Pe backup-prefix , |
647 which allows to specify an arbitrary string as backup prefix. | 651 which allows to specify an arbitrary string as backup prefix. |
652 .P | 656 .P |
653 Eventually, however, the new trash folder concept | 657 Eventually, however, the new trash folder concept |
654 .Cf "Sec. XXX | 658 .Cf "Sec. XXX |
655 obsoleted the concept of the backup prefix completely. | 659 obsoleted the concept of the backup prefix completely. |
656 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173 | 660 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173 |
657 (Well, there still are corner-cases to remove until the backup | 661 .\" (Well, there still are corner-cases to remove until the backup |
658 prefix can be laid to rest, eventually.) | 662 .\" prefix can be laid to rest, eventually.) |
659 .\" FIXME: Do this work in the code! | 663 .\" FIXME: Do this work in the code! |
660 | 664 |
661 .U3 "Editor and Pager | 665 .U3 "Editor and Pager |
662 .P | 666 .P |
663 The two configure options | 667 The two configure options |
746 .Ev PAGER | 750 .Ev PAGER |
747 environment variables, | 751 environment variables, |
748 the new behavior confirms better to the common style on Unix systems. | 752 the new behavior confirms better to the common style on Unix systems. |
749 Additionally, the new approach is more uniform and clearer to users. | 753 Additionally, the new approach is more uniform and clearer to users. |
750 | 754 |
751 .U3 "Locale | |
752 .P | |
753 The configure option | |
754 .Sw --disable-locale | |
755 was removed because POSIX provides locale support and there's | |
756 hardly any need to disable locale support. | |
757 .Ci ccf4f175ef4c4e7522f9510a4a1149c15d810dd9 | |
758 | 755 |
759 .U3 "ndbm | 756 .U3 "ndbm |
760 .P | 757 .P |
761 .Pn slocal | 758 .Pn slocal |
762 used to depend on | 759 used to depend on |
769 to suppress delivering the same message to the same user twice. | 766 to suppress delivering the same message to the same user twice. |
770 (This features was enabled by the | 767 (This features was enabled by the |
771 .Sw -suppressdup | 768 .Sw -suppressdup |
772 switch.) | 769 switch.) |
773 .P | 770 .P |
774 A variety of version of the database library exist. | 771 A variety of versions of the database library exist. |
775 .[ | 772 .[ |
776 wolter unix incompat notes dbm | 773 wolter unix incompat notes dbm |
777 .] | 774 .] |
778 Complicated autoconf code was needed to detect them correctly. | 775 Complicated autoconf code was needed to detect them correctly. |
779 Further more, the configure switches | 776 Further more, the configure switches |
935 This option is likely to stay. | 932 This option is likely to stay. |
936 | 933 |
937 | 934 |
938 | 935 |
939 | 936 |
940 .H2 "Removal of Switches | 937 .H2 "Command Line Switches |
941 .P | 938 .P |
942 The command line switches of MH tools follow the X Window style. | 939 The command line switches of MH tools follow the X Window style. |
943 They are words, introduced by a single dash. | 940 They are words, introduced by a single dash. |
944 For example: | 941 For example: |
945 .Cl "-truncate" . | 942 .Cl "-truncate" . |
1019 .P | 1016 .P |
1020 Fig. XXX | 1017 Fig. XXX |
1021 .\" XXX Ref | 1018 .\" XXX Ref |
1022 displays the number of switches for each of the tools that is available | 1019 displays the number of switches for each of the tools that is available |
1023 in both, nmh and mmh. | 1020 in both, nmh and mmh. |
1024 Visible as well as hidden switches were counted, | 1021 The tools are sorted by the number of switches they had in nmh. |
1022 Visible and hidden switches were counted, | |
1025 but not the generic help and version switches. | 1023 but not the generic help and version switches. |
1026 Whereas in the beginning of the project, the average tool had 11 switches, | 1024 Whereas in the beginning of the project, the average tool had 11 switches, |
1027 now it has no more than 5 \(en only half as many. | 1025 now it has no more than 5 \(en only half as many. |
1028 If the `no' switches and similar inverse variant are folded onto | 1026 If the `no' switches and similar inverse variant are folded onto |
1029 their counter-parts, the average tool has 8 switches in pre-mmh to 4 now. | 1027 their counter-parts, the average tool had 8 switches in pre-mmh times and |
1028 has 4 now. | |
1030 The total number of functional switches in mmh dropped from 465 | 1029 The total number of functional switches in mmh dropped from 465 |
1031 to 234. | 1030 to 234. |
1032 | 1031 |
1033 .KS | 1032 .KS |
1034 .in 1c | 1033 .in 1c |
1048 the number of switches per command. | 1047 the number of switches per command. |
1049 | 1048 |
1050 | 1049 |
1051 .U3 "Draft Folder Facility | 1050 .U3 "Draft Folder Facility |
1052 .P | 1051 .P |
1053 A change early in the project was the completely transition from | 1052 A change early in the project was the complete transition from |
1054 the single draft message to the draft folder facility. | 1053 the single draft message to the draft folder facility. |
1055 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 | 1054 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 |
1056 The draft folder facility was introduced in the mid-Eighties. | 1055 The draft folder facility was introduced in the mid-Eighties, when |
1057 (Rose and Romine called it a ``relatively new feature'' | 1056 Rose and Romine called it a ``relatively new feature''. |
1058 .[ | 1057 .[ |
1059 rose romine real work | 1058 rose romine real work |
1060 .] | 1059 .] |
1061 in 1985.) | |
1062 Since then, the facility had existed but was deactivated by default. | 1060 Since then, the facility had existed but was deactivated by default. |
1063 The default activation and the related rework of the tools made it | 1061 The default activation and the related rework of the tools made it |
1064 possible to remove the | 1062 possible to remove the |
1065 .Sw -[no]draftfolder , | 1063 .Sw -[no]draftfolder , |
1066 and | 1064 and |
1101 .U3 "Inplace Editing | 1099 .U3 "Inplace Editing |
1102 .P | 1100 .P |
1103 .Pn anno | 1101 .Pn anno |
1104 had the switches | 1102 had the switches |
1105 .Sw -[no]inplace | 1103 .Sw -[no]inplace |
1106 to either annotate the message inplace and thus preserve hard links, | 1104 to either annotate the message in place and thus preserve hard links, |
1107 or annotate a copy to replace the original message, breaking hard links. | 1105 or annotate a copy to replace the original message, breaking hard links. |
1108 Following the assumption that linked messages should truly be the | 1106 Following the assumption that linked messages should truly be the |
1109 same message, and annotating it should not break the link, the | 1107 same message, and annotating it should not break the link, the |
1110 .Sw -[no]inplace | 1108 .Sw -[no]inplace |
1111 switches were removed and the previous default | 1109 switches were removed and the previous default |
1225 | 1223 |
1226 | 1224 |
1227 .U3 "MIME Tools | 1225 .U3 "MIME Tools |
1228 .P | 1226 .P |
1229 The MIME tools, which were once part of | 1227 The MIME tools, which were once part of |
1230 .Pn mhn , | 1228 .Pn mhn |
1229 [sic!], | |
1231 had several switches that added little practical value to the programs. | 1230 had several switches that added little practical value to the programs. |
1232 The | 1231 The |
1233 .Sw -[no]realsize | 1232 .Sw -[no]realsize |
1234 switches of | 1233 switches of |
1235 .Pn mhbuild | 1234 .Pn mhbuild |
1447 | 1446 |
1448 .U3 "Suppressing Edits or the WhatNow Shell | 1447 .U3 "Suppressing Edits or the WhatNow Shell |
1449 .P | 1448 .P |
1450 The | 1449 The |
1451 .Sw -noedit | 1450 .Sw -noedit |
1452 switches of | 1451 switch of |
1453 .Pn comp , | 1452 .Pn comp , |
1454 .Pn repl , | 1453 .Pn repl , |
1455 .Pn forw , | 1454 .Pn forw , |
1456 .Pn dist , | 1455 .Pn dist , |
1457 and | 1456 and |
1482 occurring.) | 1481 occurring.) |
1483 .QE | 1482 .QE |
1484 .P | 1483 .P |
1485 Effectively, the | 1484 Effectively, the |
1486 .Sw -nowhatnowproc | 1485 .Sw -nowhatnowproc |
1487 switch stored a copy of the form file into the draft folder. | 1486 switch creates only a draft message. |
1488 As | 1487 As |
1489 .Cl "-whatnowproc true | 1488 .Cl "-whatnowproc true |
1490 causes the same behavior, the | 1489 causes the same behavior, the |
1491 .Sw -nowhatnowproc | 1490 .Sw -nowhatnowproc |
1492 switch was removed for being redundant. | 1491 switch was removed for being redundant. |
1493 Likely, however, the intention for specifying | 1492 Likely, the |
1494 .Sw -nowhatnowproc | 1493 .Sw -nowhatnowproc |
1495 is sending a fully prepared form file at once. | 1494 switch was intended to be used by front-ends. |
1496 This can be done with | |
1497 .Cl "-whatnowproc send" . | |
1498 | 1495 |
1499 | 1496 |
1500 .U3 "Compatibility Switches | 1497 .U3 "Compatibility Switches |
1501 .BU | 1498 .BU |
1502 The hidden | 1499 The hidden |
1649 | 1646 |
1650 | 1647 |
1651 .H1 "Modernizing | 1648 .H1 "Modernizing |
1652 | 1649 |
1653 | 1650 |
1654 .H2 "Removal of Code Relicts | 1651 .H2 "Code Relicts |
1655 .P | 1652 .P |
1656 The code base of mmh originates from the late Seventies, | 1653 The code base of mmh originates from the late Seventies, |
1657 had been extensively | 1654 had been extensively |
1658 worked on in the mid Eighties, and had been partly reorganized and extended | 1655 worked on in the mid Eighties, and had been partly reorganized and extended |
1659 in the Nineties. Relicts of all those times had gathered in the code base. | 1656 in the Nineties. Relicts of all those times had gathered in the code base. |
1899 foo | 1896 foo |
1900 | 1897 |
1901 | 1898 |
1902 | 1899 |
1903 | 1900 |
1904 .H1 "Code style | 1901 .H1 "Code Style |
1905 .P | 1902 .P |
1906 foo | 1903 foo |
1907 | 1904 |
1908 | 1905 |
1909 .H2 "Standard Code | 1906 .H2 "Standard Code |