|
|
1.1 root 1: % begin text
2: \banner
3: \section{Acknowledgements}
4: The \MH/ system described herein is based on the original Rand \MH/ system.
5: It has been extensively developed (perhaps too much so) by Marshall Rose and
6: John Romine at the University of California, Irvine.
7: Einar Stefferud, Jerry Sweet, and Terry Domae provided numerous suggestions
8: to improve the UCI version of \MH/.
9: \section{Disclaimer}
10: The Regents of the University of California wish to make it known that:
11: \bigquote
12: Although each program has been tested by its contributor,
13: no warranty, express or implied,
14: is made by the contributor or the University of California,
15: as to the accuracy and functioning of the program
16: and related program material,
17: nor shall the fact of distribution constitute any such warranty,
18: and no responsibility is assumed by the contributor
19: or the University of California in connection herewith.
20: \endbigquote
21: \section{Conventions}
22: In this document,
23: certain \TeX -formatting conventions are adhered to:
24: {\advance\leftskip by\parindent
25: \item{1.} The names of \unix/ commands, such as \pgm{comp},
26: are presented in {\it text italics}.
27: \item{2.} Arguments to programs, such as \arg{msgs},
28: are presented in {\sl slanted roman} and delimited by single-quotes.
29: \item{3.} \unix/ pathnames and envariables,
30: such as \file{/usr/uci/} and \file{\$SIGNATURE},
31: are also presented in {\sl slanted roman}.
32: \item{4.} Text presenting an example, such as \eg{frated},
33: is presented in {\tt typewriter style}.
34: \item{5.} Entries in the user's \MH/ \profile/ and \context/ files,
35: such as \entry{Current-Folder},
36: are presented in {\sc Caps-Small-Caps} and delimited by a box.
37: \smallskip}
38: \bop\section{General Changes}
39: This section discusses system-wide changes to \MH/ that are general in nature.
40: \subsection{Message Numbering}
41: In previous versions of \MH/, a folder could have up to \eg{999} messages;
42: in \mh4, this limit has been raised to \eg{1999}.
43: \subsection{Version Information}
44: When any \MH/ command is invoked with the \switch{help} switch,
45: in addition to listing the syntax of the command,
46: the program will list information pertaining to its version.
47: This information includes the version of \MH/,
48: the host it was generated on,
49: and the date the program was loaded.
50: For example,
51: \example MH \#4.25[UCI] (uci-750b) of Thu Jul 19 21:07:01 PDT 1984\endexample
52: The \eg{\#4.25[UCI]} indicates that the program is from the UCI \mh4
53: version of \MH/.
54: The program was generated on \eg{uci-750b},
55: on \eg{Thu Jul 19 21:07:01 PDT 1984}.
56: \par
57: This information is sometimes useful in the unusual circumstance when a bug
58: is found in \MH/.
59: By providing the version information,
60: along with the circumstances concerning the problem with \MH/,
61: the local \MH/ maintainer is better able to track-down the problem.
62: \subsection{The User Context}
63: The \MH/ profile for the user now consists of two parts:
64: a static part, the \profile/, which is found in the user's \file{\$HOME/}
65: directory,
66: and, a dynamic part, the \context/, which is usually found in the user's \MH/
67: directory.
68: The former file contains information which \MH/ commands read,
69: but {\it never\/} write
70: (e.g., command switches).
71: The latter contains information that \MH/ commands read and write,
72: (e.g., \entry{Current-Folder}).
73: \par
74: This change has three advantages over the way things were done in \mh3.
75: \underbar{First},
76: a lot less information gets written out when an \MH/ command exits,
77: if the context changes.
78: This is due to the fact that the user's \context/ file is often much,
79: much smaller than a user's \profile/ file.
80: \underbar{Second},
81: one can keep different context files around
82: (the entry \entry{context} is changed in the user's \profile/ file).%
83: \nfootnote{Note that this entry must be given {\it entirely} in lowercase in
84: the \profile/ file.}
85: Hence, the \MH/ user can maintain different sets of private sequences
86: (explained later),
87: by manipulating different \context/ files.
88: \underbar{Third},
89: if more than one person uses a \unix/ login
90: (say a maintenance account),
91: then each can define their own \file{\$MH} envariable to point to their
92: \profile/ file.
93: As a result,
94: each user has the \MH/ environment which that user is accustomed to.
95: Further,
96: depending on the needs of the users who share the \unix/ login,
97: the same or different contexts may be automatically maintained for that login.
98: \par
99: See \man{mh-profile}(5) for more details on the user context file.
100: \section{Message Selection}
101: A new facility has been added to give the \MH/ user greater power in
102: selecting and referencing messages:
103: first, a change to the \pgm{pick} program is described;
104: second, the notion of user-defined sequences is detailed.
105: \subsection{Selecting Messages}
106: The \pgm{pick} command now does only one thing:
107: it defines sequences based on the selection criterion it is given.
108: In addition, with the \switch{list} switch,
109: \pgm{pick} can be directed to list the numbers of the messages which
110: satisfied the criterion, to the standard output.
111: This is very handy for using \pgm{pick} in backquoted operations with the
112: shell.
113: \subsection{User-Defined Sequences}
114: User-defined sequences allow the \MH/ user a tremendous amount of power
115: in dealing with groups of messages in the same folder
116: by allowing the user to bind a group of messages to a meaningful symbolic
117: name.
118: The user may choose any name for a message sequence,
119: as long as it consists of alphanumeric characters and does not conflict with
120: the standard \MH/ reserved message names (e.g., \arg{first}, etc).
121: After defining a sequence,
122: it can be used wherever a \MH/ command expects a \arg{msg} or \arg{msgs}
123: argument.
124: Although all \MH/ commands expand user-defined sequences as appropriate,
125: there are two commands that allow the user to define and manipulate them:
126: \pgm{pick} and \pgm{mark}.
127: \subsubsection{Pick and User-Defined Sequences}
128: Most users of \MH/ will use only the \pgm{pick} command.
129: By giving the \switch{sequence~name} switch to \pgm{pick}
130: (which can occur more than once on the command line),
131: each sequence named is defined as those messages which \pgm{pick} matched,
132: according the the selection criteria it was given.
133: Hence,
134: \example pick -from frated -seq fred\endexample
135: finds all those messages in the current folder which were from
136: \eg{frated},
137: creates a sequence called \eg{fred},
138: and then adds them to the sequence.
139: The user could then invoke
140: \example scan fred\endexample
141: to get a \pgm{scan} listing of those messages.
142: Note that by default,
143: \pgm{pick} creates the named sequences
144: before it adds the selected messages to the sequence.
145: Hence, if the named sequence already existed,
146: the sequence is destroyed prior to being re-defined
147: (nothing happens to the messages that were a part of this sequence,
148: they simply cease to be members of that sequence).
149: By using the \switch{nozero} switch, this behavior can be inhibited,
150: as in
151: \example
152: pick -from frated -seq sgroup\\
153: pick -from fear -seq sgroup -nozero\\
154: pick -from freida -seq sgroup -nozero%
155: \endexample
156: which finds all those messages in the current folder which were from
157: \eg{frated}, \eg{fear}, or \eg{freida},
158: and defines the sequence called \eg{sgroup} as exactly those messages.
159: These operations amounted to an ``inclusive-or'' of three selection
160: criteria.
161: Using \pgm{pick},
162: one can also generate the ``and'' of some selection criteria as well:
163: \example
164: pick -from frated -seq fred\\
165: pick -before friday -seq fred -nozero fred%
166: \endexample
167: This example defines the sequence called \eg{fred} as exactly those
168: messages from \eg{frated} that were dated prior to \eg{friday}.
169: \par
170: \pgm{Pick} is normally used as a back-quoted command,
171: for example,
172: \example scan \bq{pick -from postmaster}\endexample
173: Now suppose that the user decides that another command should be issued,
174: using exactly those messages.
175: Since,
176: \pgm{pick} wasn't given a \switch{sequence~name} argument in this example,
177: the user would end-up typing the entire back-quoted command again.
178: A simpler way is to add a default sequence name to the \profile/ file.
179: For example,
180: \example pick: -sequence select -list\endexample
181: will tell \pgm{pick} to always define the sequence \eg{select} whenever
182: it's run.
183: The \switch{list} is necessary since the \switch{sequence~name} switch sets
184: \switch{nolist}
185: whenever the former is encountered.
186: Hence, this profile entry makes \pgm{pick} define the \eg{select}
187: sequence and otherwise behave exactly as if it had no profile entry at all.
188: \par
189: Finally,
190: previous versions of \pgm{pick} balked if a selection criterion was not given.
191: The \mh4 version of \pgm{pick} does not, and merely matches the messages that
192: were specified.
193: This lets the \MH/ user type something such as
194: \example show \bq{pick last:20 -seq fear}\endexample
195: instead of typing
196: \example
197: mark -add -nozero -seq fear last:20\\
198: show fear%
199: \endexample
200: \subsubsection{Mark and User-Defined Sequences}
201: The \pgm{mark} command lets the user perform low-level manipulation of
202: sequences,
203: and also provides a well-needed debug facility to the
204: implementors/developers/maintainers of \MH/ (the \MH/-hacks).
205: In the future, a user-friendly ``front-end'' for \pgm{mark} will
206: probably be developed to give the \MH/ user a way to take better
207: advantage of the underlying facilities.
208: \subsubsection{Public and Private User-Defined Sequences}
209: There are two kinds of sequences: {\it public\/} sequences,
210: and {\it private\/} sequences.
211: {\it Public\/} sequences of a folder are accessible to any \MH/ user who
212: can read that folder.
213: {\it Private\/} sequences are accessible only to the \MH/ user who defined
214: those sequences.
215: By default,
216: \pgm{pick} (and \pgm{mark\/}) create {\it public\/} sequences
217: if the folder for which the sequences are being defined is writable by the
218: \MH/ user.
219: Otherwise, {\it private\/} sequences are created.
220: This can be overridden with the \switch{public} and \switch{private} switches.
221: \subsubsection{Sequence Negation}
222: In addition to telling a \MH/ command to use the messages in the sequence
223: \eg{seen}, as in
224: \example refile seen +old\endexample
225: it would be useful to be easily able to tell a \MH/ command to use all
226: messages {\it except\/} those in the sequence.
227: One way of doing this would be to use \pgm{mark} and define the sequence
228: explicitly,
229: as in
230: \example mark -delete -zero seen -seq notseen\endexample
231: which,
232: owing to \pgm{mark\/}'s cryptic interpretation of \switch{delete} and
233: \switch{zero},
234: defines the sequence \eg{notseen} to be all messages not in the sequence
235: \eg{seen}.
236: Naturally,
237: anytime the sequence \eg{seen} is changed,
238: \eg{notseen} will have to be updated.
239: Another way to achieve this is to define the entry
240: \entry{Sequence-Negation} in the \profile/ file.
241: If the entry was
242: \example Sequence-Negation: not\endexample
243: then anytime a \MH/ command was given \eg{notseen} as a \arg{msg} or
244: \arg{msgs} argument,
245: it would substitute all messages that are not a member of the sequence
246: \eg{seen}.
247: That is,
248: \example refile notseen +new\endexample
249: does just that.
250: The value of the \entry{Sequence-Negation} entry in the profile can be
251: any string.
252: Hence,
253: experienced users of \MH/ do not use a word,
254: but rather a special character which their shell does not interpret
255: (users of the \pgm{CShell} use a single carat, \eg{`\^'},
256: while users of the Bourne shell use an exclamation-mark, \eg{`!'\/}).
257: This is because there is nothing to prevent a user of \MH/ from defining a
258: sequence with this string as its prefix,
259: if the string is nothing but letters and digits.
260: Obviously,
261: this could lead to confusing behavior
262: if the \entry{Sequence-Negation} entry leads \MH/ to believe that two
263: sequences are opposites, by virtue of their names differing by the prefix
264: string.
265: \subsubsection{The Previous Sequence}
266: Many times users find themselves issuing a series of commands on the same
267: sequences of messages.
268: If the user first defined these messages as a sequence,
269: then considerable typing may be saved.
270: If the user doesn't have this foresight,
271: \MH/ provides a handy way of remembering the \arg{msgs} or
272: \arg{msg} argument last given to a \MH/ command by the user.
273: If the entry \entry{Previous-Sequence} is defined in the \profile/ file,
274: then when the command finishes,
275: it will define the sequence(s) named in the value of this entry as being
276: defined as those messages that were specified.
277: Hence, a profile entry of
278: \example Previous-Sequence: pseq\endexample
279: directs any \MH/ command that accepts a \arg{msg} or \arg{msgs} argument to
280: define the sequence \eg{pseq} as those messages when it finishes.
281: More than one sequence name may be placed in this entry,
282: separated with spaces.
283: The one disadvantage of this approach
284: is that all \MH/ commands have to update the sequence information for
285: the folder each time they run
286: (although most commands read this information,
287: usually only \pgm{pick} and \pgm{mark} have to write this information out).
288: \section{Composition of Mail}
289: Two new facilities have been added to give the \MH/ user greater power in
290: composing and sending mail:
291: the {\it draft folder},
292: which allows a user to maintain a folder of message drafts;
293: and, {\it draft pushing},
294: which permits a user to \pgm{send} the current draft in the background.
295: \subsection{The Draft Folder}
296: The \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands have two
297: hidden switches, \switch{draftfolder~+folder} and \switch{draftmessage~msg}.
298: If \switch{draftfolder~+folder} is used,
299: these commands are directed to construct a draft message in the indicated
300: folder.
301: If \switch{draftmessage~msg} is not used, it defaults to \arg{new}
302: (unless the user invokes \pgm{comp} with \switch{use},
303: in which case the default is \arg{cur}).
304: Hence, the user may have several message compositions in progress
305: simultaneously.
306: Now, all of the \MH/ tools are available on each of the user's message
307: drafts
308: (e.g., \pgm{show}, \pgm{scan}, \pgm{pick}, and so on).
309: If the folder does not exist,
310: the user is asked if it should be created (just like with \pgm{refile\/}).
311: Also,
312: the last draft message the user was composing is known as \arg{cur} in the
313: draft folder.
314: \par
315: Furthermore,
316: the \pgm{send} command has these switches as well.
317: Hence, from the shell,
318: the user can send off whatever drafts desired using the
319: standard \MH/ \arg{msgs} convention with \switch{draftmessage msgs}.
320: If no \arg{msgs} are given, it defaults to \arg{cur}.
321: \par
322: In addition,
323: all five programs have a \switch{nodraftfolder} switch,
324: which undoes the last occurance of \switch{draftfolder~folder}
325: (useful if the latter occurs in the user's \MH/ profile).
326: \par
327: If the user does not give the \switch{draftfolder~+folder} switch,
328: then all these commands act ``normally''.
329: Note that the \switch{draft} switch to \pgm{send} and \pgm{show}
330: still refers to the file called \eg{draft} in the user's \MH/
331: directory.
332: In the interests of economy of expression,
333: when using \pgm{comp} or \pgm{send},
334: the user needn't prefix the draft \arg{msg} or \arg{msgs} with
335: \switch{draftmessage}.
336: Both of these commands accept a \arg{file} or \arg{files} argument,
337: and they will, if given \switch{draftfolder~+folder} treat these arguments
338: as \arg{msg} or \arg{msgs}.%
339: \nfootnote{This may appear to be inconsistant, at first,
340: but it saves a lot of typing.}
341: Hence,
342: \example send -draftf +draft first\endexample
343: is the same as
344: \example send -draftf +draft -draftm first\endexample
345: \par
346: To make all this a bit more clear, here are some examples.
347: Let's assume that the following entries are in the \profile/ file:
348: \example
349: comp: -draftfolder +draft\\
350: dist: -draftfolder +draft\\
351: forw: -draftfolder +draft\\
352: repl: -draftfolder +draft\\
353: sendf: -draftfolder +draft%
354: \endexample
355: Furthermore,
356: let's assume that the program \pgm{sendf} is a symbolic link in the user's
357: \file{\$HOME/bin/} directory to \pgm{send}.
358: Then, any of the commands
359: \example
360: comp\\
361: dist\\
362: forw\\
363: repl%
364: \endexample
365: constructs the message draft in the \eg{draft} folder using the \arg{new}
366: message number.
367: Furthermore,
368: they each define \arg{cur} in this folder to be that message draft.
369: If the user were to use the \pgm{quit} option at \whatnow/ level,
370: then later on,
371: if no other draft composition was done,
372: the draft could be sent with simply
373: \example sendf\endexample
374: Or,
375: if more editing was required,
376: the draft could be edited with
377: \example comp -use\endexample
378: Instead,
379: if other drafts had been composed in the meantime,
380: so that this message draft was no longer known as \arg{cur} in the \eg{draft}
381: folder,
382: then the user could \pgm{scan} the folder to see which message draft in the
383: folder should be used for editing or sending.
384: Clever users could even employ \pgm{pick} to do the work:
385: \example
386: comp -use \bq{pick +draft -to bug-mh}\\
387: \noalign{\leftline{or}}
388: sendf \bq{pick +draft -to bug-mh}%
389: \endexample
390: Note that in the \pgm{comp} example,
391: the output from \pgm{pick} must resolve to a single message draft
392: (it makes no sense to talk about composing two or more drafts with one
393: invocation of \pgm{comp\/}).
394: In contrast,
395: in the \pgm{send} example,
396: as many message drafts as desired can appear,
397: since \pgm{send} doesn't mind sending more than one draft at a time.
398: \par
399: Note that the argument \switch{draftfolder~+folder} is not
400: included in the profile entry for \pgm{send},
401: since when \pgm{comp}, et. al., invoke \pgm{send} directly,
402: they supply \pgm{send} with the \unix/ pathname of the message draft,
403: and {\it not} a \arg{draftmessage~msg} argument.
404: As far as \pgm{send} is concerned,
405: a {\it draft folder} is not being used.
406: \par
407: It is important to realize that \MH/ treats the draft folder like a standard
408: \MH/ folder in nearly all respects.
409: There are two exceptions:
410: \underbar{first}
411: under no circumstancs will the \arg{draftfolder~folder} switch cause the
412: named folder to become the current folder.%
413: \nfootnote{Obviously,
414: if the folder appeared in the context of a standard \arg{+folder}
415: argument to an \MH/ program, as in
416: \example scan +draft\endexample
417: it might become the current folder, depending on the context changes of the
418: \MH/ program in question.}
419: \underbar{Second},
420: although conceptually \pgm{send} deletes the \arg{msgs} named in the draft
421: folder,
422: it does not call \entry{delete-prog} to perform the deletion.
423: \subsection{What Happens if the Draft Exists}
424: When the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands are
425: invoked and the draft you indicated already exists,
426: these programs will prompt the user for a reponse directing the program's
427: action.
428: In \mh4, the prompt is
429: \begingroup
430: \smallertype
431: \example
432: ``/usr/src/uci/mh/mhbox/draft'' exists; replace, list, or quit?%
433: \endexample
434: \endgroup
435: The appropriate responses and their meanings are:
436: \smallskip
437: {\advance\leftskip by\parindent
438: \item{\underbar{replace}:} deletes the draft and starts afresh.
439: \item{\underbar{list}:} lists the draft.
440: \item{\underbar{quit}:} leaves the draft intact and exits.
441: \smallskip}
442: \noindent
443: In addition, if you specified \switch{draftfolder~folder} to the command,
444: then one other response will be accepted:
445: \smallskip
446: {\advance\leftskip by\parindent
447: \item{\underbar{new}:} finds a new draft,
448: just as if \switch{draftmessage~new} had been given.
449: \smallskip}
450: \noindent
451: Finally, the \pgm{comp} command will accept one more response:
452: \smallskip
453: {\advance\leftskip by\parindent
454: \item{\underbar{use}:} re-uses the draft,
455: just as if \switch{use} had been given.
456: \smallskip}
457: \subsection{The Push Option at\/{ }\whatnow/ Level}
458: The \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands take
459: an additional option for the \whatnow/ query.
460: The \pgm{push} option, which must be spelled out fully,
461: directs the command to \pgm{send} the draft
462: in a special detached fashion,
463: with all normal output is discarded.
464: If \pgm{push} is used and the draft can not be sent,
465: then \MH/ will send the user a message,
466: indicating the name of the draft file,
467: and an explanation of the failure.
468: Although using \pgm{push} calls \man{send}(1),
469: the \pgm{send} command will consult the profile entry for \pgm{push}.
470: \par
471: The user can also invoke \pgm{send} from the shell with the \switch{push}
472: switch,
473: which makes \pgm{send} act like it had been \pgm{push\/}'d by one of the
474: composition commands.%
475: \nfootnote{Note that in this case,
476: \pgm{send} consults the profile entry for whatever name it was invoked as,
477: such as \pgm{sendf}.}
478: \par
479: The \pgm{send} program also has two other switches,
480: \switch{unique} and \switch{nounique}.
481: If \pgm{push\/}'d,
482: then the \switch{unique} switch tells \pgm{send} to rename the draft file to
483: a unique filename.
484: This allows the user to have several drafts being sent simultaneously
485: (after {\it push\/}ing one draft,
486: another draft may be composed and edited immediately).
487: The \switch{unique} switch,
488: which is the default when \pgm{send} is \pgm{push\/}'d,
489: is not really useful if you're using {\it draft folders},
490: as the user generally gets a new message draft for each composition.
491: Hence, users of the {\it draft folder} mechanism should put
492: \example send: -nounique\endexample
493: in their \profile/ file.
494: This has the added advantage of making
495: \example comp -use\endexample
496: easy to use when a draft fails to be posted properly.
497: \par
498: By using \pgm{push}, the user can free the shell to do other things,
499: because it appears to the shell that the \MH/ command has finished.
500: As a result the shell will immediately prompt for another command,
501: despite the fact that the command is really still running.
502: Note that if the user indicates that annotations are to be performed
503: (with \switch{annotate}),
504: the annotations will be performed after the message has been
505: successfully sent.
506: This action will appear to occur asynchronously.
507: Obviously, if one of the messages that is to be annotated is
508: removed before the draft has been successfully sent,
509: then when \MH/ tries to make the annotations,
510: it won't be able to do so,
511: and an error message will mysteriously appear on the user's terminal.
512: \subsection{Options at\/{ }\whatnow/ Level}
513: When using the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands at
514: \whatnow/ level,
515: the \pgm{edit}, \pgm{list}, \pgm{headers},
516: and (for the \pgm{dist} and \pgm{repl} commands) the \pgm{display} options
517: will pass on any additional arguments given them to whatever program they
518: invoke.
519: \par
520: In addition,
521: in \mh1 (the original Rand \MH/)
522: and \mh2 (the first UCI version of \MH/),
523: \MH/ used a complicated heuristic to determine if the draft should be deleted
524: or preserved after an unsuccessful edit.
525: In \mh3,
526: \MH/ was changed to always preserve the draft,
527: since \pgm{comp}, et. al.,
528: could usually look at a draft, apply another set of heuristics,
529: and decide if it was important or not.
530: With the notion of a {\it draft folder},
531: in which one by default gets a \arg{new} message draft,
532: \mh4 has again re-implemented the edit deletion/preservation
533: algorithm (with a minor bug-fix),
534: to keep the draft folder from being cluttered with aborted edits.
535: \par
536: Also,
537: note that by default,
538: if the draft cannot be successfully sent,
539: these commands return to \whatnow/ level.
540: But, when \pgm{push} is used, this does not happen (obviously).
541: Hence,
542: if these commands were expected to annotate any messages,
543: this will have to be done by hand, later on, with the \pgm{anno} command.
544: \par
545: Finally, if the \switch{delete} switch is given to the \pgm{quit} option,
546: then these commands will inform the user of the name of the unsent draft file.
547: \subsection{Posting of Mail}
548: \mh4 does a few different things when mail is posted.
549: \subsubsection{Signature}
550: There's now a \entry{Signature} entry in the \profile/ file.
551: If the \file{\$SIGNATURE} envariable is not set,
552: then \pgm{send} will consult this profile entry to determine the
553: personal name of the \MH/ user.
554: This personal name is placed in the \eg{From:} field of the message.
555: If this profile entry doesn't exist,
556: then \pgm{send} will consult the file \file{\$HOME/.signature}.
557: \subsubsection{Blind Carbon Copies}
558: The \pgm{post} command now handles blind carbon copies in an entirely
559: different fashion from the way they were handled in \mh3.
560: In particular,
561: the message sent to ``blind'' recipients contains minimal information in its
562: headers,
563: namely \eg{Date:},
564: \eg{Message-ID:} (if \switch{msgid} was given),
565: \eg{From:},
566: \eg{Subject:} (if given in the message draft),
567: and a standard blind carbon copy disclaimer.
568: The body of the message sent to the blind recipients is simply the actual
569: message sent to the ``sighted'' recipients.
570: However,
571: if the \switch{filter~filterfile} switch was given to \pgm{post},
572: then the body of the message is given to \pgm{mhl} to be formatted with the
573: named \arg{filterfile}.
574: \subsubsection{Server Interaction}
575: In \mh4, \MH/ supports a mail transport configuration which allows
576: \pgm{post} to talk directly to an SMTP server.
577: A possible extension of this,
578: which looks particularly promising for when \MH/ is used on small
579: workstations,
580: is the ability to post mail on a different host,
581: such as a ``mail relay''.
582: In this way,
583: the load on the local host may be reduced,
584: and mail traffic may be handled more efficiently.
585: \section{Folder Handling}
586: Two new facilities have been added to give the \MH/ user greater power in
587: manipulating folders:
588: {\it relative folder addressing},
589: which allows a user to shorten the typing of long folder names;
590: and the {\it folder-stack},
591: which permits a user to keep a stack of current folders.
592: \subsection{Relative Folder Addressing}
593: By default, when \arg{+folder} is given,
594: and the folder name is not absolute
595: (i.e., does not start with \file{/}, \file{./}, or \file{../}),
596: then the \unix/ pathname of the folder is interpreted relative to the user's
597: \MH/ directory.
598: Although this mechanism works fine for top-level folders and their immediate
599: sub-folders,
600: once the depth of the sub-folder tree grows, it becomes rather unwieldly:
601: \example scan +mh/mh.4/draft/flames\endexample
602: is a lot of typing.
603: \MH/ can't do anything if the current folder was \eg{+inbox},
604: but if the current folder was, say, \eg{+mh/mh.4/draft},
605: \MH/ has a short-hand notation to reference a sub-folder of the
606: current folder.
607: Using the \arg{@folder} notation,
608: the \MH/ user can direct any \MH/ command which expects a \arg{+folder}
609: argument to look for the folder relative to the current folder instead of the
610: user's \MH/ directory.
611: Hence, if the current folder was \eg{+mh/mh.4/draft},
612: then
613: \example scan @flames\endexample
614: would do the trick handily.
615: In addition, if the current folder was \eg{+mh/mh.4/draft},
616: \example scan @../pick\endexample
617: would scan the folder \eg{+mh/mh.4/pick},
618: since, in the \unix/ fashion,
619: it references the folder \eg{pick} which is a sub-folder of
620: the folder that is the parent of the current folder.
621: Since most advanced \MH/ users seem to exhibit a large degree of locality
622: in referencing folders when they process mail,
623: this convention should receive a lot of use.
624: \subsection{The Folder Stack}
625: The {\it folder-stack\/} mechanism in \MH/ gives the \MH/ user a
626: facility similar to the {\it CShell\/}'s directory-stack.
627: Simply put,
628: \example folder -push +foo\endexample
629: makes \eg{foo} the current folder,
630: saving the folder that was previously the current folder on the
631: {\it folder-stack}.
632: As expected,
633: \example folder -pop\endexample
634: takes the top of the {\it folder-stack\/} and makes it the current folder.
635: Each of these switches lists the {\it folder-stack\/} when they execute.
636: It is simple to write a {\it pushf\/} command as a shell script.
637: It's one line:
638: \example exec folder -push \$@\endexample
639: Probably a better way is to link \pgm{folder} to your \file{\$HOME/bin/}
640: directory under the name of \pgm{pushf} and then add the entry
641: \example pushf: -push\endexample
642: to the \profile/ file.
643: \par
644: The manual page for \man{folder}(1) discusses the analogy between the
645: \pgm{CShell} directory stack commands and the switches in \pgm{folder}
646: which manipulate the {\it folder-stack}.
647: \section{Other Changes}
648: This last section discusses the other,
649: more program-specific changes made to \MH/.
650: \subsection{Address Parsing}
651: There's a new library program, \pgm{ap}, which parses addresses according to
652: the rules that the \MH/ programs use.
653: It's often useful for figuring out how \MH/ sees a particular address.
654: The \pgm{rcvtrip} rcvmail hook,
655: described at the end of this report,
656: uses this facility.
657: \subsection{Alternate Mailboxes}
658: There's a new entry in the profile, \entry{Alternate-Mailboxes},
659: which is read by \pgm{repl} and \pgm{scan} to determine which addresses in a
660: messages are under the user's administration.
661: Hence,
662: \example
663: Alternate-Mailboxes: mh@uci-750a, bug-mh
664: \endexample
665: says that the mailbox \eg{mh@uci-750a}
666: and any mailbox whose local part is \eg{bug-mh}
667: is read by the user.
668: Hence, \pgm{repl} will not include them in the reply list,
669: and \pgm{scan} will act accordingly if it encounters a message which is from
670: any of these addresses.
671: A current restriction is that the hostnames given must be the ``official''
672: hostnames for the mailboxes,
673: as local nicknames for hosts are not replaced with their official site names.
674: \subsection{Annotation}
675: The \pgm{anno} command no longer prompts for a \eg{text} component
676: if the \switch{text~body} switch isn't given.
677: \subsection{More on Folder Handling}
678: If \pgm{folders}
679: (or \pgm{folder} when invoked with the \switch{all} switch)
680: is given a \arg{+folder} or \arg{msg} argument,
681: then it will set the current folder and/or message
682: (in previous versions of \MH/,
683: \pgm{folders} ignored any \arg{+folder} or \arg{msg} arguments).
684: In addition,
685: the top-level folders of the current folder will be listed
686: (if \switch{norecurse} is in effect),
687: or the current folder will be listed recursively
688: (if \switch{recurse} was given).
689: \subsection{Scanning}
690: The \pgm{scan} and \pgm{inc} commands now have a \switch{size} switch
691: (and a complementary switch, \switch{nosize}),
692: which indicate if the {\it scan listing\/} should include the size of the
693: message in bytes.
694: \par
695: Furthermore,
696: the fields in the {\it scan listing\/} have been compressed a bit to allow
697: more of the \eg{Subject} and \eg{Body} portions of the listing to appear.
698: \par
699: Finally,
700: if \pgm{scan} encounters a message without a date field,
701: rather than leaving that portion of the {\it scan listing} blank,
702: as had been done in previous versions of \MH/,
703: the date is filled-in with the last write date of the message,
704: and post-fixed with a `*'.
705: This is particularly handy for scanning a {\it draft folder},
706: as message drafts usually aren't allowed to have dates in them.
707: \subsection{BBoards Support}
708: The \pgm{bbr} command now uses the name it was invoked with as its prompting
709: string.
710: To override this,
711: the \MH/ user can specify the \switch{prompt~string} switch to \pgm{bbr}.
712: \par
713: The \pgm{bbc} command now lists the \eg{last update time} of a {\it BBoard},
714: instead of the \eg{local leaders} when \switch{topics} is used without
715: \switch{verbose}.
716: The \eg{local leaders} are now listed when \switch{verbose} is given with
717: \switch{topics}.
718: \subsection{RcvMail Support}
719: The \pgm{rcvcron} and \pgm{rcvtty} are now standard in all \mh4
720: configurations.
721: Further, there's a shell script, \pgm{rcvtrip},
722: that demonstrates the power (and utility) of a {\it hook\/} operating in the
723: \MH/ environment.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.