home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume19
/
zsh2.00
/
patch02a
next >
Wrap
Text File
|
1991-05-16
|
56KB
|
1,815 lines
Newsgroups: comp.sources.misc
From: Paul Falstad <pfalstad@phoenix.princeton.edu>
Subject: v19i067: zsh2.00 - The Z shell, Patch02a/6
Message-ID: <1991May15.214518.6856@sparky.IMD.Sterling.COM>
X-Md4-Signature: b0000a78df894269abd0188fa3537090
Date: Wed, 15 May 1991 21:45:18 GMT
Approved: kent@sparky.imd.sterling.com
Submitted-by: Paul Falstad <pfalstad@phoenix.princeton.edu>
Posting-number: Volume 19, Issue 67
Archive-name: zsh2.00/patch02a
Patch-To: zsh2.00: Volume 18, Issue 84-98
This is zsh 2.00.02. This is part of the README file for patchlevel 02:
To get this shell running, cd into the src directory and type
"buildzsh". I tested it on the following machines, where it compiled
just by running this script:
Sun SPARCServer 4/490 running SunOS 4.1.1
Past versions have been tested successfully on the following machines:
Sun 3/60C running SunOS 4.1.1
NeXTstation running Mach 2.0
SGI-4D/25 running IRIX 3.3.1
hp9000 running BSD 4.3
DECSystem-5000 running ULTRIX 4.0
...
01-02:
- added script to convert most csh aliases to zsh aliases or functions
- fc -l (history) now appears in the history itself; HISTNOSTORE
option added to get old behavior
- the POSIX process group race has been fixed; so 'w | more' should
no longer hang
- FCEDIT added, to match the documentation
- %{...%} in the prompt added
- execute-named-cmd and execute-last-named-cmd bindings added
- sources ~/.zshenv in all shells, even if not interactive, unless
-f is given
- ^ and # are no longer `magic' by default; use EXTENDEDGLOB option
to use them
- now checks for tty sanity before each command
- if the right side of a variable assignment expands to more than
one word, array assignment is assumed; so foo=*.c now works
- ~foo is no longer expanded in completion
- select now works even if the argument list is not sorted
- menucompletebeep option added
- emacs mode is now 8-bit clean by default; use bindkey -em
to get your meta key back
- fc -R, fc -W added
- nocorrect added
- lines from history file are now split into words at spaces
- glob-complete, accept-and-menu-complete,
beginning-of-line-hist, end-of-line-hist bindings added
- insert-last-word bound to M-. in emacs mode by default; now moves
back through the history if run repeatedly
- J and K now bound to history search in vi mode
- delete-char no longer core dumps on an empty line
- menu-complete works better
- the editor checks the settings of VISUAL and EDITOR to set
default bindings
- using [[ ... ]] expressions on a symbolic link works as expected
- various problems with globbing were fixed
- xx is now the same as !! if HISTCHARS=x
- added config.h entry for compilers that don't know about void *
- lexical analysis made more efficient
- "if echo $? ; then : ; fi" no longer always prints 0
- removed all enums, '\x7f's from code
- in "case foo in bar) xxx ;; esac", foo and bar are no longer subject
to command alias expansion
- works on platforms where toupper('A') != 'A'
- \e sequence added to echo
- + options now work with set
- AUTORESUME and AUTOCD work better
- getopts works better (?)
- spell checking works better
- "let 2+3=" no longer crashes the shell
- "foo=bar; echo ${=foo}" no longer crashes the shell
- "zsh -c" or "zsh -o" no longer causes a core dump
- "unset MAIL; echo $MAIL" no longer causes a core dump
- "(xterm&xterm&)&" no longer causes a core dump
- "echo $HOM[tab]" beeps instead of deleting "$HOM"
- incremental history search works better
- the pwd of a fg'd job is now printed _before_ resuming it
- rv=`echo -n foo` no longer puts garbage in $rv
- "=1/*" now works as expected
- ^Z can now be bound to something
- the STTY parameter and the builtin builtin are now documented
- IFS=x; foo=`echo foo` no longer puts a newline in $foo
- $status added for csh compatibility
- arrays are automatically expanded if you say 'foo[1234]=x'
- shell now ignores SIGQUIT (it was commented out before :-)
- the times builtin works on systems where times() returns > 0
- no longer hangs the terminal if you ^S before flow control
is turned off
- "date ; read foo" now works in interactive shells
- <<-foo is now parsed as <<- foo, not << -foo
- fixed various errors in the documentation
Stuff that needs to be done
- port zsh to more places
- improve vi emulation
Known Bugs
- terminal acts weird under OpenWindows cmdtool
- xterm run in background inherits bad terminal modes
- here documents don't appear in the history, and cannot be
used inside eval statements
Paul Falstad pfalstad@phoenix.princeton.edu
---
#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 05/11/1991 06:08 UTC by pf@learning
# Source directory /home/learning/pf
#
# existing files WILL be overwritten
#
# This is part 1 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 182334 -rw-r--r-- patches
# 6468 -rw-r--r-- zsh2.00/README
# 1108 -rw-r--r-- zsh2.00/src/funcs.h
# 15255 -rw-r--r-- zsh2.00/src/lex.c
# 281 -rw-r--r-- zsh2.00/src/lex.pro
# 5001 -rw-r--r-- zsh2.00/src/mem.c
# 510 -rw-r--r-- zsh2.00/src/mem.pro
# 619 -rw-r--r-- zsh2.00/src/subst.pro
# 889 -rw-r--r-- zsh2.00/src/table.pro
# 2865 -rw-r--r-- zsh2.00/src/utils.pro
# 1565 -rw-r--r-- zsh2.00/src/y.tab.h
# 624 -rw-r--r-- zsh2.00/src/zle_main.pro
# 18859 -rw-r--r-- zsh2.00/src/zle_tricky.c
# 1282 -rw-r--r-- zsh2.00/src/zle_tricky.pro
# 1137 -rw-r--r-- zsh2.00/scripts/ctoz
# 1429 -rw-r--r-- zsh2.00/src/signals.h.sample
#
if test -r _shar_seq_.tmp; then
echo 'Must unpack archives in sequence!'
echo Please unpack part `cat _shar_seq_.tmp` next
exit 1
fi
# ============= patches ==============
echo 'x - extracting patches (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'patches' &&
*** src/zsh0/zsh2.00/man/man1/zsh.1 Wed Apr 24 00:17:46 1991
--- zsh2.00/man/man1/zsh.1 Fri May 10 07:40:43 1991
***************
*** 1,5 ****
X .\"
! .TH ZSH 1 "1991 April 23"
X .SH NAME
X zsh \- the Z shell
X .SH SYNOPSIS
--- 1,5 ----
X .\"
! .TH ZSH 1 "1991 May 5"
X .SH NAME
X zsh \- the Z shell
X .SH SYNOPSIS
***************
*** 23,28 ****
--- 23,30 ----
X If preceded by \fBnoglob\fP, filename generation is not performed
X on any of the words. If preceded by a \-, the command
X is executed with a \- prepended to its \fBargv[0]\fP string.
+ If preceded by \fBnocorrect\fP, spelling correction is not
+ done on any of the words.
X .PP
X A \fIpipeline\fP is a sequence of one or more commands
X separated by \fB|\fP or \fB|&\fP. \fB|&\fP is shorthand
***************
*** 190,202 ****
X See \fBConditional Expressions\fP below for a description
X of \fIexp\fP.
X .SH "RESERVED WORDS"
! The following words are recognized as the first word of a command
X unless quoted or removed using the \fBunalias\fP builtin:
X .RS
X .PP
X \fBdo done esac then elif else fi for case
X if while function repeat time until exec command
! select coproc noglob \-\fP
X .RE
X .SH COMMENTS
X In noninteractive shells, or in interactive shells with the
--- 192,205 ----
X See \fBConditional Expressions\fP below for a description
X of \fIexp\fP.
X .SH "RESERVED WORDS"
! The following words are recognized as reserved words when used
! as the first word of a command
X unless quoted or removed using the \fBunalias\fP builtin:
X .RS
X .PP
X \fBdo done esac then elif else fi for case
X if while function repeat time until exec command
! select coproc noglob \- nocorrect\fP
X .RE
X .SH COMMENTS
X In noninteractive shells, or in interactive shells with the
***************
*** 227,233 ****
X to stand for itself) by preceding it with a \e\|.
X \e followed by a newline is ignored.
X All characters enclosed between a pair of single quotes ('')
! are ignored.
X A single quote cannot appear within single quotes.
X Inside double quotes (""), parameter and command substitution
X occurs, and \e quotes the characters \e\|, `, ", and $.
--- 230,236 ----
X to stand for itself) by preceding it with a \e\|.
X \e followed by a newline is ignored.
X All characters enclosed between a pair of single quotes ('')
! are quoted.
X A single quote cannot appear within single quotes.
X Inside double quotes (""), parameter and command substitution
X occurs, and \e quotes the characters \e\|, `, ", and $.
***************
*** 453,462 ****
X may be nested. Malformed brace expansion expressions,
X including expressions without a comma, are left unchanged
X by the shell.
X .SS Filename Generation
X If a word contains an unquoted instance of one of the characters
! #, ^, *, |, <, [, or ?, or the string "..../", it is regarded
X as a pattern for filename generation, unless the \fBNOGLOB\fP option is set.
X The word is replaced with a list of sorted filenames that match
X the pattern. If no matching pattern is found, the shell gives
X an error message, unless the \fBNULLGLOB\fP option is set,
--- 456,474 ----
X may be nested. Malformed brace expansion expressions,
X including expressions without a comma, are left unchanged
X by the shell.
+ .PP
+ An expression of the form
+ \fB{\fIx\fB\-\fIy\fB}\fR,
+ where \fIx\fP and \fIy\fP are single characters,
+ is expanded to every character between
+ \fIx\fP and \fIy\fP, inclusive.
X .SS Filename Generation
X If a word contains an unquoted instance of one of the characters
! *, |, <, [, or ?, or the string "..../", it is regarded
X as a pattern for filename generation, unless the \fBNOGLOB\fP option is set.
+ If the \fBEXTENDED_GLOB\fP option is set, the
+ ^ and # characters also denote a pattern; otherwise
+ they are not treated specially by the shell.
X The word is replaced with a list of sorted filenames that match
X the pattern. If no matching pattern is found, the shell gives
X an error message, unless the \fBNULLGLOB\fP option is set,
***************
*** 498,507 ****
X matches either x or y.
X .TP
X \fBx#\fP
! matches zero or more occurences of the pattern x.
X .TP
X \fBx##\fP
! matches one or more occurences of the pattern x.
X .RE
X .PD
X .PP
--- 510,519 ----
X matches either x or y.
X .TP
X \fBx#\fP
! matches zero or more occurrences of the pattern x.
X .TP
X \fBx##\fP
! matches one or more occurrences of the pattern x.
X .RE
X .PD
X .PP
***************
*** 575,581 ****
X readable files (0400)
X .TP
X .B w
! writeable files (0200)
X .TP
X .B x
X executable files (0100, same as *)
--- 587,593 ----
X readable files (0400)
X .TP
X .B w
! writable files (0200)
X .TP
X .B x
X executable files (0100, same as *)
***************
*** 584,590 ****
X world-readable files (0004)
X .TP
X .B W
! world-writeable files (0002)
X .TP
X .B X
X world-executable files (0001)
--- 596,602 ----
X world-readable files (0004)
X .TP
X .B W
! world-writable files (0002)
X .TP
X .B X
X world-executable files (0001)
***************
*** 626,632 ****
X *(%W)
X .RE
X .PP
! lists all world-writeable device files in the current directory,
X and
X .RS
X .PP
--- 638,644 ----
X *(%W)
X .RE
X .PP
! lists all world-writable device files in the current directory,
X and
X .RS
X .PP
***************
*** 694,700 ****
X .B NOCLOBBER
X is set.
X .TP
! \fB<<\fP [\-]\fIword\fP
X The shell input is read up to a line that is the same as
X .IR word ,
X or to an end-of-file.
--- 706,712 ----
X .B NOCLOBBER
X is set.
X .TP
! \fB<<\fP[\-] \fIword\fP
X The shell input is read up to a line that is the same as
X .IR word ,
X or to an end-of-file.
***************
*** 714,720 ****
X occurs, \e followed by a newline is removed,
X and \e must be used to quote the characters
X \e, $, `, and the first character of \fIword\fP.
! If \- is prepended to \fIword\fP, then all leading
X tabs are stripped from \fIword\fP and from the document.
X .TP
X .BI <<< word
--- 726,732 ----
X occurs, \e followed by a newline is removed,
X and \e must be used to quote the characters
X \e, $, `, and the first character of \fIword\fP.
! If <<\- is used, then all leading
X tabs are stripped from \fIword\fP and from the document.
X .TP
X .BI <<< word
***************
*** 886,899 ****
X is executed after the function completes in the environment
X of the caller.
X .PP
! The builtin
X .B return
! is used to return
X from function calls.
X .PP
X Function identifiers
X can be listed with the
! .B function
X builtin.
X Functions can be undefined with the
X .B unfunction
--- 898,911 ----
X is executed after the function completes in the environment
X of the caller.
X .PP
! The
X .B return
! builtin is used to return
X from function calls.
X .PP
X Function identifiers
X can be listed with the
! .B functions
X builtin.
X Functions can be undefined with the
X .B unfunction
***************
*** 1036,1042 ****
X inherited by the shell from its parent
X (but see the \fBTRAPxxx\fP special function above).
X .SH "ZSH LINE EDITOR"
! If the \fBUSE_ZLE\fP option is set (it is by default)
X and the shell input is attached to the terminal, the user
X is allowed to edit command lines.
X .PP
--- 1048,1054 ----
X inherited by the shell from its parent
X (but see the \fBTRAPxxx\fP special function above).
X .SH "ZSH LINE EDITOR"
! If the \fBZLE\fP option is set (it is by default)
X and the shell input is attached to the terminal, the user
X is allowed to edit command lines.
X .PP
***************
*** 1050,1059 ****
X .SS Bindings
X Command bindings may be set using the \fBbindkey\fP builtin.
X There are two keymaps\-the main keymap and the alternate keymap.
- The main keymap is bound to emacs mode by default.
X The alternate keymap is bound to vi command mode.
X To bind the main keymap to vi insert mode, use
! \fBbindkey \-v\fP.
X .PP
X The following is a list of all the key commands
X and their default bindings in emacs and vi command mode.
--- 1062,1072 ----
X .SS Bindings
X Command bindings may be set using the \fBbindkey\fP builtin.
X There are two keymaps\-the main keymap and the alternate keymap.
X The alternate keymap is bound to vi command mode.
+ The main keymap is bound to emacs mode by default.
X To bind the main keymap to vi insert mode, use
! \fBbindkey \-v\fP, or set one of the \fBVISUAL\fP or \fBEDITOR\fP
! environment variables to a string containing \fBvi\fP.
X .PP
X The following is a list of all the key commands
X and their default bindings in emacs and vi command mode.
***************
*** 1117,1122 ****
--- 1130,1139 ----
X Move to the beginning of the buffer, or if already there,
X move to the first event in the history list.
X .TP
+ \fBbeginning-of-line-hist\fP
+ Move to the beginning of the line. If already at the
+ beginning of the buffer, move to the previous history line.
+ .TP
X \fBbeginning-of-history\fP
X Move to the first event in the history list.
X .TP
***************
*** 1130,1135 ****
--- 1147,1156 ----
X Move to the end of the buffer, or if already there,
X move to the last event in the history list.
X .TP
+ \fBend-of-line-hist\fP
+ Move to the end of the line. If already at the end of
+ the buffer, move to the next history line.
+ .TP
X \fBend-of-history\fP
X Move to the last event in the history list.
X .TP
***************
*** 1146,1152 ****
X The string may begin with `^' to anchor the search to the
X beginning of the line.
X .TP
! \fBhistory-search-backward\fP (M-P M-p)
X Search backward in the history for a line beginning with the first
X word in the buffer.
X .TP
--- 1167,1173 ----
X The string may begin with `^' to anchor the search to the
X beginning of the line.
X .TP
! \fBhistory-search-backward\fP (M-P M-p) (K)
X Search backward in the history for a line beginning with the first
X word in the buffer.
X .TP
***************
*** 1155,1161 ****
X The string may begin with `^' to anchor the search to the
X beginning of the line.
X .TP
! \fBhistory-search-forward\fP (M-N M-n)
X Search forward in the history for a line beginning with the first
X word in the buffer.
X .TP
--- 1176,1182 ----
X The string may begin with `^' to anchor the search to the
X beginning of the line.
X .TP
! \fBhistory-search-forward\fP (M-N M-n) (J)
X Search forward in the history for a line beginning with the first
X word in the buffer.
X .TP
***************
*** 1168,1174 ****
X Search in the history list for a line matching the current one and
X fetch the event following it.
X .TP
! \fBinsert-last-word\fP (M-_)
X Insert the last word from the previous history event at the
X cursor position.
X .TP
--- 1189,1195 ----
X Search in the history list for a line matching the current one and
X fetch the event following it.
X .TP
! \fBinsert-last-word\fP (M-_ M-.)
X Insert the last word from the previous history event at the
X cursor position.
X .TP
***************
*** 1281,1287 ****
X Read a movement command from the keyboard, and swap
X the case of all characters
X from the cursor position to the endpoint of the movement.
! If the command is \fBvi-oper-swap-case\fP,
X swap the case of all characters on the current line.
X .TP
X \fBoverwrite-mode\fP (^X^O)
--- 1302,1308 ----
X Read a movement command from the keyboard, and swap
X the case of all characters
X from the cursor position to the endpoint of the movement.
! If the movement command is \fBvi-oper-swap-case\fP,
X swap the case of all characters on the current line.
X .TP
X \fBoverwrite-mode\fP (^X^O)
***************
*** 1356,1361 ****
--- 1377,1386 ----
X Multiply the argument of the next command by 4.
X .SS Completion
X .TP
+ \fBaccept-or-menu-complete\fP
+ In a menu completion, insert the current completion into the buffer,
+ and advance to the next possible completion.
+ .TP
X \fBcomplete-word\fP (unbound) (\|\e\|)
X Attempt completion on the current word.
X .TP
***************
*** 1364,1370 ****
X is at the end of the line, list possible completions for the
X current word.
X .TP
! \fBexpand-or-complete\fP (TAB) (^X)
X Attempt shell expansion on the current word.
X If that fails,
X attempt completion.
--- 1389,1401 ----
X is at the end of the line, list possible completions for the
X current word.
X .TP
! \fBexecute-named-cmd\fP (M-x)
! Read the name of a editor command and execute it.
! .TP
! \fBexecute-last-named-cmd\fP (M-z)
! Redo the last function executed with \fBexecute-named-cmd\fP.
! .TP
! \fBexpand-or-complete\fP (TAB) (TAB ^X)
X Attempt shell expansion on the current word.
X If that fails,
X attempt completion.
***************
*** 2070,2076 ****
X Individual elements of an array may be selected using a
X subscript. A subscript of the form \fB[\fIexp\fB]\fR
X selects the single element \fIexp\fP, where \fIexp\fP is
! an arithmetic expression.
X A subscript of the form \fB[*]\fP evaluates to all
X elements of an array.
X A subscript of the form \fB[\fIexp1\fP,\fIexp2\fB]\fR
--- 2101,2108 ----
X Individual elements of an array may be selected using a
X subscript. A subscript of the form \fB[\fIexp\fB]\fR
X selects the single element \fIexp\fP, where \fIexp\fP is
! an arithmetic expression. The elements are numbered
! beginning with 1.
X A subscript of the form \fB[*]\fP evaluates to all
X elements of an array.
X A subscript of the form \fB[\fIexp1\fP,\fIexp2\fB]\fR
***************
*** 2088,2096 ****
X by the \fBset\fP builtin, or by direct assignment.
X The parameter \fIn\fP, where \fIn\fP is a number,
X is the \fIn\fPth positional parameter.
! The parameters \fB*\fP, \fB@\fP, and \fBargc\fP are
X arrays containing all the positional parameters;
! thus \fBargc\fP[\fIn\fP], etc. is equivalent to simply \fIn\fP.
X .SS Special Parameters
X The following parameters are automatically set by the shell:
X .PP
--- 2120,2128 ----
X by the \fBset\fP builtin, or by direct assignment.
X The parameter \fIn\fP, where \fIn\fP is a number,
X is the \fIn\fPth positional parameter.
! The parameters \fB*\fP, \fB@\fP, and \fBargv\fP are
X arrays containing all the positional parameters;
! thus \fBargv\fP[\fIn\fP], etc. is equivalent to simply \fIn\fP.
X .SS Special Parameters
X The following parameters are automatically set by the shell:
X .PP
***************
*** 2125,2134 ****
X .B ?
X The exit value returned by the last command.
X .TP
X .B _
! Initially, the absolute pathname of the shell or script
! being executed as passed in the environment.
! Subsequently, the last argument of the previous command.
X .TP
X .B ERRNO
X The value of errno as set by the most recently failed system call.
--- 2157,2169 ----
X .B ?
X The exit value returned by the last command.
X .TP
+ .B status
+ Same as \fB?\fP.
+ .TP
X .B _
! The last argument of the previous command.
! Also, this parameter is set in the environment of every command
! executed to the full pathname of the command.
X .TP
X .B ERRNO
X The value of errno as set by the most recently failed system call.
***************
*** 2229,2234 ****
--- 2264,2272 ----
X stack gets larger than this, it will be truncated automatically.
X This is useful with the \fBAUTO_PUSHD\fP option.
X .TP
+ .B FCEDIT
+ The default editor for the \fBfc\fP builtin.
+ .TP
X .B fignore (FIGNORE)
X An array (colon separated list)
X containing the suffixes of files to be ignored
***************
*** 2375,2380 ****
--- 2413,2423 ----
X .TP
X .B %#
X A '#' if the shell is running as root, a '%' if not.
+ .TP
+ \fB%{\fP...\fB%}\fP
+ Include a string as a literal escape sequence.
+ The string within the braces should not change the cursor
+ position.
X .RE
X .PD
X .PP
***************
*** 2419,2424 ****
--- 2462,2472 ----
X .B SAVEHIST
X The maximum number of history events to save in the history file.
X .TP
+ .B STTY
+ If this parameter is set in a command's environment, the shell
+ runs the \fBstty\fP command with the value of this parameter as arguments
+ in order to set up the terminal before executing the command.
+ .TP
X .B TIMEFMT
X The format of process time reports with the \fBtime\fP keyword.
X The default is "%E real %U user %S system %P".
***************
*** 2570,2770 ****
X .RS
X .PD 0
X .TP
! \-\fBa\fP (\fBALLEXPORT\fP)
X All parameters subsequently defined are automatically exported.
X .TP
! \-\fBe\fP (\fBERREXIT\fP)
X If a command has a non-zero exit status, execute the \fBERR\fP
X trap, if set, and exit.
X .TP
! \-\fBf\fP (\fBNO_RCS\fP)
! Do not source the .zshrc, .zlogin, or .zlogout files.
X .TP
! \-\fBg\fP (\fBHIST_IGNORE_SPACE\fP)
! Do not enter command lines into the history list
! if they begin with a blank.
X .TP
! \-\fBh\fP (\fBHIST_IGNORE_DUPS\fP)
X Do not enter command lines into the history list
X if they are duplicates of the previous event.
X .TP
! \-\fBi\fP (\fBINTERACTIVE\fP)
! This is an interactive shell.
X .TP
! \-\fBj\fP (\fBHISTLIT\fP)
X Use literal (unparsed) versions of the history lines
X in the editor.
X .TP
! \-\fBk\fP (\fBINTERACTIVE_COMMENTS\fP)
X Allow comments even in interactive shells.
X .TP
! \-\fBl\fP (\fBLOGIN\fP)
X This is a login shell.
X .TP
! \-\fBm\fP (\fBMONITOR\fP)
! Allow job control. Set by default in interactive shells.
X .TP
! \-\fBn\fP (\fBNOEXEC\fP)
! Read commands and check them for syntax errors, but do not execute them.
X .TP
! \-\fBs\fP (\fBSHINSTDIN\fP)
! Read commands from the standard input.
X .TP
! \-\fBu\fP (\fBNOUNSET\fP)
! Treat unset parameters as an error when substituting.
X .TP
! \-\fBv\fP (\fBVERBOSE\fP)
! Print shell input lines as they are read.
X .TP
! \-\fBw\fP (\fBCHASELINKS\fP)
! Resolve symbolic links to their true values.
X .TP
! \-\fBx\fP (\fBXTRACE\fP)
! Print commands and their arguments as they are executed.
X .TP
! \-\fBy\fP (\fBSH_WORD_SPLIT\fP)
! See \fIParameter Expansion\fP.
X .TP
! \-\fB1\fP (\fBNO_CLOBBER\fP)
X Prevents \fB>\fP redirection from truncating existing files.
X \fB>!\fP may be used to truncate a file instead.
X Also prevents \fB>>\fP from creating files.
X \fB>>!\fP may be used instead.
X .TP
! \-\fB2\fP (\fBNO_BAD_PATTERN\fP)
! If a pattern for filename generation is badly formed,
! leave it unchanged in the argument list instead of
! printing an error.
X .TP
! \-\fB3\fP (\fBNO_NOMATCH\fP)
X If a pattern for filename generation has no matches,
X leave it unchanged in the argument list instead of
X printing an error.
X .TP
! \-\fB4\fP (\fBGLOB_DOTS\fP)
! Do not require a leading . in a filename to be matched explicitly.
X .TP
! \-\fB5\fP (\fBNOTIFY\fP)
X Report the status of background jobs immediately, rather than
X waiting until just before printing a prompt.
X .TP
! \-\fB6\fP (\fBBGNICE\fP)
! Run all background jobs at a lower priority. This option
! is set by default.
X .TP
! \-\fB7\fP (\fBIGNOREEOF\fP)
! Do not exit on end-of-file. Require the use
! of \fBexit\fP or \fBlogout\fP instead.
X .TP
! \-\fB8\fP (\fBMARKDIRS\fP)
! Append a trailing / to all directory
! names resulting from filename generation.
X .TP
! \-\fB9\fP (\fBAUTOLIST\fP)
! Automatically list choices on an ambiguous completion.
! .TP
! \-\fB0\fP (\fBCORRECT\fP)
! Try to correct the spelling of commands.
! .TP
! \-\fBB\fP (\fBNOBEEP\fP)
! Do not beep.
! .TP
! \-\fBC\fP (\fBPRINT_EXIT_VALUE\fP)
X Print the exit value of programs with non-zero exit status.
X .TP
! \-\fBD\fP (\fBPUSHD_TO_HOME\fP)
! Have \fBpushd\fP with no arguments act like
! \fBpushd\fP $HOME.
! .TP
! \-\fBE\fP (\fBPUSHD_SILENT\fP)
X Do not print the directory stack after \fBpushd\fP
X or \fBpopd\fP.
X .TP
! \-\fBF\fP (\fBNOGLOB\fP)
! Disable filename generation.
X .TP
! \-\fBG\fP (\fBNULLGLOB\fP)
! If a pattern for filename generation has no matches,
! delete the pattern from the argument list instead
! of reporting an error. Overrides \fBNONOMATCH\fP.
X .TP
! \-\fBH\fP (\fBRMSTARSILENT\fP)
X Do not query the user before executing "rm *".
X .TP
! \-\fBI\fP (\fBIGNORE_BRACES\fP)
! Do not perform brace expansion.
X .TP
! \-\fBJ\fP (\fBAUTO_CD\fP)
! If a command is not in the hash table, and there exists an
! executable directory by that name, perform the \fBcd\fP
! command to that directory.
X .TP
! \-\fBK\fP (\fBNO_BANG_HIST\fP)
! Do not perform textual history substitution. Do not
! treat the ! character specially.
X .TP
! \-\fBL\fP (\fBSUN_KEYBOARD_HACK\fP)
X If a line ends with a backquote, and there are an odd number
X of backquotes on the line, ignore the trailing backquote.
X This is useful on some keyboards where the return key is
X too small, and the backquote key lies annoyingly close to it.
X .TP
! \-\fBM\fP (\fBSINGLE_LINE_ZLE\fP)
! Use single-line command line editing instead of multi-line.
X .TP
! \-\fBN\fP (\fBAUTO_PUSHD\fP)
! Make \fBcd\fP act like \fBpushd\fP.
X .TP
! \-\fBO\fP (\fBCORRECT_ALL\fP)
! Try to correct the spelling of all arguments in a line.
! .TP
! \-\fBP\fP (\fBRC_EXPAND_PARAM\fP)
! See \fIParameter Expansion\fP.
! .TP
! \-\fBQ\fP (\fBPATH_DIRS\fP)
! Perform a path search even on command names with slahses in them.
! Thus if "/usr/local/bin" is in the user's path, and he types
! "X11/xinit", the command "/usr/local/bin/X11/xinit" will be executed
! (assuming it exists).
! .TP
! \-\fBR\fP (\fBLONG_LIST_JOBS\fP)
! List jobs in the long format by default.
! .TP
! \-\fBS\fP (\fBRECEXACT\fP)
! In completion, recognize exact matches even
! if they are ambiguous.
! .TP
! \-\fBT\fP (\fBCDABLEVARS\fP)
! If the argument to a \fBcd\fP command is not a directory,
! but a parameter exists by the same name whose value
! begins with a /, try to change to the directory
! specified by the parameter's value.
! .TP
! \-\fBU\fP (\fBMAIL_WARNING\fP)
! Print a warning message if a mail file has been
! accessed since the shell last checked.
! .TP
! \-\fBV\fP (\fBNO_PROMPT_CLOBBER\fP)
! Don't print a carriage return just before printing
! a prompt in the line editor.
! .TP
! \-\fBW\fP (\fBAUTO_RESUME\fP)
! Treat single word simple commands without redirection
! as candidates for resumption of an existing job.
! .TP
! \-\fBX\fP (\fBLIST_TYPES\fP)
! When listing files possible completions, show the
! type of each file with a trailing identifying mark.
! .TP
! \-\fBY\fP (\fBMENU_COMPLETE\fP)
! On an ambiguous completion, instead of listing possibilities,
! insert the first match. Then when completion is requested
! again, remove the first match and insert the second match, etc.
! When there are no more matches, go back to the first one again.
! \fBreverse-menu-complete\fP may be used to loop through the list
! in the other direction.
! .TP
! \-\fBZ\fP (\fBUSE_ZLE\fP)
X Use the zsh line editor.
X .RE
X .PD
--- 2618,2835 ----
X .RS
X .PD 0
X .TP
! \fBALLEXPORT\fP (\-\fBa\fP)
X All parameters subsequently defined are automatically exported.
X .TP
! \fBAUTO_CD\fP (\-\fBJ\fP)
! If a command is not in the hash table, and there exists an
! executable directory by that name, perform the \fBcd\fP
! command to that directory.
! .TP
! \fBAUTOLIST\fP (\-\fB9\fP)
! Automatically list choices on an ambiguous completion.
! .TP
! \fBAUTO_PUSHD\fP (\-\fBN\fP)
! Make \fBcd\fP act like \fBpushd\fP.
! .TP
! \fBAUTO_RESUME\fP (\-\fBW\fP)
! Treat single word simple commands without redirection
! as candidates for resumption of an existing job.
! .TP
! \fBBGNICE\fP (\-\fB6\fP)
! Run all background jobs at a lower priority. This option
! is set by default.
! .TP
! \fBCDABLEVARS\fP (\-\fBT\fP)
! If the argument to a \fBcd\fP command is not a directory,
! but a parameter exists by the same name whose value
! begins with a /, try to change to the directory
! specified by the parameter's value.
! .TP
! \fBCHASELINKS\fP (\-\fBw\fP)
! Resolve symbolic links to their true values.
! .TP
! \fBCORRECT\fP (\-\fB0\fP)
! Try to correct the spelling of commands.
! .TP
! \fBCORRECT_ALL\fP (\-\fBO\fP)
! Try to correct the spelling of all arguments in a line.
! .TP
! \fBERREXIT\fP (\-\fBe\fP)
X If a command has a non-zero exit status, execute the \fBERR\fP
X trap, if set, and exit.
X .TP
! \fBEXTENDED_GLOB\fP
! Treat the # and ^ characters as part of patterns for filename
! generation, etc.
X .TP
! \fBGLOB_COMPLETE\fP
! Like \fBMENU_COMPLETE\fP, except that the current word
! is expanded using normal shell expansion instead of completion.
! If no matches are found, a * is added to the end of the word, and expansion
! is attempted again.
X .TP
! \fBGLOB_DOTS\fP (\-\fB4\fP)
! Do not require a leading . in a filename to be matched explicitly.
! .TP
! \fBHIST_IGNORE_DUPS\fP (\-\fBh\fP)
X Do not enter command lines into the history list
X if they are duplicates of the previous event.
X .TP
! \fBHIST_IGNORE_SPACE\fP (\-\fBg\fP)
! Do not enter command lines into the history list
! if they begin with a blank.
X .TP
! \fBHISTLIT\fP (\-\fBj\fP)
X Use literal (unparsed) versions of the history lines
X in the editor.
X .TP
! \fBHIST_NO_STORE\fP
! Remove the \fBhistory\fP (\fBfc\fP \-\fBl\fP) command from
! the history when invoked.
! .TP
! \fBIGNORE_BRACES\fP (\-\fBI\fP)
! Do not perform brace expansion.
! .TP
! \fBIGNOREEOF\fP (\-\fB7\fP)
! Do not exit on end-of-file. Require the use
! of \fBexit\fP or \fBlogout\fP instead.
! .TP
! \fBINTERACTIVE\fP (\-\fBi\fP)
! This is an interactive shell.
! .TP
! \fBINTERACTIVE_COMMENTS\fP (\-\fBk\fP)
X Allow comments even in interactive shells.
X .TP
! \fBLIST_TYPES\fP (\-\fBX\fP)
! When listing files possible completions, show the
! type of each file with a trailing identifying mark.
! .TP
! \fBLOGIN\fP (\-\fBl\fP)
X This is a login shell.
X .TP
! \fBLONG_LIST_JOBS\fP (\-\fBR\fP)
! List jobs in the long format by default.
X .TP
! \fBMAIL_WARNING\fP (\-\fBU\fP)
! Print a warning message if a mail file has been
! accessed since the shell last checked.
X .TP
! \fBMARKDIRS\fP (\-\fB8\fP)
! Append a trailing / to all directory
! names resulting from filename generation.
X .TP
! \fBMENU_COMPLETE\fP (\-\fBY\fP)
! On an ambiguous completion, instead of listing possibilities,
! insert the first match. Then when completion is requested
! again, remove the first match and insert the second match, etc.
! When there are no more matches, go back to the first one again.
! \fBreverse-menu-complete\fP may be used to loop through the list
! in the other direction.
X .TP
! \fBMENU_COMPLETE_BEEP\fP
! Beep on an ambiguous menu completion.
X .TP
! \fBMONITOR\fP (\-\fBm\fP)
! Allow job control. Set by default in interactive shells.
X .TP
! \fBNO_BAD_PATTERN\fP (\-\fB2\fP)
! If a pattern for filename generation is badly formed,
! leave it unchanged in the argument list instead of
! printing an error.
X .TP
! \fBNO_BANG_HIST\fP (\-\fBK\fP)
! Do not perform textual history substitution. Do not
! treat the ! character specially.
X .TP
! \fBNOBEEP\fP (\-\fBB\fP)
! Do not beep.
! .TP
! \fBNO_CLOBBER\fP (\-\fB1\fP)
X Prevents \fB>\fP redirection from truncating existing files.
X \fB>!\fP may be used to truncate a file instead.
X Also prevents \fB>>\fP from creating files.
X \fB>>!\fP may be used instead.
X .TP
! \fBNOEXEC\fP (\-\fBn\fP)
! Read commands and check them for syntax errors, but do not execute them.
X .TP
! \fBNOGLOB\fP (\-\fBF\fP)
! Disable filename generation.
! .TP
! \fBNO_NOMATCH\fP (\-\fB3\fP)
X If a pattern for filename generation has no matches,
X leave it unchanged in the argument list instead of
X printing an error.
X .TP
! \fBNO_PROMPT_CLOBBER\fP (\-\fBV\fP)
! Don't print a carriage return just before printing
! a prompt in the line editor.
X .TP
! \fBNO_RCS\fP (\-\fBf\fP)
! Do not source the .zshenv, .zshrc, .zlogin, or .zlogout files.
! .TP
! \fBNOTIFY\fP (\-\fB5\fP)
X Report the status of background jobs immediately, rather than
X waiting until just before printing a prompt.
X .TP
! \fBNOUNSET\fP (\-\fBu\fP)
! Treat unset parameters as an error when substituting.
X .TP
! \fBNULLGLOB\fP (\-\fBG\fP)
! If a pattern for filename generation has no matches,
! delete the pattern from the argument list instead
! of reporting an error. Overrides \fBNONOMATCH\fP.
X .TP
! \fBPATH_DIRS\fP (\-\fBQ\fP)
! Perform a path search even on command names with slashes in them.
! Thus if "/usr/local/bin" is in the user's path, and he types
! "X11/xinit", the command "/usr/local/bin/X11/xinit" will be executed
! (assuming it exists).
X .TP
! \fBPRINT_EXIT_VALUE\fP (\-\fBC\fP)
X Print the exit value of programs with non-zero exit status.
X .TP
! \fBPUSHD_SILENT\fP (\-\fBE\fP)
X Do not print the directory stack after \fBpushd\fP
X or \fBpopd\fP.
X .TP
! \fBPUSHD_TO_HOME\fP (\-\fBD\fP)
! Have \fBpushd\fP with no arguments act like
! \fBpushd\fP $HOME.
X .TP
! \fBRC_EXPAND_PARAM\fP (\-\fBP\fP)
! See \fIParameter Expansion\fP.
X .TP
! \fBRECEXACT\fP (\-\fBS\fP)
! In completion, recognize exact matches even
! if they are ambiguous.
! .TP
! \fBRMSTARSILENT\fP (\-\fBH\fP)
X Do not query the user before executing "rm *".
X .TP
! \fBSHINSTDIN\fP (\-\fBs\fP)
! Read commands from the standard input.
X .TP
! \fBSH_WORD_SPLIT\fP (\-\fBy\fP)
! See \fIParameter Expansion\fP.
X .TP
! \fBSINGLE_LINE_ZLE\fP (\-\fBM\fP)
! Use single-line command line editing instead of multi-line.
X .TP
! \fBSUN_KEYBOARD_HACK\fP (\-\fBL\fP)
X If a line ends with a backquote, and there are an odd number
X of backquotes on the line, ignore the trailing backquote.
X This is useful on some keyboards where the return key is
X too small, and the backquote key lies annoyingly close to it.
X .TP
! \fBVERBOSE\fP (\-\fBv\fP)
! Print shell input lines as they are read.
X .TP
! \fBXTRACE\fP (\-\fBx\fP)
! Print commands and their arguments as they are executed.
X .TP
! \fBZLE\fP (\-\fBZ\fP)
X Use the zsh line editor.
X .RE
X .PD
***************
*** 2813,2819 ****
X or the current job if none is specified.
X .TP
X .PD 0
! \fBbindkey\fP \-\fBevd
X .TP
X \fBbindkey\fP \-\fBr\fP \fIin-string\fP ...
X .TP
--- 2878,2884 ----
X or the current job if none is specified.
X .TP
X .PD 0
! \fBbindkey\fP \-\fBmevd
X .TP
X \fBbindkey\fP \-\fBr\fP \fIin-string\fP ...
X .TP
***************
*** 2823,2829 ****
X .PD
X If one of the \-\fBe\fP, \-\fBv\fP, or \-\fBd\fP options is given,
X reset the keymaps for emacs mode, vi mode, or the default mode,
! respectively.
X If the \-\fBr\fP option is given, remove any binding for each \fIin-string\fP.
X If the \-\fBs\fP option is not specified, bind each \fIin-string\fP
X to a specified \fIcommand\fP. If no \fIcommand\fP is specified,
--- 2888,2895 ----
X .PD
X If one of the \-\fBe\fP, \-\fBv\fP, or \-\fBd\fP options is given,
X reset the keymaps for emacs mode, vi mode, or the default mode,
! respectively; if the \-\fBm\fP option is also given,
! allow the use of a meta key.
X If the \-\fBr\fP option is given, remove any binding for each \fIin-string\fP.
X If the \-\fBs\fP option is not specified, bind each \fIin-string\fP
X to a specified \fIcommand\fP. If no \fIcommand\fP is specified,
***************
*** 2885,2890 ****
--- 2951,2959 ----
X \fBuntil\fP, \fBselect\fP, or \fBrepeat\fP loop. If \fIn\fP
X is specified, then break \fIn\fP levels instead of just one.
X .TP
+ \fBbuiltin\fP \fIname\fP [ \fIargs\fP ] ...
+ Executes the builtin \fIname\fP, with the given \fIargs\fP.
+ .TP
X \fBbye\fP
X Same as \fBexit\fP.
X .TP
***************
*** 2961,2966 ****
--- 3030,3038 ----
X .B \ec
X don't print an ending newline
X .TP
+ .B \ee
+ escape
+ .TP
X .B \ef
X form feed
X .TP
***************
*** 3009,3015 ****
--- 3081,3091 ----
X \fBfalse\fP
X Do nothing and return an exit code of 1.
X .TP
+ .PD 0
X \fBfc\fP [ \-\fBe\fP \fIename\fP ] [ \-\fBnlr\fP ] [ \fIold\fP=\fInew\fP ... ] [ \fIfirst\fP [ \fIlast\fP ] ]
+ .TP
+ \fBfc\fP \-\fBRW\fP [ \fIfilename\fP ]
+ .PD
X Select a range of commands from \fIfirst\fP to \fIlast\fP from the
X history list.
X The arguments \fIfirst\fP and \fIlast\fP may be specified as a
***************
*** 3032,3037 ****
--- 3108,3118 ----
X or to \-1 if the \-\fBl\fP flag is given.
X The flag \-\fBr\fP reverses the order of the commands and the
X flag \-\fBn\fP suppresses command numbers when listing.
+ .RS
+ .PP
+ \fBfc\fP \-\fBR\fP reads the history from the given file,
+ and \fBfc\fP \-\fBW\fP writes the history out to the given file.
+ .RE
X .TP
X .PD 0
X \fBfg\fP [ \fIjob\fP ... ]
***************
*** 3038,3044 ****
X .TP
X \fIjob\fP ...
X .PD
! Bring the specfied \fIjob\fPs to the foreground.
X If no \fIjob\fP is specified, use the current job.
X .TP
X \fBfunctions\fP [ \(+-\fBtu\fP ] [ \fIname\fP ... ]
--- 3119,3125 ----
X .TP
X \fIjob\fP ...
X .PD
! Bring the specified \fIjob\fPs to the foreground.
X If no \fIjob\fP is specified, use the current job.
X .TP
X \fBfunctions\fP [ \(+-\fBtu\fP ] [ \fIname\fP ... ]
***************
*** 3493,3499 ****
X Same as \fBwhence\fP.
X .RE
X .SH INVOCATION
! If the shell is interactive and
X the \fBNO_RCS\fP option is unset, commands are read
X from /etc/zshrc and ~/.zshrc, in that order, if either file
X exists.
--- 3574,3582 ----
X Same as \fBwhence\fP.
X .RE
X .SH INVOCATION
! If the \fBNO_RCS\fP option is unset, commands are read
! from ~/.zshenv first.
! Then, if the shell is interactive and
X the \fBNO_RCS\fP option is unset, commands are read
X from /etc/zshrc and ~/.zshrc, in that order, if either file
X exists.
***************
*** 3528,3533 ****
--- 3611,3618 ----
X ksh(1),
X clam(1).
X .SH FILES
+ ~/.zshenv
+ .br
X ~/.zshrc
X .br
X ~/.zlogin
***************
*** 3544,3551 ****
X .SH "UNDOCUMENTED FEATURES"
X None known, but many suspected.
X Please mail the author if you find any.
- .SH CAVEATS
- \fBzsh\fP is available for use by CS undergraduate
- concentrators between the hours of 8:00am and 5:00pm, and by
- faculty, staff, graduate students, and special guests
- of the Princeton University Department of Computer Science.
--- 3629,3631 ----
*** src/zsh0/zsh2.00/src/buildzsh Wed Apr 24 18:10:03 1991
--- zsh2.00/src/buildzsh Sun May 5 02:27:59 1991
***************
*** 20,25 ****
--- 20,27 ----
X fi
X echo
X echo '/* define this if you have WAITPID */'
+ # this next line should read "sed 's/_^H//g'"
+ # there should be a _(backspace) there
X if man 2 wait 2>/dev/null | sed 's/_//g' | grep waitpid >/dev/null
X then echo '#define WAITPID'
X else echo '/* #define WAITPID */'
***************
*** 61,67 ****
X /* a string corresponding to the host type */
X foo
X echo '#define HOSTTYPE "' | tr -d '\012'
! ( tcsh -c 'echo $HOSTTYPE' || arch || echo unknown ) 2>/dev/null |
X tr -d '\012'
X echo '"'
X echo
--- 63,69 ----
X /* a string corresponding to the host type */
X foo
X echo '#define HOSTTYPE "' | tr -d '\012'
! ( tcsh -fc 'echo $HOSTTYPE' || arch || echo unknown ) 2>/dev/null |
X tr -d '\012'
X echo '"'
X echo
***************
*** 92,100 ****
X '
X fi
X cat <<'foo'
- /* the path of zsh in the file system */
- #define MYSELF "/usr/local/bin/zsh"
-
X /* define if you prefer "suspended" to "stopped" */
X #define USE_SUSPENDED
X
--- 94,99 ----
***************
*** 113,123 ****
X /*#define INTERACTIVE_COMMENTS*/
X
X #define _BSD_SIGNALS /* this could be an iris, you never know */
X foo
X exec 1>&2
X echo done
X echo 'Building signals.h...' | tr -d '\012'
! echo `csh -c 'kill -l'` | tr ' ' '\012' >signals.h
X lct=`wc -l < signals.h`
X cp signals.h signams.h
X echo '1,$s/^/SIG/
--- 112,130 ----
X /*#define INTERACTIVE_COMMENTS*/
X
X #define _BSD_SIGNALS /* this could be an iris, you never know */
+
+ /* if your compiler doesn't like void *, change this to char *
+ and ignore all the warnings.
+ */
+
+ typedef void *vptr;
+
+ #define JOB_CONTROL
X foo
X exec 1>&2
X echo done
X echo 'Building signals.h...' | tr -d '\012'
! echo `csh -fc 'kill -l'` | tr ' ' '\012' >signals.h
X lct=`wc -l < signals.h`
X cp signals.h signams.h
X echo '1,$s/^/SIG/
***************
*** 260,267 ****
X if test -f /usr/lib/libbsd.a
X then
X if grep '+' /etc/passwd >/dev/null
! then echo 'LIBS= -lcurses -lsun -lbsd -lmalloc'
! else echo 'LIBS= -lcurses -lbsd -lmalloc'
X fi
X elif test -f /usr/lib/libtermcap.a
X then echo 'LIBS= -ltermcap'
--- 267,274 ----
X if test -f /usr/lib/libbsd.a
X then
X if grep '+' /etc/passwd >/dev/null
! then echo 'LIBS= -lcurses -lsun -lbsd'
! else echo 'LIBS= -lcurses -lbsd'
X fi
X elif test -f /usr/lib/libtermcap.a
X then echo 'LIBS= -ltermcap'
***************
*** 271,277 ****
--- 278,287 ----
X
X ZSHPATH=zsh
X
+ .KEEP_STATE:
+
X # redefine these to work around Sun make bogosity
+ # if they don't work, just remove them
X
X .c.o:
X $(CC) $(CFLAGS) -c -o $*.o $<
***************
*** 289,295 ****
X tags: /tmp
X ctags *.[cy]
X
! $(OBJS): config.h zsh.h zle.h
X
X clean:
X rm -f *.o zsh core
--- 299,305 ----
X tags: /tmp
X ctags *.[cy]
X
! $(OBJS): config.h zsh.h zle.h signals.h ztype.h funcs.h
X
X clean:
X rm -f *.o zsh core
*** src/zsh0/zsh2.00/src/builtin.c Tue Apr 23 11:45:00 1991
--- zsh2.00/src/builtin.c Mon May 6 06:15:10 1991
***************
*** 31,37 ****
X */
X
X #include "zsh.h"
- #include "funcs.h"
X #include <sys/errno.h>
X #include <sys/times.h>
X
--- 31,36 ----
***************
*** 47,59 ****
X
X /* builtin funcs */
X
! enum xbins {
! BIN_TYPESET,BIN_BG,BIN_FG,BIN_JOBS,
! BIN_WAIT,BIN_DISOWN,BIN_BREAK,BIN_CONTINUE,BIN_EXIT,
! BIN_RETURN,BIN_SHIFT,BIN_CD,BIN_POPD,BIN_PUSHD,BIN_PRINT,
! BIN_EVAL,BIN_SCHED,
! BIN_FC,BIN_PUSHLINE,BIN_LOGOUT,BIN_BUILTIN
! };
X
X struct bincmd {
X char *name;
--- 46,72 ----
X
X /* builtin funcs */
X
! #define BIN_TYPESET 0
! #define BIN_BG 1
! #define BIN_FG 2
! #define BIN_JOBS 3
! #define BIN_WAIT 4
! #define BIN_DISOWN 5
! #define BIN_BREAK 6
! #define BIN_CONTINUE 7
! #define BIN_EXIT 8
! #define BIN_RETURN 9
! #define BIN_SHIFT 10
! #define BIN_CD 11
! #define BIN_POPD 12
! #define BIN_PUSHD 13
! #define BIN_PRINT 14
! #define BIN_EVAL 15
! #define BIN_SCHED 16
! #define BIN_FC 17
! #define BIN_PUSHLINE 18
! #define BIN_LOGOUT 19
! #define BIN_BUILTIN 20
X
X struct bincmd {
X char *name;
***************
*** 83,89 ****
X "alias",bin_alias,0,-1,0,0,"ga",NULL,
X "autoload",bin_typeset,0,-1,BINF_TYPEOPTS,0,"tx","fu",
X "bg",bin_fg,0,-1,0,BIN_BG,NULL,NULL,
! "bindkey",bin_bindkey,0,-1,0,0,"asvedrl",NULL,
X "break",bin_break,0,1,0,BIN_BREAK,NULL,NULL,
X "builtin",NULL,0,0,0,BIN_BUILTIN,NULL,NULL,
X "bye",bin_break,0,1,0,BIN_EXIT,NULL,NULL,
--- 96,102 ----
X "alias",bin_alias,0,-1,0,0,"ga",NULL,
X "autoload",bin_typeset,0,-1,BINF_TYPEOPTS,0,"tx","fu",
X "bg",bin_fg,0,-1,0,BIN_BG,NULL,NULL,
! "bindkey",bin_bindkey,0,-1,0,0,"asvemdrl",NULL,
X "break",bin_break,0,1,0,BIN_BREAK,NULL,NULL,
X "builtin",NULL,0,0,0,BIN_BUILTIN,NULL,NULL,
X "bye",bin_break,0,1,0,BIN_EXIT,NULL,NULL,
***************
*** 101,107 ****
X "exit",bin_break,0,1,0,BIN_EXIT,NULL,NULL,
X "export",bin_typeset,0,-1,BINF_TYPEOPTS,0,"LRZfilrtu","x",
X "false",bin_let,0,0,0,0,NULL,NULL,
! "fc",bin_fc,0,-1,BINF_FCOPTS,BIN_FC,"nlre",NULL,
X "fg",bin_fg,0,-1,0,BIN_FG,NULL,NULL,
X "functions",bin_typeset,0,-1,BINF_TYPEOPTS,0,"tu","f",
X "getln",bin_read,0,-1,0,0,NULL,"zr",
--- 114,120 ----
X "exit",bin_break,0,1,0,BIN_EXIT,NULL,NULL,
X "export",bin_typeset,0,-1,BINF_TYPEOPTS,0,"LRZfilrtu","x",
X "false",bin_let,0,0,0,0,NULL,NULL,
! "fc",bin_fc,0,-1,BINF_FCOPTS,BIN_FC,"nlreRW",NULL,
X "fg",bin_fg,0,-1,0,BIN_FG,NULL,NULL,
X "functions",bin_typeset,0,-1,BINF_TYPEOPTS,0,"tu","f",
X "getln",bin_read,0,-1,0,0,NULL,"zr",
***************
*** 127,134 ****
X "rehash",bin_rehash,0,0,0,0,NULL,NULL,
X "return",bin_break,0,1,0,BIN_RETURN,NULL,NULL,
X "sched",bin_sched,0,-1,0,0,NULL,NULL,
! "set",bin_set,0,-1,BINF_SETOPTS|BINF_PLUSOPTS,0,"0123456789ABCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnsuvxy",NULL,
! "setopt",bin_setopt,0,-1,0,0,"0123456789BCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnsuvxy",NULL,
X "shift",bin_break,0,1,0,BIN_SHIFT,NULL,NULL,
X "source",bin_dot,1,-1,0,0,NULL,NULL,
X "suspend",bin_suspend,0,0,0,0,"f",NULL,
--- 140,147 ----
X "rehash",bin_rehash,0,0,0,0,NULL,NULL,
X "return",bin_break,0,1,0,BIN_RETURN,NULL,NULL,
X "sched",bin_sched,0,-1,0,0,NULL,NULL,
! "set",bin_set,0,-1,BINF_SETOPTS|BINF_PLUSOPTS,0,"0123456789ABCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnosuvwxy",NULL,
! "setopt",bin_setopt,0,-1,BINF_PLUSOPTS,0,"0123456789BCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnosuvwxy",NULL,
X "shift",bin_break,0,1,0,BIN_SHIFT,NULL,NULL,
X "source",bin_dot,1,-1,0,0,NULL,NULL,
X "suspend",bin_suspend,0,0,0,0,"f",NULL,
***************
*** 144,150 ****
X "unhash",bin_unhash,1,-1,0,0,NULL,NULL,
X "unlimit",bin_unlimit,0,-1,0,0,"h",NULL,
X "unset",bin_unset,1,-1,0,0,NULL,NULL,
! "unsetopt",bin_setopt,0,-1,0,1,"0123456789BCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnsuvxy",NULL,
X "vared",bin_vared,1,1,0,0,NULL,NULL,
X "wait",bin_fg,0,-1,0,BIN_WAIT,NULL,NULL,
X "whence",bin_whence,0,-1,0,0,"pv",NULL,
--- 157,163 ----
X "unhash",bin_unhash,1,-1,0,0,NULL,NULL,
X "unlimit",bin_unlimit,0,-1,0,0,"h",NULL,
X "unset",bin_unset,1,-1,0,0,NULL,NULL,
! "unsetopt",bin_setopt,0,-1,BINF_PLUSOPTS,1,"0123456789BCDEFGHIJKLMNOPQRSTUWXYZaefghijklmnosuvwxy",NULL,
X "vared",bin_vared,1,1,0,0,NULL,NULL,
X "wait",bin_fg,0,-1,0,BIN_WAIT,NULL,NULL,
X "whence",bin_whence,0,-1,0,0,"pv",NULL,
***************
*** 162,168 ****
X
X for (t0 = 0, b = builtins; b->name; b++,t0++)
X {
! c = zcalloc(sizeof *c);
X c->type = BUILTIN;
X c->u.binnum = t0;
X addhperm(b->name,c,cmdnamtab,freecmdnam);
--- 175,181 ----
X
X for (t0 = 0, b = builtins; b->name; b++,t0++)
X {
! c = (Cmdnam) zcalloc(sizeof *c);
X c->type = BUILTIN;
X c->u.binnum = t0;
X addhperm(b->name,c,cmdnamtab,freecmdnam);
***************
*** 190,196 ****
X }
X else
X {
! c = zcalloc(sizeof *c);
X c->type = BUILTIN;
X c->u.binnum = t0;
X addhperm(b->name,c,cmdnamtab,freecmdnam);
--- 203,209 ----
X }
X else
X {
! c = (Cmdnam) zcalloc(sizeof *c);
X c->type = BUILTIN;
X c->u.binnum = t0;
X addhperm(b->name,c,cmdnamtab,freecmdnam);
***************
*** 273,278 ****
--- 286,297 ----
X zerrnam(name,"no job control in this shell.",NULL,0);
X return 1;
X }
+ if (!(jobtab[curjob].stat & STAT_INUSE))
+ {
+ curjob = prevjob; setprevjob();
+ if (!(jobtab[curjob].stat & STAT_INUSE))
+ curjob = prevjob; setprevjob();
+ }
X if (func == BIN_JOBS)
X stopmsg = 2;
X if (!*argv)
***************
*** 348,353 ****
--- 367,373 ----
X printdir(jobtab[job].cwd);
X printf(")\n");
X }
+ fflush(stdout);
X settyinfo(&jobtab[job].ttyinfo);
X attachtty(jobtab[job].gleader);
X }
***************
*** 419,425 ****
X }
X else
X killrunjobs();
! savehistfile();
X if (islogin && unset(NORCS))
X sourcehome(".zlogout");
X if (sigtrapped[SIGEXIT])
--- 439,445 ----
X }
X else
X killrunjobs();
! savehistfile(getsparam("HISTFILE"),0);
X if (islogin && unset(NORCS))
X sourcehome(".zlogout");
X if (sigtrapped[SIGEXIT])
***************
*** 441,447 ****
X chuck(t);
X else
X {
! *t = tolower(*t);
X t++;
X }
X for (o = optns; o->name; o++)
--- 461,467 ----
X chuck(t);
X else
X {
! *t = tulower(*t);
X t++;
X }
X for (o = optns; o->name; o++)
***************
*** 524,530 ****
X printf("%s ()\n",s);
X return;
X }
! t = gettext((void *) (cc->u.list),1);
X printf("%s () {\n\t%s\n}\n",s,t);
X free(t);
X }
--- 544,550 ----
X printf("%s ()\n",s);
X return;
X }
! t = gettext((vptr) (cc->u.list),1);
X printf("%s () {\n\t%s\n}\n",s,t);
X free(t);
X }
***************
*** 640,646 ****
X
X for (; *argv; argv++)
X {
! if (!ops['p'] && (a = gethnode(*argv,aliastab)) && a->cmd)
X {
X if (a->cmd < 0)
X printf((v) ? "%s is a reserved word\n" : "%s\n",*argv);
--- 660,666 ----
X
X for (; *argv; argv++)
X {
! if (!ops['p'] && (a = (Alias) gethnode(*argv,aliastab)) && a->cmd)
X {
X if (a->cmd < 0)
X printf((v) ? "%s is a reserved word\n" : "%s\n",*argv);
***************
*** 652,658 ****
X printf("%s is a global alias for %s\n",*argv,a->text);
X retval = 0;
X }
! else if (!ops['p'] && (chn = gethnode(*argv,cmdnamtab)) &&
X (chn->type == SHFUNC || chn->type == BUILTIN))
X {
X if (chn->type == SHFUNC)
--- 672,678 ----
X printf("%s is a global alias for %s\n",*argv,a->text);
X retval = 0;
X }
! else if (!ops['p'] && (chn = (Cmdnam) gethnode(*argv,cmdnamtab)) &&
X (chn->type == SHFUNC || chn->type == BUILTIN))
X {
X if (chn->type == SHFUNC)
***************
*** 838,844 ****
X {
X struct cmdnam *chn;
X
! chn = zcalloc(sizeof *chn);
X chn->type = EXCMD_PREDOT;
X chn->u.nam = ztrdup(argv[1]);
X addhnode(ztrdup(argv[0]),chn,cmdnamtab,freecmdnam);
--- 858,864 ----
X {
X struct cmdnam *chn;
X
! chn = (Cmdnam) zcalloc(sizeof *chn);
X chn->type = EXCMD_PREDOT;
X chn->u.nam = ztrdup(argv[1]);
X addhnode(ztrdup(argv[0]),chn,cmdnamtab,freecmdnam);
***************
*** 920,926 ****
X
X for (t0 = MAXJOB-1; t0 >= 0; t0--)
X if (jobtab[t0].stat && jobtab[t0].procs && t0 != thisjob &&
! prefix(s,jobtab[t0].procs->text))
X return t0;
X return -1;
X }
--- 940,946 ----
X
X for (t0 = MAXJOB-1; t0 >= 0; t0--)
X if (jobtab[t0].stat && jobtab[t0].procs && t0 != thisjob &&
! jobtab[t0].procs->text && prefix(s,jobtab[t0].procs->text))
X return t0;
X return -1;
X }
***************
*** 969,978 ****
X zerrnam("kill","kill failed: %e",NULL,errno);
X return 1;
X }
! if (jobtab[p].stat & STAT_STOPPED && sig == SIGCONT)
! jobtab[p].stat &= ~STAT_STOPPED;
! if (sig != SIGKILL && sig != SIGCONT)
! killpg(jobtab[p].gleader,SIGCONT);
X }
X else
X if (kill(atoi(*argv),sig) == -1)
--- 989,1002 ----
X zerrnam("kill","kill failed: %e",NULL,errno);
X return 1;
X }
! if (jobtab[p].stat & STAT_STOPPED)
! {
! if (sig == SIGCONT)
! jobtab[p].stat &= ~STAT_STOPPED;
! if (sig != SIGKILL && sig != SIGCONT && sig != SIGTSTP
! && sig != SIGTTOU && sig != SIGTTIN && sig != SIGSTOP)
! killjb(jobtab+p,SIGCONT);
! }
X }
X else
X if (kill(atoi(*argv),sig) == -1)
***************
*** 1397,1409 ****
X
X if (!interact)
X {
! zerrnam("fc","not interactive shell",NULL,0);
X return 1;
X }
! remhist();
X while (*argv && equalsplit(*argv,&s))
X {
! struct asgment *a = alloc(sizeof *a);
X
X if (!asgf)
X asgf = asgl = a;
--- 1421,1444 ----
X
X if (!interact)
X {
! zerrnam(nam,"not interactive shell",NULL,0);
X return 1;
X }
! if (!(ops['l'] && unset(HISTNOSTORE)))
! remhist();
! if (ops['R'])
! {
! readhistfile(*argv ? *argv : getsparam("HISTFILE"),1);
! return 0;
! }
! if (ops['W'])
! {
! savehistfile(*argv ? *argv : getsparam("HISTFILE"),1);
! return 0;
! }
X while (*argv && equalsplit(*argv,&s))
X {
! struct asgment *a = (struct asgment *) alloc(sizeof *a);
X
X if (!asgf)
X asgf = asgl = a;
***************
*** 1460,1466 ****
X {
X retval = 1;
X if (!fclist(out,0,ops['r'],first,last,asgf))
! if (fcedit(auxdata ? auxdata : DEFFCEDIT,fil))
X if (stuff(fil))
X zerrnam("fc","%e: %s",s,errno);
X else
--- 1495,1501 ----
X {
X retval = 1;
X if (!fclist(out,0,ops['r'],first,last,asgf))
! if (fcedit(auxdata ? auxdata : fceditparam,fil))
X if (stuff(fil))
X zerrnam("fc","%e: %s",s,errno);
X else
***************
*** 1502,1508 ****
X if (asg->value)
X addhnode(ztrdup(asg->name),mkanode(ztrdup(asg->value),incm),
X aliastab,freeanode);
! else if (an = gethnode(asg->name,aliastab))
X printalias(asg->name,an);
X else
X ret = 1;
--- 1537,1543 ----
X if (asg->value)
X addhnode(ztrdup(asg->name),mkanode(ztrdup(asg->value),incm),
X aliastab,freeanode);
! else if (an = (Alias) gethnode(asg->name,aliastab))
X printalias(asg->name,an);
X else
X ret = 1;
***************
*** 1615,1621 ****
X {
X Cmdnam cc;
X
! if ((cc = gethnode(*argv,cmdnamtab)) && cc->type == SHFUNC)
X if (on)
X cc->flags |= on;
X else
--- 1650,1656 ----
X {
X Cmdnam cc;
X
! if ((cc = (Cmdnam) gethnode(*argv,cmdnamtab)) && cc->type == SHFUNC)
X if (on)
X cc->flags |= on;
X else
***************
*** 1622,1628 ****
X pshfunc(*argv,cc);
X else if (on & PMFLAG_u)
X {
! cc = zcalloc(sizeof *cc);
X cc->type = SHFUNC;
X cc->flags = on;
X addhnode(ztrdup(*argv),cc,cmdnamtab,freecmdnam);
--- 1657,1663 ----
X pshfunc(*argv,cc);
SHAR_EOF
true || echo 'restore of patches failed'
echo 'End of part 1'
echo 'File patches is continued in part 2'
echo 2 > _shar_seq_.tmp
exit 0
Paul Falstad pfalstad@phoenix.princeton.edu
And on the roads, too, vicious gangs of KEEP LEFT signs!
If Princeton knew my opinions, they'd have expelled me long ago.
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.