comparison discussion.roff @ 164:5c01017be420

Reacted to suggestions by Aaron Mueller.
author markus schnalke <meillo@marmaro.de>
date Mon, 09 Jul 2012 23:42:59 +0200
parents 8b411125645d
children ea6eec1722d1
comparison
equal deleted inserted replaced
163:0628571d32d7 164:5c01017be420
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 .\" XXX homepages verlinken
29 Procmail is a specialized MDA, and Fetchmail is a specialized MRA. 29 Procmail is a specialized MDA, and Fetchmail is a specialized MRA.
30 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
31 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.
32 .\" XXX mail agent picture here
32 .P 33 .P
33 Doing something well, requires to focus on a small set of specific aspects. 34 Doing something well, requires to focus on a small set of specific aspects.
34 Under the assumption that focused development produces better results 35 Under the assumption that focused development produces better results
35 in the particular area, specialized projects will be superior 36 in the particular area, specialized projects will be superior
36 in their field of focus. 37 in their field of focus.
163 mcilroy bstj foreword 164 mcilroy bstj foreword
164 .] 165 .]
165 Here, this part of the Unix philosophy was applied not only 166 Here, this part of the Unix philosophy was applied not only
166 to the programs but to the project itself. 167 to the programs but to the project itself.
167 In other words: 168 In other words:
168 ``Develop projects that focus on one thing and do it well.'' 169 Develop projects that focus on one thing and do it well.
169 Projects grown complex should be split for the same reasons programs grown 170 Projects grown complex should be split for the same reasons programs
170 complex should be split. 171 grown complex should be split.
171 If it is conceptionally more elegant to have the MSA and MRA as 172 If it is conceptionally more elegant to have the MSA and MRA as
172 separate projects then they should be separated. 173 separate projects then they should be separated.
173 This is the case here, in my opinion. 174 This is the case here, in my opinion.
174 The RFCs propose this separation by clearly distinguishing the different 175 The RFCs propose this separation by clearly distinguishing the different
175 mail handling tasks. 176 mail handling tasks.
192 RFCs started to introduce the concept of mail agents to separate the 193 RFCs started to introduce the concept of mail agents to separate the
193 various tasks because they became more extensive and new tasks appeared. 194 various tasks because they became more extensive and new tasks appeared.
194 As the mail systems grew even more, parts were split off. 195 As the mail systems grew even more, parts were split off.
195 In nmh, for instance, the POP server, which was included in the original 196 In nmh, for instance, the POP server, which was included in the original
196 MH, was removed. 197 MH, was removed.
197 Now is the time to go one step further and split the MSA and MRA off, too. 198 Now is the time to go one step further and split off the MSA and MRA, too.
198 Not only does this decrease the code size of the project, 199 Not only does this decrease the code size of the project,
199 but, more important, it unburdens mmh of the whole field of 200 but, more important, it unburdens mmh of the whole field of
200 message transfer with all its implications for the project. 201 message transfer with all its implications for the project.
201 There is no more need to concern with changes in network transfer. 202 There is no more need to concern with changes in network transfer.
202 This independence is received by depending on an external program 203 This independence is received by depending on an external program
555 was reworked to behave more like 556 was reworked to behave more like
556 .Pn show 557 .Pn show
557 first. 558 first.
558 (cf. Sec. 559 (cf. Sec.
559 .Cf mhshow ) 560 .Cf mhshow )
561 .\" XXX code commits?
560 Once the tools behaved more alike, the replacing appeared to be 562 Once the tools behaved more alike, the replacing appeared to be
561 even more natural. 563 even more natural.
562 Today, mmh's new 564 Today, mmh's new
563 .Pn show 565 .Pn show
564 has become the one single message display program once more, 566 has become the one single message display program once more,
645 of the original program. 647 of the original program.
646 More variations require more testing and maintenance work. 648 More variations require more testing and maintenance work.
647 .P 649 .P
648 Two other options only specified default configuration values: 650 Two other options only specified default configuration values:
649 .Sw --with-mts 651 .Sw --with-mts
650 defined the default transport service, either 652 defined the default transport service.
651 .Ar smtp
652 or
653 .Ar sendmail .
654 .\" XXX naechster Satz ganz raus?
655 In mmh this fixed to
656 .Ar sendmail .
657 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226 653 .Ci f6aa95b724fd8c791164abe7ee5468bf5c34f226
658 With 654 With
659 .Sw --with-smtpservers 655 .Sw --with-smtpservers
660 default SMTP servers for the 656 default SMTP servers could be specified.
661 .Ar smtp
662 transport service could be specified.
663 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9 657 .Ci 128545e06224233b7e91fc4c83f8830252fe16c9
664 Both of them became irrelevant. 658 Both of them became irrelevant when the SMTP transport service was removed.
659 .\" XXX code ref
660 In mmh, all messages are handed over to
661 .Pn sendmail
662 for transportation.
663
665 664
666 .U3 "Backup Prefix 665 .U3 "Backup Prefix
667 .P 666 .P
668 The backup prefix is the string that was prepended to message 667 The backup prefix is the string that was prepended to message
669 filenames to tag them as deleted. 668 filenames to tag them as deleted.
705 it suited better. 704 it suited better.
706 .P 705 .P
707 Eventually, however, the new trash folder concept 706 Eventually, however, the new trash folder concept
708 (cf. Sec. 707 (cf. Sec.
709 .Cf trash-folder ) 708 .Cf trash-folder )
710 obsoleted the concept of the backup prefix completely. 709 removed the need for the backup prefix completely.
711 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173 710 .Ci 8edc5aaf86f9f77124664f6801bc6c6cdf258173
712 .Ci ca0b3e830b86700d9e5e31b1784de2bdcaf58fc5 711 .Ci ca0b3e830b86700d9e5e31b1784de2bdcaf58fc5
713 712
714 713
715 .U3 "Editor and Pager 714 .U3 "Editor and Pager
995 .Cl "-truncate" . 994 .Cl "-truncate" .
996 Every program in mmh has two generic switches: 995 Every program in mmh has two generic switches:
997 .Sw -help , 996 .Sw -help ,
998 to print a short message on how to use the program, and 997 to print a short message on how to use the program, and
999 .Sw -Version 998 .Sw -Version
1000 [sic!], to tell what version of mmh the program belongs to. 999 (with capital `V'), to tell what version of mmh the program belongs to.
1001 .P 1000 .P
1002 Switches change the behavior of programs. 1001 Switches change the behavior of programs.
1003 Programs that do one thing in one way require no switches. 1002 Programs that do one thing in one way require no switches.
1004 In most cases, doing something in exactly one way is too limiting. 1003 In most cases, doing something in exactly one way is too limiting.
1005 If there is basically one task to accomplish, but it should be done 1004 If there is basically one task to accomplish, but it should be done
1101 .U3 "Draft Folder Facility 1100 .U3 "Draft Folder Facility
1102 .P 1101 .P
1103 A change early in the project was the complete transition from 1102 A change early in the project was the complete transition from
1104 the single draft message to the draft folder facility. 1103 the single draft message to the draft folder facility.
1105 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860 1104 .Ci 337338b404931f06f0db2119c9e145e8ca5a9860
1105 .\" XXX ref to section ...
1106 The draft folder facility was introduced in the mid-eighties, when 1106 The draft folder facility was introduced in the mid-eighties, when
1107 Rose and Romine called it a ``relatively new feature''. 1107 Rose and Romine called it a ``relatively new feature''.
1108 .[ 1108 .[
1109 rose romine real work 1109 rose romine real work
1110 .] 1110 .]
1136 was removed. 1136 was removed.
1137 The special treatment of \fIthe\fP draft message became irrelevant after 1137 The special treatment of \fIthe\fP draft message became irrelevant after
1138 the rework of the draft system. 1138 the rework of the draft system.
1139 (cf. Sec. 1139 (cf. Sec.
1140 .Cf draft-folder ) 1140 .Cf draft-folder )
1141 Equally, 1141 Furthermore,
1142 .Pn comp 1142 .Pn comp
1143 lost its 1143 no longer needs a
1144 .Sw -file 1144 .Sw -file
1145 switch. 1145 switch as the draft folder facility together with the
1146 The draft folder facility, together with the
1147 .Sw -form 1146 .Sw -form
1148 switch, are sufficient. 1147 switch are sufficient.
1149 1148
1150 1149
1151 .U3 "In Place Editing 1150 .U3 "In Place Editing
1152 .P 1151 .P
1153 .Pn anno 1152 .Pn anno
1187 .Sw -noinplace 1186 .Sw -noinplace
1188 behavior, which already had been the default. 1187 behavior, which already had been the default.
1189 Nmh's 1188 Nmh's
1190 .Mp burst (1) 1189 .Mp burst (1)
1191 man page reads: 1190 man page reads:
1192 .sp \n(PDu
1193 .QS 1191 .QS
1194 If -noinplace is given, each digest is preserved, no table 1192 If
1193 .Sw -noinplace
1194 is given, each digest is preserved, no table
1195 of contents is produced, and the messages contained within 1195 of contents is produced, and the messages contained within
1196 the digest are placed at the end of the folder. Other messages 1196 the digest are placed at the end of the folder. Other messages
1197 are not tampered with in any way. 1197 are not tampered with in any way.
1198 .QE 1198 .QE
1199 .LP 1199 .LP
1276 1276
1277 .U3 "MIME Tools 1277 .U3 "MIME Tools
1278 .P 1278 .P
1279 The MIME tools, which were once part of 1279 The MIME tools, which were once part of
1280 .Pn mhn 1280 .Pn mhn
1281 [sic!], 1281 .\" XXX
1282 (whatever that stood for),
1282 had several switches that added little practical value to the programs. 1283 had several switches that added little practical value to the programs.
1283 The 1284 The
1284 .Sw -[no]realsize 1285 .Sw -[no]realsize
1285 switches of 1286 switches of
1286 .Pn mhbuild 1287 .Pn mhbuild
1408 .Ci ee4f43cf2ef0084ec698e4e87159a94c01940622 1409 .Ci ee4f43cf2ef0084ec698e4e87159a94c01940622
1409 This switch had introduced an awkward behavior, as explained in nmh's 1410 This switch had introduced an awkward behavior, as explained in nmh's
1410 man page for 1411 man page for
1411 .Mp comp (1): 1412 .Mp comp (1):
1412 .QS 1413 .QS
1413 The \-editor editor switch indicates the editor to use for 1414 The
1414 the initial edit. Upon exiting from the editor, comp will 1415 .Sw -editor
1415 invoke the whatnow program. See whatnow(1) for a discussion 1416 .Ar editor
1416 of available options. The invocation of this program can be 1417 switch indicates the editor to use for
1417 inhibited by using the \-nowhatnowproc switch. (In truth of 1418 the initial edit. Upon exiting from the editor,
1418 fact, it is the whatnow program which starts the initial 1419 .Pn comp
1419 edit. Hence, \-nowhatnowproc will prevent any edit from 1420 will invoke the
1420 occurring.) 1421 .Pn whatnow
1422 program. See
1423 .Mp whatnow (1)
1424 for a discussion of available options.
1425 The invocation of this program can be
1426 inhibited by using the
1427 .Sw -nowhatnowproc
1428 switch. (In truth of fact, it is the
1429 .Pn whatnow
1430 program which starts the initial edit.
1431 Hence,
1432 .Sw -nowhatnowproc
1433 will prevent any edit from occurring.)
1421 .QE 1434 .QE
1422 .P 1435 .P
1423 Effectively, the 1436 Effectively, the
1424 .Sw -nowhatnowproc 1437 .Sw -nowhatnowproc
1425 switch creates only a draft message. 1438 switch creates only a draft message.
1508 was removed because what use was it anyway? 1521 was removed because what use was it anyway?
1509 .QS 1522 .QS
1510 Normally when a message is refiled, for each destination 1523 Normally when a message is refiled, for each destination
1511 folder it is assigned the number which is one above the current 1524 folder it is assigned the number which is one above the current
1512 highest message number in that folder. Use of the 1525 highest message number in that folder. Use of the
1513 \-preserv [sic!] switch will override this message renaming, and try 1526 .Sw -preserv
1527 [sic!] switch will override this message renaming, and try
1514 to preserve the number of the message. If a conflict for a 1528 to preserve the number of the message. If a conflict for a
1515 particular folder occurs when using the \-preserve switch, 1529 particular folder occurs when using the
1516 then refile will use the next available message number which 1530 .Sw -preserve
1531 switch, then
1532 .Pn refile
1533 will use the next available message number which
1517 is above the message number you wish to preserve. 1534 is above the message number you wish to preserve.
1518 .QE 1535 .QE
1519 1536
1520 .BU 1537 .BU
1521 The removal of the 1538 The removal of the
1583 1600
1584 1601
1585 .\" -------------------------------------------------------------- 1602 .\" --------------------------------------------------------------
1586 .H1 "Modernizing 1603 .H1 "Modernizing
1587 .P 1604 .P
1588 In the more thirty years of MH's existence, its code base was 1605 In the more than thirty years of MH's existence, its code base was
1589 increasingly extended. 1606 increasingly extended.
1590 New features entered the project and became alternatives to the 1607 New features entered the project and became alternatives to the
1591 existing behavior. 1608 existing behavior.
1592 Relicts from several decades have gathered in the code base, 1609 Relicts from several decades have gathered in the code base,
1593 but seldom obsolete features were dropped. 1610 but seldom obsolete features were dropped.
1616 .QS 1633 .QS
1617 let's stop walking on egg shells with this code base. there's no need to 1634 let's stop walking on egg shells with this code base. there's no need to
1618 discuss whether to keep using vfork, just note in [sic!] passing, [...] 1635 discuss whether to keep using vfork, just note in [sic!] passing, [...]
1619 we don't need a separate branch for removing vmh 1636 we don't need a separate branch for removing vmh
1620 or ridding ourselves of #ifdef's or removing posix replacement functions 1637 or ridding ourselves of #ifdef's or removing posix replacement functions
1621 or depending on pure ansi/posix "libc". 1638 or depending on pure ansi/posix ``libc''.
1622 .QP 1639 .QP
1623 these things should each be a day or two of work and the "main branch" 1640 these things should each be a day or two of work and the ``main branch''
1624 should just be modern. [...] 1641 should just be modern. [...]
1625 let's push forward, aggressively. 1642 let's push forward, aggressively.
1626 .QE 1643 .QE
1627 .LP 1644 .LP
1628 I did so already in the months before. 1645 I did so already in the months before.
2554 .U3 "Trash Folder 2571 .U3 "Trash Folder
2555 .Id trash-folder 2572 .Id trash-folder
2556 .P 2573 .P
2557 Similar to the situation for drafts is the situation for removed messages. 2574 Similar to the situation for drafts is the situation for removed messages.
2558 Historically, a message was ``deleted'' by prepending a specific 2575 Historically, a message was ``deleted'' by prepending a specific
2559 \fIbackup prefix\fP, usually the comma character, 2576 \fIbackup prefix\fP, usually the comma character, to the file name.
2560 to the file name. 2577 The specific file would then be ignored by MH because only files with
2561 The specific message would vanish from MH because only files with 2578 names consisting of digits only are treated as messages.
2562 non-digit characters in their name are not treated as messages.
2563 Although files remained in the file system, 2579 Although files remained in the file system,
2564 the messages were no more visible in MH. 2580 the messages were no more visible in MH.
2565 To truly delete them, a maintenance job is needed. 2581 To truly delete them, a maintenance job is needed.
2566 Usually a cron job is installed to delete them after a grace time. 2582 Usually a cron job is installed to delete them after a grace time.
2567 For instance: 2583 For instance:
2568 .VS 2584 .VS
2569 find $HOME/Mail -type f -name ',*' -ctime +7 -delete 2585 find $HOME/Mail -type f -name ',*' -ctime +7 -delete
2570 VE 2586 VE
2571 In such a setup, the original message can be restored 2587 In such a setup, the original message can be restored
2572 within the grace time interval by stripping the 2588 within the grace time interval by stripping the
2573 the backup prefix from the file name. 2589 backup prefix from the file name.
2574 But one can not rely on this statement. 2590 But the user can not rely on this statement.
2575 If the last message of a folder with six messages (1-6) is removed, 2591 If the last message of a folder with six messages (1-6) is removed,
2576 message 2592 message
2577 .Fn 6 , 2593 .Fn 6 ,
2578 becomes file 2594 becomes file
2579 .Fn ,6 . 2595 .Fn ,6 .
2580 If then a new message enters the same folder, it will be given 2596 If then a new message enters the same folder, it will be given
2581 the number one higher than the highest existing message. 2597 the number one higher than the highest message.
2582 In this case the message is named 2598 In this case the message is named
2583 .Fn 6 2599 .Fn 6
2584 then. 2600 then.
2585 If this message is removed as well, 2601 If this message is removed as well,
2586 then the backup of the former message gets overwritten. 2602 then the backup of the former message gets overwritten.
2592 is such a clear assertion. 2608 is such a clear assertion.
2593 With the addition ``... unless a message with the same name in the 2609 With the addition ``... unless a message with the same name in the
2594 same folder is removed before.'' the statement becomes complex. 2610 same folder is removed before.'' the statement becomes complex.
2595 A user will hardly be able to keep track of any removal to know 2611 A user will hardly be able to keep track of any removal to know
2596 if the assertion still holds true for a specific file. 2612 if the assertion still holds true for a specific file.
2597 The the real mechanism is practically obscure to the user. 2613 In practice, the real mechanism is unclear to the user.
2598 The consequences of further removals are not obvious. 2614 The consequences of further removals are not obvious.
2599 .P 2615 .P
2600 Further more, the backup files are scattered within the whole mail storage. 2616 Further more, the backup files are scattered within the whole mail storage.
2601 This complicates managing them. 2617 This complicates managing them.
2602 It is possible, with help of 2618 It is possible with the help of
2603 .Pn find , 2619 .Pn find ,
2604 but everything would be more convenient 2620 but everything would be more convenient
2605 if the deleted messages would be collected in one place. 2621 if the deleted messages would be collected in one place.
2606 .P 2622 .P
2607 The profile entry 2623 The profile entry
2608 .Pe rmmproc 2624 .Pe rmmproc
2609 (previously named 2625 (previously named
2610 .Pe Delete-Prog ) 2626 .Pe Delete-Prog )
2611 was introduced very early to improve the situation. 2627 was introduced very early to improve the situation.
2612 It could be set to any command, which would be executed to removed 2628 It could be set to any command, which would be executed to remove
2613 the specified messages. 2629 the specified messages.
2614 This would override the default action, described above. 2630 This would override the default action, described above.
2615 Refiling the to-be-removed files to a garbage folder is the usual example. 2631 Refiling the to-be-removed files to a garbage folder is the usual example.
2616 Nmh's man page 2632 Nmh's man page
2617 .Mp rmm (1) 2633 .Mp rmm (1)
2629 Removing messages in such a way has advantages. 2645 Removing messages in such a way has advantages.
2630 The mail storage is prevented from being cluttered with removed messages 2646 The mail storage is prevented from being cluttered with removed messages
2631 because they are all collected in one place. 2647 because they are all collected in one place.
2632 Existing and removed messages are thus separated more strictly. 2648 Existing and removed messages are thus separated more strictly.
2633 No backup files are silently overwritten. 2649 No backup files are silently overwritten.
2634 Most important is the ability to keep removed messages in the MH domain. 2650 But most important is the ability to keep removed messages in the MH domain.
2635 Messages in the trash folder can be listed like those in any other folder. 2651 Messages in the trash folder can be listed like those in any other folder.
2636 Deleted messages can be displayed like any other messages. 2652 Deleted messages can be displayed like any other messages.
2637 Restoring a deleted messages can be done with 2653 Restoring a deleted messages can be done with
2638 .Pn refile . 2654 .Pn refile .
2639 All operations on deleted files are still covered by the MH tools. 2655 All operations on deleted files are still covered by the MH tools.
2646 calls 2662 calls
2647 .Pn refile 2663 .Pn refile
2648 to move the to-be-removed message to the trash folder, 2664 to move the to-be-removed message to the trash folder,
2649 .Fn +trash 2665 .Fn +trash
2650 by default. 2666 by default.
2651 To sweep it clean, one can use 2667 To sweep it clean, the user can use
2652 .Cl "rmm -unlink +trash a" , 2668 .Cl "rmm -unlink +trash a" ,
2653 where the 2669 where the
2654 .Sw -unlink 2670 .Sw -unlink
2655 switch causes the files to be unlinked. 2671 switch causes the files to be unlinked.
2656 .P 2672 .P
2665 .Pn rmm 2681 .Pn rmm
2666 invokes 2682 invokes
2667 .Pn refile , 2683 .Pn refile ,
2668 which used to be the other way round. 2684 which used to be the other way round.
2669 Yet, the relationship is simpler now. 2685 Yet, the relationship is simpler now.
2670 No more can loops, like described in nmh's man page for 2686 Loops, like described in nmh's man page for
2671 .Mp refile (1), 2687 .Mp refile (1),
2672 occur: 2688 can no longer occur:
2673 .QS 2689 .QS
2674 Since 2690 Since
2675 .Pn refile 2691 .Pn refile
2676 uses your 2692 uses your
2677 .Pe rmmproc 2693 .Pe rmmproc
3038 .Cl "[-number [num|all]] 3054 .Cl "[-number [num|all]]
3039 and the textual description for the combination with 3055 and the textual description for the combination with
3040 .Sw -list 3056 .Sw -list
3041 read: 3057 read:
3042 .QS 3058 .QS
3043 The -list option produces a listing of the field bodies for 3059 The
3060 .Sw -list
3061 option produces a listing of the field bodies for
3044 header fields with names matching the specified component, 3062 header fields with names matching the specified component,
3045 one per line. The listing is numbered, starting at 1, if 3063 one per line. The listing is numbered, starting at 1, if the
3046 the -number option is also used. 3064 .Sw -number
3065 option is also used.
3047 .QE 3066 .QE
3048 .LP 3067 .LP
3049 The problem was manifold. 3068 The problem was manifold.
3050 The code required a numeric argument to the 3069 The code required a numeric argument to the
3051 .Sw -number 3070 .Sw -number
3340 David Levine posted an explanation, quoting John Romine: 3359 David Levine posted an explanation, quoting John Romine:
3341 .QS 3360 .QS
3342 I asked John Romine and here's what he had to say, which 3361 I asked John Romine and here's what he had to say, which
3343 agrees and provides an example that convinces me: 3362 agrees and provides an example that convinces me:
3344 .QS 3363 .QS
3345 My take on this is that post should not be called by 3364 My take on this is that
3346 users directly, and it doesn't read the .mh_profile 3365 .Pn post
3366 should not be called by users directly, and it doesn't read the
3367 .Fn .mh_profile
3347 (only front-end UI programs read the profile). 3368 (only front-end UI programs read the profile).
3348 .QP 3369 .QP
3349 For example, there can be contexts where post is called 3370 For example, there can be contexts where
3350 by a helper program (like 'mhmail') which may be run by 3371 .Pn post
3351 a non-MH user. We don't want this to prompt the user 3372 is called by a helper program (like `\c
3352 to create an MH profile, etc. 3373 .Pn mhmail ')
3374 which may be run by a non-MH user.
3375 We don't want this to prompt the user to create an MH profile, etc.
3353 .QP 3376 .QP
3354 My suggestion would be to have send pass a (hidden) 3377 My suggestion would be to have
3355 `\-fileproc proc' option to post if needed. You could also 3378 .Pn send
3356 use an environment variable (I think send/whatnow do 3379 pass a (hidden) `\c
3357 this). 3380 .Sw -fileproc
3381 .Ar proc '
3382 option to
3383 .Pn post
3384 if needed.
3385 You could also
3386 use an environment variable (I think
3387 .Pn send /\c
3388 .Pn whatnow
3389 do this).
3358 .QE 3390 .QE
3359 I think that's the way to go. My personal preference is to use a command line option, not an environment variable. 3391 I think that's the way to go.
3392 My personal preference is to use a command line option,
3393 not an environment variable.
3360 .QE 3394 .QE
3361 .P 3395 .P
3362 To solve the problem of 3396 To solve the problem of
3363 .Pn post 3397 .Pn post
3364 not honoring the 3398 not honoring the