rsalz@bbn.com (Rich Salz) (03/18/89)
Submitted-by: Dan Heller <island!argv@sun.com> Posting-number: Volume 18, Issue 41 Archive-name: mush6.4/part19 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 19 (of 19)." # Contents: mush.1.1 # Wrapped by rsalz@papaya.bbn.com on Mon Mar 13 19:25:25 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'mush.1.1' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mush.1.1'\" else echo shar: Extracting \"'mush.1.1'\" \(49833 characters\) sed "s/^X//" >'mush.1.1' <<'END_OF_FILE' X.\" Mush Man Page: Copyright (c) 1987 Dan Heller X.\" Cleaned up January 1988 by Bart Schaefer <schaefer@cse.ogc.edu> X.\" X.if n .ds Q \&" X.if n .ds U \&" X.if t .ds Q \&`` X.if t .ds U \&'' X.if n .ds - -- X.if t .ds - \(em X.nh X.TH MUSH 1 "Oct 24, 1988" "Version 6.4" X.UC 4 X.SH NAME XThe Mail User's Shell \- Shell for electronic mail. X.SH SYNOPSIS X.B mush X[ X.B \-n X] X[ X.B \-v X] X[ X.B \-s Xsubject X] X[ X.B \-c Xcc-list X] X[ X.B \-b Xbcc-list X] X[ Xaddress-list X] X.br X.B mush X[ Xmode-options X] X[ Xfile-options X] X.SH INTRODUCTION XThe Mail User's Shell (Mush) is an interface for sending and manipulating Xa database of electronic mail messages under the X.IR UNIX (TM) Xenvironment. XThere are three user interfaces that allow the user to interact with X.I Mush. XThe default interface is the conventional tty-based line mode Xsimilar to command line interpreters such as X.I csh Xas well as other mailers, such as University of California, Berkeley's X.I Mail Xand Bell Lab's System V X.I mailx Xinterface. XThis mode requires nothing from the terminal in terms of screen Xcapability and may be run on many different versions of the X.IR UNIX (TM) Xoperating system. X.PP XThe text-graphics X.RI ( curses ) Xinterface is reminiscent of the X.I vi Xvisual editor, but is user-configurable to simulate other editors. XThis interface does not require graphics capabilities of Xthe computer or the terminal on which it is run, but the terminal must Xhave the minimum capabilities required by any visual screen editor. X.PP XThe X.I window Xinterface for the Sun Workstation utilizes the icon and Xmenu based (mouse selectable) windowing system. XThis X.I tool X(graphics) mode is highly subject to the version of operating system Xyour Sun may be running. XWhile the program works with variable levels of success on earlier versions, it Xis intended to be run on Sun versions 2.0 and higher. XSee the BUGS section at the end for more information. X.PP XSee the corresponding sections for more information on the user Xinterface desired. XMost of this manual deals with commands, variables Xand actions that are common to all three interfaces although Xsome attention is paid to individual characteristics of each interface. X.PP XThe following command line arguments are understood by X.I Mush X(full word forms in parentheses): X.TP X\-b X(\-blindcarbon, \-blind) XThe list of Blind Carbon Copy recipients is set on the command line. XIf more than one address or an address containing spaces is specified, the Xentire list should be enclosed in quotes. XThis option applies when sending mail only. XIf you are entering the shell, curses mode, or the tool mode, this option is Xignored. X.TP X\-C X(\-curses) XEnter the mailer in curses mode upon startup. X.TP X\-c cc-list X(\-carbon, \-copy) XThe list of Carbon Copy recipients is set on the command line. XIf more than one address or an address containing spaces is specified, the Xentire list should be enclosed in quotes. XThis option applies when sending mail only. XIf you are entering the shell, curses mode, or the tool mode, this option is Xignored. X.TP X\-d X(\-debug) XTurns on the debugging level to 1. XYou can change debugging levels from within the shell using the X.B debug Xcommand. X.TP X\-F[!] filename X(\-source) XThis file is the same type as the initialization file read on startup X(see INITIALIZATION) with the exception that commands that manipulate Xor search messages may be given. XNormally, such commands may not appear in the initialization file since Xthat file is read before the folder is scanned. XThe file specified by \-F is read after the folder is scanned, so Xcommands that affect messages are allowed. XThe optional `!' argument prevents the shell from running after the Xfile has been sourced. XOtherwise, X.I Mush Xcontinues into whatever interface has been specified. X.TP X\-f [ filename ] X(\-folder) XThe optional filename argument specifies a folder containing mail messages. XWith no argument, X.B mbox Xin the current directory (or the variable X.BR mbox ) Xis used. XIf no filename is given, this option must be last on the command line. X.TP X\-H[:c] X(\-headers) XHave X.I Mush Xdisplay mail headers without entering the shell. XSee the X.B headers Xcommand for information on the X.B :c Xargument. XNo colon modifier is equivalent to \*Q\-H:a\*U. XThis option prevents the shell from running, so this option will turn off the X\-S and \-C flags. XThis option is ignored if the tool mode is in effect. X.TP X\-i X(\-interact) XForces interactive mode even if input has been redirected to the program. XThis is intended for remote host mail sessions but also allows Xthe user to redirect \*Qscripts\*U of X.I Mush Xcommands. XSee the INITIALIZATION section for information on how to Xwrite scripts that deal with mail. XNote that this flag is different from the \*Qignore\*U flag of UCB Mail. X.TP X\-N X(\-noheaders) XEnter X.I Mush Xwithout displaying any message headers. XThis argument is passed to the X.B folder Xcommand. X.TP X\-n X(\-noinit) XNo initialization is done on start up. XThat is, do not source X.I .mushrc Xor X.I .mailrc Xfiles. XSee the INITIALIZATION section for more information on Xstartup and the significance of these files. X.TP X\-r X(\-readonly) XInitialize the folder in Read-Only mode; no modification of the folder is Xpermitted. XThis argument is passed on to the X.B folder Xcommand. X.TP X\-S X(\-shell) XThis flag allows the user to enter the shell even if the system Xmailbox or specified folder is empty or doesn't exist. X.TP X\-s subject X(\-subject) XThe subject is set on the command line using this flag. XIf the subject has Xany spaces or tabs, the entire subject should be enclosed in quotes. XThis applies when sending mail only. XIf you are entering the shell, Xcurses mode, or the tool mode, this option is ignored. X.TP X\-T timeout X(\-timeout) XIn the tool mode (Sun only), X.I timeout Xspecifies the length of time (seconds) to wait between each check for new mail. X30 seconds is the smallest time allowed for performance reasons. X60 seconds is the default value. X.TP X\-t X(\-tool) XUse the graphics tool mode (Sun only). X.TP X\-u [ user ] X(\-user) XThe mailbox to use is /usr/spool/mail/\fBuser\fR. XIf the login name for user is not specified, then root is used. X.TP X\-m mailbox-path X(\-mailbox) XThe mailbox specified will be interpreted as if it were the user's main X(system) mailbox in place of /usr/spool/mail/$USER (or whatever path is Xapplicable for your system and Mail Transport Agent). X.TP X\-v X(\-verbose) XVerbose mode is turned on. XThis option is passed to the actual mail delivery Xsubsystem internal to your version of X.IR UNIX (TM). XSome mailers do not have a verbose option, so this flag may not apply Xto your system (System V, for example). XThis applies when sending mail only. XIf you are entering the shell, Xcurses mode, or the tool mode, this option is ignored. X.TP X\-1 cmd_help X.ns X.TP X\-2 tool_help X.rs X(\-help, \-sunhelp) XSpecify alternate locations of help files. XThese should be full pathnames accessible for reading. XThis is usually done if a binary copy of X.I Mush Xhas been copied from another machine and the wrong pathnames to the Xhelp files cannot be changed. X.SH FEATURES X.BR "New Mail" . X.PP XIf during a X.I Mush Xsession, new mail arrives for you, it is automatically incorporated into Xyour system mailbox and you are told that new mail has arrived. X.PP XIn the default line mode, new mail is checked between each command Xissued. XIn the curses mode, new mail is checked on each Xcommand and is displayed in the bottom line of the screen. XIn the tool based graphics mode, new mail is checked approximately Xevery minute or by the number of seconds specified by the X.B -T Xoption on the command line. X.PP XIf you are using your system mailbox as your \*Qcurrent folder,\*U then the Xnew mail is added immediately to your current Xlist of messages and information similar to the following example is Xdisplayed, to tell you whom the mail is from: X.sp X.ti +2 XNew mail: (#15) island!argv@sun.com (Dan Heller) X.sp XIf you are not in your system mailbox, then the new mail will not be added Xto your list of messages, but you will instead be informed of the new arrival. X.sp XIf you are using the tool based mode and X.I Mush Xis closed to an iconic state, then the number of messages in the current Xfolder is displayed on the mailbox icon and the flag on the mailbox will go up. X.PP X.BR History . X.PP XIn the line-mode interface, X.I Mush Xsupports a history mechanism similar to that supplied by X.IR csh . XA subset of X.I csh Xhistory modifiers are supported to reference previously Xissued commands and to extract specified arguments from these commands. X.PP X.BR "Mail Aliases" . X.PP XMail aliases are shorthand names for long mail addresses. XThese are supported in the same manner as UCB Mail supports them. XBecause X.I Mush Xhas command line history reminiscent of X.IR csh , Xcommands that use UUCP's `!' character for user-host and host-host Xseparation should be escaped (preceded by a backslash). XThis is not necessary in the initialization file (.mushrc) because history Xreferencing is ignored while these files are being sourced. XSee the INITIALIZATION and LINE-MODE INTERFACE sections for more Xinformation on initialization file format and the history mechanism. X.PP XAliases reference normal mailing addresses as well as other aliases. XIf a loop is detected, then the user will be notified and the message will Xbe forced into the file X.B dead.letter Xin the user's home directory. XThe X.B unalias Xcommand is used to reverse the effects of the X.B alias Xcommand. X.PP X.BR "Command Line Aliases" . X.PP XCommand aliases are different from mail aliases in that they are used Xto expand to commands. XThe usage of command line aliases is similar to that supplied by X.IR csh . X.PP X.BR "Command Pipes" . X.PP X.I Mush Xcommands can be \*Qpiped\*U to one another so as to provide output of Xone command to be used as input to the next command in the pipeline. XHowever, the output of commands is not the \*Qtext\*U that is returned X(as it is in X.IR csh ) Xbut a list of the messages that were affected. X.PP X.BR Help . X.PP X.I Mush Xwas designed so that each command or action should not be a mystery. XHelping the user understand what to do and how to do whatever he wishes Xis the goal behind the help facility. XFor this reason, the X.B help Xcommand gives information on both general usage and a few specific help Xcategories. X.PP XIn text mode, most help is gotten by typing \-? as an argument to a Xcommand. XAmost every command has the \-? option. XWhen this option is specified, most commands will attempt to read from Xa help file a brief explanation of the functionality of the command. XIf necessary, a pointer to other sources of information will Xbe given to fully explain a concept. X.PP XIn the curses mode, the `?' key will display a list of the current Xkey-to-command bindings; a keystroke or set of keystrokes correspond Xdirectly to a command. X.PP XIn the tool/graphics mode, this is Xalso available, but more extensive help is provided in the pop-up menus. XPop-up menus can be gotten from virtually anywhere on the screen; press the XRIGHT mouse button (the \*Qmenu button\*U) and a number of items will appear Xin a menu. XThe last command in the menu list will be one labelled \*Qhelp\*U. XSelecting this menu item will display a \*Qhelp box\*U in the center of the Xconsole and wait for input to remove the box. X.PP X.BR "Sorting mail" . X.PP X.I Mush Xallows you to sort your mail according to various constraints such Xas time, status (new, unread, deleted, etc.), author and subject. XSee the X.B sort Xcommand in the COMMANDS section for more information on sorting. X.PP X.B Picking specific messages. X.PP XYou can select messages that contain unique information, or from Xmessages that have special attributes. XYou have the option of restricting your search to messages between dates, Xmessage numbers, author names and other constraints. X.SH INITIALIZATION XAfter the command line arguments have been interpreted, if the argument X.B -n Xis not given, X.B Mush Xwill read commands from an X.B "initialization file" Xthat (typically) sets variable values, aliases, command line aliases, Xand so forth. XThe default system initialization file is read first and then the Xuser's personal initialization file is read. XThe system default file Xis set up by the system administrator and may contain commands that Xshould be set system-wide. X.PP XThe user's file is determined by first looking for the environment variable X.IR MAILRC . XIf that file isn't found, then the file X.I .mushrc Xis searched for in the home directory of the user. XIf that file cannot be found, X.I Mush Xwill attempt to read the file X.I .mailrc Xfrom the same directory. XFinally, if that file cannot be read, no initialization is done Xand the default values will be in effect. X.PP XIf the user has no home directory, or permissions prevent read/write access Xto $HOME, /tmp is used as the home directory. XSee the X.B home Xvariable under the VARIABLES section. X.PP XOnce in the shell, the X.B source Xcommand may be used to specify a file if you want to read commands Xfrom a file other than the default. XThe command X.B saveopts Xwill save all variable settings, aliases, and all other X.I Mush Xsettable attributes, to aid in creating an initialization file. XIf no filename is given on the command line, Xthe X.B source Xand X.B saveopts Xcommands choose a file in the manner described above. X.B Saveopts Xwill not overwrite the file if it exists. XIn such cases, you will be prompted to confirm overwrite. XIf you confirm overwriting the existing file, remember that existing \*Qif\*U Xexpressions or other manually entered comments or non variable-setting type Xcommands that previously existed in the file will be lost. X.PP XNo interactive commands should be called from any initialization file. XThese commands are not prevented because it is impossible to trace which Xcommands are actually X.IR UNIX (TM) Xcommands that will be interactive. XThe responsibility of not running interactive commands is left to the user. XBecause the initialization file is read X.I before Xany messages are read into the program, Xmessage filtering commands should not be placed in this file unless you know Xyou're going to X.IB re- source Xthe file later as a command. X.PP X.IR "Initialization File Format" . XWhen reading the initialization file, X.I Mush Xwill recognize the `#' character as a comment character. XIt may be anywhere on a line in the file. XWhen that character is encountered, Xprocessing of that line is discontinued to the end of the line. XIf the `#' is enclosed in quotes (single or double), then it is not Xconsidered a comment. XExamples: X.sp X.ti +2 Xset shell = /bin/csh # set the shell variable X.ti +2 X# this entire line has been commented out. X.ti +2 Xset prompt = "Message #%m: " # The `#' is within quotes X.PP XThe X.B exit Xcommand has special meaning in the initialization file. XIf the command is found, X.I Mush Xwill not exit, but rather, discontinue reading from the file immediately. X.PP XThere may be \*Qif\*U expressions within the initialization file to determine Xcertain runtime states of X.IR Mush . XNo parentheses are allowed and only one boolean expression may be Xevaluated per line; that is, no \*Q&&\*U or \*Q|\||\*U may be used in Xexpressions. XAn \*Qelse\*U on a line by itself may precede alternative Xactions. X\&\*QIf\*U expressions may be nested to any reasonable depth, but Xthere must always be an \*Qendif\*U matching each \*Qif\*U expression. XThe statements associated with an \*Qif\*U expression are never on the Xsame line with the conditional expression. X.PP XConditional expressions understood include the internal variables X.IR istool , X.IR iscurses , X.IR hdrs_only , X.IR is_sending , Xand X.IR redirect . XIf X.I istool Xis true, the program is going to run in the tool mode. XIf X.I iscurses Xis true, the program is in or is going to run in the curses mode even Xthough the screen package may not yet have been started. XIf X.I hdrs_only Xis true, then the -H flag on the command line has been given. XIf X.I is_sending Xis true, then the user is sending mail to a user. XThis does not imply Xthat the user is not going to be running a shell after the mail is sent. XIf X.I redirect Xis true, then input to the program is redirected. XThe test for redirection tells whether input, not output, has been Xredirected to the program. XThe X.B \-i Xoption on the command line is required to run the shell if redirect is on. XIf \-i is specified, the value for X.I redirect Xwill be set to false. XThese are internal variables whose values cannot be referenced using the X\*Q$variable\*U method of variable expansion. X.PP XThe `!' operator may be used to negate expressions, thus, X.sp X.nf X.in +2 Xif !istool X.ti +4 Xexit Xelse X.ti +4 Xset autoprint Xendif X.in -2 X.fi X.sp Xmeans that if you are not running as a tool, stop reading commands from this Xfile. XOtherwise, set the autoprint variable. X.sp X.in +2 X.nf Xset hdr_format = "%25f %7d (%l/%c) %25s" Xif hdrs_only X.ti +4 Xexit Xendif X.in -2 X.fi X.sp XThis tells the program to set the hdr_format variable and check to see if Xwe're running the program to read headers only. XIf so, stop reading this file (exit) and continue on with the program. XThis speeds up runtime quite a bit for those who have lengthy initialization Xfiles, because no other shell variables are necessary. X.sp X.in +2 X.nf Xif !iscurses X.ti +4 Xset crt = 24 screen = 18 Xendif X.in -2 X.fi X.sp XThis segment checks to see that we're not running in curses mode, and if not Xit will set our crt and screen sizes. XThis is mostly because the curses mode will set those values for us by looking Xat the size of the screen. XLike other interactive commands, the X.B curses Xcommand itself should never be called from an initialization file. XDoing so will cause terminal settings to be set incorrectly and cause Xunpredictable results from there. XSee the CURSES INTERFACE section for configuring your Xenvironment so you enter curses mode each time you run the shell. X.PP XString evaluation is allowed in \*Qif\*U expressions, and the operators X\*Q==\*U and \*Q!=\*U may be used to determine equality or inequality. XUsually, variables are compared with constants for evaluation. XNote that it is not possible to compare variables to an empty string, and Xvariables that evaluate to an empty string may cause errors. XIt is possible to test whether a variable is set by using the syntax X\*Q$?variable\*U (as in X.IR csh ) Xbut there is not currently any way to test for an empty string value. X.sp X.in +2 X.nf Xif $TERM == adm3a X.ti +4 Xset pager = more Xelse X.ti +4 Xset pager = less Xendif X.in -2 X.fi X.sp XThis segment tests to see if the user's terminal type is \*Qadm3a\*U. XIf it is, then it sets the pager variable to be the X.I more Xprogram. XNote that the variable TERM will be gotten from the user's environment if a Xshell variable is not set already. XOtherwise, the pager variable is set to \*Qless\*U. XThis exemplifies the fact that X.I less Xfrequently fails to function correctly Xfor the terminal type \*Qadm3a\*U so we don't use it. X.sp XAlso supported in \*Qif\*U expressions are the test flags \*Q-e\*U Xand \*Q-z\*U. These flags test to see if a file exists (\*Q-e\*U) or Xif it is zero-length (\*Q-z\*U). X.sp X.nf X.in +2 Xset mbox = ~/Mail/mbox Xset newfolder = /usr/spool/mail/$USER Xif -z $newfolder X.ti +4 Xset newfolder = $mbox Xendif Xif -e $newfolder X.ti +4 Xfolder $newfolder Xelse X.ti +4 Xquit Xendif X.fi X.in -2 X.sp XThis sets a new variable called \fBnewfolder\fR to the the user's spool Xmailbox (the system mailbox). It then tests to see if it is zero length, Xand if it is, resets the variable to the value of the user's \fBmbox\fR Xvariable (mbox must be set here). It then tests to see if the new folder Xexists. If it does, it changes folders to the new folder. If it doesn't Xexist, the program exits (via \fBquit\fR). X.PP XAfter sourcing the initialization file, X.I Mush Xreads all the mail out of the specified folder (the system spool directory Xif no folder is given) and creates a list of messages. XThe current maximum number of messages the user Xcan load is set to 1000 by default. XThe system administrator who configures the program can reset this Xvalue higher or lower if you ask nicely. XIf the user has the X.B sort Xvariable set, then when the current folder's messages have all been read, Xthe messages are sorted according to the value of the Xvariable (see the X.B sort Xentry under the VARIABLES heading for more information). XEach message has a number of message header lines that contain information Xabout whom the mail is from, the subject of the message, the date it was Xreceived, and other information about the letter. XThis information is then compiled into a one-line summary for Xeach message and is printed out in an appropriate manner Xdepending on the interface you're using. X.PP XAt this point, commands may be input by the user. XLengthy or complex commands can be placed in a file and then executed via the X.B source Xcommand; for example, a filtering file, "filter", might contain: X.sp X.in +2 X.nf Xpick -f Mailer-Daemon | save mail_errors Xpick -f yukko | delete Xpick -s -i thesis | save +thesis_mail Xpick -t unix-wizards | +wizmail Xupdate Xsort d X.in -2 X.fi X.sp XThen the first command the user typed might be \*Qsource filter\*U Xand the following would happen: XFirst, all messages that have \*QMailer-Daemon\*U in the from line Xwill be saved in the file mail_errors. XThen, all mail from the user \*Qyukko\*U will simply be deleted. XNext, all mail that has in the subject field \*Qthesis\*U X(case ignored, so \*QThesis\*U would also match) would be Xsaved in the file $folder/thesis. XThe next command will find all messages that are addressed to Xthe group \*Qunix-wizards\*U (of which the user is an elite Xmember) and save them in the file $folder/wizmail. XLast, the folder will be updated, removing all deleted mail X(saved mail may be marked as deleted) Xand the folder is reread and sorted according to the date of the messages. X.SH "GENERAL USAGE" XBecause there are three different interfaces available to the user, Xthe tty characteristics (backspace, kill-word, kill-line, redraw line) Xare simulated identically in all interfaces. XWhen the user has to type something, the 4.2BSD style of tty driver interface Xis simulated whether you're in the window system, the curses mode, or Xthe tty-line Xmode, and even on System-V machines. XThis means that backspacing causes a Xbackspace-space-backspace effect (erasing the character backspaced over). XThe user may reset his tty characteristics using the X.B stty Xcommand. X.PP X.IR "Displaying messages" . X.PP XDepending on the interface you use, you can display any message in your Xlist of messages as long as the message is not marked for deletion. XIf the message is marked as deleted, then use the X.B undelete Xcommand supplied by the interface you are using. XTo display a message in line mode, specify the message using X.BR print , X.BR type , X.BR p , X.BR t , Xor type a message number to display that message on the screen. X.PP XIn curses mode, move the cursor over the message you want and type Xa `t' or `p' to read the message. XYou may \*Qbind\*U other keys to call Xthe function that displays messages if `t' and `p' are uncomfortable. X.PP XIn the graphics mode, move the mouse over the message you wish to Xbe displayed and select the LEFT mouse button. XIf the message you want is not visible (in the header subwindow), you may type, Xin the message subwindow, the number of the message and hit return. XThat message number will be displayed. X.PP XIn the line or curses mode, if the message has more lines than the variable X.BR crt , Xthen a X.I pager Xwill be invoked to allow the user to page through the message without Xhaving it scroll off the screen. XThe pager used is determined by the variable X.BR pager . XIf that variable is unset, then a default pager will be used. XNote that if pager is set, but not to a value, or is set to the value Xof \*Qinternal\*U, then the internal pager is used. XThe internal pager Xis very simple; the spacebar displays the next X.B crt Xlines, carriage return prints the next line, and \*Qq\*U quits the pager. X.PP XIn the tool mode, if a message is larger than the size of the message Xsubwindow, the amount of the message viewed is displayed and the user Xmay page through the message via `\\n', `\\r', `j', `J', or `+' (forward Xby lines), `k', `K', or `-' (backwards Xby lines), `\ ' or LEFT mouse button (forward by pages), or MIDDLE mouse button X(backwards by pages). XThe user may precede the forward and backwards by lines keystrokes with a Xnumerical X.I count Xto specify how many lines to scroll. This X.I count Xremains in effect (across message and folder changes) Xuntil a new one is specified. X.PP XAn alternative to displaying messages is the X.B top Xcommand. XThis command will print just the top few lines of a message. XThe number of lines is determined by the variable X.BR toplines . XIf this variable isn't set, X.B top Xwill print a number of lines equal to the value of the variable X.BR crt . X.PP X.IR "Sending mail" . X.PP XYou can send mail using the X.B mail Xcommand or by responding to other mail. XIn either case, when you are sending mail, you are in a mode where everything Xyou type is added to the contents of the message. XWhen you are done typing your message, you can type `^D' X(control-D) to signify the end of the message. XIf you have the variable X.B dot Xset, then you can end a message with a `.' on a line by itself. X.PP XWhile you are composing a message, X.I Mush Xtreats lines beginning with the character `~' specially. XThis is called a X.B tilde escape. XFor instance, typing \*Q~i\*U (alone on a line) will place a copy Xof the \*Qcurrent message\*U into your message body. XIt will not include the message headers of the message, just the body of text Xthat comprises the message. X.PP XAvailable X.BR "tilde escapes" : X[OPTIONAL arguments in square brackets] X.TP X~a file XAppend message buffer to file name. X.TP X~b [bcc-list] XModify blind carbon recipients; otherwise identical to ~t. X.TP X~c [cc-list] XModify carbon copy recipients; otherwise identical to ~t. X.TP X~E[!] XErase message buffer. XSave the contents of the letter to \*Qdead.letter\*U X(unless the `!' is specified) and then clear the message buffer; the user Xremains in editing mode. XIf the variable X.B nosave Xis set, then `!' need not be specified. X.TP X~e [editor] XEnter the editor. XDefaults to variable X.BR editor , Xenvironment EDITOR, or X.IR vi . X.TP X~F[!] XAdd a fortune [don't add] at end of message. X.TP X~f [msg-list] XForward mail. XThe included messages are not indented, Xbut are marked as \*Qforwarded mail\*U. X.TP X~H [msg-list] XSame as ~i, but also include the message headers. X.TP X~h XModify all message headers. XEach header is displayed one by one and each may be edited. X.TP X~i [msg-list] XInclude current message body (or numbered messages). XSee the descriptions of the variables X.BR indent_str , X.BR pre_indent_str , Xand X.BR post_indent_str . X.TP X~p [pager] XPage the message body. XDefaults to variable X.BR pager , Xenvironment PAGER, or the default pager set up by the system administrator. XThis may be the internal pager. X.TP X~q XQuit message; save in ~/dead.letter if X.B nosave Xis not set. X.TP X~r file XRead filename into message buffer. X.TP X~S[!] XInclude [don't include] signature at end of message. XThe variables X.B autosign Xand X.B autosign2 Xdescribe the file or string to append to the message. XSee the VARIABLES section for more information on these variables. X.TP X~s [subject] XModify the subject header. XIf an argument is given (a new subject), then the subject line is X.I replaced Xby the new subject line. XIf none is given, then the subject line is Xdisplayed for editing just as in the ~t command. X.TP X~t [list] XChange list of recipients (\*QTo\*U list). XIf a list is given, this list is X.B appended Xto the current list. XIf no list is given, then the current list Xis displayed and the cursor placed at the end of the list. XYou can backspace over the stuff in the list or you can append more Xaddresses onto the end of the list as desired. X.TP X~u XUp one line. XIf the user made a mistake typing a letter and he Xhas already hit carriage return, he may avoid entering the editor Xand edit the previous line using ~u. XThe line is retyped and Xthe cursor is placed at the end allowing the user to backspace Xover it and retype the line. XSystem-V users should note that if Xthe new line is shorter than it was before the ~u command, the Xline is padded with blanks to the previous length of the file. X.TP X~v [editor] XEnter the visual editor. XDefaults to variable X.BR visual , Xenvironment VISUAL, or X.IR vi . X.TP X~w file XWrite message buffer to file name. X.TP X~x XExit message; don't save in dead.letter. X.TP X~$variable XInsert the string value for variable into message. XIf a boolean variable is listed, nothing is appended regardless of its value. X.TP X~:command XRun the X.I Mush Xcommand specified by \*Qcommand\*U. XYou may not run any command that sends mail. XIt is inadvisable to change folders at this time Xsince the current message list may be corrupted, but the action is Xallowed nonetheless to provide flexibility for experienced users. X.TP X~~ XA line beginning with two escape characters will be unaffected by X.I Mush Xexcept that only a single tilde will be inserted into the letter. X.PP XThe variable X.B escape Xmay be set to describe a character other than `~' to be used as the Xescape character. XWhen sending mail, the above tilde escapes are available in Xall three user interfaces. X.SH "LINE-MODE INTERFACE" XIn the line-mode, the user is given a prompt to which commands are issued Xand arguments are passed to commands. XWhen the user types at the prompt, each line is parsed and words (or Xarguments) are separated into an array of strings. XThis array, also called an X.IR "argument vector" , Xis then modified by expanding history references, command line aliases, Xand variable references. XA command line ends when the end of the line is encountered or a pipe (|) Xor semicolon (;) character is encountered, separating discrete commands. X.PP XWhen a command line has been parsed and placed in an argument vector, the Xfirst argument in the vector (the \*Qcommand\*U) is searched for in a list Xof legal X.I Mush Xcommands. XIf found, the function associated with that command is called and Xthe rest of the line is passed to that function as X.IR "command line arguments" . X.PP XBefore commands are called, however, the input the user gives is preprocessed Xin a style reminiscent of the C-shell X.RI ( csh ). X.I Mush Xalso supports a subset from each of the following aspects of X.IR csh : X.in +2 X\(bu Command history. X.br X\(bu Command line aliasing. X.br X\(bu \*QPiping\*U mechanism to Xredirect \*Qinput\*U and \*Qoutput\*U of commands. X.in -2 X.PP X.BR "Command history" . X.PP XThe history mechanism remembers commands up to the value of the X.B history Xvariable. XIf this variable is not set, only the most recent command is remembered. XTo reference previously typed commands, the `!' character Xis used in the same manner as in X.IR csh . XThere is a limited implementation of history modification; Xsupported are the argument selectors that reference Xcommand line arguments and \*Q:p\*U (echo, but don't execute the command). X.sp XExamples: X.nf X.in +2 X.ta 1i X!-2:$ two commands ago, last argument. X!3:2-4 the third command, arguments two through four. X!!:p print the last command in its entirety. X.in -2 X.fi X.PP XDuring the sourcing of initialization files (.mushrc), history is not Xin effect and therefore the `!' character does not cause history expansion. XThis includes startup of the program and when the command X.I source Xis issued. XUUCP style addresses that contain the `!' character may be given in the Xinitialization file without the need to be preceded by a backslash. XHowever, `!' does need to be escaped if X.BR cmd 's Xare used to reference command line arguments. X.PP X.BR "Command line aliasing" . X.PP XThis feature enables command substitution similar to X.IR csh . XTo be backwards compatible with UCB Mail, the X.B alias Xcommand is used for address aliasing. XThus, the command X.B cmd Xis introduced in place of X.BR alias . X.PP XExamples: X.nf X.in +2 Xcmd d delete Xcmd t type Xcmd dt 'd ; t' Xcmd - previous Xcmd r 'reply \\!* -e -i' X.in -2 X.fi X.sp XIn the last example, if the user types \*Qr 5\*U, X.I Mush Xwill reply to sender of the fifth message and pass all the other Xarguments along to the X.B reply Xcommand. XNote the escaping of the `!' character. XThis must also be done if set in the initialization file (.mushrc). XHad the user not specified a message number on the `r' command line, X.B reply Xwould respond to the \*Qcurrent message\*U rather than the fifth message. X.PP X.BR "Piping commands" . X.PP X\*QOutput\*U from a command is a X.BR "message list" , Xnot the X.I text Xin a message. XA X.B "message list" Xis defined as the set of messages that the user specifies in a command or Xthe messages a command affects after it is through executing. XWhen one command is piped to another, the effect is that the second command Xwill consider only those messages affected by first command. XIn most cases, X.I Mush Xis smart enough to know when piping is occurring and may suppress text output Xthat a command might produce. X.PP XExamples: X.sp X.ti +2 Xpick -f fred | save fred_mail X.sp XThis will find all the messages from \*Qfred\*U Xand save them all in the file named fred_mail. X.sp X.ti +2 Xlpr 4-8 | delete X.sp XThis will send messages 4, 5, 6, 7, and 8 to the printer and then delete them. X.sp X.ti +2 Xheaders :o | delete X.sp XDeletes all old (already read) mail. X.PP XBecause action is taken on mail messages, not files, Xmetacharacters such as `*' and `?' are not expanded to file names as X.I csh Xwould do. XInstead, X.I Mush Xcommands take X.I "message lists" Xas arguments (a list references one or messages) to take action upon. XWhen referencing message numbers, X.I Mush Xunderstands the following special syntax: X.sp X.in +2 X.nf X.ta 1.0i X* All messages X^ The first message X$ The last message X\&. The current message XN\-M A range of messages between N and M, inclusive X.sp X.fi X.in -2 XIn the last case, N and M may be * ^ $ . or digits referencing Xexplicit message numbers. XThe range must be in ascending order. X.sp XYou can also negate messages by placing the message list inside Xbraces, `{' `}' \*- thus, the expression \*Q2-19 {11-14}\*U references Xmessages 2 through 19 except for messages 11 through 14. X.sp XNote that message lists are parsed left to right. XNegated messages may be reset by turning them on Xagain later in the argument list. XA common error new users make is to specify a negated list without Xspecifying any beginning messages. X.sp X.ti +2 Xdelete { 6 } X.sp XIn this example, the user attempted to delete all messages Xexcept for number 6. XHe should have specified `*' beforehand. XA correct example: X.sp X.ti +2 Xpreserve ^-. { 3 } X.sp XHere, the user specifies a valid message list and causes X.I Mush Xto preserve all messages from the beginning of the list (message 1) Xto the current message, excluding message 3. X.PP XAs discussed, after the command line is parsed, the command given is Xcalled and the rest of the arguments on the command line are passed to it. XIf no X.I Mush Xcommand has been found that matches the one given, then the variable X.B unix Xis checked. XIf it is set, X.I Mush Xattempts to run the command line as a X.IR UNIX (TM) Xcommand. X.PP XIf X.B unix Xis not set, or if the command could not be found in the user's PATH Xenvironment, a message will be printed indicating that the command was Xnot found. X.PP XSince no \*Qmessages\*U are affected by \fIUNIX\fR Xcommands, those that appear within \fIMush\fR Xpipelines are executed by the \fBpipe\fR command. A \fIUNIX\fR Xcommand may never be the first command in a pipeline unless the \fBpipe\fR Xcommand is used explicitly. XIf the user wishes to execute \fIUNIX\fR Xcommands that are to be piped to one another (or use any sort of redirection), Xthe command \fBsh\fR is provided for such purposes. XSince \fIMush\fR will parse the entire command line, caution should be Xtaken to enclose questionable shell variables or metacharacters with Xquotes to prevent \fIMush\fR from expanding them. XSee the COMMANDS heading below for more detail. X.PP XThis shell-like quality is for the convenience of the user and is not Xintended to replace the functionality of X.IR sh , X.IR csh , Xor any other command interpreter. X.SH "CURSES INTERFACE" XThe curses interface utilizes the curses routines intrinsic to most X.I UNIX Xsystems. XThis interface is screen oriented rather Xthan line oriented and allows the user to access commands and messages Xmore quickly at the cost of history, piping, and a few commands. X.PP XMany users who prefer the curses interface might want to always start Xall their mail sessions in the curses interface. XPutting the curses Xcommand in your initialization file is a no-no, so you can alias your Xlogin shell mail command to include the -C option. XIf you use the Bourne Shell, you're going to have to type it out all the time. XMush will to attempt to know not to run a shell if you're just sending mail to Xsomeone, so the X.I csh Xcommand line sequences: X.sp X.ti +2 X% alias mail 'mush -C' X.ti +2 X% mail fred X.sp Xwill mail to fred and not enter the shell. XHowever, if you just said, "mail" Xwith no arguments, you'll enter the shell in curses mode if you have mail. XIf you don't, you'll be told so, and the shell will not start. XIf you want to enter curses mode even if Xyou don't have mail, use the \-S option on the command line. X.PP XIn curses mode, the user's terminal has its \*Qecho\*U turned off so commands Xthat are issued are not echoed on the screen. XCertain commands cause the mode Xto return to normal for typing purposes (sending mail, for example). XIn normal operation, the screen will display the current set of message Xheaders, the current message number is in the top left corner, the Xmail status on the top line, and the cursor will be placed on the current Xmessage. XThe number of message headers displayed is set by the variable X.BR screen . XIf the user does not have that variable set, the baud rate is checked and Xthe size of the screen is set according to optimal refresh time. XUsually, 300 baud gives 7 lines, 1200 gives 14, 2400 gives 22 lines, and all Xhigher baud rates give the size of the screen, whatever that may be. XNote that the top line is reserved for \*Qstatus\*U and the bottom line is Xfor user interaction should it be required. X.PP XThe user may now type commands via key sequences that are not echoed Xto the screen. XThus, function keys may be bound to \*Qcommands\*U by using the X.B bind Xcommand. XA list of key-to-command bindings can be found at runtime by typing `?' Xin curses mode or by using the X.B bind Xcommand in line mode. X.PP XThe commands to which you can map sequences are intended to be as self Xexplanatory as possible, but admittedly, it's easier to figure out via Xtrial and error than to try to wade through this documentation. XA list of the legal curses commands can be obtained when executing the Xbind command. XRegular tty line-mode commands are not issued from Xthe curses interface; only special curses mode commands are understood. XThe current list of valid curses commands is: X.sp X.ta 1.5i 3i 4.5i X.in +4 X.nf Xalias back-msg bind bind-macro Xbottom-page chdir copy copy-list Xdelete delete-list display display-next Xexit exit! first-msg folder Xgoto-msg ignore last-msg line-mode Xlpr mail mail-flags map Xmap! my-hdrs next-msg preserve Xquit quit! redraw reply Xreply-all reverse-video save save-list Xsaveopts screen-back screen-next search-again Xsearch-back search-next shell-escape sort Xsort-reverse source top top-page Xunbind undelete undelete-list update Xvariable version write write-list Xhelp X.fi X.in -4 X.sp X.PP XThe following is a list of default key-command bindings. XIf you specify bind commands in your initialization file that conflict with Xthese defaults, your settings will override the defaults. XThe default settings given here Xuse the ^-character method to indicate control characters. XThus, `^X' would mean control-X even Xthough you'd have to type \*Q\\CX\*U to set Xthe binding and actually use the control key and the `X' key simultaneously Xto really X.I do Xa Control-X. XThis is mostly because nroff makes printing the backslash Xcharacter so amazingly difficult. X.TP X\&., t, p, T=top, n=next XDisplay (type/print) message. XTop will display the first X.B crt Xlines of a message. XNext will print the next message. XIf the current message is deleted, the next undeleted message is found. XYou might notice this is different from the line mode, which will return Xan error message that the current message is marked as deleted. X.TP X+, j, J, RETURN XGo to next message. X.TP X-, k, K, ^K XGo to previous message. X.TP X^, $ XGo to first/last message. X.TP X{, } XGo to top/bottom of screen. X.TP Xa XSet aliases. X.TP Xb, B XSet/unset bindings. X.TP Xd, D, u, U XDelete/undelete messages (capitals prompt for message list). X.TP Xf XChange folder. XIf current folder has changed, verification for update will be requested. X.TP Xg, 0-9 XGo directly to a specified message. XWhen the \*Qgoto\*U command Xis selected, a prompt at the bottom of the window prompts for a X.BR "message list" . XAnything that describes a message list may be used. XSince X.I Mush Xcommands return message lists, a legal X.I Mush Xcommand enclosed in backquotes may be used to go to a particular message. XThe new current message pointer will point to the next Xmessage, returned by the command, that is below the old current message. XAn example: X.sp X.ti +2 Xgoto msg: `pick \-f argv` X.sp XThis will cause the current message to move to the first message Xin the current folder from the user \*Qargv\*U that comes after the Xmessage pointed to when the \*Qgoto\*U was issued. XSo, if messages 1 and 5 Xare from the user \*Qargv\*U and the current message the user was on Xwas message 3, then the new current message would be message 5, since it Xis the first message found after message 3 that is from \*Qargv\*U. XIf none of the messages are found after the current message, the new Xcurrent message will be the first one returned by the command. X.TP Xh XSet personal headers. X.TP Xi XSet ignored headers. X.TP Xm, M XSend mail (capital prompts for mail flags). X.TP Xo, O XOrder messages (sort; capital reverses order). XA prompt requests the sort constraints. X.TP Xq, Q, x, X XQuit/exit. X\&`q' will test to see if the current folder has been updated and prompt Xthe user to verify updating. X\&`x' does not update mail, but quits the program. X\&`Q' does not prompt for update verification; if changes were Xmade, updating is automatic. X\&`Q' (quit!) and `X' (exit!) will work even when typed at the X\*Q...continue...\*U prompt, whereas `q' and `x' will not. X.TP Xr, R XReply/reply all. X.TP Xs, S, c, C, w, W XSave, copy, or write messages (capitals prompt for message lists). X.TP Xv XSet regular variables (as opposed to environment variables). X.TP XV XPrint version number. X.TP Xz, Z XPrint next/previous screenful of message headers. X.TP X^L XRedraw the screen. X.TP X^P XPreserve current message (toggle). X.TP X^U XUpdate folder. XA prompt will request confirmation. X.TP X^R XToggle reverse video mode (current message is in reverse video). X.TP X| XSend message to printer X.TP X! XShell Escape. XPrompts for command; RETURN invokes a shell. X.TP X% Xchange directory. X.TP X(, ) XSource/saveopts. XPrompts for file name. X.TP X/, ^/, ^N XForward, backward, continue search for patterns. XEntire messages are not searched for here. XOnly the text available on the screen is searched for. XNote that some terminals use `^_' (control-underscore) for `^/', Xso you may wish to re-bind this key. X.TP X&& XCreate a curses mode macro. X.TP X&: XCreate a line mode macro. X.TP X&! XCreate a composition mode macro. X.TP X:[cmd] XEnter line mode for one command. XHistory is not recorded for this escape, Xand line mode macros are not available. XIf no command is given, curses mode Xis exited and the session continues in line mode X(in which case history and macros become available). X.PP XWhen setting new key sequences to be bound to commands, the user may Xuse control keys and the ESCAPE character for extended commands. XExceptions are control-C, control-\\, and possibly other control characters Xdepending on your system's configuration or your current tty mode settings. X.PP XWhen assigning key sequences to commands, the user enters the X.B bind Xcommand and prompting is done. XIf the Xuser wishes to have control characters or the escape character in a key Xsequence while still using ASCII format, a special notation for control Xcharacters is provided. XThis sequence is used primarily for the use of Xbinding control character sequences in the initialization file. XThis format Xis also used to display the current key-command mappings by the program. X.PP XTo specify control characters in ascii format for the bind command, the Xsequence \*Q\\Cc\*U is used where `c' is the Xcharacter that the control key will translate to and must be in upper case. XThe sequence \*Q\\CP\*U would map to control-P. XIf the user wishes to indicate the RETURN key, this is specified Xwith the string \*Q\\n\*U and Xthe tab key is specified by the string \*Q\\t\*U. XAs a more complex example, on a Wyse-50 terminal, the 8th function key Xoutputs the three characters: control-A, H, line-feed. XTo map this function key to a command, the Xuser would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence, Xthen follow up with a valid curses command. From then on, if the user Xpresses that function key, Xthe command mapped to it will be executed. X.PP XThe ESCAPE key is signified by the sequence, \*Q\\E\*U. XOn a Sun-3 workstation, Xthe R1 key outputs the character sequence: ESC, [, 2, 0, 8, z. XThe corresponding X.B bind Xkey sequence would be \*Q\\E[208z\*U. XRestrictions are that key sequences may not contain the space character Xunless bound in line mode, and can never begin with a digit. X.PP XWhenever a command is entered, other than `^L' X.RB ( redraw ), Xwhich causes the screen to scroll or be refreshed in any way, X.I Mush Xis left in the X.I continue Xmode. XWhen in this mode, the user is given his line-mode prompt followed Xby \*Q...continue...\*U indicating that he may issue a new command or Xreturn to the top level where the current message headers are displayed Xon the screen. XRemember that this is still the curses mode, but much time Xis saved by avoiding redrawing the screen after each command. XThe user may move up and down messages using the appropriate commands X(j/k by default) or anything else the curses mode allows. XOnly the exit and quit commands will return to the top level. XBecause of this, there are 2 additional Xways to \*Qquit\*U from curses mode and return to the login shell. XThe \*Qexit\*U and \*Qquit\*U commands will quit from the top level, but Xthe commands X.B exit! Xand X.B quit! Xare used to exit from the \*Qcontinue\*U level in the curses interface as well Xas from the top level. X.PP XNote that the best way to understand the curses interface is to just use it. XIn line mode, the command \*Qcurses\*U puts you into curses mode. X.SH "GRAPHICS INTERFACE" XWhen running the window-based graphics interface, there will be 5 Xwindows displaying panels of commands, message headers and a text Xwindow which is used for displaying messages or writing messages Xto send to other users. X.PP XThe panel items have labels describing their functionality. XSelecting Xa panel item with the LEFT mouse button causes the action to be executed. XThe RIGHT mouse button displays a menu of options that the command may Xbranch to. XFor example, the X.B save Xpanel item by default will save messages to the file \*Qmbox\*U, but the XRIGHT mouse button causes a menu to be displayed, and the choices of Xwhere to save the message increase to include the items in the menu. XThese typically include the files in the user's folder directory (see the X.B folder Xvariable below). X.PP XAt the end of each list of menu entries for panel items is an item Xlabelled \*Qhelp\*U. XWhen this item is chosen, help for that command Xis displayed in the center of the console. X.PP XWhen composing letters, the interface is the same for the tool mode, Xthe line mode and the curses mode. XTilde escapes are recognized by all Xthe interfaces, but the tool interface allows the user to use the menu Xmouse button to select the tilde escape desired. X.PP XIf the user wishes to review a mail message while in edit-mode, he may Xdo as the other interfaces and enter the tilde escape command \*Q~:print\*U. XThis will cause the current message (or the numbered message, if given) to Xbe displayed in the window. XEditing is temporarily put on hold till the user Xenters a `q' in the message window to indicate that he is done reading the Xmessage and input is to be directed again to the letter being composed. X.SH COMMANDS XDescribed below are legal commands understood by X.I Mush Xthat you can type at the line mode prompt. XMost commands have abbreviations X(given in parentheses) and can be followed by message lists. XIn most cases, Xwhitespace is not necessary to separate commands from message lists. XFor example, \*Qd*\*U will delete all messages, and \*Qu1-7 {4}\*U will Xundelete messages 1 through 7 except for message number 4. X.PP XThe ability to customize commands using the X.B cmd Xfacility allows users to customize X.I Mush Xto resemble other mailers. XHowever, efforts have already been made to include commands that are backwards Xcompatible with other line-mode mailers. XUsers of the graphics tool mode of X.I Mush Xmay have little need for the command line mode because the icon based Xinterface allows interaction with many commands. XThe graphics mode is much more restrictive in favor of user Xfriendliness but most useful commands may be achieved anyway. X.PP XThe following is a list of all recognized commands. XSince most commands accept a X.I "message list" Xas an argument, arguments are noted only when they differ from a message list. X.TP X.BR alias " [name] [address-list]" X.ns X.TP X.BR unalias " name" XThe X.B alias Xcommand defines a name to stand for a list of addresses. XThe defined name can then be substituted for the entire list when Xsending mail. XFor example, END_OF_FILE if test 49833 -ne `wc -c <'mush.1.1'`; then echo shar: \"'mush.1.1'\" unpacked with wrong size! fi # end of 'mush.1.1' fi echo shar: End of archive 19 \(of 19\). cp /dev/null ark19isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 19 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.