Mercurial > docs > master
comparison discussion.roff @ 159:8b411125645d
Corrections and improvements by Kate, Phil, Matou, Michi, Lydi.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Mon, 09 Jul 2012 11:16:30 +0200 |
parents | 0cce17978f0a |
children | 5c01017be420 |
comparison
equal
deleted
inserted
replaced
158:a6dc418ab0a4 | 159:8b411125645d |
---|---|
19 The community around nmh has a similar understanding. | 19 The community around nmh has a similar understanding. |
20 In fundamental difference, mmh shall be a MUA only. | 20 In fundamental difference, mmh shall be a MUA only. |
21 I believe that the development of all-in-one mail systems is obsolete. | 21 I believe that the development of all-in-one mail systems is obsolete. |
22 Today, email is too complex to be fully covered by single projects. | 22 Today, email is too complex to be fully covered by single projects. |
23 Such a project won't be able to excel in all aspects. | 23 Such a project won't be able to excel in all aspects. |
24 Instead, the aspects of email should be covered my multiple projects, | 24 Instead, the aspects of email should be covered by multiple projects, |
25 which then can be combined to form a complete system. | 25 which then can be combined to form a complete system. |
26 Excellent implementations for the various aspects of email exist already. | 26 Excellent implementations for the various aspects of email exist already. |
27 Just to name three examples: Postfix is a specialized MTA, | 27 Just to name three examples: Postfix is a specialized MTA, |
28 .\" XXX homepages verlinken | |
28 Procmail is a specialized MDA, and Fetchmail is a specialized MRA. | 29 Procmail is a specialized MDA, and Fetchmail is a specialized MRA. |
29 I believe that it is best to use such specialized tools instead of | 30 I believe that it is best to use such specialized tools instead of |
30 providing the same function again as a side-component in the project. | 31 providing the same function again as a side-component in the project. |
31 .P | 32 .P |
32 Doing something well, requires to focus on a small set of specific aspects. | 33 Doing something well, requires to focus on a small set of specific aspects. |
63 Removing the mail transfer facilities had been the first work task | 64 Removing the mail transfer facilities had been the first work task |
64 in the mmh project. | 65 in the mmh project. |
65 .P | 66 .P |
66 Focusing on one mail agent role only is motivated by Eric Allman's | 67 Focusing on one mail agent role only is motivated by Eric Allman's |
67 experience with Sendmail. | 68 experience with Sendmail. |
68 He identified limiting Sendmail the MTA task had be one reason for | 69 He identified the limitation of Sendmail to the MTA task as one reason for |
69 its success: | 70 its success: |
70 .[ [ | 71 .[ [ |
71 costales sendmail | 72 costales sendmail |
72 .], p. xviii] | 73 .], p. xviii] |
73 .QS | 74 .QS |
76 This was a departure of the dominant through of the time, | 77 This was a departure of the dominant through of the time, |
77 in which routing logic, local delivery, and often the network code | 78 in which routing logic, local delivery, and often the network code |
78 were incorporated directly into the user agents. | 79 were incorporated directly into the user agents. |
79 .QE | 80 .QE |
80 .P | 81 .P |
81 In mmh, the Mail Submission Agent (MSA) is called | 82 In nmh, the Mail Submission Agent (MSA) is called |
82 \fIMessage Transfer Service\fP (MTS). | 83 \fIMessage Transfer Service\fP (MTS). |
83 This facility, implemented by the | 84 This facility, implemented by the |
84 .Pn post | 85 .Pn post |
85 command, established network connections and spoke SMTP to submit | 86 command, established network connections and spoke SMTP to submit |
86 messages for relay to the outside world. | 87 messages to be relayed to the outside world. |
87 The changes in email demanded changes in this part of nmh too. | 88 The changes in email demanded changes in this part of nmh too. |
88 Encryption and authentication for network connections | 89 Encryption and authentication for network connections |
89 needed to be supported, hence TLS and SASL were introduced into nmh. | 90 needed to be supported, hence TLS and SASL were introduced into nmh. |
90 This added complexity to nmh without improving it in its core functions. | 91 This added complexity to nmh without improving it in its core functions. |
91 Also, keeping up with recent developments in the field of | 92 Also, keeping up with recent developments in the field of |
124 to be added soon, too, and likewise for any other changes in mail transfer. | 125 to be added soon, too, and likewise for any other changes in mail transfer. |
125 Not so for mmh because it has dropped the support for retrieving mail | 126 Not so for mmh because it has dropped the support for retrieving mail |
126 from remote locations. | 127 from remote locations. |
127 .Ci ab7b48411962d26439f92f35ed084d3d6275459c | 128 .Ci ab7b48411962d26439f92f35ed084d3d6275459c |
128 Instead, it depends on an external tool to cover this task. | 129 Instead, it depends on an external tool to cover this task. |
129 In mmh exist two paths for messages to enter mmh's mail storage: | 130 In mmh, two paths exist for messages to enter mmh's mail storage: |
130 (1) Mail can be incorporated with | 131 (1) Mail can be incorporated with |
131 .Pn inc | 132 .Pn inc |
132 from the system maildrop, or (2) with | 133 from the system maildrop, or (2) with |
133 .Pn rcvstore | 134 .Pn rcvstore |
134 by reading them, one at a time, from the standard input. | 135 by reading them, one at a time, from the standard input. |
137 mail system to being a MUA only. | 138 mail system to being a MUA only. |
138 Now, of course, mmh depends on third-party software. | 139 Now, of course, mmh depends on third-party software. |
139 An external MSA is required to transfer mail to the outside world; | 140 An external MSA is required to transfer mail to the outside world; |
140 an external MRA is required to retrieve mail from remote machines. | 141 an external MRA is required to retrieve mail from remote machines. |
141 There exist excellent implementations of such software, | 142 There exist excellent implementations of such software, |
142 which do this specific task likely better than the internal | 143 which likely are superior than the internal version. |
143 versions had done it. | 144 Additionally, the best suiting programs can be freely chosen. |
144 Also, the best suiting programs can be freely chosen. | |
145 .P | 145 .P |
146 As it had already been possible to use an external MSA or MRA, | 146 As it had already been possible to use an external MSA or MRA, |
147 why not keep the internal version for convenience? | 147 why not keep the internal version for convenience? |
148 .\" XXX ueberleitung | |
148 The question whether there is sense in having a fall-back pager in all | 149 The question whether there is sense in having a fall-back pager in all |
149 the command line tools, for the cases when | 150 the command line tools, for the cases when |
150 .Pn more | 151 .Pn more |
151 or | 152 or |
152 .Pn less | 153 .Pn less |
200 There is no more need to concern with changes in network transfer. | 201 There is no more need to concern with changes in network transfer. |
201 This independence is received by depending on an external program | 202 This independence is received by depending on an external program |
202 that covers the field. | 203 that covers the field. |
203 Today, this is a reasonable exchange. | 204 Today, this is a reasonable exchange. |
204 .P | 205 .P |
206 .\" XXX ueberleitung ??? | |
205 Functionality can be added in three different ways: | 207 Functionality can be added in three different ways: |
206 .BU | 208 .BU |
207 Implementing the function originally in the project. | 209 Implementing the function originally in the project. |
208 .BU | 210 .BU |
209 Depending on a library that provides the function. | 211 Depending on a library that provides the function. |
210 .BU | 212 .BU |
211 Depending on a program that provides the function. | 213 Depending on a program that provides the function. |
212 .P | 214 .P |
213 Whereas adding the function originally to the project increases the | 215 .\" XXX Rework sentence |
216 While adding the function originally to the project increases the | |
214 code size most and requires most maintenance and development work, | 217 code size most and requires most maintenance and development work, |
215 it makes the project most independent of other software. | 218 it makes the project most independent of other software. |
216 Using libraries or external programs require less maintenance work | 219 Using libraries or external programs require less maintenance work |
217 but introduces dependencies on external software. | 220 but introduces dependencies on external software. |
218 Programs have the smallest interfaces and provide the best separation | 221 Programs have the smallest interfaces and provide the best separation |
219 but possibly limit the information exchange. | 222 but possibly limit the information exchange. |
220 External libraries are stronger connected than external programs, | 223 External libraries are stronger connected than external programs, |
221 thus information can be exchanged more flexible. | 224 thus information can be exchanged more flexible. |
222 Adding code to a project increases maintenance work. | 225 Adding code to a project increases maintenance work. |
223 .\" XXX ref | 226 .\" XXX ref |
224 Implementing complex functions originally in the project adds | 227 Implementing complex functions in the project itself adds |
225 a lot of code. | 228 a lot of code. |
226 This should be avoided if possible. | 229 This should be avoided if possible. |
227 Hence, the dependencies only change in kind, not in their existence. | 230 Hence, the dependencies only change in kind, not in their existence. |
228 In mmh, library dependencies on | 231 In mmh, library dependencies on |
229 .Pn libsasl2 | 232 .Pn libsasl2 |
230 and | 233 and |
231 .Pn libcrypto /\c | 234 .Pn libcrypto /\c |
232 .Pn libssl | 235 .Pn libssl |
233 were treated against program dependencies on an MSA and an MRA. | 236 were traded against program dependencies on an MSA and an MRA. |
234 This also meant treating build-time dependencies against run-time | 237 This also meant trading build-time dependencies against run-time |
235 dependencies. | 238 dependencies. |
236 Besides program dependencies providing the stronger separation | 239 Besides program dependencies providing the stronger separation |
237 and being more flexible, they also allowed | 240 and being more flexible, they also allowed |
238 over 6\|000 lines of code to be removed from mmh. | 241 over 6\|000 lines of code to be removed from mmh. |
239 This made mmh's code base about 12\|% smaller. | 242 This made mmh's code base about 12\|% smaller. |
244 .P | 247 .P |
245 Users of MH should not have problems to set up an external MSA and MRA. | 248 Users of MH should not have problems to set up an external MSA and MRA. |
246 Also, the popular MSAs and MRAs have large communities and a lot | 249 Also, the popular MSAs and MRAs have large communities and a lot |
247 of documentation available. | 250 of documentation available. |
248 Choices for MSAs range from full-featured MTAs like | 251 Choices for MSAs range from full-featured MTAs like |
252 .\" XXX refs | |
249 .I Postfix | 253 .I Postfix |
250 over mid-size MTAs like | 254 over mid-size MTAs like |
251 .I masqmail | 255 .I masqmail |
252 and | 256 and |
253 .I dma | 257 .I dma |
290 .BU | 294 .BU |
291 .Pn rcvtty | 295 .Pn rcvtty |
292 was removed | 296 was removed |
293 .Ci 14767c94b3827be7c867196467ed7aea5f6f49b0 | 297 .Ci 14767c94b3827be7c867196467ed7aea5f6f49b0 |
294 because its use case of writing to the user's terminal | 298 because its use case of writing to the user's terminal |
295 on receiving of mail is obsolete. | 299 on receival of mail is obsolete. |
296 If users like to be informed of new mail, the shell's | 300 If users like to be informed of new mail, the shell's |
297 .Ev MAILPATH | 301 .Ev MAILPATH |
298 variable or graphical notifications are technically more appealing. | 302 variable or graphical notifications are technically more appealing. |
299 Writing directly to terminals is hardly ever wanted today. | 303 Writing directly to terminals is hardly ever wanted today. |
300 If though one wants to have it this way, the standard tool | 304 If though one wants to have it this way, the standard tool |
303 .VS | 307 .VS |
304 scan -file - | write `id -un` | 308 scan -file - | write `id -un` |
305 VE | 309 VE |
306 .BU | 310 .BU |
307 .Pn viamail | 311 .Pn viamail |
312 .\" XXX was macht viamail | |
308 was removed | 313 was removed |
309 .Ci eda72d6a7a7c20ff123043fb7f19c509ea01f932 | 314 .Ci eda72d6a7a7c20ff123043fb7f19c509ea01f932 |
310 when the new attachment system was activated, because | 315 when the new attachment system was activated, because |
311 .Pn forw | 316 .Pn forw |
312 could then cover the task itself. | 317 could then cover the task itself. |
315 was rewritten as a shell script wrapper around | 320 was rewritten as a shell script wrapper around |
316 .Pn forw . | 321 .Pn forw . |
317 .Ci 0e82199cf3c991a173e0ac8aa776efdb3ded61e6 | 322 .Ci 0e82199cf3c991a173e0ac8aa776efdb3ded61e6 |
318 .BU | 323 .BU |
319 .Pn msgchk | 324 .Pn msgchk |
325 .\" XXX was macht msgchk | |
320 was removed | 326 was removed |
321 .Ci bb9360ead7eb7a3fedcce2eeedfc660014e41dbe , | 327 .Ci bb9360ead7eb7a3fedcce2eeedfc660014e41dbe , |
322 because it lost its use case when POP support was removed. | 328 because it lost its use case when POP support was removed. |
323 A call to | 329 A call to |
324 .Pn msgchk | 330 .Pn msgchk |
341 .Pn msh | 347 .Pn msh |
342 was removed | 348 was removed |
343 .Ci 916690191222433a6923a4be54b0d8f6ac01bd02 | 349 .Ci 916690191222433a6923a4be54b0d8f6ac01bd02 |
344 because the tool was in conflict with the philosophy of MH. | 350 because the tool was in conflict with the philosophy of MH. |
345 It provided an interactive shell to access the features of MH, | 351 It provided an interactive shell to access the features of MH, |
346 but it wasn't just a shell, tailored to the needs of mail handling. | 352 but it wasn't just a shell tailored to the needs of mail handling. |
347 Instead it was one large program that had several MH tools built in. | 353 Instead it was one large program that had several MH tools built in. |
348 This conflicts with the major feature of MH of being a tool chest. | 354 This conflicts with the major feature of MH of being a tool chest. |
349 .Pn msh 's | 355 .Pn msh 's |
350 main use case had been accessing Bulletin Boards, which have seized to | 356 main use case had been accessing Bulletin Boards, which have ceased to |
351 be popular. | 357 be popular. |
352 .P | 358 .P |
353 Removing | 359 Removing |
354 .Pn msh , | 360 .Pn msh , |
355 together with the truly archaic code relicts | 361 together with the truly archaic code relicts |
420 is not split off. | 426 is not split off. |
421 I defer the decision over | 427 I defer the decision over |
422 .Pn slocal | 428 .Pn slocal |
423 in need for deeper investigation. | 429 in need for deeper investigation. |
424 In the meanwhile, it remains part of mmh. | 430 In the meanwhile, it remains part of mmh. |
425 That does not hurt because | 431 However, its continued existence is not significant because |
426 .Pn slocal | 432 .Pn slocal |
427 is unrelated to the rest of the project. | 433 is unrelated to the rest of the project. |
428 | 434 |
429 | 435 |
430 | 436 |
431 .H2 "Displaying Messages | 437 .H2 "Displaying Messages |
432 .Id mhshow | 438 .Id mhshow |
433 .P | 439 .P |
434 Since the very beginning, already in the first concept paper, | 440 Since the very beginning, already in the first concept paper, |
441 .\" XXX ref!!! | |
435 .Pn show | 442 .Pn show |
436 had been MH's message display program. | 443 had been MH's message display program. |
437 .Pn show | 444 .Pn show |
438 mapped message numbers and sequences to files and invoked | 445 mapped message numbers and sequences to files and invoked |
439 .Pn mhl | 446 .Pn mhl |
507 .P | 514 .P |
508 Today, non-MIME messages are rather seen to be a special case of | 515 Today, non-MIME messages are rather seen to be a special case of |
509 MIME messages, although it is the other way round. | 516 MIME messages, although it is the other way round. |
510 As | 517 As |
511 .Pn mhshow | 518 .Pn mhshow |
512 had already be able to display non-MIME messages, it appeared natural | 519 had already been able to display non-MIME messages, it appeared natural |
513 to drop | 520 to drop |
514 .Pn show | 521 .Pn show |
515 in favor of using | 522 in favor of using |
516 .Pn mhshow | 523 .Pn mhshow |
517 exclusively. | 524 exclusively. |
552 .Cf mhshow ) | 559 .Cf mhshow ) |
553 Once the tools behaved more alike, the replacing appeared to be | 560 Once the tools behaved more alike, the replacing appeared to be |
554 even more natural. | 561 even more natural. |
555 Today, mmh's new | 562 Today, mmh's new |
556 .Pn show | 563 .Pn show |
557 became the one single message display program again, with the difference | 564 has become the one single message display program once more, |
565 with the difference | |
558 that today it handles MIME messages as well as non-MIME messages. | 566 that today it handles MIME messages as well as non-MIME messages. |
559 The outcome of the transition is one program less to maintain, | 567 The outcome of the transition is one program less to maintain, |
560 no second display program for users to deal with, | 568 no second display program for users to deal with, |
561 and less system complexity. | 569 and less system complexity. |
562 .P | 570 .P |
563 Still, removing the old | 571 Still, removing the old |
564 .Pn show | 572 .Pn show |
565 hurts in one regard: It had been such a simple program. | 573 hurts in one regard: It had been such a simple program. |
566 Its lean elegance is missing to the new | 574 Its lean elegance is missing from the new |
567 .Pn show . | 575 .Pn show , |
568 But there is no chance; | 576 .\" XXX |
569 supporting MIME demands for higher essential complexity. | 577 however there is no alternative; |
578 supporting MIME demands higher essential complexity. | |
570 | 579 |
571 .ig | 580 .ig |
572 XXX | 581 XXX |
573 Consider including text on scan listings here | 582 Consider including text on scan listings here |
574 | 583 |
589 Customization is a double-edged sword. | 598 Customization is a double-edged sword. |
590 It allows better suiting setups, but not for free. | 599 It allows better suiting setups, but not for free. |
591 There is the cost of code complexity to be able to customize. | 600 There is the cost of code complexity to be able to customize. |
592 There is the cost of less tested setups, because there are | 601 There is the cost of less tested setups, because there are |
593 more possible setups and especially corner-cases. | 602 more possible setups and especially corner-cases. |
594 And, there is the cost of choice itself. | 603 Additionally, there is the cost of choice itself. |
595 The code complexity directly affects the developers. | 604 The code complexity directly affects the developers. |
596 Less tested code affects both, users and developers. | 605 Less tested code affects both, users and developers. |
597 The problem of choice affects the users, for once by having to | 606 The problem of choice affects the users, for once by having to choose, |
598 choose, but also by more complex interfaces that require more documentation. | 607 but also by more complex interfaces that require more documentation. |
599 Whenever options add little advantages, they should be considered for | 608 Whenever options add few advantages but increase the complexity of the |
600 removal. | 609 system, they should be considered for removal. |
601 I have reduced the number of project-specific configure options from | 610 I have reduced the number of project-specific configure options from |
602 fifteen to three. | 611 fifteen to three. |
603 | 612 |
604 .U3 "Mail Transfer Facilities | 613 .U3 "Mail Transfer Facilities |
605 .P | 614 .P |
609 The switches | 618 The switches |
610 .Sw --with-tls | 619 .Sw --with-tls |
611 and | 620 and |
612 .Sw --with-cyrus-sasl | 621 .Sw --with-cyrus-sasl |
613 had activated the support for transfer encryption and authentication. | 622 had activated the support for transfer encryption and authentication. |
623 .\" XXX cf | |
624 .\" XXX gruende kurz wiederholen | |
614 This is not needed anymore. | 625 This is not needed anymore. |
615 .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3 | 626 .Ci fecd5d34f65597a4dfa16aeabea7d74b191532c3 |
616 .Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b | 627 .Ci 156d35f6425bea4c1ed3c4c79783dc613379c65b |
617 .P | 628 .P |
629 .\" XXX cf | |
630 .\" XXX ``For the same reason ...'' | |
618 The configure switch | 631 The configure switch |
619 .Sw --enable-pop | 632 .Sw --enable-pop |
620 activated the message retrieval facility. | 633 activated the message retrieval facility. |
621 The code area that would be conditionally compiled in for TLS and SASL | 634 The code area that would be conditionally compiled in for TLS and SASL |
622 support had been small. | 635 support had been small. |
623 The conditionally compiled code area for POP support had been much larger. | 636 The conditionally compiled code area for POP support had been much larger. |
624 Whereas the code base changes would only slightly change on toggling | 637 Whereas the code base changes would only slightly change on toggling |
625 TLS or SASL support, it changed much on toggling POP support. | 638 TLS or SASL support, it changed much on toggling POP support. |
626 The changes in the code base could hardly be overviewed. | 639 The changes in the code base could hardly be overviewed. |
627 By having POP support togglable a second code base had been created, | 640 By having POP support togglable, a second code base had been created, |
628 one that needed to be tested. | 641 one that needed to be tested. |
629 This situation is basically similar for the conditional TLS and SASL | 642 This situation is basically similar for the conditional TLS and SASL |
630 code, but there the changes are minor and can yet be overviewed. | 643 code, but there the changes are minor and can yet be overviewed. |
631 Still, conditional compilation of a code base creates variations | 644 Still, conditional compilation of a code base creates variations |
632 of the original program. | 645 of the original program. |
636 .Sw --with-mts | 649 .Sw --with-mts |
637 defined the default transport service, either | 650 defined the default transport service, either |
638 .Ar smtp | 651 .Ar smtp |
639 or | 652 or |
640 .Ar sendmail . | 653 .Ar sendmail . |
654 .\" XXX naechster Satz ganz raus? | |
641 In mmh this fixed to | 655 In mmh this fixed to |
642 .Ar sendmail . | 656 .Ar sendmail . |
643 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 | 657 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 |
644 With | 658 With |
645 .Sw --with-smtpservers | 659 .Sw --with-smtpservers |
652 .U3 "Backup Prefix | 666 .U3 "Backup Prefix |
653 .P | 667 .P |
654 The backup prefix is the string that was prepended to message | 668 The backup prefix is the string that was prepended to message |
655 filenames to tag them as deleted. | 669 filenames to tag them as deleted. |
656 By default it had been the comma character `\f(CW,\fP'. | 670 By default it had been the comma character `\f(CW,\fP'. |
671 .\" XXX Zeitlich ordnen | |
657 In July 2000, Kimmo Suominen introduced | 672 In July 2000, Kimmo Suominen introduced |
658 the configure option | 673 the configure option |
659 .Sw --with-hash-backup | 674 .Sw --with-hash-backup |
660 to change the default to the hash symbol `\f(CW#\fP'. | 675 to change the default to the hash symbol `\f(CW#\fP'. |
661 The choice was probably personal preference, because first, the | 676 The choice was probably personal preference, because first, the |
679 .Cl "rm ./#13 ./#15" | 694 .Cl "rm ./#13 ./#15" |
680 needs to be used. | 695 needs to be used. |
681 Using the hash as backup prefix can be seen as a precaution against | 696 Using the hash as backup prefix can be seen as a precaution against |
682 data loss. | 697 data loss. |
683 .P | 698 .P |
684 I removed the configure option but added the profile entry | 699 First, I removed the configure option but added the profile entry |
685 .Pe backup-prefix , | 700 .Pe backup-prefix , |
686 which allows to specify an arbitrary string as backup prefix. | 701 which allows to specify an arbitrary string as backup prefix. |
687 .Ci 6c40d481d661d532dd527eaf34cebb6d3f8ed086 | 702 .Ci 6c40d481d661d532dd527eaf34cebb6d3f8ed086 |
688 Profile entries are the common method to change mmh's behavior. | 703 Profile entries are the common method to change mmh's behavior. |
689 This change did not remove the choice but moved it to a location where | 704 This change did not remove the choice but moved it to a location where |
821 .I ndbm | 836 .I ndbm |
822 vanished and 120 lines of complex autoconf code could be saved. | 837 vanished and 120 lines of complex autoconf code could be saved. |
823 .Ci ecd6d6a20cb7a1507e3a20d6c4cb3a1cf14c6bbf | 838 .Ci ecd6d6a20cb7a1507e3a20d6c4cb3a1cf14c6bbf |
824 The change removed functionality too, but that is minor to the | 839 The change removed functionality too, but that is minor to the |
825 improvement by dropping the dependency and the complex autoconf code. | 840 improvement by dropping the dependency and the complex autoconf code. |
841 .\" XXX argument: slocal ist sowieso nicht teil vom mmh kern | |
826 | 842 |
827 .U3 "mh-e Support | 843 .U3 "mh-e Support |
828 .P | 844 .P |
829 The configure option | 845 The configure option |
830 .Sw --disable-mhe | 846 .Sw --disable-mhe |
847 .Sw --disable-mhe | 863 .Sw --disable-mhe |
848 configure option was removed | 864 configure option was removed |
849 .Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643 | 865 .Ci a7ce7b4a580d77b6c2c4d980812beb589aa4c643 |
850 Removing the option removed a second code setup that would have | 866 Removing the option removed a second code setup that would have |
851 needed to be tested. | 867 needed to be tested. |
868 .\" XXX datum? | |
852 This change was first done in nmh and thereafter merged into mmh. | 869 This change was first done in nmh and thereafter merged into mmh. |
853 .P | 870 .P |
854 The interface changes in mmh require mh-e to be adjusted in order | 871 The interface changes in mmh require mh-e to be adjusted in order |
855 to be able to use mmh as back-end. | 872 to be able to use mmh as back-end. |
856 This will require minor changes to mh-e, but removing the | 873 This will require minor changes to mh-e, but removing the |
916 motivated by the fact that | 933 motivated by the fact that |
917 .Pn spost | 934 .Pn spost |
918 hadn't supported it already. | 935 hadn't supported it already. |
919 .Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9 | 936 .Ci 2abae0bfd0ad5bf898461e50aa4b466d641f23d9 |
920 Username extensions are possible in mmh, but less convenient to use. | 937 Username extensions are possible in mmh, but less convenient to use. |
938 .\" XXX covered by next paragraph | |
921 .\" XXX format file %(getenv USERNAME_EXTENSION) | 939 .\" XXX format file %(getenv USERNAME_EXTENSION) |
922 .P | 940 .P |
923 The | 941 The |
924 .I draft_from | 942 .I draft_from |
925 masquerading type instructed | 943 masquerading type instructed |
976 For example: | 994 For example: |
977 .Cl "-truncate" . | 995 .Cl "-truncate" . |
978 Every program in mmh has two generic switches: | 996 Every program in mmh has two generic switches: |
979 .Sw -help , | 997 .Sw -help , |
980 to print a short message on how to use the program, and | 998 to print a short message on how to use the program, and |
981 .Sw -Version , | 999 .Sw -Version |
982 to tell what version of mmh the program belongs to. | 1000 [sic!], to tell what version of mmh the program belongs to. |
983 .P | 1001 .P |
984 Switches change the behavior of programs. | 1002 Switches change the behavior of programs. |
985 Programs that do one thing in one way require no switches. | 1003 Programs that do one thing in one way require no switches. |
986 In most cases, doing something in exactly one way is too limiting. | 1004 In most cases, doing something in exactly one way is too limiting. |
987 If there is basically one task to accomplish, but it should be done | 1005 If there is basically one task to accomplish, but it should be done |
1048 have remained in mmh's | 1066 have remained in mmh's |
1049 .Pn send . | 1067 .Pn send . |
1050 (These numbers include two generic switches, help and version.) | 1068 (These numbers include two generic switches, help and version.) |
1051 .P | 1069 .P |
1052 The figure displays the number of switches for each of the tools | 1070 The figure displays the number of switches for each of the tools |
1053 that is available in both, nmh and mmh. | 1071 that is available in both nmh and mmh. |
1054 The tools are sorted by the number of switches they had in nmh. | 1072 The tools are sorted by the number of switches they had in nmh. |
1055 Visible and hidden switches were counted, | 1073 Visible and hidden switches were counted, |
1056 but not the generic help and version switches. | 1074 but not the generic help and version switches. |
1057 Whereas in the beginning of the project, the average tool had 11 switches, | 1075 Whereas in the beginning of the project, the average tool had 11 switches, |
1058 now it has no more than 5 \(en only half as many. | 1076 now it has no more than 5 \(en only half as many. |
1106 .Pn send . | 1124 .Pn send . |
1107 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 | 1125 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 |
1108 The only flexibility removed with this change is having multiple | 1126 The only flexibility removed with this change is having multiple |
1109 draft folders within one profile. | 1127 draft folders within one profile. |
1110 I consider this a theoretical problem only. | 1128 I consider this a theoretical problem only. |
1111 In the same go, the | 1129 At the same time, the |
1112 .Sw -draft | 1130 .Sw -draft |
1113 switch of | 1131 switch of |
1114 .Pn anno , | 1132 .Pn anno , |
1115 .Pn refile , | 1133 .Pn refile , |
1116 and | 1134 and |
1117 .Pn send | 1135 .Pn send |
1118 was removed. | 1136 was removed. |
1119 The special-casing of `the' draft message became irrelevant after | 1137 The special treatment of \fIthe\fP draft message became irrelevant after |
1120 the rework of the draft system. | 1138 the rework of the draft system. |
1121 (df. Sec. | 1139 (cf. Sec. |
1122 .Cf draft-folder ) | 1140 .Cf draft-folder ) |
1123 Equally, | 1141 Equally, |
1124 .Pn comp | 1142 .Pn comp |
1125 lost its | 1143 lost its |
1126 .Sw -file | 1144 .Sw -file |
1268 .Pn mhbuild | 1286 .Pn mhbuild |
1269 and | 1287 and |
1270 .Pn mhlist | 1288 .Pn mhlist |
1271 were removed, doing real size calculations always now | 1289 were removed, doing real size calculations always now |
1272 .Ci 8d8f1c3abc586c005c904e52c4adbfe694d2201c , | 1290 .Ci 8d8f1c3abc586c005c904e52c4adbfe694d2201c , |
1273 as | 1291 as nmh's |
1292 .Mp mhbuild (1) | |
1293 man page states | |
1274 ``This provides an accurate count at the expense of a small delay.'' | 1294 ``This provides an accurate count at the expense of a small delay.'' |
1275 This small delay is not noticable on modern systems. | 1295 This small delay is not noticable on modern systems. |
1276 .P | 1296 .P |
1277 The | 1297 The |
1278 .Sw -[no]check | 1298 .Sw -[no]check |
1301 and | 1321 and |
1302 .Sw -wcache | 1322 .Sw -wcache |
1303 switches was completely removed. | 1323 switches was completely removed. |
1304 .Ci d1fefd9f614e4dc3cda16da6c69133c1b2005269 | 1324 .Ci d1fefd9f614e4dc3cda16da6c69133c1b2005269 |
1305 External MIME parts are rare today, having a caching facility | 1325 External MIME parts are rare today, having a caching facility |
1306 for them is appears to be unnecessary. | 1326 for them appears to be unnecessary. |
1307 .P | 1327 .P |
1308 In pre-MIME times, | 1328 In pre-MIME times, |
1309 .Pn mhl | 1329 .Pn mhl |
1310 had covered many tasks that are part of MIME handling today. | 1330 had covered many tasks that are part of MIME handling today. |
1311 Therefore, | 1331 Therefore, |
1320 | 1340 |
1321 .U3 "Header Printing | 1341 .U3 "Header Printing |
1322 .P | 1342 .P |
1323 .Pn folder 's | 1343 .Pn folder 's |
1324 data output is self-explaining enough that | 1344 data output is self-explaining enough that |
1325 displaying the header line makes few sense. | 1345 displaying the header line makes little sense. |
1326 Hence, the | 1346 Hence, the |
1327 .Sw -[no]header | 1347 .Sw -[no]header |
1328 switch was removed and headers are never printed. | 1348 switch was removed and headers are never printed. |
1329 .Ci 601cc73d1fa05ce96faa728f036d6c51b91701c7 | 1349 .Ci 601cc73d1fa05ce96faa728f036d6c51b91701c7 |
1330 .P | 1350 .P |
1377 was removed, but it can now be replaced by specifying | 1397 was removed, but it can now be replaced by specifying |
1378 .Sw -editor | 1398 .Sw -editor |
1379 with an empty argument. | 1399 with an empty argument. |
1380 .Ci 75fca31a5b9d5c1a99c74ab14c94438d8852fba9 | 1400 .Ci 75fca31a5b9d5c1a99c74ab14c94438d8852fba9 |
1381 (Specifying | 1401 (Specifying |
1382 .Cl "-editor true | 1402 .Cl "-editor /bin/true |
1383 is nearly the same, only differing by the previous editor being set.) | 1403 is nearly the same, only differing by the previous editor being set.) |
1384 .P | 1404 .P |
1385 The more important change is the removal of the | 1405 The more important change is the removal of the |
1386 .Sw -nowhatnowproc | 1406 .Sw -nowhatnowproc |
1387 switch. | 1407 switch. |
1402 .P | 1422 .P |
1403 Effectively, the | 1423 Effectively, the |
1404 .Sw -nowhatnowproc | 1424 .Sw -nowhatnowproc |
1405 switch creates only a draft message. | 1425 switch creates only a draft message. |
1406 As | 1426 As |
1407 .Cl "-whatnowproc true | 1427 .Cl "-whatnowproc /bin/true |
1408 causes the same behavior, the | 1428 causes the same behavior, the |
1409 .Sw -nowhatnowproc | 1429 .Sw -nowhatnowproc |
1410 switch was removed for being redundant. | 1430 switch was removed for being redundant. |
1411 Likely, the | 1431 Likely, the |
1412 .Sw -nowhatnowproc | 1432 .Sw -nowhatnowproc |
1452 .Sw -[no]bell | 1472 .Sw -[no]bell |
1453 .Ci e11983f44e59d8de236affa5b0d0d3067c192e24 ) | 1473 .Ci e11983f44e59d8de236affa5b0d0d3067c192e24 ) |
1454 nor page the output itself (\c | 1474 nor page the output itself (\c |
1455 .Sw -length | 1475 .Sw -length |
1456 .Ci 5b9d883db0318ed2b84bb82dee880d7381f99188 ). | 1476 .Ci 5b9d883db0318ed2b84bb82dee880d7381f99188 ). |
1477 .\" XXX Ref | |
1457 Generally, the pager to use is no longer specified with the | 1478 Generally, the pager to use is no longer specified with the |
1458 .Sw -[no]moreproc | 1479 .Sw -[no]moreproc |
1459 command line switches for | 1480 command line switches for |
1460 .Pn mhl | 1481 .Pn mhl |
1461 and | 1482 and |
1505 is a bug fix, supported by the comments | 1526 is a bug fix, supported by the comments |
1506 ``\-[no]reverse under #ifdef BERK (I really HATE this)'' | 1527 ``\-[no]reverse under #ifdef BERK (I really HATE this)'' |
1507 by Rose and | 1528 by Rose and |
1508 ``Lists messages in reverse order with the `\-reverse' switch. | 1529 ``Lists messages in reverse order with the `\-reverse' switch. |
1509 This should be considered a bug.'' by Romine in the documentation. | 1530 This should be considered a bug.'' by Romine in the documentation. |
1531 .\" XXX Ref: welche datei genau. | |
1510 The question remains why neither Rose and Romine had fixed this | 1532 The question remains why neither Rose and Romine had fixed this |
1511 bug in the eighties when they wrote these comments nor has anyone | 1533 bug in the eighties when they wrote these comments nor has anyone |
1512 thereafter. | 1534 thereafter. |
1513 | 1535 |
1514 | 1536 |
1561 | 1583 |
1562 | 1584 |
1563 .\" -------------------------------------------------------------- | 1585 .\" -------------------------------------------------------------- |
1564 .H1 "Modernizing | 1586 .H1 "Modernizing |
1565 .P | 1587 .P |
1566 In the over thirty years of MH's existence, its code base was | 1588 In the more thirty years of MH's existence, its code base was |
1567 extended more and more. | 1589 increasingly extended. |
1568 New features entered the project and became alternatives to the | 1590 New features entered the project and became alternatives to the |
1569 existing behavior. | 1591 existing behavior. |
1570 Relicts from several decades have gathered in the code base, | 1592 Relicts from several decades have gathered in the code base, |
1571 but seldom obsolete features were dropped. | 1593 but seldom obsolete features were dropped. |
1572 This section describes the removing of old code | 1594 This section describes the removing of old code |
1576 .Cf code-style . | 1598 .Cf code-style . |
1577 | 1599 |
1578 | 1600 |
1579 .H2 "Code Relicts | 1601 .H2 "Code Relicts |
1580 .P | 1602 .P |
1581 My position to drop obsolete functions of mmh, in order to remove old code, | 1603 My position regarding the removal of obsolete functions of mmh, |
1582 is much more revolutional than the nmh community likes to have it. | 1604 .\" XXX ``in order to remove old code,'' |
1583 Working on an experimental version, I was able to quickly drop | 1605 is much more revolutional than the nmh community appreciates. |
1606 Working on an experimental version, I was quickly able to drop | |
1584 functionality I considered ancient. | 1607 functionality I considered ancient. |
1585 The need for consensus with peers would have slowed this process down. | 1608 The need for consensus with peers would have slowed this process down. |
1586 Without the need to justify my decisions, I was able to rush forward. | 1609 Without the need to justify my decisions, I was able to rush forward. |
1587 In December 2011, Paul Vixie motivated the nmh developers to just | 1610 In December 2011, Paul Vixie motivated the nmh developers to just |
1611 .\" XXX ugs | |
1588 do the work: | 1612 do the work: |
1589 .[ | 1613 .[ |
1590 paul vixie edginess nmh-workers | 1614 paul vixie edginess nmh-workers |
1591 .] | 1615 .] |
1592 .QS | 1616 .QS |
1601 let's push forward, aggressively. | 1625 let's push forward, aggressively. |
1602 .QE | 1626 .QE |
1603 .LP | 1627 .LP |
1604 I did so already in the months before. | 1628 I did so already in the months before. |
1605 I pushed forward. | 1629 I pushed forward. |
1630 .\" XXX semicolon ? | |
1606 I simply dropped the cruft. | 1631 I simply dropped the cruft. |
1607 .P | 1632 .P |
1608 The decision to drop a feature was based on literature research and | 1633 The decision to drop a feature was based on literature research and |
1609 careful thinking, but whether having had contact to this particular | 1634 careful thinking, but whether having had contact with this particular |
1610 feature within my own computer life served as a rule of thumb. | 1635 feature within my own computer life served as a rule of thumb. |
1611 Always, I explained my reasons in the commit messages | 1636 I explained my reasons in the commit messages |
1612 in the version control system. | 1637 in the version control system. |
1613 Hence, others can comprehend my view and argue for undoing the change | 1638 Hence, others can comprehend my view and argue for undoing the change |
1614 if I have missed an important aspect. | 1639 if I have missed an important aspect. |
1615 I was quick in dropping parts. | 1640 I was quick in dropping parts. |
1616 I rather re-included falsely dropped parts than going a slower pace. | 1641 I rather re-included falsely dropped parts than going at a slower pace. |
1617 Mmh is experimental work; it required tough decisions. | 1642 Mmh is experimental work; it required tough decisions. |
1643 .\" XXX ``exp. work'' schon oft gesagt | |
1618 | 1644 |
1619 | 1645 |
1620 .U3 "Forking | 1646 .U3 "Forking |
1621 .P | 1647 .P |
1622 Being a tool chest, MH creates many processes. | 1648 Being a tool chest, MH creates many processes. |
1623 In earlier times | 1649 In earlier times |
1624 .Fu fork() | 1650 .Fu fork() |
1625 had been an expensive system call, because the process's image needed | 1651 had been an expensive system call, because the process's image needed |
1626 to be duplicated completely at once. | 1652 to be completely duplicated at once. |
1627 This was especially painful in the common case when the image gets | 1653 This expensive work was especially unnecessary in the commonly occuring |
1628 replaced by a call to | 1654 case wherein the image is replaced by a call to |
1629 .Fu exec() | 1655 .Fu exec() |
1630 right after having forked the child process. | 1656 right after having forked the child process. |
1631 The | 1657 The |
1632 .Fu vfork() | 1658 .Fu vfork() |
1633 system call was invented to speed up this particular case. | 1659 system call was invented to speed up this particular case. |
1670 were prone to failure. | 1696 were prone to failure. |
1671 Hence, many of the | 1697 Hence, many of the |
1672 .Fu fork() | 1698 .Fu fork() |
1673 calls in the code were wrapped into loops to retry the | 1699 calls in the code were wrapped into loops to retry the |
1674 .Fu fork() | 1700 .Fu fork() |
1675 several times, to increase the changes to succeed, eventually. | 1701 several times, to increase the chances to succeed, eventually. |
1676 On modern systems, a failing | 1702 On modern systems, a failing |
1677 .Fu fork() | 1703 .Fu fork() |
1678 call is unusual. | 1704 call is unusual. |
1679 Hence, in the rare case when | 1705 Hence, in the rare case when |
1680 .Fu fork() | 1706 .Fu fork() |
1693 Hence, the support for | 1719 Hence, the support for |
1694 .Hd Encrypted | 1720 .Hd Encrypted |
1695 header fields is removed in mmh. | 1721 header fields is removed in mmh. |
1696 .Ci 064527f7b57ab050e5af13e15ad99aeeab125857 | 1722 .Ci 064527f7b57ab050e5af13e15ad99aeeab125857 |
1697 .BU | 1723 .BU |
1698 Native support for | 1724 The native support for |
1699 .Hd Face | 1725 .Hd Face |
1700 header fields has been removed, as well. | 1726 header fields has been removed, as well. |
1701 .Ci 8e5be81f784682822f5e868c1bf3c8624682bd23 | 1727 .Ci 8e5be81f784682822f5e868c1bf3c8624682bd23 |
1702 This feature is similar to the | 1728 This feature is similar to the |
1703 .Hd X-Face | 1729 .Hd X-Face |
1704 header field in its intent, | 1730 header field in its intent, |
1705 but takes a different approach to store the image. | 1731 but takes a different approach to store the image. |
1706 Instead of encoding the image data directly into the header field, | 1732 Instead of encoding the image data directly into the header field, |
1707 it contains the hostname and UDP port where the image | 1733 it contains the hostname and UDP port where the image |
1708 date can be retrieved. | 1734 date can be retrieved. |
1709 There exists even a third Face system, | 1735 There is even a third Face system, |
1710 which is the successor of | 1736 which is the successor of |
1711 .Hd X-Face , | 1737 .Hd X-Face , |
1712 although it re-uses the | 1738 although it re-uses the |
1713 .Hd Face | 1739 .Hd Face |
1714 header field. | 1740 header field. |
1748 .P | 1774 .P |
1749 This type of format is conceptionally similar to the mbox format, | 1775 This type of format is conceptionally similar to the mbox format, |
1750 but uses a different message delimiter (`\fL\\1\\1\\1\\1\fP', | 1776 but uses a different message delimiter (`\fL\\1\\1\\1\\1\fP', |
1751 commonly written as `\fL^A^A^A^A\fP', instead of `\fLFrom\0\fP'). | 1777 commonly written as `\fL^A^A^A^A\fP', instead of `\fLFrom\0\fP'). |
1752 Mbox is the de-facto standard maildrop format on Unix, | 1778 Mbox is the de-facto standard maildrop format on Unix, |
1753 whereas the MMDF maildrop format became forgotten. | 1779 whereas the MMDF maildrop format is now forgotten. |
1754 I did drop MMDF maildrop format support. | 1780 By dropping the MMDF maildrop format support, |
1755 Mbox is the only packed mailbox format supported in mmh. | 1781 mbox became the only packed mailbox format supported in mmh. |
1756 .P | 1782 .P |
1757 The simplifications within the code were moderate. | 1783 The simplifications within the code were moderate. |
1758 Mainly, the reading and writing of MMDF mailbox files was removed. | 1784 Mainly, the reading and writing of MMDF mailbox files was removed. |
1759 But also, switches of | 1785 But also, switches of |
1760 .Pn packf | 1786 .Pn packf |
1771 I have not worked on them yet because | 1797 I have not worked on them yet because |
1772 .Fu m_getfld() | 1798 .Fu m_getfld() |
1773 is heavily optimized and thus dangerous to touch. | 1799 is heavily optimized and thus dangerous to touch. |
1774 The risk of damaging the intricate workings of the optimized code is | 1800 The risk of damaging the intricate workings of the optimized code is |
1775 too high. | 1801 too high. |
1776 .\" XXX: move somewhere else | |
1777 This problem is known to the developers of nmh, too. | |
1778 They also avoid touching this minefield. | |
1779 | 1802 |
1780 | 1803 |
1781 .U3 "Prompter's Control Keys | 1804 .U3 "Prompter's Control Keys |
1782 .P | 1805 .P |
1783 The program | 1806 The program |
1810 | 1833 |
1811 .U3 "Hardcopy Terminal Support | 1834 .U3 "Hardcopy Terminal Support |
1812 .P | 1835 .P |
1813 More of a funny anecdote is a check for being connected to a | 1836 More of a funny anecdote is a check for being connected to a |
1814 hardcopy terminal. | 1837 hardcopy terminal. |
1815 It remained in the code until Spring 2012, when I finally removed it | 1838 It remained in the code until spring 2012, when I finally removed it |
1816 .Ci b7764c4a6b71d37918a97594d866258f154017ca . | 1839 .Ci b7764c4a6b71d37918a97594d866258f154017ca . |
1817 I would be truly happy to see such a terminal in action today, | |
1818 maybe even being able to work on it. | |
1819 But I fear my chances are null. | |
1820 .P | 1840 .P |
1821 The check only prevented a pager to be placed between the printing | 1841 The check only prevented a pager to be placed between the printing |
1822 program (\c | 1842 program (\c |
1823 .Pn mhl ) | 1843 .Pn mhl ) |
1824 and the terminal. | 1844 and the terminal. |
1829 .Pe Pager | 1849 .Pe Pager |
1830 or the environment variable | 1850 or the environment variable |
1831 .Ev PAGER | 1851 .Ev PAGER |
1832 to | 1852 to |
1833 .Pn cat | 1853 .Pn cat |
1834 does the job. | 1854 is sufficient. |
1835 | 1855 |
1836 | 1856 |
1837 | 1857 |
1838 | 1858 |
1839 .H2 "Attachments | 1859 .H2 "Attachments |
1857 and parts of arbitrary type following. | 1877 and parts of arbitrary type following. |
1858 .P | 1878 .P |
1859 MH's MIME support is a direct implementation of the RFCs. | 1879 MH's MIME support is a direct implementation of the RFCs. |
1860 The perception of the topic described in the RFCs is clearly visible | 1880 The perception of the topic described in the RFCs is clearly visible |
1861 in MH's implementation. | 1881 in MH's implementation. |
1862 In result, MH had all the MIME features but no idea of attachments. | 1882 .\" XXX rewrite ``no idea''. |
1883 As a result, | |
1884 MH had all the MIME features but no idea of attachments. | |
1863 But users don't need all the MIME features, | 1885 But users don't need all the MIME features, |
1864 they want convenient attachment handling. | 1886 they want convenient attachment handling. |
1865 | 1887 |
1866 | 1888 |
1867 .U3 "Composing MIME Messages | 1889 .U3 "Composing MIME Messages |
1871 .Ci 7480dbc14bc90f2d872d434205c0784704213252 | 1893 .Ci 7480dbc14bc90f2d872d434205c0784704213252 |
1872 In the file | 1894 In the file |
1873 .Fn docs/README-ATTACHMENTS , | 1895 .Fn docs/README-ATTACHMENTS , |
1874 he described his motivation to do so as such: | 1896 he described his motivation to do so as such: |
1875 .QS | 1897 .QS |
1876 Although nmh contains the necessary functionality for MIME message handing, | 1898 Although nmh contains the necessary functionality for MIME message |
1877 the interface to this functionality is pretty obtuse. | 1899 handing [sic!], the interface to this functionality is pretty obtuse. |
1878 There's no way that I'm ever going to convince my partner to write | 1900 There's no way that I'm ever going to convince my partner to write |
1879 .Pn mhbuild | 1901 .Pn mhbuild |
1880 composition files! | 1902 composition files! |
1881 .QE | 1903 .QE |
1882 .LP | 1904 .LP |
1907 profile entry is used to specify | 1929 profile entry is used to specify |
1908 the name of the attachment header field. | 1930 the name of the attachment header field. |
1909 It is pre-defined to | 1931 It is pre-defined to |
1910 .Hd Attach . | 1932 .Hd Attach . |
1911 .P | 1933 .P |
1912 To add an attachment to a draft, simply add an attachment header: | 1934 To add an attachment to a draft, a header line needs to be added: |
1913 .VS | 1935 .VS |
1914 To: bob | 1936 To: bob |
1915 Subject: The file you wanted | 1937 Subject: The file you wanted |
1916 Attach: /path/to/the/file-bob-wanted | 1938 Attach: /path/to/the/file-bob-wanted |
1917 -------- | 1939 -------- |
1925 anno -append -nodate -component Attach -text /path/to/attachment | 1947 anno -append -nodate -component Attach -text /path/to/attachment |
1926 VE | 1948 VE |
1927 Drafts with attachment headers are converted to MIME automatically by | 1949 Drafts with attachment headers are converted to MIME automatically by |
1928 .Pn send . | 1950 .Pn send . |
1929 The conversion to MIME is invisible to the user. | 1951 The conversion to MIME is invisible to the user. |
1930 The draft stored in the draft folder is always in source form, with | 1952 The draft stored in the draft folder is always in source form with |
1931 attachment headers. | 1953 attachment headers. |
1932 If the MIMEification fails, for instance because the file to attach | 1954 If the MIMEification fails, for instance because the file to attach |
1933 is not accessible, the original draft is not changed. | 1955 is not accessible, the original draft is not changed. |
1934 .P | 1956 .P |
1935 The attachment system handles the forwarding of messages, too. | 1957 The attachment system handles the forwarding of messages, too. |
1936 If the attachment header value starts with a plus character (`+'), | 1958 If the attachment header value starts with a plus character (`+'), |
1937 like in | 1959 like in |
1938 .Cl "Attach: +bob 30 42" , | 1960 .Cl "Attach: +bob 30 42" , |
1939 The given messages in the specified folder will be attached. | 1961 the given messages in the specified folder will be attached. |
1940 This allowed to simplify | 1962 This allowed to simplify |
1941 .Pn forw . | 1963 .Pn forw . |
1942 .Ci f41f04cf4ceca7355232cf7413e59afafccc9550 | 1964 .Ci f41f04cf4ceca7355232cf7413e59afafccc9550 |
1943 .P | 1965 .P |
1944 Closely related to attachments is non-ASCII text content, | 1966 Closely related to attachments is non-ASCII text content, |
1949 If the user did not call `mime', a broken message would be sent. | 1971 If the user did not call `mime', a broken message would be sent. |
1950 Therefore, the | 1972 Therefore, the |
1951 .Pe automimeproc | 1973 .Pe automimeproc |
1952 profile entry could be specified to have the `mime' command invoked | 1974 profile entry could be specified to have the `mime' command invoked |
1953 automatically each time. | 1975 automatically each time. |
1954 Unfortunately, this approach conflicted with with attachment system | 1976 Unfortunately, this approach conflicted with attachment system |
1955 because the draft would already be in MIME format at the time | 1977 because the draft would already be in MIME format at the time |
1956 when the attachment system wanted to MIMEify it. | 1978 when the attachment system wanted to MIMEify it. |
1957 To use nmh's attachment system, `mime' must not be called at the | 1979 To use nmh's attachment system, `mime' must not be called at the |
1958 WhatNow prompt and | 1980 WhatNow prompt and |
1959 .Pe automimeproc | 1981 .Pe automimeproc |
1966 Mmh's current solution is even more elaborate. | 1988 Mmh's current solution is even more elaborate. |
1967 Any necessary MIMEification is done automatically. | 1989 Any necessary MIMEification is done automatically. |
1968 There is no `mime' command at the WhatNow prompt anymore. | 1990 There is no `mime' command at the WhatNow prompt anymore. |
1969 The draft will be converted automatically to MIME when either an | 1991 The draft will be converted automatically to MIME when either an |
1970 attachment header or non-ASCII text is present. | 1992 attachment header or non-ASCII text is present. |
1971 Further more, the special meaning of the hash character (`#') | 1993 Furthermore, the hash character (`#') is not special any more |
1972 at line beginnings in the draft message is removed. | 1994 at line beginnings in the draft message. |
1973 Users need not at all deal with the whole topic. | 1995 .\" XXX REF ? |
1996 Users need not concern themselves with the whole topic at all. | |
1974 .P | 1997 .P |
1975 Although the new approach does not anymore support arbitrary MIME | 1998 Although the new approach does not anymore support arbitrary MIME |
1976 compositions directly, the full power of | 1999 compositions directly, the full power of |
1977 .Pn mhbuild | 2000 .Pn mhbuild |
1978 can still be accessed. | 2001 can still be accessed. |
1983 .Cl "edit mhbuild | 2006 .Cl "edit mhbuild |
1984 to convert it to MIME. | 2007 to convert it to MIME. |
1985 Because the resulting draft does neither contain non-ASCII characters | 2008 Because the resulting draft does neither contain non-ASCII characters |
1986 nor has it attachment headers, the attachment system will not touch it. | 2009 nor has it attachment headers, the attachment system will not touch it. |
1987 .P | 2010 .P |
1988 The approach taken in mmh is tailored towards todays most common case: | 2011 The approach taken in mmh is tailored towards today's most common case: |
1989 a text part with possibly attachments. | 2012 a text part, possibly with attachments. |
1990 This case is simplified a lot for users. | 2013 This case was simplified. |
1991 | 2014 |
1992 | 2015 |
1993 .U3 "MIME Type Guessing | 2016 .U3 "MIME Type Guessing |
1994 .P | 2017 .P |
1995 The use of | 2018 From the programmer's point of view, the use of |
1996 .Pn mhbuild | 2019 .Pn mhbuild |
1997 composition drafts had one notable advantage over attachment headers | 2020 composition drafts had one notable advantage over attachment headers: |
1998 from the programmer's point of view: The user provides the appropriate | 2021 The user provides the appropriate MIME types for files to include. |
1999 MIME types for files to include. | |
2000 The attachment system needs to find out the correct MIME type itself. | 2022 The attachment system needs to find out the correct MIME type itself. |
2001 This is a difficult task, yet it spares the user irritating work. | 2023 This is a difficult task, yet it spares the user irritating work. |
2002 Determining the correct MIME type of content is partly mechanical, | 2024 Determining the correct MIME type of content is partly mechanical, |
2003 partly intelligent work. | 2025 partly intelligent work. |
2004 Forcing the user to find out the correct MIME type, | 2026 Forcing the user to find out the correct MIME type, |
2024 but not to be used by programs. | 2046 but not to be used by programs. |
2025 It varies much. | 2047 It varies much. |
2026 Nevertheless, modern versions of GNU | 2048 Nevertheless, modern versions of GNU |
2027 .Pn file , | 2049 .Pn file , |
2028 which is prevalent on the popular GNU/Linux systems, | 2050 which is prevalent on the popular GNU/Linux systems, |
2029 provides MIME type output in machine-readable form. | 2051 provide MIME type output in machine-readable form. |
2030 Although this solution is highly system-dependent, | 2052 Although this solution is highly system-dependent, |
2031 it solves the difficult problem well. | 2053 it solves the difficult problem well. |
2032 On systems where GNU | 2054 On systems where GNU |
2033 .Pn file , | 2055 .Pn file , |
2034 version 5.04 or higher, is available it should be used. | 2056 version 5.04 or higher, is available it should be used. |
2048 If no MIME type can be determined, text content gets sent as | 2070 If no MIME type can be determined, text content gets sent as |
2049 `text/plain' and anything else under the generic fall-back type | 2071 `text/plain' and anything else under the generic fall-back type |
2050 `application/octet-stream'. | 2072 `application/octet-stream'. |
2051 It is not possible in mmh to override the automatic MIME type guessing | 2073 It is not possible in mmh to override the automatic MIME type guessing |
2052 for a specific file. | 2074 for a specific file. |
2053 To do so, the user would need to know in advance for which file | 2075 To do so, either the user would need to know in advance for which file |
2054 the automatic guessing does fail, or the system would require interaction. | 2076 the automatic guessing fails, or the system would require interaction. |
2055 I consider both cases impractical. | 2077 I consider both cases impractical. |
2056 The existing solution should be sufficient. | 2078 The existing solution should be sufficient. |
2057 If not, the user may always fall back to | 2079 If not, the user may always fall back to |
2058 .Pn mhbuild | 2080 .Pn mhbuild |
2059 composition drafts and ignore the attachment system. | 2081 composition drafts and ignore the attachment system. |
2134 .Sw -force | 2156 .Sw -force |
2135 option. | 2157 option. |
2136 Users will likely need to invoke | 2158 Users will likely need to invoke |
2137 .Pn mhstore | 2159 .Pn mhstore |
2138 a second time with | 2160 a second time with |
2139 .Sw -force | 2161 .Sw -force . |
2140 then. | 2162 Eventually, only the user can decide in the specific case. |
2141 Eventually, only the user can decide in the concrete case. | |
2142 This requires interaction, which I like to avoid if possible. | 2163 This requires interaction, which I like to avoid if possible. |
2143 Appending a unique suffix to the filename is another bad option. | 2164 Appending a unique suffix to the filename is another bad option. |
2144 For now, the behavior remains as it is. | 2165 For now, the behavior remains as it is. |
2145 .P | 2166 .P |
2146 In mmh, only MIME parts of type message are special in | 2167 In mmh, only MIME parts of type message are special in |
2147 .Pn mhstore 's | 2168 .Pn mhstore 's |
2148 .Sw -auto | 2169 .Sw -auto |
2149 mode. | 2170 mode. |
2150 Instead of storing message/rfc822 parts as files to disk, | 2171 Instead of storing message/rfc822 parts as files to disk, |
2151 they are stored as messages into the current mail folder. | 2172 they are stored as messages into the current mail folder. |
2152 The same applies to message/partial, only, the parts are reassembled | 2173 The same applies to message/partial, although the parts are |
2153 automatically before. | 2174 automatically reassembled beforehand. |
2154 Parts of type message/external-body are not automatically retrieved | 2175 MIME parts of type message/external-body are not automatically retrieved |
2155 anymore. Instead, Information on how to retrieve them is output. | 2176 anymore. |
2177 Instead, information on how to retrieve them is output. | |
2156 Not supporting this rare case saved nearly one thousand lines of code. | 2178 Not supporting this rare case saved nearly one thousand lines of code. |
2157 .Ci 55e1d8c654ee0f7c45b9361ce34617983b454c32 | 2179 .Ci 55e1d8c654ee0f7c45b9361ce34617983b454c32 |
2158 .\" XXX mention somewhere else too: (The profile entry `nmh-access-ftp' | 2180 .\" XXX mention somewhere else too: (The profile entry `nmh-access-ftp' |
2159 .\" and sbr/ruserpass.c for reading ~/.netrc are gone now.) | 2181 .\" and sbr/ruserpass.c for reading ~/.netrc are gone now.) |
2160 Not special anymore is `application/octet-stream; type=tar'. | 2182 `application/octet-stream; type=tar' is not special anymore. |
2161 Automatically extracting such MIME parts had been the dangerous part | 2183 Automatically extracting such MIME parts had been the dangerous part |
2162 of the | 2184 of the |
2163 .Sw -auto | 2185 .Sw -auto |
2164 mode. | 2186 mode. |
2165 .Ci 94c80042eae3383c812d9552089953f9846b1bb6 | 2187 .Ci 94c80042eae3383c812d9552089953f9846b1bb6 |
2184 information on how to display the individual parts. | 2206 information on how to display the individual parts. |
2185 I adjusted | 2207 I adjusted |
2186 .Pn mhshow 's | 2208 .Pn mhshow 's |
2187 behavior to the modern view on the topic. | 2209 behavior to the modern view on the topic. |
2188 .P | 2210 .P |
2189 Note that this section completely ignores the original | 2211 One should note that this section completely ignores the original |
2190 .Pn show | 2212 .Pn show |
2191 program, because it was not capable to display MIME messages | 2213 program, because it was not capable to display MIME messages |
2192 and is no longer part of mmh. | 2214 and is no longer part of mmh. |
2193 Although | 2215 Although |
2194 .Pn mhshow | 2216 .Pn mhshow |
2195 was renamed to | 2217 was renamed to |
2196 .Pn show | 2218 .Pn show |
2197 in mmh, this section uses the name | 2219 in mmh, this section uses the name |
2198 .Pn mhshow , | 2220 .Pn mhshow , |
2199 in order to avoid confusion. | 2221 in order to avoid confusion. |
2222 .\" XXX ref to other section | |
2200 .P | 2223 .P |
2201 In mmh, the basic idea is that | 2224 In mmh, the basic idea is that |
2202 .Pn mhshow | 2225 .Pn mhshow |
2203 should display a message in one single pager session. | 2226 should display a message in one single pager session. |
2204 Therefore, | 2227 Therefore, |