Google
 

Trailing-Edge - PDP-10 Archives - mit_emacs_170_teco_1220 - info/babyl.info
There are no other files named babyl.info in the archive.
-*-Text-*-
This is the file INFO;BABYL >, which documents the Babyl mail EMACS
subsystem, which allows the user to read and send mail from within
EMACS.

File: Babyl	Node: Top	Up: (DIR)	Next: Introduction

Babyl (pronounced like "babble") is an EMACS mail system.  You can
read mail, send mail, and process mail (keep some messages, delete
others, edit their text, and categorize messages by attaching labels).
If you have not used an EMACS mail system (e.g. RMail) before, you
should start by reading the Introduction -- type an N.  RMail users
who are new to Babyl should type a 1 and then Ns.

This file defines three special INFO commands that can be used to
quickly go to the description of any character command (use the C
command), extended command (use E), or variable (use V).  Examples:
	C<linefeed>
	ESurvey Menu<cr>
	VBabyl N After D<cr>

People should feel free to comment on this info file, by mailing to
BUG-BABYL@MIT-MC.  Be aware that because of the time and difficulty of
maintaining an accurate info file for such a changing library, this
tries to emphasize automatically produced documentation.

* Menu:

* RMailIntro::		Introduction for former RMail users.
* Introduction::	Introduction for new users who haven't used RMail.
* Concepts::		Description of some of the ideas and objects.
* Setup::		How to set up a Babyl file so you can use
			Babyl to read your mail, or just try it out.
* Init/VarsFile::	Babyl init or vars files, similar to EMACS ones.
* Commands::		Descriptions of the commands you can give to Babyl.
* OptionVariables::	Variables that are of most general interest,
			to control how you read and send mail.
* OtherVariables::	Variables of less general interest, mostly hooks.
* MailingLists::	How to get mail concerning Babyl, where to
			send bugs or feature requests.
* Internals::		Some implementation details, for extension writers.

Node: RMailIntro,	Up: Top,    Next: Concepts

Babyl once was merely a hook inside RMail;  it grew and grew and
finally set out on its own as a separate mail system library.  But a
lot of it still superficially looks like RMail, and so would probably
be usable by RMail users without much difficulty or introduction.
Important differences from RMail are:

    It runs on Twenex (Tops-20) and Tenex.

    It has essentially no jcl, except an optional Babyl filename and
yet has a lot of flexibility, since much more state is kept in Babyl
files than is in RMail files.  (E.g. a Babyl file gives the name
of its mail file.)

    It generally "reforms" headers to prettify them, hide "useless"
junk (e.g. message IDs), and correct some kinds of problems (e.g.
missing host names).  See: *Note header reformation: Concepts.

    Deletions do not go on a stack -- messages are simply marked
deleted.  Thus deleting will not cause messages to be renumbered.

    Messages may be categorized by attached labels (e.g.  "deleted",
"unseen", "recent", and arbitrary ones chosen by the user).  The
modeline and surveys show these labels.

    There are several varieties of surveys (in addition to the B
command), including surveying by the above labels, or surveying
all messages containing a given string.

    There is a facility for going into a recursive edit level on a
survey and giving Babyl commands from there, in the style of DIRED.

    The "?" command generates its output automatically and so you have
better assurance that it is up to date since documentation is kept
right with the function rather than somewhere else -- modifying one
reminds you to modify the other.

    You can have an init or vars file, similar to ones for EMACS, but
just for Babyl.  On ITS these are BABYL INIT and BABYL VARS.  On Tenex
or Tops-20 these are BABYL.INIT and BABYL.VARS.  For more details,
see: *Note init/vars file: Init/VarsFile.

Node: Introduction,	Up: Top,      Next: Concepts

    Babyl is an EMACS subsystem.  It uses the user support features of
EMACS, and thus presents the user with an interface similar to much of
the normal view of EMACS.  For instance, its commands can be described
with M-X Describe, Help-D, Help-C, or Help-R, or for convenience with
the "?" command in Babyl.  Also, when editing a message to send, you
are in the same editing environment you normally use, with additional
tailoring because you are editing a message, and if you want to tailor
Babyl further you can do that in the same way that you tailor EMACS,
setting options or defining or replacing Babyl commands.

    In fact, Babyl has several option variables that control its
operation, and these can be viewed and edited with the standard EMACS
command M-X Edit Options.  To see and edit all of them, do:

	M-X Edit OptionsBabyl<cr>

Your EMACS init or EVARS file can set these options if you want to
always have them in effect.

    The simplest use of Babyl deals with two kinds of files: The "mail
file" is the standard file of incoming messages created by the
operating system; this file resides in the user's "home directory" and
has, e.g. for user FOO, a name like FOO;FOO MAIL (on ITS) or
<FOO>MAIL.TXT.1 (on Twenex) or <FOO>MESSAGE.TXT.1 (on Tenex).  The
second kind of file is the "Babyl file", which has old messages that
you are saving (and which may have been processed in various ways);
it also has the specification for various options controlling Babyl
(such as the name of the mail file).

    When Babyl starts up, it combines the mail file with the Babyl
file, writes the combination back to the Babyl file, and deletes the
mail file.  It presents the combination to the user for processing,
initially showing the first message of the new mail.  When the user is
done, Babyl will write back the remaining messages to the Babyl file.
(This sequence is protected against the loss of any messages due to
system (or Babyl) crashes.)

    Babyl is designed for use primarily from a display terminal.
It can be used from a printing terminal -- but expect some rough
edges.

    Babyl operates in one of three modes.  In the initial ("normal")
mode Babyl shows one message at a time.  In this mode, all commands
are a single character, optionally preceded by a number (note: do not
use EMACS meta-digits; merely type the number).  The special number
"Z" stands for the number of messages in the file;  the special number
"."  stands for the current message.  So, "D" will delete the current
message (as will ".D"), "3D" will delete the third message, and "ZD"
deletes the last message.

    When you are editing a message/reply to be mailed, Babyl puts you
into a normal EMACS  mode (with a couple of extra key bindings
available).  Exiting this recursive editing mode normally (e.g., with
C-M-C or C-M-Z) will mail the message;  aborting (e.g., with C-]) will
return you to "normal" mode without mailing.  In addition, the Babyl
command "" will allow you to edit the currently selected message in
your mailbox (without mailing).

    In "survey menu" mode (entered with the ' command), Babyl displays
a set of 1-line summaries of messages matching some criteria selected
by the user.  In this mode, most Babyl commands work normally,
applying to the message currently selected by the cursor.  EMACS are
also available in Survey mode, primarily to allow the positioning of
the cursor and filtering or reordering of the survey lines.  (For
instance you can use M-X Keep Lines and M-X Flush Lines to keep only
relevant survey lines.)

    Only a few commands are needed to get started in Babyl.  The most
useful commands for starting are:

    ?    get help on Babyl commands.
    J    jump to message (number given in argument: e.g., J goes to
	 first undeleted message, 1J goes to first message, 5J goes to
	 message 5, ZJ goes to last message in the file, -J goes to
	 the last undeleted message).
    N    go to next message.
    P    go to previous message.
    D    delete message, moving to next one.
    Q    write out modified Babyl file and quit.
       temporarily suspend execution of Babyl.  The Babyl file is
	 not saved;  rather, it is left in the buffer, and will be
	 reselected if Babyl is reentered.

    For more information on Babyl commands, use the INFO command
C to go to the description of specific commands.

Node: Concepts,	  Previous: Introduction,	Up: Top,  Next: Setup

    When you first enter Babyl, you will see one message displayed and
the modeline will contain information about that message.  Seeing one
message at a time like this is called "normal message display" mode,
and the commands you give generally either affect the displayed
message or "move" to a different message and cause it to be displayed.

    Messages are made up of a "header" part and a "text" part.  Babyl
will process the header ("reform it") to make it prettier and easier
to deal with.  For instance it will remove mention of the host you are
on (the "local" host) for better clarity; it will align the header
fields;  it will put the fields into a standard order; and it will
make sure that each recipient has a host, and if not figure out what
it should be.  (You can control this.  Use the INFO command V to see
the description of the variable Babyl Punt Missing Hosts.)  The header
reformer will also remove certain fields, e.g. Message-ID, under the
assumption that these are not something the user generally wants to
see.  (The 1H command will show you the full original header, though,
if you want to see what it was before header reformation.)  For
information on how to tell the header reformer other fields that it
should remove, see: *Note customizing reformation: CustomRef.

    You can attach "labels" to messages, to categorize them.  There
are several commands dealing with labels, but the most important are
the Babyl character command L (use the INFO command C to see its
description) and the extended command Edit Labels List (use the INFO
command E to see its description).  Labels will be displayed in the
modeline in the normal message display mode.

    Commands (e.g. L) that read a label use a "completing reader",
just like Meta-X (^R Extended Command) does when reading command
names.  This means you can type "?" to see a choice of the labels, and
type Altmode to cause completion.  You may also define "label
abbrevs";  for instance you might define the label abbrev "an" to
abbreviate the label "arpanet" -- you can type in "an" but the full
label "arpanet" will actually be used.

    A "survey" is a display of 1-line message summaries, for instance:

 No. Lines        From->To        Subject or Text
  1:   10  ->EAK,JPershing@BBNA   {feature, babyl}Possible Babyl idea
  2D   11  EAK->                  Possible Babyl idea
  3A   23  EAK->,JPershing@BBNA	  Another idea
  4+   18  JPershing@BBNA->EAK    Replies
  5-   19  EAK->JPershing@BBNA    Replies


    The message number is followed by a "status character".  ":" means
you have seen the message.  "D" means you've deleted it (maybe seen
it).  "A" means the message has been "answered" (the normal action for
the reply command is to label the message "answered" when it
finishes).  "+" means you've seen it and it is "recent", a message
brought into the Babyl file this time.  "-" means you have not seen
it.

    The From->To section is the most complicated.  (You can alter how
it works by setting the option variable Babyl Survey FROM/TO Control.
See its description using the INFO command C.)  Names are shortened to
just username and host.  Sometimes the host is abbreviated (e.g.
MIT-AI becomes AI).  All occurrences of you and the local host(s) are
removed.  Thus in the above example, if that is a survey of your mail,
message 1 is from you to both EAK (at some local host) and JPershing
at BBNA.  Message 2 is (a reply probably) from EAK back to you.
Message 3 is from EAK to you and JPershing (note the comma before
"JPershing@BBNA" -- that means there is another recipient; but since
it is you, it isn't shown).  Messages 4 and 5 don't mention you (no
comma, even), so you are in the Cc list (you did after all receive the
message).  The intent of the normal survey presentation not showing
you, is to highlight the other people in the conversations, since you
already know that you are involved in each message.

    The {feature, babyl} in the survey of message 1 is a list of the
labels attached to the message (two labels: "feature" and "babyl").

    The rightmost part of the survey is either the Subject field or
the 1st Text line, if there was no Subject field.

    There are several survey-related commands, but the most important
are the Babyl character commands B and ^S.

    An alternative to normal message display mode is "survey menu"
mode, which is based on a survey:  you are in a recursive edit level
on a survey.  You can use any of the normal EMACS commands to move
around in it.  And you can give any of the Babyl commands;  they
affect the message whose survey is the line point is on.  After each
command, the survey will be updated to reflect that command's effects,
if necessary.  (See the character command ' (apostrophe) for how to
get into survey menu, and see the extended command Survey Menu for a
description of what you can do in survey menu.)

    There are several commands for sending mail: M ("mail"), R
("reply" to the current message), F ("forward" the current message to
someone else), C ("continue" editing whatever mail editing was last
aborted by the C-] command), and V (like M but initializes the message
to some arbitrary "template" you can set).

* Menu:

* SendingMail::		More details about sending mail.
* CustomRef::		Customizing the header reformer, to have
			certain header fields removed.

Node: SendingMail,    Up: Concepts,  Next: CustomRef

    Several Babyl commands (C, F, M, R, V) send mail, differing
in the initial message template they offer for editing:  Each
command gives you a message to edit in a recursive edit level;
when you exit that level with C-M-C or C-M-Z (^R Exit) the edited
message will be mailed.

    M is the simplest command -- its template is an empty message.

    F creates a template for forwarding the current message (the
one in the Babyl file being viewed):  the text is initially a
copy of the current message and the subject is the same as that
in the current message.

    R creates a template for replying to the current message:
the subject is the same, the message is directed back to the
person who sent it (using its FROM or REPLY-TO field), any people
in TO or CC fields are included as CCs (except if you use 1R),
and the text is either empty or (for 3R and 4R) contains an
indented copy of the current message.

    V (or M-X Mail With Template) uses a template that the user
has created before, using M-X Set Mail Template.  You should see
the documentation of these commands for more details.

    Each of the above templates commands (M, R, and V) will
automatically include a CC field if you set the Babyl CC To
option variable.  It should contain a string which is the
recipient list -- everything but the "Cc:" part.

    The C command does not create a template really -- the
template is whatever was left from the last mail-sending command.
For instance, if you use the R command and edit a reply, but
abort it with C-] (Abort Recursive Edit), you can continue
editing this reply later with C.  Or if you want to send two
similar messages, you can send the second one by editing from the
first one, using the C command after the first has been sent with
M.

* Menu:
* EditingMail::		Details about the mail-sending recursive
			edit level.  Some hooks for this mode.
* ReplyTemplate::	Details about the template R sets up.
* Babylm::		A library with JUST mail-sending commands.
* WindowUse::		Use of 1- and 2-window mode by C,F,M,R,V.
* MailHooks::		Other mail-sending hooks.

Node: CustomRef,  Previous: SendingMail,  Up: Concepts

Part of the job of the header reformer is to remove certain header
fields from view.  (They remain in the original header, so 1H will
show them along with the rest of the unprocessed, original header.)
Message-ID is one field that by default is removed from view.  If you
want, you can specify exactly which fields are removed.  E.g. in the
examples below, we will show how to have the Via: field removed.

The variable Babyl Reformation Flushes These Fields contains a string
naming the fields to be removed, each surrounded by square-brackets.
For instance, it by default might be (a two line string in this case
-- and note that spaces or tabs are ignored):

    [Message-id] [Return-Path] [In-Reply-To] [Mail-From] [Rcvd-Date]
    [Redistributed-To] [Redistributed-By] [Redistributed-Date] [Keywords]
	 
These are the fields that will be removed from view.  Since Message-id
is one of them, the message-id field is by default removed.  If you
wanted to have the Via field removed too, just add "[Via]" to that
string.  If you have an EMACS or BABYL vars file, you could include an
entry like:

Babyl Reformation Flushes These Fields: "
    [Message-id] [Return-Path] [In-Reply-To] [Mail-From] [Rcvd-Date]
    [Redistributed-To] [Redistributed-By] [Redistributed-Date] [Keywords]
    [Via]
    "

Or, if you had an EMACS or BABYL init file, you could include:

@:i*"
    [Message-id] [Return-Path] [In-Reply-To] [Mail-From] [Rcvd-Date]
    [Redistributed-To] [Redistributed-By] [Redistributed-Date] [Keywords]
    [Via]
    " m.vBabyl Reformation Flushes These Fieldsw

Two final notes:

First, note that Babyl processes your Babyl init or vars file only
once per EMACS session.  If you edit the file in EMACS and then invoke
Babyl from within that EMACS a second time, the changes will not be
noticed.  To force Babyl to take notice of them, use the extended
command Process Babyl Init or Vars File, e.g. in Babyl type:
    XProcess Babyl Init or Vars File<return>

Second, any messages which have already been seen most probably have
had their headers reformed too, and viewing them again will not invoke
the header reformer again automatically.  If they have visible Via:
(in our example) fields, you will have to tell the reformer manually
to go over the header a second time.  To do this, give the H command.

Node: EditingMail,	Next: ReplyTemplate,  Up: SendingMail

    In the recursive edit level for sending mail, you will be in
an EMACS buffer named *Mail*, initially in Text mode, and with
C-M-Y by default connected to ^R Babyl Yank, which inserts a copy
of the current message (the one you were looking at before
sending this message).  The yanked message will be indented and
use the reformed header if there is one;  both of these actions
can be changed by giving numeric arguments -- see the
documentation.  Also by default the variable Paragraph
Delimiter is modified so that lines starting with a hyphen (e.g.
the "--Text follows this line--" line) won't be considered part
of a paragraph -- good for using ^R Fill Paragraph.

    You can change the mode or key connections by providing a
Teco program in the variable Babyl Edit Mail Hook.  If this
variable is set (non-0), C-M-Y and Paragraph Delimiter won't be
reset.  You could use this hook, for instance, to connection ^R
Babyl Yank to another key, or connection other mail-editing
functions that by default are unconnected:  ^R Babyl Delete
Recipient, ^R Babyl Add Subject: Field, ^R Babyl Add
To-Recipient, and ^R Babyl Add Cc-Recipient.  See their
documentation for details.

    You might note the M-X Edit and Mail Buffer command -- it is
used by the other mail-sending commands but you might some time
find it useful by itself.  It enters the recursive edit level on
the current buffer (with its current contents) and, when the
level is exited, mails the edited contents.

Node: ReplyTemplate,  Previous: EditingMail,  Next: BabylM, Up: SendingMail

    This section details the reply template the R command sets
up, based on the current message and various option variables the
user can set.

    First the basic reply template (T) is set up, formed as
follows from the fields of the message being replied to (M):

    M's FROM or REPLY-TO becomes T's TO.
    M's SUBJECT becomes T's SUBJECT.
    Unless this is 1R (reply just to the sender), M's TO and CC
become T's CC.
    Any automatic-CC is inserted, specified by the option
variable Babyl CC To.

    Next this basic template is trimmed, to remove duplicate or
unwanted recipients.  If variable Babyl Trim Recipient List is 0,
no trimming at all is done.  Even if you like the trimming, you
might set it to 0 if the system is very slow, since the new, more
general trimming process is slower than the old special-cased
way.

    Trimming has three phases.  Each of these works by
considering only the "mailbox" name part of a recipient
specification.  E.g. in each of

	Jennifer Q. Doe <DOE at MC>
	DOE at MC (Jenny Doe)
	DOE at MC

the mailbox is "DOE@MC".  Note that " at " always gets
canonicalized to "@".  Thus, for instance, each of these
recipients will be recognized as duplicates.  In the following we
will talk as if the recipient only had the mailbox part.  Also
note that case does not matter.

    First all CC recipients starting with "INFO-", "BBOARD@", or
"*" are removed.

    Next we remove generally unwanted CC recipients using the
Teco search string in the variable Babyl Dont Reply To.  If that
variable is 0, however, we skip this phase.  If it is the null
string (the default), we will look for your username, so you
won't get CCs.

    Finally duplicate recipients are removed.  (If a recipient
occurs in both the TO and CC fields, it will be kept in the TO
rather than in the CC.)

    Some random observations on this trimming process:

    The duplicate removal results in an alphabetically sorted
list of CC recipients.  This means it won't look quite so much
like the message being replied to as it used to.

    The default removal of your username does not consider the
host, only the username part.  Thus if you are SELF, on host MC,
CCs to SELF@AI will also be removed.  This was chosen because
many of our users will have identical usernames on a few
different machine families.  On the other hand, someday some
non-you SELF might be removed from the CC field.  If you care,
set the Babyl Dont Reply To variable to include the host name.

    The search used to check whether to reply to a mailbox is
over the mailbox surrounded by CRLFs.  This means you can delimit
a username by CRLF before and "@" after it, for instance.  As an
example, here is a search string for not replying to the mailing
list EVERYONE on any machine, the list A-BUNCH at HOST, and
MYSELF at any machine (and indented, surrounded by "s, and with
^O for Control-O for clarity):

	"
	EVERYONE@^O
	A-BUNCH@HOST^O
	MYSELF@"

    For more information about Teco search strings, see the INFO
node describing them:  *Note search strings: (EMACS)TECOsearch.

Node: BabylM, Previous: ReplyTemplate,	Next: WindowUse,  Up: SendingMail

    The mail-sending functions of Babyl may be loaded into an
EMACS without the rest of Babyl, by just loading the BABYLM
library.  This library is considerably smaller and faster to load
than Babyl.

Node: WindowUse,  Previous: BabylM, Next: MailHooks,  Up: SendingMail

    Each of the mail-sending commands may use either one- or
two-window mode;  two-window mode allows the user to view the
current Babyl message in one window while editing the message to
send in the other window.

    The R (reply) command will use the two-window mode by
default, except when a copy of the current message is yanked.
Thus 1R and 2R start out with two windows, while 3R and 4R (both
yank) start out with one window.  If you use C-M-Y (^R Babyl
Yank) yourself inside R, you'll be back in one-window mode.

    The M, C, and V commands use one window by default, but if
you use 2M, 2C, or 2V they use two-window mode.

Node: MailHooks,  Previous: WindowUse,	Up: SendingMail

	Babyl C Hook
	Babyl F Hook
	Babyl M Hook
	Babyl R Hook
	Babyl R Done Hook
	Babyl F Done Hook

    The hooks probably of most general interest are the
"done-hooks", which execute upon successful completion of R or F.
Babyl provides a small function you can call from Babyl R Done
Hook:  the & Babyl R Done Hook function will remove any "reply"
label from the current message, and label it "answered".

    The other hooks execute after their respective commands have
set up their templates -- these hooks could be used for further
template tailoring.  There is no Babyl V Hook currently, since
the V command "becomes" the M command and the Babyl M Hook will
be executed.  Your M hook can tell an M from a V (and tell the
exact template too) by checking the variable Current Babyl
Template Name -- 0 if M, otherwise the template name.

Node: Setup,	Previous: Concepts,  Up: Top,  Next: Init/VarsFile

    This section describes how you can start using Babyl and create a
Babyl file.

    You can try out Babyl in two steps:

1.  Without committing yourself to using Babyl, you can try it out,
reading some existing mail (or RMail) file.  Since that mail file is
not a Babyl file, Babyl will convert it to one internally, but inhibit
any writing or deletion of files, so you're safe.

    The easiest way, which only works on ITS currently, is to run
the BABYL job, telling it the mail or Rmail filename, e.g.

	:BABYL FOO; FOO MAIL

    On Tenex or Twenex you can try Babyl by loading it and then
running the M-X Babyl command, giving it as a string argument the mail
(or RMail) filename.  (This also works on ITS, if ITS users want to
try Babyl out from inside their own EMACS environment.)  E.g.:

	M-X Load LibraryBabyl<cr>
	M-X Babyl<FOO>MAIL.TXT.1

2.  If you decide you want to use Babyl, the first thing is to
tell EMACS that Babyl is your normal mail reader by setting the
variable Mail Reader Library to the string "BABYL".  For example,
if you have an EVARS file, you would add to it the line (but not
indented as it is here):

	Mail Reader Library:BABYL

    This will cause the C-X R (or M-X Read Mail<cr>) command to
run Babyl.  When Babyl finds that you do not yet have a Babyl
file, it will ask if you want to create one (type Y) and then ask
several questions about Babyl file options (if you aren't sure
about the choice, take the suggested one in square-brackets --
the question will end in something like "[Y]").

    After creating the Babyl file, Babyl will read in any new
mail you have and display the first message.  You are now all set
up -- unless you formerly used RMail and still have messages in
an RMail file.  In that case, you can merge these messages into
the new Babyl file with the 1G command;  e.g. type:

	1Gfoo rmail<cr>

Node: Init/VarsFile,  Previous: Setup,	  Up: Top,    Next: Commands

    Babyl init and vars files are similar to EMACS ones, though these
should only be for customizing Babyl.  If you only use Babyl from
WITHIN EMACS, you can customize it with your EMACS init or vars file.
You would then need no Babyl init or vars file.  But if you want to
use Babyl outside EMACS, i.e. :BABYL on ITS or BABYL.EXE on TNX, then
you should put Babyl customizing in a Babyl init or vars file.

    Babyl checks your home directory for a Babyl init file, which
should be Teco code: BABYL INIT (ITS) or BABYL.INIT (TNX).

    If no init file is found, it looks for a vars file:  BABYL VARS
(ITS) or BABYL.VARS (TNX).  This file should be in the same format as
an EMACS vars file.

    This processing is only done the first time Babyl is loaded, for
reading or sending mail.  If you edit your Babyl init or vars file
after this first entry to Babyl, you can give the M-X Process Babyl
Init or Vars File command manually so that Babyl takes notice of the
changes.

Node: Commands,	  Previous: Init/VarsFile,    Up: Top,	Next: OptionVariables

    Babyl commands (in the "normal" interface -- when viewing one
message, as opposed to Survey Menu) are single characters, either
control-characters or alphanumeric characters.  They may be given
numeric arguments, either one argument or two separated by a comma.
Here are some examples of commands you might type to Babyl (control
characters have "^"s):

	b
	3,10b
	5b
	^N
	2^N

    Some commands set up numeric arguments for the next command.  For
instance, the Z command turns into the number of the last message in
the Babyl file (deleted or not); the Period command turns into the
number of the current message; and "-", "+", and "/" have their normal
algebraic meanings.  Some more examples of commands (assume the
current and last messages in the file have numbers 45 and 60
respectively):

	This:		is the same as this:

	.,zb		45,60b
	.-5,.+5b	40,50b
	z/2j		30j


    You can execute any EMACS extended command from Babyl using the X
command.  (This is exactly like using EMACS's M-X (^R Extended
Command)) Thus, to edit the list of valid labels type XEdit Labels
List<cr>.

    The following command abstract lists all the Babyl commands,
single character and extended commands; it describes the Babyl
commands as of Friday, 27 April 1984:

Single-character commands in library BABYL  (Filename: BABYL):

A:	Move to next message and summarize it.
	Given an argument, moves forward that many undeleted messages, and
	    summarizes the intervening messages as well as the last one.
	If the option variable Babyl A Mode Display is non-0, we will update
	    the mode line.  (Default is to update it.)
	Users on slow display terminals may want to disable updating, and use
	    an occasional Z= instead, to see how many messages there are.

B:	Survey all or a range of messages.
	Survey argument convention:
	    No argument means survey all messages in the Babyl file.
	    One positive argument n means survey the next n messages.
	    One negative argument -n means survey the previous n messages.
	    Two arguments  m,n  mean survey n messages
		starting with message number m.

C:	Continue editing the last message sent or aborted.
	Describe Edit and Mail Buffer for details about message editing,
	    and general hooks.
	If you give a numeric argument of 2 we will use 2 windows, with the
	    current message in the top and the message being sent in the
	    bottom one.
	Runs any Teco program in the variable Babyl C Hook after the message
	    template has been set up.

D:	S Delete this message, maybe select next.
	Given numeric argument, n, means delete message n.
	The option variable Babyl N After D controls whether Babyl
	    automatically moves to another undeleted message after deleting
	    this one.  Values are:
		1:  Try to do an automatic N -- move forward if can (default).
		-1: Try an N (go forward), but if no next message, try a P (go
		    backward) instead.
		0:  No movement.  You view the deleted message.

E:	Expunge deleted messages.  Handles empty file.
	If expunging leaves the file with no messages, a dummy message is
	    inserted, since many Babyl commands don't work without some
	    message in the file.

F:	Forward current message.  You can edit the message.
	The mail will be set up to include the current message and a subject
	    based on the original one if any.  You can then edit any of this
	    before sending it off.  Describe Edit and Mail Buffer for details.
	If you give a numeric argument of 2 we will try to use 2 windows, with
	    the current message in the top and the message being sent in the
	    bottom one.
	If you give a numeric argument of 3 we will REMAIL the message instead
	    of forwarding it. The variable Babyl Remail Control controls the
	    action of 1F: 0 (read TO: and send); non0 (read TO: then edit and
	    send). Babyl Remail Hook should be a TECO macro to run after message
	    is set up. (Sorry. No 2 window mode yet...someday, 4F will do this.)
	The option variable Babyl F Control controls the default action of F:
		0:  You are put in a recursive edit level on the outgoing
		    message, which has an empty To: field (point is there), a
		    subject based on the original one, and the forwarded
		    message yanked into the text field.  You can thus edit any
		    field and add comments.  On terminals with insert/delete
		    line capability, we try to optimize redisplay.
		1:  The To: and Subject: are read in the echo area, and you
		    are then put in a recursive edit level on the outgoing
		    message, with the header above the screen window, i.e.
		    with only the text field showing.  (This may be desirable
		    for users with slow terminals without insert/delete line
		    capability, or for users with printing terminals.)  Typing
		    Rubout to the subject prompt makes the message not have
		    any subject;  typing Return makes the default subject be
		    used.
		2:  Reads the To: and Subject: in the echo area, and then
		    mails the message, without entering a recursive edit
		    level.
	1F or 2F will force the general default action -- i.e. as if Babyl F
	    Control were 0.  (1F uses one window.)
	After the message template is set up, runs any Teco program you
	    provide in the variable Babyl F Hook.
	When successfully exited (not aborted) it will run any Teco program
	    you provide in the variable Babyl F Done Hook, passing it F's
	    arguments.

G:	Get any new mail received since Babyl was started.
	1G means get mail from another mail file.  You will be asked for its
	    filename.  Any kind of mail file can be read in (it figures out
	    which kind it is):  ITS or TNX mail file, an RMail file, or
	    another Babyl file.  The file will NOT be deleted -- you must do
	    this manually, if desired.
	The Append option (at the top of the Babyl file) determines where the
	    new messages are put in the Babyl file and in what order:
		0: prepend messages to beginning of Babyl file
		1: append messages to end
		2: prepend and reverse order of new messages
		3: append and reverse
	    Reversal is only done for the primary mail file, for the owner.
	When G is done, it will run any Teco code in the variable Babyl G Done
	    Hook.  Argument is 0 if no new mail, or the number of the last new
	    message.

H:	Reform or display original header.
	If no argument, this forces the original header to be reformed.  (You
	    can thus manually reform selected messages even if you don't have
	    messages normally reformed automatically -- i.e. if you set the No
	    Reformation option.)  Reparse original header.
	If argument, e.g. 1H, makes the original header be the visible header,
	    i.e. it unreforms.

I:	File out Babyl file, read in another.
	After saving the current Babyl file (if necessary), asks for a Babyl
	    file.  Default filename is DSK:homedir;username BABYL on ITS,
	    DSK:<homedir>username.BABYL on TNX.  You can override this with
	    the option variable Babyl Default File.
	If the Babyl file has an Owner option (either one user name or several
	    user names separated by commas), then only the specified user(s)
	    can modify the file.
	If file is not a Babyl file, we just read -- no deleting, no writing.
	The variable Babyl File Version controls the version written.  See its
	    description for details.
	If you try to read in a Babyl file that does not exist, offers to
	    create one, asking you about the various options.
	If a numeric argument is given (e.g. 1I), deleting and writing are
	    inhibited.  This is like forcing this user to definitely NOT be an
	    owner.
	Teco programmers: describe the variable Before Babylizing File Hook.

J:	Jump to message with given number.
	nJ goes to message n whether deleted or not.  ZJ goes to last message.
	J goes to first non-deleted message.
	-J goes to last non-deleted message.

K:	Delete message and append to text to be Y(ank)ed.
	K kills current message.  nK kills message n.
	0K kills current message, but only appends the text of the message.

L:	Attach/remove a label to the current message.
	Given negative argument, removes the specified label.

M:	Edit and then send a message.
	Describe Edit and Mail Buffer for details about message editing and
	    general hooks.
	If you give a numeric argument of 2 we will try to use 2 windows, the
	    mail in the bottom window, the current message in the top one.
	To continue editing a message aborted earlier, use the C command.
	You may set the variable Babyl M Hook to a Teco program to run after
	    the header is initialized.

N:	Go forward to next undeleted message.
	If numeric argument, n, goes forward n undeleted messages.

O:	Write message to a Babyl file.
	The message will be labeled recent in the file.  Any deleted label it
	    had will be removed in that file.  Other labels remain.
	The variable Babyl File Version controls the default version.  See its
	    description.
	If the variable Babyl O Confirm New File is non-0, you will be asked
	    to confirm writing a message to a new file.  The default is 0.
	Runs Babyl O Message Hook on the message in the file being written
	    to.  (For instance, this might remove some temporary label, e.g.
	    "file", used to mark messages for filing with the M-X Output
	    Labeled Messages command.)
	Runs Babyl O Done Hook when successfully done.  This runs in the
	    current Babyl file -- not in the file just written to.

P:	Move to previous undeleted message.

Q:	File out Babyl file and exit Babyl.
	Deleted messages are expunged from the file before exiting, and the
	    survey buffer is emptied.
	Giving a numeric argument of 1 means do not expunge, just exit.

R:	Reply to message using bottom window, with message in top.
	Describe Edit and Mail Buffer for details about message editing, and
	    the general hooks available.
	Numeric argument of 1 means just reply to the FROM field.
	Numeric argument of 3 means automatically yank the message.  It will
	    have the reformed header.
	Numeric argument of 4 means automatically yank the message but with
	    the original header.
	Recipient names that start with INFO-, BBOARD@, or * will not be
	    included in a CC.  (Thus you won't mistakenly reply to INFO-EMACS
	    or *ITS or *AI etc.)
	Some variables may be set by the user to control header formation if
	    they are non-0:
	Babyl Trim Recipient List: By making this 0 you can turn off any of
	    this removal (including INFO-, BBOARD@, *, etc.) -- you get just
	    the basic TOs and CCs based on the FROM, TO, CC, and Babyl CC To
	    variable.  By making this negative, you disable the automatic INFO-,
	    etc. removal only (duplicates and Babyl Dont Reply To are still
	    removed).
	Babyl CC To: should be a string, automatically inserted as a CC field.
	Babyl Fcc To: should be a string, automatically inserted as a Fcc
	    field on Tenex or Tops-20 systems.
	Babyl Reply-To Field: should be a string, automatically inserted in a
	    Reply-To field.
	Babyl Require Subjects: if you don't supply a subject field, you will
	    be asked for one before mailing.
	Babyl Dont Reply To: should be a Teco search string, selecting CC
	    people to remove.  Each recipient mailbox name (the user@host part
	    only, not any personal name parts) is searched -- if the search is
	    successful that recipient is removed.  This does not affect the
	    INFO-xxx, BBOARD@, or *machine checks.  If this is 0, no removal
	    searching is done;  if it is a null string, any CCs to yourself
	    are removed, as if the string were "yourname@".
	Babyl R Hook: a Teco program run just before entering the recursive
	    edit level.
	Babyl R Done Hook: a Teco program run when R completes successfully.
	    By default, this hook labels the message "answered".

S:	Write out the Babyl file.

T:	Type some or all of this message.
	Numeric argument is optional message number.

U:	Undelete a message.
	Giving no numeric argument means undelete current message if deleted,
	    or go back to one that is deleted and undelete that.
	Giving a numeric argument, n, means undelete message number n.

V:	Edit and send mail, with template initialization.
	Describe Edit and Mail Buffer for details about message editing and
	    the general hooks available.
	The message is initialized from a template, which may specify any
	    header or text components.  The template is a variable, containing
	    a copy of what the mail editing buffer should be initialized to.
	    It can optionally start with a value for point, within brackets,
	    e.g. it might start:  [35]To:
	String argument is a template name.  The template variable name is
	    formed from this name -- e.g. for a template named "Foo", the
	    variable is named Babyl Template Foo.  If you are using the Babyl
	    V command the template name is read with completion.
	If you give a numeric argument of 2, we will try to use 2 windows,
	    current message in top one, message being sent in bottom one.
	See the M-X Set Mail Template command for aid in creating templates.
	Runs the Teco program in the variable Babyl M Hook if one.  This
	    program can check the variable Current Babyl Template Name, 0 for
	    normal mailing, if it wants to further process the template.

W:	Access whole file.

X:	Execute an extended EMACS command.
	This is just like the EMACS ^R Extended Command command.

Y:	Yank and reset (empty) text saved by K.
	nY yanks into message number n.
	0Y or -nY just discards the saved text, in case you mistakenly typed K.

Z:	Return no. of messages in current file.

':	Into recursive edit level on survey.
	No arguments means use the last survey.  If no last survey,
	    we call .
	M,N arguments means survey messages M through N.
	N argument means survey next N messages.
	-'<character> is like ^S<character>' but does not print while
	    surveying.  (Except for a "Done" which is unavoidable without
	    serious work.)
	For more details, see documentation for M-X Survey Menu.

.:	Return the message number of current message.
	To reposition at top of current message, do .J

;:	Accumulate a line, then execute it with no display.

=:	Type value of numeric argument.

>:	Go to the end of the current message.

?:	Generate a list of Babyl commands, or just describe 1 character.

\:	Refill the current message.
	The numeric argument specifies one or two things:  the fill column,
	    and whether to consider indented lines as paragraph starters, as
	    opposed to lines of a yanked message.
	Fill Column:  If no argument, or a 0 argument, is given, the variable
	    Fill Column is used.  Otherwise the absolute value of the argument
	    is used.
	Positive argument says to do default filling -- indented lines are not
	    paragraph starters.
	0 or negative argument says they are paragraph starters.
	Thus, for example, plain \ does default, using default Fill Column.
	    0\ does paragraph like filling, using default Fill Column.
	This will not touch header or mail separator lines, and will respect
	    indentation.  E.g. any yanked messages will be filled separately,
	    keeping their indentation.
	M-x Undo<cr> will bring back the old message in case filling caused
	    problems.

|:	Move to next message with some label.
	| or 2| moves forward, -| or -2| moves backward.
	No numeric arg, e.g. |, or -1 arg, e.g. -|, means use the last label
	    again.  (If you explicitly give a string argument , though, it
	    will be used.) The label defaults initially to RemindNow, for
	    reminders.
	With a numeric argument of -2, 1, or 2, will read the label to use.

<Backspace>:
	Move to previous screenfull.

<Tab>:	Reformat a losing message that contains ^J's, ^H's, etc.
	Replace them with their visual counterparts...
	 ^H deletes character before it,
	 ^J inserts carriage return + whitespace
	 ^M becomes CRLF.
	This is undoable.  (I.e. M-X Undo<cr> brings back old message.)

<Linefeed>:
	Jump to next unseen message.

<Return>:
	No-op, flushes argument, and goes to next line.

<Altmode>:
	Execute a TECO command string.

<Space>:
	Print more of this message.
	On printing terminal:  prints rest of message.
	On display terminal:  goes to next screenful.
	    n<Space> scrolls up n lines.
	    9999 Space (or any semi-infinite numeric argument) goes to the
	    end of the message.

<Digit>, <Comma>, +, -, *, /, (, and ):
	Part of a Babyl numeric argument.

<:	Go to the beginning of the current message.

<Rubout>:
	Delete the last character from accumulating argument.
	Period, Z, digits, comma, plus, minus, etc. are characters that
	    make up arguments.
	If you rubout the entire argument, the echo area is cleared.

^C:	(^C on ITS, ^Z on Tops-20)  Return to DDT/EXEC temporarily.

^D:	Delete message and move backward.

^F:	Find and select message containing a specific string.
	Given no numeric argument the search is forward, starting with the message
	    after the current one.
	Given a positive argument, N, searches forward for the Nth message to
	    contain the string.
	Given a negative argument, -N, the search is backward, starting with the
	    message before the current one, for the Nth message to contain the
	    string.
	If no match is found, returns to current message.

^L:	Clear screen.  Given a numeric argument, keeps same window.

^N:	Move to next message, whether deleted or not.
	If argument, n, goes to nth next.

^O:	Append current message to a TNX mail file.

^P:	Move to previous message, whether deleted or not.
	If argument, n, moves to nth previous.

^R:	Enter a recursive edit level on current message.

^S:	Survey-prefix.  Also ignores ^S^Q for VT52 lossage etc.
	^S^A or ^SA is M-X Survey All Messages
	^S^D or ^SD is M-X Survey Deleted Messages
	       ^SUD is M-X Survey Undeleted Messages
	^S^L or ^SL is M-X Survey Labeled Messages (reads a label)
	       ^SUL is M-X Survey Unlabeled Messages (reads a label)
	^S^M or ^SM is M-X Survey Messages Containing String (reads a string)
	^S^F of ^SF is --ditto--
	^S^R or ^SR is M-X Survey Reminders
		^SS is M-X Survey Seen Messages
	       ^SUS is M-X Survey Unseen Messages
	^S? shows this description and then reads another character.
	To correct for stupid terminals, any number of ^S's followed by a ^Q
		are ignored.  This is for VT52s, H19s, maybe others.

^T:	Call ^R Display Load Average, for TNX users.

^W:	What is left of this message? Gives line/window count.

^X:	Temporarily exit Babyl.  Doesn't file out.
	Exits to EMACS or DDT/EXEC, depending on how Babyl was called:
		If was 1,M-X Babyl or a BABYL job then will exit back to DDT/EXEC.
	Repeating the M-X Babyl command will resume with state unchanged.

^Z:	(^C on ITS, ^Z on Tops-20)  Return to DDT/EXEC temporarily.

^]:	Temporarily exit Babyl.  Doesn't file out.
	Exits to EMACS or DDT/EXEC, depending on how Babyl was called:
		If was 1,M-X Babyl or a BABYL job then will exit back to DDT/EXEC.
	Repeating the M-X Babyl command will resume with state unchanged.




Extended commands (invoke with X command):

Babyl
	Mail file editor subsystem.
	String argument is Babyl filename.  It defaults, and can be
	    overriden.  Describe the I command for details.
	If Babyl was temporarily exited before, this command will re-enter it
	    instead of starting a new session.  The # Babyl ^X command is
	    the one that temporarily exits Babyl.
	Babyl init and vars files are similar to EMACS ones, though these
	    should only be for customizing Babyl.  If you only use Babyl from
	    WITHIN EMACS, you can customize it with your EMACS init or vars
	    file.  You would then need no Babyl init or vars file.  But if you
	    want to use Babyl outside EMACS, i.e. :BABYL on ITS or BABYL.EXE
	    on TNX, then you should put Babyl customizing in a Babyl init or
	    vars file.
	Babyl checks your home directory for a Babyl init file, which should
	    be Teco code: BABYL INIT (ITS) or BABYL.INIT (TNX).
	If no init file is found, it looks for a vars file:  BABYL VARS (ITS)
	    or BABYL.VARS (TNX).  This file should be in the same format as an
	    EMACS vars file.
	This processing is only done the first time Babyl is loaded, for
	    reading or sending mail.  If you edit your Babyl init or vars file
	    after this first entry to Babyl, you can give the M-X Process
	    Babyl Init or Vars File command manually so that Babyl takes
	    notice of the changes.

Convert Babyl File Version
	Numeric argument is desired version to go to.
	This command is invoked automatically by Babyl when necessary, so
	    you probably will never need to use this yourself.
	If you give no numeric argument, the conversion will be to the version
	    that this Babyl assumes.
	Buffer should contain a Babyl file.
	Point is left at the top.
	You may convert up or down in versions.

Create Babyl File
	Create a new Babyl file, with sample message.
	Will ask you for the Babyl filename, or you can give it as a string
	    argument.  With a standard default for a user's main Babyl file
	    that reads the user's mail file.  Will ask you about each of the
	    various Babyl options that a Babyl file may have.
	Offers to send a message to BABYL-REQUEST@MIT-MC, requesting that
	    you be added to INFO-BABYL@MIT-MC.

Delete Labeled Messages
	Delete messages with some label.
	String argument is label.
	See also UnDelete Labeled Messages.
	Numeric argument is number of messages (with the label) to delete,
	    from the current message forward.
	No numeric argument means delete all messages with the label.

Edit Babyl Options
	Lets user change options for current Babyl file.
	Will ask you about each of the various Babyl options that a Babyl file
	    may have.
	This command should only be called from within Babyl.ed messages.
	First string argument is label1, specifying which messages to
	    consider.
	Second string argument is label2, the label to add or remove from the
	    considered messages.
	No numeric argument means label all considered messages.
	Numeric argument n (positive) means label the next n considered.
	Numeric argument -n means unlabel the next n considered.
	Numeric argument 0 means unlabel all considered messages.

Label Message
	Attach/remove a label to the current message.
	Given negative argument, removes the specified label.

Label Messages Containing String
	Label search-selected messages.
	1st string argument is a string.  Messages containing that string will
	    be labeled.
	2nd string argument is the label to add.
	Given a numeric argument, it goes through the entire Babyl file,
	    rather than just forward from the current message.
	Each message containing the given string is labeled with the given
	    label.
	Note that the string is actually a Teco search string, so for
	    instance, if you want to label messages containing "foo" OR "bar",
	    you can provide the string "foobar".

Mail With Template
	Edit and send mail, with template initialization.
	Describe Edit and Mail Buffer for details about message editing and
	    the general hooks available.
	The message is initialized from a template, which may specify any
	    header or text components.  The template is a variable, containing
	    a copy of what the mail editing buffer should be initialized to.
	    It can optionally start with a value for point, within brackets,
	    e.g. it might start:  [35]To:
	String argument is a template name.  The template variable name is
	    formed from this name -- e.g. for a template named "Foo", the
	    variable is named Babyl Template Foo.  If you are using the Babyl
	    V command the template name is read with completion.
	If you give a numeric argument of 2, we will try to use 2 windows,
	    current message in top one, message being sent in bottom one.
	See the M-X Set Mail Template command for aid in creating templates.
	Runs the Teco program in the variable Babyl M Hook if one.  This
	    program can check the variable Current Babyl Template Name, 0 for
	    normal mailing, if it wants to further process the template.

Net Mail
	Send off network mail in user directory

Next Labeled Message
	Move to next/previous message with some label.
	| or 2| moves forward, -| or -2| moves backward.
	No numeric arg, e.g. |, or -1 arg, e.g. -|, means use the last label
	    again.  (If you explicitly give a string argument , though, it
	    will be used.) The label defaults initially to RemindNow, for
	    reminders.
	With a numeric argument of -2, 1, or 2, will read the label to use.

Output Labeled Messages
	Write messages with some label to a file.
	String argument is the label.
	This is like going to each of these messages, and using the O command
	    to write it to the file, except that it does not read/write for
	    each message: it collects all the messages first, then writes the
	    file.
	It asks whether the given label should be removed.  E.g. the label
	    could be temporary, marking those files to output now.
	Asks for filename.  Also asks if can mark messages as deleted.  (They
	    are deleted only after the file is successfully written.)
	Default filename is based on the label, say foo:  for ITS default is
	    FOO XMAIL, for TNX it is FOO.XMAIL.  The version is controlled by
	    the variable Babyl File Version.  See its description.
	The filename may also be specified by a second string argument.
	Numeric argument is number of labeled messages to output, from the
	    current message forward.
	No numeric argument means output such-labeled all messages in mail
	    file.
	There are two hooks that the user may provide: Babyl O Message Hook,
	    which is run on each outgoing message as it is collected, and
	    Babyl O Done Hook, which is run on each labeled message in the
	    current Babyl file (this hook is run only after the file has been
	    written).

Process Babyl Init or Vars File
	Find init or vars file and process it.
	Babyl init and vars files are similar to EMACS ones, though these
	    should only be for customizing Babyl.  If you only use Babyl from
	    WITHIN EMACS, you can customize it with your EMACS init or vars
	    file.  You would then need no Babyl init or vars file.  But if you
	    want to use Babyl outside EMACS, i.e. :BABYL on ITS or BABYL.EXE
	    on TNX, then you should put Babyl customizing in a Babyl init or
	    vars file.
	Babyl checks your home directory for a Babyl init file, which should
	    be Teco code: BABYL INIT (ITS) or BABYL.INIT (TNX).
	If no init file is found, it looks for a vars file:  BABYL VARS (ITS)
	    or BABYL.VARS (TNX).  This file should be in the same format as an
	    EMACS vars file.
	This processing is only done the first time Babyl is loaded, for
	    reading or sending mail.  If you edit your Babyl init or vars file
	    after this first entry to Babyl, you can give the M-X Process
	    Babyl Init or Vars File command manually so that Babyl takes
	    notice of the changes.

Re-Enter Babyl
	Mail file editor subsystem.
	String argument is Babyl filename.  It defaults, and can be
	    overriden.  Describe the I command for details.
	If Babyl was temporarily exited before, this command will re-enter it
	    instead of starting a new session.  The # Babyl ^X command is
	    the one that temporarily exits Babyl.
	Babyl init and vars files are similar to EMACS ones, though these
	    should only be for customizing Babyl.  If you only use Babyl from
	    WITHIN EMACS, you can customize it with your EMACS init or vars
	    file.  You would then need no Babyl init or vars file.  But if you
	    want to use Babyl outside EMACS, i.e. :BABYL on ITS or BABYL.EXE
	    on TNX, then you should put Babyl customizing in a Babyl init or
	    vars file.
	Babyl checks your home directory for a Babyl init file, which should
	    be Teco code: BABYL INIT (ITS) or BABYL.INIT (TNX).
	If no init file is found, it looks for a vars file:  BABYL VARS (ITS)
	    or BABYL.VARS (TNX).  This file should be in the same format as an
	    EMACS vars file.
	This processing is only done the first time Babyl is loaded, for
	    reading or sending mail.  If you edit your Babyl init or vars file
	    after this first entry to Babyl, you can give the M-X Process
	    Babyl Init or Vars File command manually so that Babyl takes
	    notice of the changes.

Remind Me Of This Message
	(Un)Labels RemindNow.
	Negative argument means remove the reminder label from this message.

Set Mail Template
	Create or reset a mail template from buffer contents.
	See the M-X Mail With Template or # Babyl V command for using
	    templates.
	String argument is a template name.  If null, will read it in echo
	    area.
	The template is taken to be the entire contents of the buffer.  The
	    current point will be remembered in the template.  This command is
	    generally given while in a recursive mail edit level.

Shorten From Field For Hermes
	Only username.
	Forces the From field to be just Username at Host, no personal name
	    part.
	Nice for Hermes, so other people can see your subject line in a
	    survey, since Hermes doesn't truncate a long From field.

Survey Deleted Messages
	Survey messages labeled "deleted".
	Survey argument convention:
	    No argument means survey all deleted messages in the Babyl file.
	    One positive argument n means survey the next n deleted messages.
	    Two arguments  m,n  mean survey n deleted messages
		starting with message number m.

Survey Labeled Messages
	Survey all or some messages with some label.
	String argument is label.  Messages with that label will be surveyed.
	Survey argument convention:
	    No argument means survey all labeled messages in the Babyl file.
	    One positive argument n means survey the next n labeled messages.
	    Two arguments  m,n  mean survey n labeled messages
		starting with message number m.

Survey Menu
	Edit Babyl file from a survey.
	The last survey created is used, e.g. from a B command, or if none,
	    you are asked what kind of survey to first perform.
	Babyl commands which are not control characters work as usual (plus
	    Control-D and Rubout), except that Space exits Survey Menu, just
	    like ^R Exit.
	Control characters may be executed as Babyl commands by quoting them
	    with ^R Quoted Insert.
	When the recursive edit level is exited we will go back to Babyl
	    buffer, selecting the current survey line's message.
	The option variable Babyl Two Window Survey Menu, if non-0, says that
	    the survey should use one window, messages another.  Back to one
	    window when exit Survey Menu.
	The user can tailor Survey Menu by providing a Survey Mode Hook
	    variable, or by providing a Babyl Command Hook.

Survey Messages Containing String
	Surveys search-selected messages.
	Surveys messages which contain a string (the string argument).
	(Actually this is a Teco search string.)
	Survey argument convention:
	    No argument means survey all matching messages in the Babyl file.
	    One positive argument n means survey the next n matching messages.
	    Two arguments  m,n  mean survey n matching messages
		starting with message number m.

Survey Reminders
	Survey messages with RemindNow label.
	Survey argument convention:
	    No argument means survey all reminder messages in the Babyl file.
	    One positive argument n means survey the next n reminder messages.
	    Two arguments  m,n  mean survey n reminder messages
		starting with message number m.

Survey Seen Messages
	Survey messages not labeled "unseen".
	Survey argument convention:
	    No argument means survey all seen messages in the Babyl file.
	    One positive argument n means survey the next n seen messages.
	    Two arguments  m,n  mean survey n seen messages
		starting with message number m.

Survey Undeleted Messages
	Survey messages not labeled "deleted".
	Survey argument convention:
	    No argument means survey all undeleted messages in the Babyl file.
	    One positive argument n means survey the next n undeleted messages.
	    Two arguments  m,n  mean survey n undeleted messages
		starting with message number m.

Survey Unlabeled Messages
	Survey messages not labeled somehow.
	Given no (or null) string argument, surveys messages with no (user)
	    labels.  A string argument is a label;  surveys messages without
	    that label.
	Survey argument convention:
	    No argument means survey all unlabeled messages in the Babyl file.
	    One positive argument n means survey the next n unlabeled messages.
	    Two arguments  m,n  mean survey n unlabeled messages
		starting with message number m.

Survey Unseen Messages
	Survey messages labeled "unseen".
	Survey argument convention:
	    No argument means survey all unseen messages in the Babyl file.
	    One positive argument n means survey the next n unseen messages.
	    Two arguments  m,n  mean survey n unseen messages
		starting with message number m.

UnDelete Labeled Messages
	Undelete messages that have some label.
	Numeric argument is number of messages (with the label) to undelete,
	    from the current messageforward.
	No numeric argument means undelete all the labeled messages.

Undigestify Babyl Message
	Break up a digest into individual messages.
	The digest is assumed to be the currently selected message.  It will
	    be replaced by the series of messages which made up the digest.  A
	    "To:List-name" field will be added to each message header, for
	    replying and visual identification of the source digest list. 
	The option variable Undigestify Keep Digest controls what happens to
	    the original digest.  This variable can have several values:
		0:	digest is discarded
		+n:	digest is kept, before the individual messages
		-n:	digest is kept, after them
		+1:	digest is additionally marked Deleted
		-1:	same
	If a precomma arg is given it is used instead of the value of the
	    variable.



Single-character commands in library BBOARD  (Filename: BBOARD):

^A:	Add BBoard to Switch.ini.  With nonzero argument, Remove BBoard. 
	If the name given is not a System BBoard, the user will be prompted
	    for the name of the Twenex Mail File to be read.

^B:   	Look for new BBoard Notices to read, or on to next BBoard.
	With an argument of 1, does not delete old notices.  With an argument
	    of 2, queries about every BBoard whether or not it has new
	    notices.  If BBoard Sans Query is nonzero then BBoard are
	    immediately read without querying.

Node: OptionVariables,	Previous: Commands, Up: Top,	Next: OtherVariables

Babyl option variables and default values:

Babyl A Mode Display			1
	* Non-0 lets A update mode line

Babyl Autolabel Messages		0
	* Non-0 causes autolabeling from subject fields

Babyl CC To				0
	* Automatic CC field in mail if non-0

Babyl Day of Week Flag			0
	* (TNX only) If non-0 day of week is added to Date field of outgoing mail

Babyl Default File			0
	* Set this to specify your normal Babyl file.  If 0,
	Babyl figures out the default filename to use.  If that is
	wrong, you can set this.  Set it to a string, the filename.
	This is especially for users whose Babyl file is not in their
	home directory, or not named from the user name.  E.g. you
	might have a subdirectory full of mail-files, and set this
	variable to (for Tops-20) PS:<SMYTHE.MAIL>SMYTHE.BABYL

Babyl Dont Reply To			
	* 0 or a Teco search string of CCs to remove (null means yourself)

Babyl F Control				0
	* 0 (general edit), 1 (read To/Re then edit), 2 (read To/Re and send)

Babyl Fcc To				0
	* Automatic Fcc field in Tenex or Tops-20 mail if non-0

Babyl File Version			0
	* 0: read max version, write back to same;
	  1: read and write version 1, similar for other positive N;
	 -1: read max version, write back to next version
	  This only applies to Tenex or Tops-20 systems.

Babyl Header/Text Separator		--Text follows this line--
	* 1 line that separates header and text in recursive mail edit

Babyl N After D				1
	* 1 means N after a D, -1 means N or P, 0 means no movement

Babyl O Confirm New File		0
	* If non-0, you must confirm outputting a message to a new file

Babyl Personal Name			0
	* (TNX only) A full name to use with user name as in Personal Name <ME at HERE>

Babyl Reformation Control		0
	* Non-zero speeds up reformation process.
	1 - Do not worry about missing hosts.
	2 - Do not prettify recipient fields either.

Babyl Reformation Flushes These Fields	[Message-id] [Return-Path] [In-Reply-To] [Mail-From] [Rcvd-Date]
	 [Received]
	 
	* Visibility control for fields.
	  0 or a string, with format [fieldname1] [fieldname2] ...
	  Fields mentioned in this string, and otherwise unknown will be
	  removed from the visible header

Babyl Reformation Merges From/Reply-To	1
	* Non-0: Reply-To merges with From.
	This is part of header reformation which you can disable separately.
	Surveys of merged messages will unfortunately mention the Reply-To,
	not the From.

Babyl Remail Control			0
	* 0 (read To field and send), non0 (read To then edit)

Babyl Reply-To Field			0
	* Automatic Reply-To field in mail if non-0

Babyl Require Subjects			0
	* If non-0 Babyl will require you to have a subject in outgoing mail

Babyl Strip Local Host			1
	* Non-zero removes local host from reformed headers

Babyl Survey FROM/TO Control		3
	* Bits, 1 = enable prettification, 2 = shorten hosts, 4 = no hosts
	Can also be a macro, which is given message, survey buffers as args.
	Q1 gives point where from-to field starts in survey.  It can update
	that, e.g. if it wants to put something before the from-to area.
	It should return number (bits as above).

Babyl Trim Recipient List		1
	* 0 will disable all removal of reply recipients,
-1 will disable automatic removal of INFO-xxx,*machine and BBOARD@ recipients

Babyl Two Window Survey Menu		0
	* If non-0, Survey Menu will use two windows.

Babyl User Name				0
	* (TNX only) A name to use in From field possibly overriding username



BBOARD option variables and default values:

BBoard Data File:			0
	* Complete file name if not Switch.ini on Home Directory

BBoard Maximum Size:			10000
	* Maximum Size of BBoard file before deleting old notices

BBoard Q on N at Last Notice:			0
	* If nonzero, N at Last Notice causes an automatic Q

BBoard Sans Query:			0
	* Do not query user if this is nonzero

Node: OtherVariables, Previous: OptionVariables,  Up: Top,  Next: MailingLists

Other Babyl variables, of less general interest:

Babyl C Hook				0
	0 or a Teco program to run after C sets up its template

Babyl Command Hook			0
	0 or Teco program to run at times in command execution.
	Its arg tells situation:
	  In normal Babyl com loop (Q0 has com char, Q5 has arg string):
		1 before display, 2 after,
		3 before com, 4 after.
	  In survey menu (Q..0 has com char):
		5 before com, 6 after.
	  7 when entering SvM level (so you can bind things).

Babyl Default Edit Mail Hook		
		m.m^R Babyl Yank[...Y
		1,m.m^R Fill Indented Mail Region[...\
		qParagraph Delimiteru2
		fq2"g :i22-'"# :i2-'
		q2[Paragraph Delimiter
	Describe Edit and Mail Buffer for details

Babyl Edit Mail Hook			0
	0 or a Teco program to run before recursive edit on mail to send

Babyl F Done Hook			0
	0 or a Teco program to run after F successfully exits

Babyl F Hook				0
	0 or a Teco program to run after F sets up its template

Babyl G Done Hook			0
	User hook, run (if non0) after new mail is collected;
	argument is 0 or message# for last new message

Babyl Keep TNX Received Date		0
	If nonzero, add Rcvd-Date line to header

Babyl M Hook				0
	0 or a Teco program to run after M sets up its template

Babyl O Done Hook			0
	If non-0, run when O is done

Babyl Queuing Function			& Default Babyl Queuing Function
	Name of the mailer-dependent function for queuing mail

Babyl R Done Hook			
		m(m.m& Babyl R Done Hook)
	0 or a Teco program to run after R successfully exits.
	The default is to label the message answered.

Babyl R Hook				0
	0 or a Teco program to run after R sets up its template

Babyl Remail Hook			0
	0 or Teco program to run after message set up

Babyl Setup Hook			0
	If non0, is run immediately after loading Babyl library

Babyl Standalone Job			0
	Non0 means will exit to DDT/EXEC

Babyl Subfork Control			0
	Controls handling of QUEUE-XMAIL subfork.
     Non0 ==> Keep and read RSCAN; 0 ==> Dont keep and no RSCAN
     Note that a special QUEUE-XMAIL is needed if you set this 

Before Babylizing File Hook		0
	Run after reading but before Babylizing non-Babyl files

Current Babyl Template Name		0
	0 or name of template in use

Node: MailingLists,	Previous: OtherVariables,   Up: Top

If you use Babyl, you should be on the INFO-BABYL at MIT-MC mailing
list.  If you don't know how to add yourself to that list, send mail
to BUG-BABYL at MIT-MC asking one of the maintainers to add you to the
list.  (Or to take you off.)

You can also mail requests to BABYL-REQUEST or INFO-BABYL-REQUEST,
which are nearly synonymous with BUG-BABYL.  Pick whichever you find
easiest to recall;  when in doubt send to BUG-BABYL.

All reports of incorrect Babyl operation should be mailed to BUG-BABYL
at MIT-MC.  On the other hand, suggestions for new or changed
capabilities should be mailed to FEATURE-BABYL at MIT-MC.  There are
several people, other than maintainers, who want to hear the
discussions about new features.  (Feel free to add yourself to that
list.)  Generally only maintainers or serious "Teco-hackers" will want
to be on the BUG-BABYL list -- it is verbose, talks a lot of Teco, and
well ... has a definite negative tone.

The messages going out over these lists are collected in the following
files on MIT-MC:

ECC; BABYL BUGS  is the mail file for ECC; BABYL BUGYL, which is the
Babyl file collecting all the BUG-BABYL messages.

ECC; BABYL FEATURE  is the mail file for ECC; BABYL FEATYL, which is
the Babyl file collecting all the FEATURE-BABYL messages.

ECC;BABYL INFO is the mail file collecting INFO-BABYL messages.
(There is no corresponding Babyl file.)

Node: Internals,	   Next: File-Format,		Up: Top

This node is not a very complete guide to the internals of Babyl, but
will collect various pieces of documentation that have been written.
These will include the date written so the reader can get an idea how
current they are.

The source files for Babyl are (as of 5 August 1983) on MIT-MC in
EMACS1; BABYL > and BABYLM >.  They may also be found on MIT-OZ and
MIT-XX in PS:<EMACS>BABYL.EMACS and BABYLM.EMACS.  As a starting point
for finding your way around the sources, note that the function Babyl
is the typical entrypoint for mail reading, and the function & Babyl
Execute Options is the top-level command loop -- studying it will tell
you about some conventions about q-registers, and command argument and
value passing.

* Menu:

* File-Format::		Details concerning the Babyl file format.

Node: File-Format,  Previous: Internals,		Up: Top

Format of Version 5 Babyl Files:

Warning:

    This was written Tuesday, 12 April 1983, based on looking at
a particular Babyl file and recalling various issues.  Therefore
it is not guaranteed to be complete, but it is a start, and I
will try to point the reader to various Babyl functions that will
serve to clarify certain format questions.

    Also note that this file will not contain control-characters,
but instead have two-character sequences starting with Uparrow.
Unless otherwise stated, an Uparrow <character> is to be read as
Control-<character>, e.g. ^L is a Control-L.

Versions:

    First, note that each Babyl file contains in its BABYL
OPTIONS section the version for the Babyl file -- each version
change signals a change in the format of Babyl files, and Babyl
has a function that converts from one version to another:
Convert Babyl File Version.  This file describes Version 5
format.  For other versions, look at the conversion function.

Overall Babyl File Structure:

    A Babyl file consists of a BABYL OPTIONS section followed by
0 or more message sections.  The BABYL OPTIONS section starts
with the line "BABYL OPTIONS:".  Message sections start with
Control-Underscore Control-L Return Linefeed.  Each section ends
with a Control-Underscore.  (That is also the first character
of the starter for the next section, if any.)  Thus, a three
message Babyl file looks like:

BABYL OPTIONS:
...the stuff within the Babyl Options section...
^_^L
...the stuff within the 1st message section...
^_^L
...the stuff within the 2nd message section...
^_^L
...the stuff within the last message section...
^_

    Babyl is tolerant about some whitespace at the end of the
file -- the file may end with the final ^_ or it may have some
whitespace, e.g. a Return Linefeed, after it.

The BABYL OPTIONS Section:

    Each Babyl option is specified on one line (thus restricting
string values these options can currently have).  Values are
either numbers or strings.  The format is name, colon, and the
value, with whitespace after the colon ignored, e.g.:

Owner: ECC
Append: 1
Mail: PS:<ECC>ECC-MAINT.MAIL.1

    Here, the Owner option is the string "ECC", the Append option
is the number 1, and the Mail options is the string
"PS:<ECC>ECC-MAINT.MAIL.1".

    Babyl allows options that is doesn't know about -- it just
ignores them.  This is done so that other mail readers, in
particular the MIT Lisp Machine's ZMail, can also use the same
Babyl files but have some extra options of their own.  The
function & Reset Babyl Options knows the list of options and
their default values.  In general, default is 0, except for
Append (see below).  Here are those options and the kind of
values currently expected (if not 0):

    XMail		Filename, for TNX systems only.
    XMail Append	0 or 1 (boolean), for TNX only.
    MAIL		Filename, the input mail file for this
			Babyl file.
    Version		Number.
    No Original		0 or 1 (boolean).
    Owner		User name string.
    No Reformation	0 or 1 (boolean).
    Labels		String, list of labels, separated by commas.
    Append		0, 1, 2, or 3 -- bit flags (booleans):
			  1-bit is whether to append to Babyl file.
			  2-bit is whether to reverse mail file
				   before sticking on Babyl file.
			Default value is 0 on ITS, 2 on TNX.

Message Sections:

    A message section contains one message and information
associated with it.  The first line is the "status line", which
contains a bit (0 or 1 character) saying whether the message has
been reformed yet, and a list of the labels attached to this
message.  Certain labels, called basic labels, are built into
Babyl in a fundamental way, and are separated in the status line
for convenience of operation.  For example, consider the status
line:

1, answered,, zval, bug,

    The 1 means this message has been reformed.  This message is
labeled "answered", "zval", and "bug".  The first, "answered", is
a basic label, and the other two are user labels.  The basic
labels come before the double-comma in the line.  Each label is
preceded by ", " and followed by ",".  (The last basic label is
in fact followed by ",,".)  If this message had no labels at all,
it would look like:

1,,

    Or, if it had two basic labels, "answered" and "deleted", it
would look like:

1, answered, deleted,, zval, bug,

    The & Label Babyl Message knows which are the basic labels.
Currently they are:  deleted, unseen, recent, and answered.

    After the status line comes the original header if any.
Following that is the EOOH line, which contains exactly the
characters "*** EOOH ***" (which stands for "end of original
header").  Note that the original header, if a network format
header, includes the trailing CRLF.  And finally, following the
EOOH line is the visible message, header and text.  For example,
here is a complete message section, starting with the message
starter, and ending with the terminator:

^_^L
1,, wordab, eccmacs,
Date: 11 May 1982 21:40-EDT
From: Eugene C. Ciccarelli <ECC at MIT-AI>
Subject: notes
To: ECC at MIT-AI

*** EOOH ***
Date: Tuesday, 11 May 1982  21:40-EDT
From: Eugene C. Ciccarelli <ECC>
To:   ECC
Re:   notes

Remember to pickup check at cashier's office, and deposit it
soon.  Pay rent.
^_
;;; Babyl File BNF:

;;; Overall Babyl file structure:


Babyl-File	::= Babyl-Options-Section  (Message-Section)*


;;; Babyl Options section:


Babyl-Options-Section
		::= "BABYL OPTIONS:" CRLF (Babyl-Option)* Terminator

Babyl-Option	::= Option-Name ":" Horiz-Whitespace BOptValue CRLF

BOptValue	::= Number | 1-Line-String



;;; Message section:


Message-Section	::= Message-Starter  Status-Line  Orig-Header
		    EOOH-Line  Message  Terminator

Message-Starter	::= "^L" CRLF

Status-Line	::= Bit-Char  ","  (Basic-Label)* "," (User-Label)*
		    CRLF

Basic-Label	::= Space  BLabel-Name  ","

User-Label	::= Space  ULabel-Name  ","

EOOH-Line	::= "*** EOOH ***" CRLF

Message		::= Visible-Header  Message-Text


;;; Utilities:

CRLF		::= Return Linefeed

Terminator	::= "^_"

Horiz-Whitespace
		::= (Space | Tab)*

Bit-Char	::= "0" | "1"


!# Info C:! !C Finds command description for character you type.!

 "e .[0'
 @fn|q0m(m.m& Info Select Location)|
 [1[2 :i*CfsEchoDisplayw @ftGo to Babyl character:  fiu1
 q1:i2
 q1-33"L q1+100.u2 :i2^2'
 q1-127"E :i2<Rubout>'
 q1-8"E :i2<Backspace>'
 q1-9"E :i2<Tab>'
 q1-10"E :i2<Linefeed>'
 q1-13"E :i2<Return>'
 q1-27"E :i2<Altmode>'
 q1-32"E :i2<Space>'
 q1f1234567890,+-*/():"l :i2<Digit>, <Comma>, +, -, *, /, (, and )'
 :i*Commands m(m.m& Info Select Node)
 :s

2:"e :i*2 is not a Babyl character commandfsErr'
 @ft2  0u..n 0l .-bfsWindoww 
!# Info V:! !C Finds a variable description.!
 "e .[0'
 @fn|q0m(m.m& Info Select Location)|
 1,m(m.m& Read Line)Go to Babyl variable: f"e'[1
 :i*OptionVariables m(m.m& Info Select Node)
 :s

1"e :i*OtherVariables m(m.m& Info Select Node)
  :s

1"e :i*1 is not a Babyl variablefsErr''
 0u..n 0l .-bfsWindoww
!# Info E:! !C Finds description of extended command.!
 "e .[0'
 @fn|q0m(m.m& Info Select Location)|
 1,m(m.m& Read Line)Go to Babyl extended command: f"e'[1
 :i*Commands m(m.m& Info Select Node)
 :s

1"e :i*1 is not a Babyl commandfsErr'
 0u..n 0l .-bfsWindoww
Local Modes:
Fill Column:70
MM # Info E: .[0 0fsVZwzj -s!# Info E:! 1,:m(.,zx*f(uMM # Info E))
MM # Info V: .[0 0fsVZwzj -s!# Info V:! 1,:m(.,zx*f(uMM # Info V))
MM # Info C: .[0 0fsVZwzj -s!# Info C:! 1,:m(.,zx*f(uMM # Info C))
End: