home *** CD-ROM | disk | FTP | other *** search
- From: argv@zipcode.com (Dan Heller)
- Newsgroups: comp.sources.misc
- Subject: v18i061: mush - Mail User's Shell, Part04/22
- Message-ID: <1991Apr21.024926.11204@sparky.IMD.Sterling.COM>
- Date: 21 Apr 91 02:49:26 GMT
- Approved: kent@sparky.imd.sterling.com
- X-Checksum-Snefru: bc3a673f 7fdca7a6 131ee928 3077fc47
-
- Submitted-by: Dan Heller <argv@zipcode.com>
- Posting-number: Volume 18, Issue 61
- Archive-name: mush/part04
- Supersedes: mush: Volume 12, Issue 28-47
-
- #!/bin/sh
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file bindings.h continued
- #
- if test ! -r _shar_seq_.tmp; then
- echo 'Please unpack part 1 first!'
- exit 1
- fi
- (read Scheck
- if test "$Scheck" != 4; then
- echo Please unpack part "$Scheck" next!
- exit 1
- else
- exit 0
- fi
- ) < _shar_seq_.tmp || exit 1
- if test ! -f _shar_wnt_.tmp; then
- echo 'x - still skipping bindings.h'
- else
- echo 'x - continuing file bindings.h'
- sed 's/^X//' << 'SHAR_EOF' >> 'bindings.h' &&
- #define C_PREV_MSG 15L
- #define C_FIRST_MSG 16L
- #define C_LAST_MSG 17L
- #define C_TOP_PAGE 18L
- #define C_BOTTOM_PAGE 19L
- #define C_NEXT_SCREEN 20L
- #define C_PREV_SCREEN 21L
- #define C_SOURCE 22L
- #define C_SAVEOPTS 23L
- #define C_NEXT_SEARCH 24L
- #define C_PREV_SEARCH 25L
- #define C_CONT_SEARCH 26L
- #define C_PRESERVE 27L
- #define C_REV_SORT 28L
- #define C_SORT 29L
- #define C_QUIT_HARD 30L
- #define C_QUIT 31L
- #define C_EXIT_HARD 32L
- #define C_EXIT 33L
- #define C_UPDATE 34L
- #define C_FOLDER 35L
- #define C_SHELL_ESC 36L
- #define C_CURSES_ESC 37L
- #define C_PRINT_MSG 38L
- #define C_CHDIR 39L
- #define C_VAR_SET 40L
- #define C_IGNORE 41L
- #define C_ALIAS 42L
- #define C_OWN_HDR 43L
- #define C_VERSION 44L
- #define C_MAIL_FLAGS 45L
- #define C_MAIL 46L
- #define C_REPLY_ALL 47L
- #define C_REPLY_SENDER 48L
- #define C_DISPLAY_NEXT 49L
- #define C_DISPLAY_MSG 50L
- #define C_TOP_MSG 51L
- #define C_BIND_MACRO 52L
- #define C_BIND 53L
- #define C_UNBIND 54L
- #define C_MAP_BANG 55L
- #define C_MAP 56L
- #define C_MACRO 57L
- #define C_MARK_MSG 58L
- #define C_HELP 59L/* THIS MUST BE THE LAST ITEM */
- X
- struct cmd_map {
- X /* long so glob_flags can be saved in mac_stack */
- X long m_cmd; /* the command this is mapped to */
- X char *m_str; /* the string user types (cbreak) */
- X char *x_str; /* the string executed if a macro */
- X struct cmd_map *m_next;
- };
- X
- #ifdef CURSES
- X
- /*
- X * Pointers to the current active command or macro and to the map list.
- X * This ought to be handled by having getcmd() return struct cmd_map *,
- X * but curses_command() depends too heavily on getcmd() returning int.
- X */
- extern struct cmd_map *active_cmd, *cmd_map;
- X
- #endif /* CURSES */
- X
- /* This must be OUTSIDE the #ifdef CURSES -- needed in other modes */
- extern struct cmd_map *mac_hide;
- X
- /*
- X * Special bracketing recognized within an executing
- X * macro as surrounding a curses function name
- X */
- #define MAC_LONG_CMD '['
- #define MAC_LONG_END ']'
- #define MAC_GET_STR "getstr"
- #define MAC_GET_LINE "getline"
- #define MAX_LONG_CMD 32
- X
- /*
- X * External declarations for map and map! purposes
- X */
- extern char *c_macro();
- extern struct cmd_map *line_map, *bang_map;
- SHAR_EOF
- echo 'File bindings.h is complete' &&
- chmod 0644 bindings.h ||
- echo 'restore of bindings.h failed'
- Wc_c="`wc -c < 'bindings.h'`"
- test 2970 -eq "$Wc_c" ||
- echo 'bindings.h: original size 2970, current size' "$Wc_c"
- rm -f _shar_wnt_.tmp
- fi
- # ============= cmd_help ==============
- if test -f 'cmd_help' -a X"$1" != X"-c"; then
- echo 'x - skipping cmd_help (File already exists)'
- rm -f _shar_wnt_.tmp
- else
- > _shar_wnt_.tmp
- echo 'x - extracting cmd_help (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'cmd_help' &&
- /* @(#)cmd_help 10/24/88 (Dan Heller) */
- X
- %about%
- Mush, the Mail User's Shell was conceived, written and performed by
- X
- Dan Heller Bart Schaefer
- argv@zipcode.com schaefer@zipcode.com
- argv@ora.com schaefer@cse.ogi.edu
- argv@monet.berkeley.edu
- argv@uunet.uu.net
- X
- Mush is copyright (c) 1986, 1987, 1988, 1989, 1990, 1991 by Dan Heller.
- X All Rights Reserved.
- X
- This software is not in the public domain. It is freely available
- under the restrictions discussed in the README file accompanying
- this distribution.
- X
- Dan Heller is currently working on his second book, The Motif
- Programmer's Manual for O'Reilly && Associates. Bart Schaefer
- recently completed his Ph.D. in Computer Science and Engineering
- at the Oregon Graduate Institute. Bart and Dan have co-founded
- Z-Code Software Corporation to produce, among other things, Z-Mail,
- the successor to Mush. If you like Mush, talk to us about Z-Mail :-).
- X
- History:
- X Mush was created as a friendlier and more versatile replacement
- for the commonly available UNIX mail utilities. It originated in
- 1985 as "frankenmail", with strictly a SunWindows interface, but
- soon expanded to line and curses modes under the demands of excited
- users. Bart climbed aboard on version 6.0 in October 1987. The
- current version, 7.2, is the culmination of efforts by Dan, Bart,
- and numerous contributors from around UseNet:
- X
- X Don Lewis Rich Burridge
- X Bill Randle Bill Petro
- X Marc Rouleau (MMDF support) Akkana
- X James Bohem Michael Berman
- X Mike O'Carroll (DOS ports) David St. Pierre
- X Kevin Sheehan
- X
- and many others who may have been lost or weren't listed for fear
- of misspelling.
- X
- Discussion and support of Mush is available via the newsgroup
- comp.mail.mush or mailing list mush-users@apple.com, which are
- one and the same in content. If you cannot get the newsgroup
- at your site, you can request to join mush-users by sending such
- a request to mush-users-request@apple.com.
- %%
- X
- %?%
- X ? [command]
- X
- The `?' command gives you a list of legal commands. Most commands
- accept -? as an option. This provides you with specialized help for
- that particular command.
- X
- If the optional argument is given, help for that command is shown.
- %%
- X
- %ignore%
- X ignore/unignore [headers]
- X
- Use this command to set the message headers you would like not
- to be printed when you read a message. If no header specified,
- then a list of all headers currently being ignored is printed.
- You must specify a header for unignore.
- X
- You can set the variable $alwaysignore to force normally
- ignored headers to be ignored while saving messages, forwarding
- messages or including messages into message buffers.
- X
- See also the variable $show_hdrs.
- %%
- X
- %set%
- X set/unset [variable [= value]]
- X
- With no parameters, set lists all variables and their values.
- To set a boolean variable (on or off), use:
- X set variable
- To set a variable's value to a string, use:
- X set variable = value
- X
- If you want double-quotes or white-space embedded in a string,
- encase the string in single quotes. If you want single quotes
- in a string, encase the string in double quotes.
- X
- For a list of all variables with special meanings, use:
- X set ?all
- For help on a particular one of these variables, use:
- X set ?variable_name
- %%
- X
- %readmsg%
- X print [msg_list]
- X type [msg_list]
- X top [msg_list]
- X next [msg_list]
- X previous [msg_list]
- X
- You can read messages in different ways. "type" and "print" display
- the current message. "top" displays the first N lines of the current
- message where N is the value of the variable "toplines", or "crt" if
- "toplines" is not set. "next" advances to the next unread message and
- print that. "previous" moves back to read the first unread message
- before the current message. "^" displays the first message, "$"
- displays the last.
- X
- Any of these commands can be followed by a message list, and each
- message in that list is displayed (or piped to other commands).
- X
- See also "help msg_list" and the variable $autoprint.
- %%
- X
- %alts%
- X alts [hostnames] [*[user]] [!path!user] [user@host]
- X
- The alts command sets a list of hostnames on which you have an
- account. Normally, when you respond to all recipients of mail,
- your account name is listed as if you wished to send yourself mail.
- If you don't have metoo set, then your name is removed from the
- mailing list if the host specified is in the alternates list.
- Hostnames may be given either as a single name or as a UUCP path
- (separated by `!' characters).
- X
- The special parameter `*' instructs alts to match all hostnames;
- in that case, only your login name is tested. A user name may be
- appended to the `*', in which case that name is tested instead of
- your local login name. A user name at a specific host machine
- may be specified either with the syntax "user@host" or by beginning
- the UUCP path to the host with a `!' character. The leading `!'
- is used to differentiate paths that already end in a user name from
- those to which your local login name should be appended.
- %%
- X
- %source%
- X source/saveopts [file]
- X
- The source/saveopts commands load/save all variable settings,
- options, aliases, cmd's, ignored headers ... everything you can set,
- it loads or saves. The file read or written follows these rules:
- X
- 1) If a filename is given, that file is used
- 2) The file described by the environment variable MAILRC
- 3) In the user's home directory: .mushrc (if it exists)
- 4) In the user's home directory: .mailrc (if it exists)
- X
- If saveopts is used and the file exists, confirmation is requested
- before the file is overwritten.
- %%
- X
- %help%
- X help [item]
- X
- Type "help" with no arguments for a list of valid items.
- %%
- X
- %general%
- This is the general help message. To get help on a specific
- command, try "command -?". Extended help is given by typing
- "help item" where item is one of:
- X path, msg_list, prompt, hdr_format
- Help with msg_list is highly advisable!
- X
- Type "?" to get a list of available commands. Try "? command"
- to get help on the particular command that you specify.
- X
- Use "set ?variable" to get help with specific variables.
- %%
- X
- %path%
- Whenever "path" is specified, the following syntax is legal
- besides the normal path addressing scheme used by unix:
- X ~[user] -- the home directory of specified user (yours by default)
- X %[user] --/usr/spool/mail/login_name [user_name] (yours by default)
- X +file --the directory described by `set folder'; file is `file'
- %%
- X
- %msg_list%
- A "msg_list" references one or more messages. The user
- specifies a group of messages according to a special syntax.
- X
- X * All messages.
- X ^ The first message.
- X $ The last message.
- X . The current message.
- X N-M A range of messages between N and M, inclusive.
- X
- In the last case, N and M may be * ^ $ . or digits referencing
- explicit message numbers. The range must be in ascending order.
- X
- You can also negate messages by placing the message list inside
- braces, `{' `}' -- thus, the expression "2-19 {11-14}"
- references messages 2 through 19 except for those from 11
- through 14.
- X
- Commands can be "piped" to one another, because the return value
- of a command is a msg_list, not text. For example,
- X pick -f fred | lpr
- finds all messages "from fred" and send them to the printer.
- X
- Commands dealing with more than one message process them in numeric
- order -- not necessarily the order specified. Thus, the command
- "save 1-5 9 7 6 file" saves the messages in ascending order, not in
- the order given.
- %%
- X
- %hdr_format%
- This variable controls the display of message headers. Use:
- X set hdr_format="string"
- to change the header display. The string uses printf style
- formatting and follows these conventions:
- X %a address of the author
- X %c number of characters (bytes) in the message
- X %d entire date of the message (see "date_received" variable)
- X %f "From" field (author name and address)
- X %i the message-id (may or may not be present)
- X %l number of lines in the message
- X %M month name of the message
- X %N day of the month (number)
- X %n name of the author
- X %s subject of the message
- X %t "To" field (recipients)
- X %T time of the message (see "mil_time" variable)
- X %u user name (login) of the author
- X %W day of the week (Sun, Mon, etc.)
- X %Y year of the message
- X %y year (last 2 digits only)
- X \n a newline
- X \t a tab
- X
- A field specifier may be used in any % expansion. Thus, "%20s"
- displays the first 20 characters of the Subject. No matter
- what the formatting string, the message number, the status of
- the message and a '>' (if this is the "current" message) is
- before any user defined format is printed.
- %%
- X
- %prompt%
- This variable controls the prompt that mush displays.
- X set prompt = "string"
- The "string" follows printf style formatting conventions:
- X %F full path of the current working folder
- X %f name (path tail) of the current folder
- X %m current message number
- X %n number of new messages
- X %u number of unread messages
- X %d number of deleted messages
- X %t total number of messages
- X %T current time
- X %N day of the month (number) (today)
- X %W weekday name (today)
- X %M month name (this month)
- X %Y year (this year)
- X %y year (last 2 digits only)
- X %$ introduces variable name
- X \n newline
- X \t tab
- X
- The special sequence %$ must be followed by the name of a variable.
- The value of that variable is inserted into the prompt at the time
- the prompt is displayed. When setting a %$variable sequence in your
- prompt, be sure to enclose the string in single quotes ('') to
- prevent the shell from expanding the variable at that time.
- %%
- X
- %preserve%
- X preserve [msg_list]
- X
- The "preserve" command marks messages to be saved in your system
- mailbox. Unless explicitly preserved, all mail that you read is
- saved at quit time in ~/mbox (or the file specified by $mbox).
- Deleted messages are preserved only if first undeleted (see
- "delete -?"). When a message is preserved, the `P' status bit
- appears in the header summary display for that message.
- X
- The "unpreserve" command reverses the effect of "preserve".
- X
- Setting the boolean variable $hold is equivalent to preserving
- each message as you read it, except that no `P' status is set.
- %%
- X
- %mark%
- X mark [-[A|B|C|D|E]] [msg_list]
- X unmark [msg_list]
- X
- The "mark" command places a tag on messages that you wish to
- reference later. If no argument or a msg_list only is given, the
- mark is temporary and is not saved when the folder is updated.
- The command "headers -H:m" (abbreviated as ":m") can be used to
- reference all messages having this temporary mark.
- X
- A "priority" may be set on messages by specifying a `-' followed
- by a letter in the range A through E. The "sort" and "pick" commands
- can be used to order or select messages according to their priorities.
- Message priority is saved across folder updates.
- X
- Messages may have both a temporary mark and a priority, but may not
- have more than one priority. The presence of a temporary mark is
- shown by a `+' character immediately following the message number
- in the "headers" command display, while the priority letter is
- displayed in the same place if the message unmarked but prioritized.
- X
- The "unmark" command removes temporary marks only. To remove the
- priority of a message, do not specify a priority:
- X
- X mark - [msg_list]
- X
- See also the commands "set", "sort", "pick" and "headers".
- %%
- X
- %save%
- X save/write/copy [-s|-S|-a|-A] [-f] [msg_list] [filename]
- X
- If no filename is specified, ~/mbox (or the value of the variable
- "mbox") is used. Save and write append the message to the file if
- it already exists. Specifying -f overwrites the file (e.g., erasing
- it first).
- X
- To save messages to a filename beginning with a digit, escape
- the filename with a backslash (\).
- X
- The "write" command writes message without the headers (message
- body only). Save and write both mark messages for deletion unless
- $keepsave is set. The "copy" command is identical to "save" except
- that messages are not marked for deletion (identical to having the
- variable "keepsave" set).
- X
- The -s and -S options save messages to files named by the
- subject of the message. If more than one message is specified,
- then the message subject of each message is used. If -S is
- specified, then the subject of the first message is used for all
- messages. Spaces and forward slashes (/) are converted to
- underscores (_).
- X
- The -a and -A options save messages by author's login name.
- %%
- X
- %lpr%
- X lpr [-n] [-h] [msg_list]
- X
- Send a message to the printer. The options are:
- X -n print body of message only (no headers)
- X -h do not print ignored headers
- X -Pxx print on printer xx
- X
- The variable $printer can be used to specify a default printer;
- for example, "set printer=lp" is the same as always using "-Plp".
- The variable $print_cmd can be used to specify a program other
- than "lpr" to use for printing.
- X
- NOTE: Some systems require that the printer name be introduced
- by "-d" rather than "-P". Mush may have been configured so that
- both -P and -d will produce the correct result, but if an error
- occurs, try the other option.
- X
- See also the variable $alwaysignore.
- %%
- X
- %mail%
- X mail [mail-flags] [recipients]
- X
- Compose and send a mail message. The possible flags are:
- X -b bcc-addrs set blind-carbon-copy recipients
- X -c cc-addrs set carbon-copy recipients
- X -e immediately enter editor (autoedit)
- X -E edit outgoing headers
- X -f [msg-list] forward msg-list (not indented)
- X -F add fortune to the end of message
- X -h file read file as prepared draft (with headers)
- X -H file read file as prepared text (without headers)
- X -i [msg-list] include msg-list in letter
- X -I [msg-list] include msg-list with headers in letter
- X -s [subject] prompt for or set subject
- X -u do not append signatures and fortunes
- X -U send draft immediately (use with -h or -H)
- X -v verbose (not available on some systems)
- X
- The -f option adds new headers and automatically sends the
- indicated messages to the list of recipients unless -E or -e
- is also given. The -I and -i options copies the indicated
- messages into the text of your letter, surrounded by the text
- of variables pre_indent_str, indent_str, and post_indent_str.
- X
- The -h option reads a draft file, which should already include
- message headers. The -H option reads a text file, which should
- NOT include headers. If the -U option is also given, the draft
- is sent immediately.
- X
- See also the variables $ask, $askcc, $autoedit, $autoinclude,
- $autosign, $autosign2, $dot, $edit_hdrs, $escape, $fortune,
- $fortunates, $logfile, $record, $no_expand, $no_hdrs, $realname,
- $sendmail, $verbose, $verify, and $wrapcolumn.
- %%
- X
- %respond%
- X replysender/replyall [msg-list] [-r path] [mail-flags] [recipients]
- X
- The "replysender" command replies only to the sender of a
- message, whereas "replyall" responds to everyone on the To: and
- Cc: lines of the message.
- X
- The command "reply" is identical to "replysender".
- X
- If a message list is indicated, then each message on the list is
- replied to in the same manner. If -r is specified with a host or
- path (uucp-style), then each address in the list is routed via
- this path. This overrides the value of auto_route (see man page).
- X
- The address of the author is obtained from certain headers in his
- message to you. Unless you specify otherwise, mush searches for the
- headers Reply-To: Return-Path: and From:. You can override these
- values by setting the variable reply_to_hdr.
- X
- X set reply_to_hdr = "sender reply-to return-path from_"
- X
- This example shows that mush searches (in order) for the headers
- listed in the reply_to_hdr variable. If one header isn't found, then
- mush looks for the next in the list. If none of the headers in the
- list are found, the default headers (mentioned above) are searched.
- The last header listed in the example is the special "From " header.
- See the man page for more details.
- X
- Type "mail -?" for information on legal mail flags.
- X
- See also the variables $auto_route, $domain_route, $in_reply_to,
- $known_hosts, $metoo, $reply_to_hdr, and those listed by "mail -?".
- %%
- X
- %sort%
- X sort [-i] [-r|a|d|l|R|s|S]
- X
- X -i ignore case in alphabetical sorts
- X -r reverse order of next criteria
- X
- X -a by author (alphabetical)
- X -d according to date
- X -l by length (size in characters, not lines)
- X -p by priority (marks)
- X -R by subject including Re:
- X -s by subject ignoring Re: (alphabetical)
- X -S by status
- X
- Any combination of the options can be given. Each comparison
- proceeds from left to right through the list of criteria,
- stopping when an ordering has been determined or no criteria
- remain. The optional -r flag reverses the order of the next
- comparison specified. Example:
- X
- X sort -i -a -r -d
- X
- The above sorts by author first, ignoring case, and then sorts by
- reverse date (most recent first) for each author. The -r option can
- be given once for each criterion and applies only to the first
- criterion that follows it. Giving -r twice in succession (-r -r)
- does NOT negate the reversal! Whatever option follows the rightmost
- -r has its sense reversed.
- X
- Unlike -r, the -i option is recognized at most once and applies
- to all alphabetical sorts in the list of criteria.
- X
- By default (no parameters), sort orders messages by status:
- New, unread messages are first, followed by preserved messages
- and finally the deleted messages are placed at the end. If -r
- is the only flag given, the status order is reversed.
- X
- If the $date_received variable is set, sorting by date is
- done using the date you received the message. Otherwise,
- messages are sorted by date sent by the original author.
- X
- See also the variable $sort.
- %%
- X
- %pick%
- X pick [+<num>] [-<num>] [-r msg_list] [-x] [-i] [-h hdr] [-f|s|t]
- X [-d [-][date]] [-ago [+|-] [n days] [n weeks] [n months]]
- X [-p priority] [[-e] <pat>]
- X
- Search for patterns within messages. Entire messages are
- searched for <pattern> unless -f, -h, -s, or -t is specified.
- Only one of -d, -f, -h, -s, -t and -ago can be specified; no
- pattern is used with -d and -ago; and -x may not be used in
- conjunction with +<num> and/or -<num>.
- X
- X +<num> return only the first <num>ber messages matched
- X -<num> return only the last <num>ber messages matched
- X -x return all the messages which do NOT match
- X -e remaining arguments are the <pat> (`e'xpression)
- X -f match pattern in the "From:" field (author) only
- X -s match pattern in the "Subject:" header only
- X -t match pattern in the "To:" field only
- X -h hdr match pattern in specified header field only
- X -i ignore case of letters in when matching
- X -r msg_list restrict the range of messages search to msg_list
- X -d select messages sent on [+ after] [- before] date
- X A "date" is of the form: [+-][month]/[date[/year]]
- X Omitted fields default to today's values. Examples:
- X pick -d 4/20 messages on Apr 20, this year
- X pick -d -/2/85 on or before the 2nd, this month, 1985
- X pick -d +5/4 on or after May 4, this year
- X pick -d / finds today's messages only
- X At least one `/' char must be used in a date. There is
- X no strong date checking; 2/30 would be considered valid.
- X -ago select messages relative to the current date
- X Date formats for "ago" are more verbose than for -d; see
- X the manual page for details.
- X -p [A-E] select messages with specified priority
- X Multiple -p flags may be used to search for several
- X priorities at once.
- X
- Examples:
- X Find the first 5 messages with the subject "Telephone Message":
- X pick +5 -s Telephone Message
- X Find the first 2 messages of the last 4 that are to "mush-users":
- X pick -4 +2 -t mush-users
- X Find those among messages 1 to 10 that are 2 months or more old:
- X pick -r 1-10 -ago -2m
- X Find messages that are 1 week old or newer:
- X pick -ago +1w
- X Find messages that contain "-request" in the Resent-From field:
- X pick -h resent-from -e -request
- X
- A description of the pick operation is printed before the search
- is performed, unless the value of the variable $quiet contains the
- field "pick", or pick is piped to another mush command.
- %%
- X
- %alias%
- X alias [name [namelist]]
- X
- Options for alias:
- X alias print all namelists
- X alias name print namelist associated with name
- X alias name namelist set "name" to the value of namelist
- X unalias namelist unalias names in namelist
- X
- A "namelist" consists of one or more addresses. An address may
- be a name already set to another list, a valid user, a file or
- a program. Filenames must be full pathnames, i.e., they must
- begin with a '/' (or with a ~, which expands to some home dir).
- A "program" must start with a pipe symbol and be encased in
- quotes:
- X
- X "|program_name"
- X
- The command "expand" fully expands addresses (including sublists)
- associated with the given alias.
- X
- See also the variable $no_expand.
- %%
- X
- %from%
- X from [+|-] [msg-list] [pattern]
- X
- With no parameters, "from" displays the current message's header
- line. If given a message list, "from" displays the headers of the
- listed messages.
- X
- The special parameters `-' and `+' can be given to move the
- current message pointer to the previous or next message
- respectively, while also printing that message's header.
- X
- If a message list was given in addition to `-' or `+', then
- the current message pointer is set to the first or last
- message, respectively, in the message list given.
- X
- If a pattern is given, that pattern is searched for in the From:
- header of the message. If both a message list and a pattern are
- given, the pattern search is restricted to the listed messages.
- X
- Examples:
- X
- X from - 10-30 {16}
- displays the headers of messages 10 through 30 except for
- message 16 and set the current message pointer to 10.
- X
- X from + Dan
- displays the headers of all messages that contain "Dan" in the
- author's name and set the current message pointer to the last
- one of that kind in the list.
- X
- X from +
- displays the header of the message after the current message
- and increment the current message pointer to that message.
- X
- See also the "headers" command and "help hdr_format".
- %%
- X
- %my_hdr%
- X my_hdr [header[: string]]
- X
- This command is used to set, unset or view your personalized
- message headers. These headers are included in all your
- outgoing mail.
- X
- Options for my_hdr:
- X my_hdr show all headers
- X my_hdr header show value of header
- X my_hdr header: string set header to string
- X un_hdr header unset header
- X
- Note that there is no space between the header name and the
- colon in the third form of the command.
- %%
- X
- %fkey%
- X fkey [<sequence> [command]]
- X unfkey <sequence>
- X
- This command is used to make function key settings in Suntools
- (graphics) mode. When run as a tool (-t on command line),
- choose the Options item, and the "function key" menu option.
- X
- The unfkey command removes the setting for a given string.
- %%
- X
- %cmd%
- X cmd [name [value]]
- X
- This function is used to establish command aliases; cmd's are
- just like aliases in the C-shell. Options are:
- X cmd view all commands
- X cmd command show value of command
- X cmd command value set command to value
- X uncmd command unset command
- X
- The value must be quoted if it is to contain command separators
- such as `;' or `|'.
- X
- If you want to reference history commands within a cmd,
- escape the ! with a backslash. For example:
- X
- X cmd r 'replysender \!* ; delete -t'
- X
- causes "r" to reply using whatever parameters you have given on
- the command line and then delete that message and print the next
- message (-t parameter to "delete").
- %%
- X
- %headers%
- X headers [+|-|N] [[-H]:c]
- X + print the next screenful (or use the 'z' command).
- X - print the previous screenful (or use 'z-' ).
- X N print a screenful starting at message number N.
- X -H:c where `c' is one of
- X a all messages (mostly for the mush startup option -H:c)
- X d deleted messages
- X m marked messages
- X n new messages
- X o old messages
- X p preserved messages
- X r replied-to messages
- X s saved messages
- X u unread messages
- X
- The "headers" command prints out a screenful of headers.
- Deleted messages are not normally shown; set "show_deleted" to
- include deleted messages.
- X
- The command ":c" is equivalent to "headers -H:c". The -H can be
- omitted, i.e., "headers :c" also works.
- X
- See also "help hdr_format".
- %%
- X
- %folder%
- X folder [-N] [-n] [-r] [%[user]|#|&|file]
- X
- X -N do not display the list of headers
- X -n do not update the current folder before changing
- X -r read only mode (cannot write changes to new folder)
- X %[user] change to /usr/spool/mail/[user] (you by default)
- X # change to folder accessed previous to current folder
- X & change to "mbox" -- default is $mbox or ~/mbox
- X
- The "folder" command changes the current folder; with no parameters,
- it prints the name of the current folder. For compatibility with
- older versions, the single character `!' is equivalent to -n.
- X
- "Folder" treats the characters `+' and `~' as metacharacters when
- they are the first character of a file name. `~' is expanded to the
- name of the user's home directory, or to another user's home if it
- is given as "~username" (no `/' between the `~' and the name). `+'
- is expanded to the user's folder directory ("~/Mail" or the value of
- $folder); no `/' is required between `+' and the file name, so both
- "+file" and "+/file" refer to the same file.
- X
- The "update" command updates the current folder. In this case, only
- the -N and -r options are recognized; "update -r" changes the current
- folder to read only mode AFTER updating it.
- X
- See also the variable $folder.
- %%
- X
- %quit%
- X quit/exit
- X
- These commands end a mush session. "quit" updates your mailbox; if
- new mail has come in, you are told so and given an option whether to
- really quit or not. "exit" terminates mush neither updating your
- mailbox nor checking for new mail.
- %%
- X
- %ls%
- X ls [options]
- X
- The "ls" command is exactly like the UNIX command "ls". All
- parameters are the same. The "folders" command is equivalent
- to doing "ls -FR $folder" from the Mush prompt.
- %%
- X
- %shell%
- X sh [command]
- X
- If a "command" is given, that UNIX command is executed under the
- Bourne shell. If no command is specified, then an interactive shell
- is started. The environment variable SHELL or the local mail shell
- variable $shell describes the shell to invoke. If none is set, then
- the default shell is defined by the system administrator (currently
- set to csh).
- X
- Users on systems with job control probably have little use for the
- sh command.
- %%
- X
- %stop%
- X stop
- X
- The stop command sends a stop signal to the mail shell. It is
- equivalent to your tty job-control stop character (often ^Z).
- Since the mush shell never needs to be exited, the command 'q'
- may be "cmd"ed to "stop;await" and csh users may have
- X alias mail %mush
- to bring mush into the foreground rather than having to invoke
- it again. New mail is then read into the shell automatically
- and much time and energy is saved.
- %%
- X
- %curses%
- X curses
- X
- The curses-based interface for Mush does not require a graphics
- display, but does require a terminal which can handle upline
- cursor movement capabilities. All commands are one or two
- keystroke commands and are executed as soon as the key is typed.
- X
- For a list of current key-to-command bindings, use the "bind"
- command (defaults to 'b' in curses mode).
- X
- See also the variable $curses_help.
- %%
- X
- %bind%
- X bind [<sequence> <curses-command> [<parameters>]]
- X unbind <sequence>
- X
- Binding is done for the curses interface only. It allows the
- user to bind keystrokes or key sequences to curses-interface
- commands. You cannot bind keystrokes to regular mush commands
- using bind.
- X
- A bound key-sequence (input by the user) is converted into
- the curses command it is bound to. For a list of all curses
- commands, issue the "bind" command and follow the instructions
- to get a list. Currently, parameters are ignored for all curses
- commands except the special command "macro".
- X
- When specifying sequences, you may enter almost anything at the
- keyboard that you want to type. This includes most control
- characters. A special syntax is provided to specify control
- characters if you wish to set up default key bindings in your
- initialization file without using real control characters.
- X
- To bind keystrokes that are control characters in the
- initialization file, you must use the notation "\CX" where "X"
- is an upper-case letter representing the control key you want to
- use. "\CN" would be control-N; "\n" is carriage return. You may
- not bind keyboard generated signals; for most users, those key
- sequences are control-C and control-\. For users with job
- control, the suspend characters (usually control-Z and
- control-Y) are also ignored.
- X
- Trying to bind a key sequence which prefixes another sequence is
- an error and the user is warned that the longer binding does not
- work. The binding does take place, however, because it is
- possible to unbind the shorter sequence, thus validating the
- longer sequence.
- X
- The special curses command "macro" allows a string to be
- executed just as if the user typed it directly. Issue the
- "bind-macro" command for more details.
- X
- Bindings are removed with the "unbind" command.
- %%
- X
- %msg_flags%
- X flags [[+|-] [flag-bits]] [msg-list]
- X
- Any sensible combination of these flag-bits may be used:
- X D deleted
- X f forwarded
- X N new
- X O old
- X P preserved
- X p printed
- X R read
- X r replied-to
- X S saved
- X U unread
- X
- This command displays the status of messages by default. If a
- msg-list is specified, it tells which bits of the message are set.
- If any (one or more) of the bits are given and no + or - modifier is
- specified, then the status of each message in the list is set to that
- status absolutely (other status flags are lost). However, if a +
- or - is specified, then the status is modified for that bit to on (+)
- or off (-).
- X
- If no list is given, the current message is used.
- %%
- X
- %setenv%
- X setenv VARIABLE [value]
- X
- Variable names may be any string, but traditionally environment
- variables are all upper case. If no "value" is specified, then
- the variable name is set to an empty string. If the value contains
- spaces, you should enclose the string in quotation marks. Use
- printenv to print a list of all your environment variables.
- %%
- X
- %unsetenv%
- X unsetenv VARIABLE
- X
- You must specify one and only one variable to unset in your
- environment variable settings. Use printenv to print a list of
- all your environment variables.
- %%
- X
- %printenv%
- X printenv [VARIABLE]
- X
- Display the entire current environment, or the value of the
- specified environment variable.
- X
- Also see "setenv" and "unsetenv".
- %%
- X
- %edit_msg%
- X edit [msg_list]
- X
- The "edit" command lets you edit messages in your folder. The
- editor used is determined by the variable $editor, the environment
- variable EDITOR, the variable $visual and the environment variable
- VISUAL in that order. If none of those variables are set, the
- default visual editor is used. The "v" command is the same as "edit"
- but tests only $visual and VISUAL.
- X
- When editing messages, be careful not to remove certain message
- headers such as Date:, From:, or any others that look important.
- If you remove or change something you shouldn't have, you are
- notified and the temporary file used to edit the message is
- not removed.
- %%
- X
- %bind-macro%
- X bind-macro [<sequence> [<expansion>]]
- X
- The "bind-macro" command allows you to set macros in curses
- mode, so that one keystroke (or a few) acts as though you
- had typed a longer sequence. Using "bind-macro" is equivalent
- to specifying the "macro" special command as a parameter to
- the "bind" command.
- X
- Given no parameters, "bind-macro" lists all current curses
- mode macros. Given only a <sequence>, it shows the current
- binding for that sequence. Given both a <sequence> and an
- <expansion>, it creates a macro such that, when the
- <sequence> is typed in curses mode, the effect is the same
- as if the <expansion> had been typed instead.
- X
- The same format for control characters that is used for the
- "bind" command may be used in both the <sequence> and the
- <expansion>, i.e.,
- X \Cx control-x (where x is a capital letter)
- X \E the escape character (\C[ does NOT work!)
- X \n a newline (other C-style escapes also work)
- X
- Example:
- X bind-macro F [folder]+record\n
- X
- If you are in curses mode and hit the F key, then the curses
- mode command "folder" executes and +record (followed by
- a carriage return) is entered as if you typed it.
- X
- Macros are removed with the "unbind" command, see "bind -?".
- X
- Also see the "map" and "map!" commands.
- %%
- X
- %map%
- X map [<sequence> [<expansion>]]
- X unmap <sequence>
- X
- The "map" command allows you to use one keystroke (or a few) and
- have it act as though you had typed a longer sequence.
- X
- Given no parameters, "map" lists all current line mode
- macros. Given only a <sequence>, it shows the current
- binding for that sequence. Given both a <sequence> and an
- <expansion>, it creates a macro such that, when the
- <sequence> is typed in line mode, the effect is the same
- as if the <expansion> had been typed instead.
- X
- The same format for control characters that is used for the
- "bind" command may be used in both the <sequence> and the
- <expansion>, i.e.,
- X \Cx control-x (where x is a capital letter)
- X \E the escape character (\C[ does NOT work!)
- X \n a newline (other C-style escapes also work)
- X
- Example:
- X map & print\n
- X
- If you are not in curses mode and hit the & key, then mush acts
- as if you typed the word "print" and hit carriage return.
- X
- To type a character without having the mapping expanded, precede
- the character with a backslash (\).
- X
- Mappings are removed with the "unmap" command.
- X
- Also see the "map!" and "bind" commands.
- %%
- X
- %map!%
- X map! [<sequence> [<expansion>]]
- X unmap! <sequence>
- X
- The "map!" command allows you to set macros in message
- composition mode, so that one keystroke (or a few) acts
- as though you had typed a longer sequence. map!'s take
- effect regardless of whether you started the letter from
- curses mode or line mode.
- X
- Given no parameters, "map!" lists all composition mode
- macros. Given only a <sequence>, it shows the current
- binding for that sequence. Given both a <sequence> and an
- <expansion>, it creates a macro such that, when the
- <sequence> is typed in message composition mode, the effect
- is the same as if the <expansion> had been typed instead.
- X
- The same format for control characters that is used for the
- "bind" command may be used in both the <sequence> and the
- <expansion>, i.e.,
- X \Cx control-x (where x is a capital letter)
- X \E the escape character (\C[ does NOT work!)
- X \n a newline (other C-style escapes also work)
- X
- Example:
- X map! ! <BANG>
- X
- If you are typing in a letter regardless of which interface you
- use and you hit the ! key, then mush reacts as if you typed the
- keys "<BANG>".
- X
- To type a character without having the mapping expanded, precede
- the character with a backslash (\).
- X
- Mappings are removed with the "unmap!" command.
- X
- Also see the "bind" and "map" commands.
- %%
- X
- %eval%
- X eval [-h|-p] args ...
- X
- This command causes its arguments to be re-parsed and then
- executed as a mush command. Example:
- X
- X set initprompt='"$hostname:$cwd "'
- X eval set prompt=$initprompt
- X
- If the -h flag is given, then eval looks for formatting parameters
- as defined for the variable $hdr_format, and expands the formats
- for the "current" message before executing the command. Example:
- X
- X eval -h pick -f %f
- X
- finds all messages from the same author as the current message.
- X
- If the -p flag is given, then eval expands formatting parameters as
- as defined for the variable $prompt. The -h and -p flags may not be
- used together in the same eval.
- %%
- X
- %pipe_msg%
- X pipe [-p pattern] [msg-list] [unix-command] [cmd-args]
- X
- This command is used to send a message to a unix command. The
- command takes its input from the message(s) passed to the pipe
- command. By default, the entire message (including headers) is
- sent. Ignored headers (see "ignore -?" and "set ?show_hdrs") can
- be suppressed by setting the variable $alwaysignore.
- X
- You can pipe (|) messages to this command rather than give a
- msg-list, but if no msg-list is given and there is no pipe, the
- current message is used. The unix-command is executed via "sh",
- so csh aliases may not be used.
- X
- If invoked with a capital letter (Pipe), only the bodies of the
- messages are fed to the unix-command -- all headers are omitted.
- X
- A pattern can be specified to indicate which line should start
- the lines that are sent to the unix command. The pattern must
- match literally (no regular-expressions) at the beginning of a
- line. Once the pattern is found, that line and all succeeding
- lines are sent to the unix command.
- X
- If the unix-command is omitted, then /bin/sh is used and the
- pattern searched for is "#!". Therefore, "pipe" with no arguments
- can be used to treat a message as a shell script.
- X
- Examples:
- X pipe patch -- send the current message to "patch"
- X pipe -p %! lpr -- send the message to a postscript printer
- X pipe 2 7 more -- send messages 2 and 7 through "more"
- X 1 | Pipe nroff -- send the body of message 1 to "nroff"
- %%
- X
- %merge%
- X merge [-N] folder-name
- X
- The contents of the specified folder are read into the current
- folder. If -N is not specified, a header summary is printed
- for each message read (see "headers -?").
- X
- A list of all the merged messages is returned for use in pipes.
- %%
- X
- %echo%
- X echo [-n] [-h | -p] args
- X
- Echo simply echoes the parameters to the command back to the user.
- X
- If the -n flag is given, then no newline is appended.
- If the -h flag is given, then echo looks for formatting parameters
- as if the "from" command were given on the "current" message.
- If the -p flag is given, then echo looks for formatting parameters
- as if your prompt were changed temporarily.
- X
- Examples:
- X echo -h This message is from %a and is dated %d
- might produce:
- X This message is from island!argv and is dated Dec 14, 1988.
- X
- X echo -p There are %n new messages to read in %f.
- might produce:
- X There are 5 new messages to read in /usr/spool/mail/argv.
- X
- Note that -h and -p cannot be specified together.
- %%
- X
- %undigest%
- X undigest [-m] [-p pattern] [msg_list] [filename]
- X
- A "digest" is a mail message which is a collection of other mail messages
- mailed to a "moderator" by other users. The moderator compiles all the
- messages into a folder and sends the result to all the subscribers of the
- mailing list. The undigest command disassembles the entries into the set
- of messages which comprises the digest.
- X
- The -m option merges these messages into the current folder. Otherwise,
- if a filename is specified, a new folder is created and the user can change
- folders to read the messages separately.
- X
- The -p option specifies an alternate pattern to use as the digest article
- separator. The pattern must match literally at the beginning of a line.
- The default pattern is "--------" (eight hyphens).
- X
- If a message list is specified, each digest is disassembled to the same
- filename (if given). If no filename is given and the user did not request
- a merge, then a folder is created based on the subject of the digest.
- %%
- X
- %await%
- X await [-T delay]
- X
- Instructs the shell to wait for new mail to arrive. New mail is checked
- every 30 seconds by default; a different delay can be specified by using
- the -T option.
- X
- If this command is used in a pipe, its output is its input plus the list
- of new messages that have arrived. For example, to show the headers of
- all new messages, and set the current message to the first new message:
- X
- X await | from -
- X
- The await command terminates only when new mail arrives or a keyboard
- interrupt is generated.
- %%
- X
- %cd%
- X cd [directory]
- X
- Change the current working directory to the specified directory,
- or to the user's home directory if none was given.
- X
- If the variable $cdpath is set to a list of directory names, and the
- argument directory is not an absolute path, mush searches the cdpath
- directories in the order given for the new directory and changes to
- the first one found. NOTE: The current directory "." is always
- searched first, before any directory in $cdpath.
- %%
- X
- %pwd%
- X pwd
- X
- Prints the current working directory. The variable $cwd also
- holds the current working directory unless reset by the user.
- %%
- X
- %delete%
- X delete/undelete [msg-list]
- X
- The "delete" command marks the listed messages as deleted. If
- no message list is given, the current message is deleted.
- X
- Deleted messages are not shown in the header summary display
- except in curses mode and when the variable $show_deleted is set.
- Deleted messages are ignored by the "pipe" command and by the
- commands that display messages (see "print -?"), but most other
- commands include all messages whether deleted or not.
- X
- Deleted messages are lost forever when the folder is updated (by
- the "update" command, by changing folders without the "!" flag,
- or by exiting with "quit"). Messages can be recovered by the
- "undelete" command at any time BEFORE the folder is updated.
- X
- See also the variable $show_deleted.
- %%
- X
- %history%
- X history [-h] [-r] [number]
- X
- Display the command history that mush has recorded, as in csh.
- Option -h suppresses the history numbers, and option -r shows
- the history in reverse order (most recent first). If a number
- is given, that many commands of history are displayed.
- X
- The number of commands that mush records is controlled by the
- variable $history. If $history is not set, mush saves only
- the previous command (equivalent to history=1).
- X
- The basic forms of history reference are (N is a number and
- str is any string):
- X
- X !str most recent command beginning with str
- X !?str? most recent command containing str
- X !N command N from the history list
- X !-N command N previous to the current one
- X !! previous command (same as !-1)
- X !$ last word of previous command
- X !* all arguments of previous command
- X
- Modifiers (H can be str, ?str?, N or -N, n is a number or $):
- X
- X !H:$ last word of referenced command
- X !H:n n'th word of referenced command
- X !H:n-m n'th through m'th words of command
- X !H:-n word 0 (command name) through n of command
- X !H:* all arguments of command (same as !H:1-$)
- X !H:n- word n through next-to-last word
- X !H:p print but don't execute command
- X
- X !{R}str append str to reference R (R is any form above)
- X
- It is not currently possible to combine :p with any of the
- other modifiers.
- X
- Also see the variable $nonobang.
- %%
- X
- %folders%
- X folders
- X
- List the files in the directory described by the variable $folder.
- These files are assumed to be folders of mail messages that can
- be read in by the "folder" command (see "folder -?").
- X
- Also see the "ls" command.
- %%
- X
- %stty%
- X stty [options]
- X
- The "stty" command is equivalent to the UNIX command "stty". All
- options are the same. Some settings are temporarily changed
- while mush is running, but are restored when mush exits.
- %%
- SHAR_EOF
- chmod 0644 cmd_help ||
- echo 'restore of cmd_help failed'
- Wc_c="`wc -c < 'cmd_help'`"
- test 43712 -eq "$Wc_c" ||
- echo 'cmd_help: original size 43712, current size' "$Wc_c"
- rm -f _shar_wnt_.tmp
- fi
- # ============= command2.c ==============
- if test -f 'command2.c' -a X"$1" != X"-c"; then
- echo 'x - skipping command2.c (File already exists)'
- rm -f _shar_wnt_.tmp
- else
- > _shar_wnt_.tmp
- echo 'x - extracting command2.c (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'command2.c' &&
- /* @(#)command2.c (c) copyright 1991 (Dan Heller) */
- X
- #include "mush.h"
- X
- /*
- X * Note that all of the routines in here act upon and return 0 or -1.
- X * if -1, then the main loop will clear message lists.
- X */
- X
- /* This is the bottom half of commands.c */
- X
- /*
- X * Do an ls from the system.
- X * Read from a popen and use wprint in case the tool does this command.
- X * The folders command uses this command.
- X */
- ls(x, argv)
- int x;
- char **argv;
- {
- X register char *p, *tmp;
- X char buf[128];
- X register FILE *pp;
- X
- X if (*++argv && !strcmp(*argv, "-?"))
- X return help(0, "ls", cmd_help);
- X p = buf + strlen(sprintf(buf, "%s -C", LS_COMMAND));
- X for ( ; *argv; ++argv) {
- X x = 0;
- X if (**argv != '-')
- X tmp = getpath(*argv, &x);
- X else
- X tmp = *argv;
- X if (x == -1) {
- X wprint("%s: %s\n", *argv, tmp);
- X return -1;
- X }
- X *p++ = ' ';
- X p += Strcpy(p, tmp);
- X }
- X if (!(pp = popen(buf, "r"))) {
- X error(buf);
- X return -1;
- X }
- X (void) do_pager(NULL, TRUE);
- X while (fgets(buf, 127, pp) && do_pager(buf, FALSE) != EOF)
- X ;
- X (void) pclose(pp);
- X (void) do_pager(NULL, FALSE);
- X return 0;
- }
- X
- /*ARGSUSED*/
- sh(un_used, argv)
- int un_used;
- char **argv;
- {
- X register char *p;
- X char buf[128];
- X
- X if (*++argv && !strcmp(*argv, "-?"))
- X return help(0, "shell", cmd_help);
- X if (!(p = do_set(set_options, "shell")))
- X p = DEF_SHELL;
- X if (!*argv)
- X if (istool) {
- X print("You can't run an interactive shell from tool mode (yet).");
- X return -1;
- X } else
- X (void) strcpy(buf, p);
- X else
- X (void) argv_to_string(buf, argv);
- X if (!istool)
- X echo_on();
- X (void) system(buf);
- X if (!istool)
- X echo_off();
- X return 0;
- }
- X
- #ifdef SIGSTOP
- stop(argc, argv)
- int argc;
- char **argv;
- {
- X if (istool)
- X print("Not a tool-based option.");
- X if (argc && *++argv && !strcmp(*argv, "-?"))
- X return help(0, "stop", cmd_help);
- X if (kill(getpid(), SIGTSTP) == -1)
- X error("couldn't stop myself");
- X return 0;
- }
- #endif /* SIGSTOP */
- X
- extern char **environ;
- static int spaces = 0;
- X
- Setenv(i, argv)
- int i;
- char **argv;
- {
- X char *newstr;
- X
- X if (i < 2)
- X return Printenv(i, argv);
- X else if (i > 3 || !strcmp(argv[1], "-?"))
- X return help(0, "setenv", cmd_help);
- X
- X if (i == 3) {
- X if (newstr = malloc((unsigned) (strlen(argv[1]) + strlen(argv[2]) + 2)))
- X (void) sprintf(newstr, "%s=%s", argv[1], argv[2]);
- X } else {
- X if (newstr = malloc((unsigned)(strlen(argv[1]) + 2)))
- X (void) sprintf(newstr, "%s=", argv[1]);
- X }
- X if (!newstr) {
- X error("setenv: out of memory");
- SHAR_EOF
- true || echo 'restore of command2.c failed'
- fi
- echo 'End of part 4'
- echo 'File command2.c is continued in part 5'
- echo 5 > _shar_seq_.tmp
- exit 0
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-