about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog207
-rw-r--r--Completion/Base/_arguments4
-rw-r--r--Completion/Core/.distfiles8
-rw-r--r--Completion/User/_mailboxes6
-rw-r--r--Completion/User/_mutt2
-rw-r--r--Config/version.mk4
-rw-r--r--Doc/Makefile.in60
-rw-r--r--Doc/Zsh/.distfiles2
-rw-r--r--Functions/Misc/.distfiles5
-rw-r--r--Functions/Misc/is-at-least33
-rw-r--r--Functions/Misc/nslookup49
-rw-r--r--Makefile.in2
-rw-r--r--Src/Modules/.distfiles1
-rw-r--r--Src/builtin.c1
-rw-r--r--Src/init.c7
-rw-r--r--Src/zsh.h6
16 files changed, 314 insertions, 83 deletions
diff --git a/ChangeLog b/ChangeLog
index 09f3d0810..efcce9dd8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,212 @@
+2000-02-11  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* pws: Config/version.mk: 3.1.6-dev-18
+
+	* Tanaka Akira: 9683: Completion/User/_diff_options: shut up error
+	messages (after other attempts from Oliver and Bart).
+
+	* Alexandre: 9681: Completion/User/_prcs: argument handling.
+
+	* Sven: 9680: Completion/Core/_files,
+	Completion/Core/_multi_parts, Completion/Core/_path_files,
+	Completion/Core/_sep_parts: use of -M option.
+
+	* Sven: 9677, 9679: Completion/Commands/_read_comp,
+	Completion/Core/_approximate, Completion/Core/_expand,
+	Completion/Core/_main_complete, Completion/Core/_match,
+	Doc/Zsh/compctl.yo, Doc/Zsh/compsys.yo, Doc/Zsh/compwid.yo,
+	Src/Zle/comp.h, Src/Zle/compcore.c, Src/Zle/compctl.c,
+	Src/Zle/complete.c: $compmatchers bites the dust, use new matcher
+	style.
+
+	* Sven: 9676: Src/Zle/computil.c: yet more argument subtleties.
+
+	* Tanaka Akira: 9674: Test/10prompt.ztst: some nameless idiot got
+	the bits of the date wrong.
+
+	* Sven: 9664: Completion/Core/_path_files: optimisation with
+	arrays.
+
+	* Sven: 9659: Doc/Zsh/compsys.yo: mention complete-in-words
+	behaviour.
+
+	* Sven: 9657: Completion/Core/_approximate,
+	Completion/Core/_description, Completion/Core/_main_complete,
+	Completion/Core/_matcher, Completion/Core/_path_files,
+	Completion/Core/_prefix, Doc/Zsh/compsys.yo, Src/Zle/complete.c
+	(plus Completion/Core/.distfiles change by hand): new _matcher
+	completer allows more control along the lines of $compmatchers.
+
+	* Johan: 9653: Functions/Misc/is-at-least,
+	Functions/Misc/.distfiles (added by hand): function to check
+	version numbers.
+
+	* Johan: 9651: Completion/User/_cvs: handle no CVS tags case better.
+
+	* Sven: 9650: Completion/User/_gunzip, Completion/User/_gzip:
+	handle .tgz files.
+
+	* Sven: 9648: Completion/Core/_files,
+	Completion/Core/_multi_parts, Completion/Core/_path_files,
+	Completion/Core/_sep_parts, Doc/Zsh/mod_zutil.yo,
+	Src/Modules/zutil.c: Bartised version of zparseopts;
+	fix _path_files -S ''.
+
+	* Bart: 9639: Doc/Zsh/options.yo, Doc/Zsh/redirect.yo: typos in
+	9625.
+
+	* Tanaka Akira: 9638: Completion/User/_cvs: _cvs_rtag had no
+	default implementation.
+
+	* Sven: 9635: Completion/Core/_description,
+	Completion/Core/_files, Completion/Core/_multi_parts,
+	Completion/Core/_path_files, Completion/Core/_sep_parts,
+	Doc/Zsh/mod_zutil.yo, Src/Modules/zutil.c, Src/Modules/zutil.mdd:
+	improved performance for completion functions; option-parsing
+	builtin.
+
+	* Akim Demaille <akim@epita.fr>: 9634: Src/builtin.c: trap '' 1
+	segfaulted.
+
+	* Sven: 9633: Src/init.c: change logic in 9591.
+
+	* Sven: 9632: Test/05command.ztst: error spotted by improved
+	autoload error checking.
+
+	* Alexandre: 9625: Src/zsh.h, Src/options.c, Src/init.c,
+	Src/exec.c, Doc/Zsh/redirect.yo, Doc/Zsh/options.yo: SHNULLCMD and
+	CSHNULLCMD options to allow better sh/csh emulation without
+	fiddling with parameters.
+
+	* Sven: 9623: Completion/Core/_path_files: another version of
+	9616.
+
+	* Sven: 9621: Src/Zle/computil.c: completion incorrectly adding
+	space.
+
+	* Sven: 9619: Completion/User/_texi: completion for texinfo;
+	added Completion/User/.distfiles by hand.
+
+	* Sven: 9618: Src/Zle/computil.c: memory leak in caching.
+
+	* Sven: 9616: Completion/Core/_path_files: bad test with a
+	pattern.
+
+	* Sven: 9615: Completion/Builtins/_zstyle, Doc/Zsh/compsys.yo:
+	rename and document some styles.
+
+	* Sven: 9614: Src/exec.c: esglob wasn't initialised properly.
+
+	* Alexandre: 9606: Completion/Builtins/_zstyle: two missing
+	styles.
+
+	* Sven: 9600: Src/exec.c: wordcode problem in execpline().
+
+	* Bart: 9591: Src/init.c: zsh/compctl didn't get loaded
+	automatically any more.
+
+	* Geoff: 9589: Doc/Makefile.in: put back ^A's from 9584.
+
+	* Tanaka Akira: 9585: Doc/Makefile.in: possible logic problems
+	with 9584.
+
+	* Geoff: 9584: Doc/Makefile.in: sh problems with creating
+	modlist.yo.
+
+	* Alexandre: 9583: Functions/Misc/nslookup: fix context name for
+	new scheme.
+
+	* Sven: 9390, 9394, hunk from 9396: ./Doc/Makefile.in,
+	Doc/Zsh/mod_zpty.yo, Doc/Zsh/.distfiles, Functions/Misc/nslookup,
+	Src/Modules/.distfiles, Src/Modules/zpty.c, Src/Modules/zpty.mdd,
+	Src/builtin.c, Src/init.c, Src/zsh.h: zpty module.
+
+2000-02-05  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Tanaka Akira: 9579: Completion/Debian/_deb_packages: was using
+	bad cache variable.
+
+2000-02-04  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Sven: 9569: Completion/Core/_main_complete,
+	Completion/Core/_prefix, Doc/Zsh/compsys.yo, Src/Zle/compcore.c:
+	new complete-prefix completer _prefix; fix suffix matching
+	problems.
+
+	* Sven: 9568: Src/Zle/computil.c: fix difficulties with remaining
+	arguments.
+
+	* Sven: 9562: Completion/Base/_arg_compile,
+	Completion/Base/_arguments, Completion/Base/_command_names,
+	Completion/Builtins/_hash, Completion/User/_gdb,
+	Completion/User/_ssh, Completion/User/_strip, Completion/X/_xrdb,
+	Completion/X/_xutils, Src/Zle/computil.c: failure to follow links
+	completing commands; bad long option handling in some cases
+
+	* Sven: 9560 (second hunk only): Src/Zle/computil.c: more
+	argument fixes.
+
+	* Sven: 9559: Doc/Zsh/compsys.yo: better documentation for `+'
+	argument handling.
+
+	* Sven: 9558: Src/exec.c, Src/parse.c: trapping of autoloading
+	errors wasn't up to scratch.
+
+	* Alexandre: 9557: Completion/User/_flex: problem handling
+	`+' argument.
+
+2000-02-03  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Oliver: 9547: Src/parse.c, Src/hist.c: more fixups for exporting
+	on AIX.
+
+	* Sven: 9546: Completion/Base/_arguments,
+	Completion/Base/_combination, Completion/Base/_describe,
+	Completion/Base/_first, Completion/Base/_jobs,
+	Completion/Base/_subscript, Completion/Base/_tilde,
+	Completion/Base/_values, Completion/Builtins/_pids,
+	Completion/Builtins/_popd, Completion/Builtins/_sched,
+	Completion/Builtins/_signals, Completion/Builtins/_stat,
+	Completion/Builtins/_zftp, Completion/Builtins/_zstyle,
+	Completion/Commands/_complete_help,
+	Completion/Commands/_correct_word,
+	Completion/Commands/_expand_word,
+	Completion/Commands/_history_complete_word,
+	Completion/Core/_alternative, Completion/Core/_approximate,
+	Completion/Core/_complete, Completion/Core/_correct,
+	Completion/Core/_description, Completion/Core/_expand,
+	Completion/Core/_files, Completion/Core/_list,
+	Completion/Core/_main_complete, Completion/Core/_match,
+	Completion/Core/_menu, Completion/Core/_message,
+	Completion/Core/_normal, Completion/Core/_oldlist,
+	Completion/Core/_path_files, Completion/Core/_setup,
+	Completion/Core/_sort_tags, Completion/Core/_tags,
+	Completion/Core/compinit, Completion/Debian/_apt,
+	Completion/Debian/_deb_packages, Completion/User/_cvs,
+	Completion/User/_domains, Completion/User/_groups,
+	Completion/User/_hosts, Completion/User/_ports,
+	Completion/User/_socket, Completion/User/_urls,
+	Completion/User/_users, Completion/X/_x_color, Doc/Zsh/compsys.yo,
+	Etc/completion-style-guide,
+	Functions/Zle/incremental-complete-word, Functions/Zle/predict-on:
+	more consistent form for style contexts in completion system,
+	:completion:<func>:<completer>:<command>:<argument>:<tag>.
+
+	* Sven: 9545: Src/Modules/zutil.c: don't use freed structs.
+
+	* Tanaka Akira: 9544: Src/Modules/zutil.c: handle case for
+	undefined match data in zregexparse.
+
+	* Sven: 9542: Src/Zle/complete.c: use permanently allocated memory
+	for copied special parameters.
+
+	* Sven: 9541: Src/Modules/zutil.c: zstyle looks up style names
+	first.
+
 2000-02-02  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
 
+	* pws: Config/version.mk: version 3.1.6-dev-17
+
 	* Bart: 9533: Src/signals.c: make sure shell doesn't send itself
 	SIGHUP when exiting.
 
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments
index 19288b7ca..258b56b3a 100644
--- a/Completion/Base/_arguments
+++ b/Completion/Base/_arguments
@@ -256,8 +256,8 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
 
       if [[ -z "$matched$mesg" ]] && _requested options &&
           { ! zstyle -t ":completion:${curcontext}:options" prefix-needed ||
-            [[ ( "$origpre" = [-+]* || -z "$aret$mesg" ) &&
-               nm -eq compstate[nmatches] ]] } ; then
+          [[ "$origpre" = [-+]* ||
+             ( -z "$aret$mesg" && nm -eq compstate[nmatches] ) ]] } ; then
 	local prevpre="$PREFIX" previpre="$IPREFIX"
 
 	PREFIX="$origpre"
diff --git a/Completion/Core/.distfiles b/Completion/Core/.distfiles
index a015dc79d..d540450e3 100644
--- a/Completion/Core/.distfiles
+++ b/Completion/Core/.distfiles
@@ -1,10 +1,10 @@
 DISTFILES_SRC='
     .distfiles
     _alternative _approximate _compalso _complete _correct _description
-    _expand _files _funcall _list _main_complete _match 
-    _matcher _menu _multi_parts _message _normal _oldlist 
-    _options _parameters _path_files _prefix _requested
-    _sep_parts _set_options _setup _sort_tags _tags
+    _expand _files _funcall _list _main_complete _match _matcher
+    _menu _multi_parts _message _normal _oldlist _options
+    _parameters _path_files _prefix _requested _sep_parts
+    _set_options _setup _sort_tags _tags
     _unset_options _wanted
     compdump compinit compinstall
 '
diff --git a/Completion/User/_mailboxes b/Completion/User/_mailboxes
index a0c95859d..97628ef9a 100644
--- a/Completion/User/_mailboxes
+++ b/Completion/User/_mailboxes
@@ -38,9 +38,5 @@ if (( ! $+_mailbox_cache )) then
   _mailbox_cache=($_mailbox_cache $mboxes $maildirboxes $MHboxes)
 fi
 
-if _wanted files expl 'mailbox specification'; then
-    local opre=$PREFIX
-    [[ $PREFIX = +* ]] && PREFIX="$~maildirectory/${PREFIX#+}"
+_wanted files expl 'mailbox specification' &&
     compadd "$@" "$expl[@]" - "$_mailbox_cache[@]"
-    PREFIX=$opre
-fi
diff --git a/Completion/User/_mutt b/Completion/User/_mutt
index 851db8f7e..dfb50ae3a 100644
--- a/Completion/User/_mutt
+++ b/Completion/User/_mutt
@@ -1,6 +1,6 @@
 #compdef mutt
 
-local curcontext="$curcontext" state line ret=1
+local curcontext="$curcontext" state line muttrc="~/.muttrc" ret=1
 
  _arguments -C \
  '::recipient:->userhost' \
diff --git a/Config/version.mk b/Config/version.mk
index 510317494..9cd86724f 100644
--- a/Config/version.mk
+++ b/Config/version.mk
@@ -27,5 +27,5 @@
 # This must also serve as a shell script, so do not add spaces around the
 # `=' signs.
 
-VERSION=3.1.6-dev-17
-VERSION_DATE='February 2, 2000'
+VERSION=3.1.6-dev-18
+VERSION_DATE='February 11, 2000'
diff --git a/Doc/Makefile.in b/Doc/Makefile.in
index 49b16f888..e56bb0c55 100644
--- a/Doc/Makefile.in
+++ b/Doc/Makefile.in
@@ -51,7 +51,7 @@ zshoptions.1 zshparam.1 zshzftpsys.1 zshzle.1 zshall.1
 
 # yodl documentation
 
-YODLDOC = $(MAN) texi
+YODLDOC = $(MAN) zsh.texi
 
 MODDOCSRC = \
 Zsh/mod_cap.yo Zsh/mod_clone.yo \
@@ -60,7 +60,7 @@ Zsh/mod_computil.yo \
 Zsh/mod_deltochar.yo Zsh/mod_example.yo Zsh/mod_files.yo \
 Zsh/mod_mapfile.yo Zsh/mod_mathfunc.yo Zsh/mod_parameter.yo Zsh/mod_sched.yo \
 Zsh/mod_stat.yo Zsh/mod_zftp.yo Zsh/mod_zle.yo Zsh/mod_zleparameter.yo \
-Zsh/mod_zutil.yo Zsh/mod_zprof.yo
+Zsh/mod_zutil.yo Zsh/mod_zprof.yo Zsh/mod_zpty.yo
 
 YODLSRC = zmacros.yo zman.yo ztexi.yo Zsh/arith.yo Zsh/builtins.yo \
 Zsh/compat.yo Zsh/compctl.yo Zsh/compsys.yo Zsh/compwid.yo Zsh/cond.yo \
@@ -73,30 +73,25 @@ Zsh/seealso.yo Zsh/zftpsys.yo Zsh/zle.yo
 
 # ========== DEPENDENCIES FOR BUILDING ==========
 
-all: man texi ../META-FAQ
+all: $(MAN) zsh.texi ../META-FAQ
 .PHONY: all
 
-everything: all dvi ps html
+everything: all zsh.dvi zsh_us.ps zsh_a4.ps zsh_toc.html
 .PHONY: everything
 
-dvi: zsh.dvi
-.PHONY: dvi
-
 zsh.dvi: $(sdir)/zsh.texi
-	$(TEXI2DVI) $<
-
-texi: $(sdir)/zsh.texi
-.PHONY: texi
+	$(TEXI2DVI) $(sdir)/zsh.texi
 
-$(sdir)/zsh.texi:
-	$(YODL) -o $@ -I$(sdir) -w ztexi.yo version.yo zsh.yo; \
-	test -f $@
-
-info: zsh.info
-.PHONY: info
+zsh.texi $(sdir)/zsh.texi:
+	case $@ in \
+	  */*) target=$@ ;; \
+	  *) target=$(sdir)/$@ ;; \
+	esac; \
+	$(YODL) -o $$target -I$(sdir) -w ztexi.yo version.yo zsh.yo; \
+	test -f $$target
 
 zsh.info: $(sdir)/zsh.texi
-	$(MAKEINFO) $<
+	$(MAKEINFO) $(sdir)/zsh.texi
 
 .yo.1:
 	case $@ in \
@@ -108,26 +103,14 @@ zsh.info: $(sdir)/zsh.texi
 	;; esac; \
 	test -f $$target
 
-ps: us_ps a4_ps
-.PHONY: ps
-
-us_ps: zsh_us.ps
-.PHONY: us_ps
-
 zsh_us.ps: zsh.dvi
-	$(DVIPS) -t letter -o $@ $<
-
-a4_ps: zsh_a4.ps
-.PHONY: a4_ps
+	$(DVIPS) -t letter -o $@ zsh.dvi
 
 zsh_a4.ps: zsh.dvi
-	$(DVIPS) -t a4 -o $@ $<
-
-html: zsh_toc.html
-.PHONY: html
+	$(DVIPS) -t a4 -o $@ zsh.dvi
 
 zsh_toc.html: $(sdir)/zsh.texi
-	$(TEXI2HTML) $<
+	$(TEXI2HTML) $(sdir)/zsh.texi
 
 zshall.1: zsh.yo
 	case $@ in \
@@ -147,10 +130,7 @@ zshall.1: zsh.yo
 
 $(YODLDOC): version.yo
 
-$(sdir)/zsh.texi: $(YODLSRC)
-
-man: $(MAN)
-.PHONY: man
+zsh.texi: $(YODLSRC)
 
 $(MAN): zmacros.yo zman.yo
 
@@ -245,7 +225,7 @@ uninstall: uninstall.man
 .PHONY: uninstall
 
 # install man pages, creating install directory if necessary
-install.man: man
+install.man: $(MAN)
 	$(sdir_top)/mkinstalldirs $(DESTDIR)$(mandir)/man1
 	for file in $(MAN); do \
 	    $(INSTALL_DATA) $(sdir)/$$file $(DESTDIR)$(mandir)/man1/`echo $$file | sed 's|zsh|$(tzsh)|'` || exit 1; \
@@ -253,7 +233,7 @@ install.man: man
 .PHONY: install.man
 
 # install info pages, creating install directory if necessary
-install.info: texi
+install.info: zsh.texi
 	$(sdir_top)/mkinstalldirs $(DESTDIR)$(infodir)
 	rm -rf infodir
 	mkdir infodir
@@ -287,7 +267,7 @@ uninstall.info:
 .PHONY: uninstall.info
 
 # install HTML manual
-install.html: html
+install.html: zsh_toc.html
 	$(sdir_top)/mkinstalldirs $(DESTDIR)$(htmldir)
 	for file in zsh_*.html; do \
 	    $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir) || exit 1; \
diff --git a/Doc/Zsh/.distfiles b/Doc/Zsh/.distfiles
index 4bfa02dd6..fd1c27874 100644
--- a/Doc/Zsh/.distfiles
+++ b/Doc/Zsh/.distfiles
@@ -7,7 +7,7 @@ DISTFILES_SRC='
     mod_computil.yo mod_deltochar.yo mod_example.yo mod_files.yo
     mod_mapfile.yo mod_mathfunc.yo mod_parameter.yo mod_sched.yo
     mod_stat.yo mod_zftp.yo mod_zle.yo mod_zleparameter.yo mod_zutil.yo
-    mod_zprof.yo
+    mod_zprof.yo mod_zpty.yo
     modules.yo modmenu.yo manmodmenu.yo
     options.yo params.yo prompt.yo redirect.yo restricted.yo seealso.yo
     zftpsys.yo zle.yo
diff --git a/Functions/Misc/.distfiles b/Functions/Misc/.distfiles
index 474c9cf74..e57056c03 100644
--- a/Functions/Misc/.distfiles
+++ b/Functions/Misc/.distfiles
@@ -1,5 +1,6 @@
 DISTFILES_SRC='
     .distfiles
-    acx allopt cat cdmatch cdmatch2 checkmail colors cx harden mere multicomp
-    nslookup proto pushd randline run-help yp yu zed zless zls zmv
+    acx allopt cat cdmatch cdmatch2 checkmail colors cx harden 
+    is-at-least mere multicomp nslookup proto pushd randline
+    run-help yp yu zed zless zls zmv
 '
diff --git a/Functions/Misc/is-at-least b/Functions/Misc/is-at-least
new file mode 100644
index 000000000..b85e9b1a3
--- /dev/null
+++ b/Functions/Misc/is-at-least
@@ -0,0 +1,33 @@
+# $Id: is-at-least,v 1.1.1.1 2000/02/11 19:46:46 akr Exp $ -*- shell-script -*-
+#
+# Test whether $ZSH_VERSION (or some value of your choice, if a second argument
+# is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
+# it'll accept any dot/dash-separated string of numbers as its second argument
+# and compare it to the dot/dash-separated first argument. Leading non-number
+# parts of a segment (such as the "zefram" in 3.1.2-zefram4) are not considered
+# when the comparison is done; only the numbers matter. Any left-out segments
+# in the first argument that are present in the version string compared are
+# considered as zeroes, eg 3 == 3.0 == 3.0.0 == 3.0.0.0 and so on.
+#
+# Usage examples:
+# is-at-least 3.1.6-15 && setopt NO_GLOBAL_RCS
+# is-at-least 3.1.0 && setopt HIST_REDUCE_BLANKS
+# is-at-least 586 $MACHTYPE && echo 'You could be running Mandrake!'
+
+function is-at-least()
+{
+    emulate zsh ; setopt LOCAL_OPTIONS
+    local IFS=".-" min_cnt=0 ver_cnt=0 part min_ver version
+    min_ver=(${=1})
+    version=(${=2:-$ZSH_VERSION} 0)
+    while (( $min_cnt <= ${#min_ver} )) {
+	while [[ "$part" != <-> ]] {
+	    [[ $[++ver_cnt] > ${#version} ]] && return 0
+	    part=${version[ver_cnt]##*[^0-9]}
+	}
+	[[ $[++min_cnt] > ${#min_ver} ]] && return 0
+	(( part > min_ver[min_cnt] )) && return 0
+	(( part < min_ver[min_cnt] )) && return 1
+	part=''
+    }
+}
diff --git a/Functions/Misc/nslookup b/Functions/Misc/nslookup
index d59a5e66c..2103a839b 100644
--- a/Functions/Misc/nslookup
+++ b/Functions/Misc/nslookup
@@ -1,34 +1,33 @@
 # Simple wrapper function for `nslookup'. With completion if you are using
 # the function based completion system.
 
-setopt localoptions completealiases
+setopt localoptions localtraps completealiases
 
-local char line compcontext=nslookup pid
+local tmp line compcontext=nslookup curcontext='nslookup:::' pmpt
 
-trap 'print -p exit;return' INT
+zmodload -e zsh/zpty || zmodload -i zsh/zpty
 
-coproc command nslookup
-pid=$!
+trap 'return 130' INT
+trap 'zpty -d nslookup' EXIT
 
-while read -pk 1 char; do
-  line="$line$char"
-  [[ "$line" = *'
-> ' ]] && break
-done
-print -nr - "$line"
-
-line=''
-while vared -p '> ' line; do
-  print -p "$line"
-  line=''
-  while read -pk 1 char; do
-    line="$line$char"
-    [[ "$line" = *'
-> ' ]] && break
-  done
-  print -nr - "$line"
-  line=''
+pmpt=()
+zstyle -s ':nslookup' prompt tmp && pmpt=(-p "$tmp")
+zstyle -s ':nslookup' rprompt tmp && pmpt=("$pmpt[@]" -r "$tmp")
+(( $#pmpt )) || pmpt=(-p '> ')
+
+zpty nslookup nslookup
+
+zpty -r nslookup line '*> '
+print -nr "$line"
+
+while line=''; vared -he "$pmpt[@]" line; do
+  print -s "$line"
+  [[ "$line" = exit ]] && break
+
+  zpty -w nslookup "$line"
+
+  zpty -r nslookup line '*> ' || break
+  print -nr "$line"
 done
 
-print -p exit
-wait $pid
+zpty -w nslookup 'exit'
diff --git a/Makefile.in b/Makefile.in
index 7f8e8fb0e..addd62c30 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -42,7 +42,7 @@ INSTALL         = @INSTALL@
 
 # default target
 all: config.h
-	@for subdir in Src Doc Etc; do \
+	@for subdir in Src Doc; do \
 	  (cd $$subdir && $(MAKE) $(MAKEDEFS) $@) || exit 1; \
 	done
 
diff --git a/Src/Modules/.distfiles b/Src/Modules/.distfiles
index 5bb3f6ef6..4ef91ad62 100644
--- a/Src/Modules/.distfiles
+++ b/Src/Modules/.distfiles
@@ -11,4 +11,5 @@ DISTFILES_SRC='
     zftp.mdd zftp.c
     zprof.mdd zprof.c
     zutil.mdd zutil.c
+    zpty.mdd zpty.c
 '
diff --git a/Src/builtin.c b/Src/builtin.c
index 96c86d291..6b09eb3aa 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3219,6 +3219,7 @@ zexit(int val, int from_signal)
 	}
 	if (sigtrapped[SIGEXIT])
 	    dotrap(SIGEXIT);
+	runhookdef(EXITHOOK, NULL);
 	if (mypid != getpid())
 	    _exit(val);
 	else
diff --git a/Src/init.c b/Src/init.c
index 1921935eb..0dc063f7b 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -89,6 +89,11 @@ mod_export int (*getkeyptr) _((int));
 mod_export int alloc_stackp;
 #endif
 
+/**/
+mod_export struct hookdef zshhooks[] = {
+    HOOKDEF("exit", NULL, HOOKF_ALL),
+};
+
 /* keep executing lists until EOF found */
 
 /**/
@@ -560,6 +565,8 @@ setupvals(void)
 # endif
 #endif
 
+    addhookdefs(argzero, zshhooks, sizeof(zshhooks)/sizeof(*zshhooks));
+
     init_eprog();
 
     getkeyptr = NULL;
diff --git a/Src/zsh.h b/Src/zsh.h
index ea8ba8598..51c21d073 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -1651,3 +1651,9 @@ typedef unsigned char * (*ZleReadFn) _((char *, char *, int));
 /***************************************/
 
 #define mod_export
+
+/***************************************/
+/* Hooks in core.                      */
+/***************************************/
+
+#define EXITHOOK (zshhooks + 0)