about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-03-25 00:21:44 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-03-25 00:21:44 +0000
commitd8f703027345170c7bc820ed7808e693dd1377d6 (patch)
treef9b1b6ad59f19577c0e1c5b6357cb869b4bebfba
parentd770c43f14ef6e559aa16da1c1408e006bb2a137 (diff)
downloadzsh-3.1.6-dev-20.tar.gz
zsh-3.1.6-dev-20.tar.xz
zsh-3.1.6-dev-20.zip
zsh-3.1.6-dev-20 zsh-3.1.6-dev-20
-rw-r--r--ChangeLog544
-rw-r--r--Completion/Builtins/.distfiles8
-rw-r--r--Completion/Builtins/_zstyle4
-rw-r--r--Completion/Commands/_next_tags45
-rw-r--r--Completion/Core/.distfiles4
-rw-r--r--Completion/Core/_description5
-rw-r--r--Completion/Core/_main_complete36
-rw-r--r--Completion/Core/_path_files7
-rw-r--r--Completion/Core/_prefix2
-rw-r--r--Completion/Core/_setup2
-rw-r--r--Completion/Core/_tags60
-rw-r--r--Completion/User/.distfiles6
-rw-r--r--Completion/User/_groups3
-rw-r--r--Completion/User/_mailboxes5
-rw-r--r--Completion/X/.distfiles8
-rw-r--r--Completion/X/_x_colormapid4
-rw-r--r--Completion/X/_xwit4
-rw-r--r--Config/version.mk4
-rw-r--r--Doc/Zsh/compsys.yo146
-rw-r--r--Doc/Zsh/compwid.yo31
-rw-r--r--Etc/MACHINES13
-rw-r--r--Functions/Prompts/.distfiles2
-rw-r--r--Functions/Zle/incremental-complete-word16
-rw-r--r--Functions/Zle/predict-on2
-rw-r--r--Src/Modules/zpty.c43
-rw-r--r--Src/Zle/comp.h15
-rw-r--r--Src/Zle/compcore.c31
-rw-r--r--Src/Zle/complete.c17
-rw-r--r--Src/Zle/compresult.c16
-rw-r--r--Src/Zle/computil.c2
-rw-r--r--Src/Zle/zle_refresh.c2
-rw-r--r--Src/text.c14
-rw-r--r--Test/.distfiles3
33 files changed, 802 insertions, 302 deletions
diff --git a/ChangeLog b/ChangeLog
index fc8ec83a9..2a1d31f7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,547 @@
+2000-03-23  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Tanaka Akira: 10234, 10236: Completion/X/_xwit: _message passing.
+
+	* Tanaka Akira; 10232: Test/comptest, Test/ztst.zsh, ChangeLog(!):
+	minor test fixes and typo.
+
+	* Sven: 10226: Completion/Core/_path_files: quoting problem.
+
+	* Sven: 10225: Completion/Core/_path_files: dot problems with
+	files.
+
+	* Tanaka Akira: 10223: Completion/Base/_regex_arguments,
+	Completion/X/_x_colormapid, Completion/X/_xwit:
+	new X completions.
+
+	* Bart: 10218: Src/prompt.c: possible realloc() in
+	putpromptchar().
+
+2000-03-22  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Sven: 10215: Completion/User/_nedit: and this one.
+
+	* Sven: 10214: Completion/Builtins/_cd,
+	Completion/Builtins/_zstyle, Completion/User/_pbm,
+	Completion/User/_pspdf, Completion/User/_tiff,
+	Completion/User/_zdump: some _path_files calls now need loop for
+	tags.
+
+	* Sven: 10210: Completion/Commands/_next_tags,
+	Completion/Core/_main_complete, Completion/Core/compinit,
+	Doc/Zsh/compsys.yo: _next_tags doesn't need to be in completer
+	list any more; $compprefuncs array does pre-completion functions.
+	
+	* Sven: 10209: Completion/Core/_loop, Completion/Core/_try:
+	missing functions form 10195.
+
+	* 10204: Completion/Base/_arguments, Completion/Base/_values,
+	Completion/Core/_alternative, Completion/Core/_tags,
+	Completion/Core/_wanted, Src/Zle/computil.c: additions to 10195.
+
+	* Sven: 10195: Completion/Base/_arguments,
+	Completion/Base/_brace_parameter, Completion/Base/_condition,
+	Completion/Base/_default, Completion/Base/_describe,
+	Completion/Base/_first, Completion/Base/_jobs,
+	Completion/Base/_math, Completion/Base/_parameter,
+	Completion/Base/_subscript, Completion/Base/_tilde,
+	Completion/Base/_values, Completion/Builtins/_arrays,
+	Completion/Builtins/_autoload, Completion/Builtins/_bindkey,
+	Completion/Builtins/_builtin, Completion/Builtins/_cd,
+	Completion/Builtins/_command, Completion/Builtins/_compdef,
+	Completion/Builtins/_echotc, Completion/Builtins/_functions,
+	Completion/Builtins/_hash, Completion/Builtins/_limits,
+	Completion/Builtins/_pids, Completion/Builtins/_popd,
+	Completion/Builtins/_sched, Completion/Builtins/_signals,
+	Completion/Builtins/_stat, Completion/Builtins/_vars,
+	Completion/Builtins/_zftp, Completion/Builtins/_zle,
+	Completion/Builtins/_zmodload, Completion/Builtins/_zpty,
+	Completion/Builtins/_zstyle, Completion/Commands/_next_tags,
+	Completion/Core/_alternative, Completion/Core/_files,
+	Completion/Core/_main_complete, Completion/Core/_multi_parts,
+	Completion/Core/_options, Completion/Core/_parameters,
+	Completion/Core/_path_files, Completion/Core/_requested,
+	Completion/Core/_sep_parts, Completion/Core/_set_options,
+	Completion/Core/_setup, Completion/Core/_tags,
+	Completion/Core/_unset_options, Completion/Core/_wanted,
+	Completion/Debian/_apt, Completion/Debian/_deb_packages,
+	Completion/Linux/_rpm, Completion/User/_archie,
+	Completion/User/_cvs, Completion/User/_dd,
+	Completion/User/_domains, Completion/User/_gcc,
+	Completion/User/_gdb, Completion/User/_getconf,
+	Completion/User/_gprof, Completion/User/_groups,
+	Completion/User/_gs, Completion/User/_hosts, Completion/User/_lp,
+	Completion/User/_mailboxes, Completion/User/_make,
+	Completion/User/_man, Completion/User/_mh, Completion/User/_mount,
+	Completion/User/_mutt, Completion/User/_mysql_utils,
+	Completion/User/_netscape, Completion/User/_nslookup,
+	Completion/User/_pbm, Completion/User/_perl_basepods,
+	Completion/User/_perl_builtin_funcs,
+	Completion/User/_perl_modules, Completion/User/_ports,
+	Completion/User/_rcs, Completion/User/_rlogin,
+	Completion/User/_socket, Completion/User/_ssh,
+	Completion/User/_stty, Completion/User/_tar,
+	Completion/User/_telnet, Completion/User/_tiff,
+	Completion/User/_urls, Completion/User/_user_at_host,
+	Completion/User/_users, Completion/User/_users_on,
+	Completion/User/_whois, Completion/User/_yp,
+	Completion/X/_x_color, Completion/X/_x_cursor,
+	Completion/X/_x_display, Completion/X/_x_extension,
+	Completion/X/_x_font, Completion/X/_x_keysym,
+	Completion/X/_x_modifier, Completion/X/_x_window,
+	Completion/X/_xmodmap, Completion/X/_xutils, Doc/Zsh/compsys.yo,
+	Doc/Zsh/mod_zutil.yo, Etc/completion-style-guide,
+	Functions/Zftp/zfcd_match, Functions/Zftp/zfget_match,
+	Src/Modules/zutil.c, Src/Zle/computil.c: implement tag aliases,
+	which allows neat tricks with styles.
+
+	* Sven: 10197: Src/exec.c, Src/init.c: %_ sometimes got cmdstack
+	wrong in source(); $(...) didn't show up at all.
+
+	* Bart: 10193: Src/prompt.c: prompttrunc() didn't track realloc()'s.
+
+	* Bart: 10181: Functions/Prompts/prompt_bart_setup: Bart's Theme
+	and Variations.
+
+	* Sven: 10178: Completion/Commands/_next_tags, Doc/Zsh/compsys.yo:
+	don't bind _next_tags by default and add some more docs.
+
+	* Sven: 10176: Src/Zle/compresult.c, Src/init.c, Src/parse.c:
+	optimize list-packed.
+
+	* Sven: 10174: Doc/Zsh/compsys.yo, Doc/Zsh/compwid.yo: tweaks on
+	completer and -V.
+
+	* Bart: 10173: Functions/Prompts/prompt_bart_setup,
+	Functions/Prompts/promptinit: Bart's Theme.
+
+	* Sven: 10172: Completion/Core/_main_complete: typo.
+
+	* Bart: 10168: Src/init.c: move hbegin() to get it right in
+	precmd.
+
+	* Oliver: 10166: Completion/X/_xt_arguments,
+	Completion/User/_nedit: new and improved.
+
+	* Bart: 10165: Doc/Zsh/builtins.yo, Doc/Zsh/compsys.yo: move doc
+	for using a completer twice; zcompile doc tweak.
+
+	* Oliver: 10162: Completion/Core/_expand: use nullglob option
+	instead of (N) so that user's qualifiers work.
+
+	* Sven: 10159: Src/Zle/compresult.c: wrong calculation of display
+	length when not using zsh/complist.
+
+	* Sven: 10156: Src/exec.c: possible invalid field in function
+	definition when loading.
+
+	* Zefram: 10152: Src/mem.c: fix ordering ambiguity ANSI wouldn't
+	have liked.
+
+	* Bart: 10150: Src/exec.c, Test/51xtrace.ztst: `one last' xtrace
+	redirection fix.
+
+	* Sven: 10149: Doc/Zsh/builtins.yo, Src/builtin.c, Src/exec.c,
+	Src/parse.c: allows native and ksh-like wordcode function styles.
+
+	* Sven: 10148: Src/Zle/comp.h, Src/Zle/compcore.c, Src/mem.c:
+	optimization for added matches where things didn't change.
+
+	* Sven: 10146: Completion/Core/_sort_tags, Completion/Core/_tags,
+	Doc/Zsh/compsys.yo: return value of function called by _tags used
+	to decide dispositions.
+
+	* Sven: 10145: Doc/Zsh/mod_zle.yo: confess to users that zle input
+	is on a stack.
+
+	* Sven: 10144: Doc/Zsh/builtins.yo, Src/Modules/parameter.c,
+	Src/builtin.c, Src/exec.c, Src/linklist.c, Src/parse.c: dump
+	functions from current shell.
+
+	* Sven: 10143: Src/init.c, Src/math.c: better ignoring of bits
+	that shouldn't get evaluated in math expressions.
+
+	* Sven: 10135: Doc/Zsh/compsys.yo, Src/Zle/computil.c: complex
+	argument handling expressions.
+
+	* Sven: 10131: Src/Modules/stat.c, Src/Modules/zpty.c,
+	Src/Modules/zutil.c, Src/Zle/compctl.c, Src/Zle/complete.c,
+	Src/Zle/computil.c, Src/Zle/zle_main.c, Src/Zle/zle_thingy.c,
+	Src/parse.c: more consistent zerrnam/zwarnnam usage.
+
+	* Sven: 10129: Doc/Zsh/builtins.yo, Src/builtin.c, Src/parse.c:
+	autoload -w can mark all functions in .zwc files for autoloading.
+
+	* Sven: 10128: Doc/Zsh/zle.yo, Src/Zle/zle_main.c, Src/init.c,
+	Src/signals.c, Src/zsh.h: zle parameters available readonly in
+	traps.
+
+	* Sven: 10127: Doc/Zsh/zle.yo, Src/Zle/compresult.c,
+	Src/Zle/iwidgets.list, Src/Zle/zle_main.c, Src/Zle/zle_misc.c,
+	Src/Zle/zle_refresh.c, Src/Zle/zle_thingy.c, Src/Zle/zle_tricky.c:
+	end-of-list widget to display prompt under command line, plus
+	$MARK documentation.
+
+	* Sven: 10126: Src/Zle/compcore.c: quotes in $PREFIX and $SUFFIX.
+
+	* Sven: 10125: Src/math.c, Src/params.c: restore old cruddy
+	behaviour removed in 10104, but using recursion counter.
+
+	* Sven: 10120: Src/exec.c, Src/loop.c, Src/parse.c: state not
+	tested properly in some constructs.
+
+	* Sven: 10117: Doc/Zsh/mod_zle.yo, Src/Zle/zle_params.c,
+	Src/Zle/zle_thingy.c: zle on its own returns zle status;
+	MARK parameter; disallow widgets in traps.
+
+	* Oliver: 10116: Completion/Builtins/_source: wasn't looking
+	through the path.
+
+	* Sven: 10112: Completion/Base/_condition, Src/Zle/zle_tricky.c:
+	fix up altmodische _condition; `[[ ... && ' thought it was in
+	command position for completion.
+
+	* Sven: 10108: Completion/Commands/.distfiles,
+	Completion/Commands/_next_tags, Completion/Core/_files,
+	Completion/Core/_main_complete, Completion/Core/_requested,
+	Completion/Core/_wanted, Doc/Zsh/compsys.yo,
+	Functions/Misc/.distfiles: _next_tags allows you to cycle through
+	sets of completions according to the tags.
+
+	* Sven: 10107: Doc/Zsh/compwid.yo, Src/Zle/complete.c,
+	Src/Zle/compmatch.c: ** in match spec allows matching including
+	the anchor as well.
+
+	* Sven: 10106: Functions/Misc/zrecompile, Src/exec.c, Src/parse.c,
+	Src/zsh.h: recompilation of wordcode files and related bugs.
+
+	* Sven: 10105: Src/lex.c: single exclamation marks in conditions.
+
+	* Sven: 10104: Src/math.c, Src/params.c: retrieve parameters in
+	math evaluations more directly rather than recursively calling
+	matheval(), which was kind of stupid, so stupid I could	quite
+	possible have put it in myself, but I don't think I did this time.
+
+	* Sven: 10103: Src/glob.c: bad handling of ./ and ../ in
+	closures.
+
+	* Bart: 10098: configure.in, Src/cond.c: check for AIX's
+	faccessx() and neaten configure library function tests.
+
+	* Oliver: 10088: Completion/User/_groups,
+	Completion/Base/_condition: better handling of files after
+	conditions, checking of use of NIS.
+
+	* Adam: 10087: Completion/User/_perl_modules,
+	Completion/User/_perl: new and enhanced perl completions.
+
+	* Oliver: 10073: Src/cond.c: /dev/fd emulation for access tests.
+
+	* Adam: 10072: Completion/User/_mysql_utils: new completion
+	function for something with suspcicious `SQL' bit in its name.
+
+	* Bart: 10071: Src/exec.c: xtrace output redirection problem.
+
+	* Sven: 10059: Src/builtin.c, Src/lex.c, Src/parse.c, Src/text.c,
+	Src/zsh.h: bugs found by ksh tests: typeset -Ai didn't create
+	assocs (still doesn't create ints), some heredoc difficulties, |&
+	difficulties.
+
+	* Alexandre: 10058: Completion/User/_prcs, Completion/User/_diff,
+	Completion/User/_diff_options: another solution for the GNU diff
+	completion problem.
+
+	* Bart: 10056: Etc/MACHINES: RLIM_INFINITY incompatibility with
+	some Linux/GNU libraries.
+
+	* Sven: 10044: Completion/User/_diff, Completion/User/_use_lo:
+	gdiff should use diff completion, pretty obviously.
+
+	* Sven: 10041: Doc/Zsh/builtins.yo, Doc/Zsh/files.yo,
+	Doc/Zsh/func.yo, Src/init.c, Src/parse.c: enhancements for digest
+	files including digests of sourced files.  Or maybe digestion of
+	sauce.
+
+	* Sven: 10040: Completion/User/_diff_options: can test for GNU
+	diff.
+
+	* Oliver: 10029: Src/utils.c: bad handling of '^^' in keystring
+	parsing.
+
+	* Andrej: 10028: Completion/Builtins/_cd: remove local directory
+	from cdpath.
+
+	* Sven: 10025: Functions/Misc/nslookup, Src/Modules/zpty.c:
+	optimizations for pty reads.
+
+	* Sven: 10017: Doc/Zsh/builtins.yo, Src/lex.c, Src/parse.c:
+	fix buffer problem for autoloading and unportable macro.
+
+	* Oliver: 10013: Completion/Builtins/_compdef,
+	Completion/Builtins/_zpty, Completion/User/_getconf: two new
+	functions and one updated.
+
+	* Andrej: 10011: Completion/User/_sudo: options for recent sudo.
+
+	* Bart: 10009: Completion/Base/_subscript: didn't get arrays the
+	right length.
+
+	* Bart: 10006: configure.in, Src/utils.c: use mktemp() if
+	available.
+
+	* Bart: 9992: Functions/Zle/predict-on: tweaks.
+
+	* Bart: 9990: Test/07cond.ztst: compatibility fix for chmod g+s.
+
+	* Bart: 9982: Test/53completion.ztst, Test/Makefile.in,
+	Test/comptest, Test/ztst.zsh: better handling of uninstalled
+	modules.
+
+	* Andrej: 9981: Src/Modules/zpty.c: SYSV-related pty stuff.
+
+	* Bart: 9980: Src/Makefile.in: separate mymods.conf and xmods.conf
+	dependencies.
+
+	* Sven: 9966: Doc/Zsh/builtins.yo, Doc/Zsh/func.yo, Src/parse.c:
+	require .zwc ending for digest files.
+
+	* Bart: 9963: Test/11glob.ztst: existing globbing tests run under
+	new test harness.
+
+	* Bart: 9961: INSTALL, Src/Makefile.in, Test/53completion.ztst,
+	Test/comptest: errors trying to load zpty for static shell in
+	tests; INSTALL didn't describe mymods.conf properly.
+
+	* Tanaka Akira: 9960: Test/comptest, Test/53completion.ztst: avoid
+	zpty timing problem.
+
+	* Sven: 9958: Src/parse.c: sharing strings made test fail with
+	new wordcode.
+
+	* Tanaka Akira: 9957: Test/comptest: clear to end.
+
+	* Sven: 9953: Src/Zle/complist.c: was incorrectly omitting some
+	display sequences.
+
+	* Tanaka Akira: 9952: Test/comptest: compatibility, quoting and
+	debugging fixes.
+
+	* Sven: 9951: Completion/Core/_multi_parts: was producing
+	mysterious blank entries.
+
+	* Sven: 9948: Src/exec.c, Src/parse.c: stripkshdef() was broken.
+
+	* Sven: 9947: Completion/Core/compdump, Completion/Core/compinit,
+	Doc/Zsh/builtins.yo, Doc/Zsh/func.yo, Src/builtin.c, Src/cond.c,
+	Src/exec.c, Src/glob.c, Src/lex.c, Src/loop.c, Src/math.c,
+	Src/mem.c, Src/parse.c, Src/text.c, Src/utils.c, Src/zsh.h:
+	Wordcode compilation for functions using .zwc or `digest
+	functions' in $fpath.
+
+	* Bart: 9946: Src/subst.c: return type in 9937.
+
+	* Bart: 9945: Src/prompt.c: truncation messed up non-literal
+	parts of the prompt.
+
+	* Bart: 9942: Src/prompt.c: truncation in true part of ternary
+	expression incorrectly showed false part and closing parenthesis.
+
+	* Sven: 9937: Src/subst.c: parsing problem with parameter
+	substitution which showed up in file completion.
+
+	* Sven: 9938: Src/Modules/parameter.c: problem assigning to
+	dirstack.
+
+	* Tanaka Akira: 9936: Src/Zle/complist.c, Test/comptest,
+	Test/53completion.ztst: tests for completion using zpty.
+
+	* Tanaka Akira: 9935: Test/52zregexparse.ztst: tests for
+	zregexparse.
+
+2000-03-21  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Sven: 9920: Completion/Core/.distfiles, Completion/Core/_call:
+	the function needed for 9897.
+
+	* Bart: 9912: Completion/User/_mailboxes: further improvements.
+
+	* Sven: 9904: Src/utils.c: getquery() and rmstarsilent.
+
+	* Sven: 9902: Completion/Core/_path_files: _files -g problem.
+
+	* Sven: 9900, 9903: Src/exec.c: parsing oddity in here documents.
+
+	* 9897: Completion/Base/_arguments, Completion/Builtins/_pids,
+	Completion/Linux/_rpm, Completion/User/_a2ps,
+	Completion/User/_archie, Completion/User/_diff_options,
+	Completion/User/_finger, Completion/User/_groups,
+	Completion/User/_gs, Completion/User/_killall,
+	Completion/User/_lp, Completion/User/_telnet,
+	Completion/User/_users_on, Completion/User/_yp,
+	Completion/X/_x_font, Completion/X/_x_window, Doc/Zsh/compsys.yo:
+	use _call function and `command' style to override command
+	used in various completions.
+
+	* Sven: 9895: Completion/Base/_combination,
+	Completion/Builtins/_zstyle, Completion/User/_telnet,
+	Doc/Zsh/compsys.yo: usage of combination styles.
+
+	* Sven: 9893: Completion/Core/_multi_parts: return values.
+
+	* Sven: 9892: Completion/Core/_main_complete,
+	Completion/Core/_path_files, Completion/Core/compdump,
+	Completion/Core/compinit: improved fix for 9886; typo in
+	_main_complete; compdump uses (q) flag; remove compstyle; update
+	compconf.
+
+	* Bart: 9891: Completion/User/_cvs: kshautoload problem.
+
+	* Bart: 9889: acconfig.h, configure.in, Src/exec.c,
+	Src/prototypes.h: from 3.0.8: detect mknod(), minor redirection
+	tweaks.
+
+	* Bart: 9886: Completion/Core/_path_files: matcher problem.
+
+	* Tanaka Akira: 9885: Completion/User/_dvi, Completion/User/_lynx,
+	Completion/X/_xutils: extra arguments for completion functions.
+
+	* Alexandre: 9882: Completion/User/_prcs: error messages.
+
+	* Sven: 9880: Completion/Core/_path_files: error message with
+	~unknown.
+
+	* Sven: 9879: Completion/User/_tilde_files: use of magicequalsubst
+	with completion.
+
+	* Sven: 9877: Src/parse.c: wordcode bug in functions with failed
+	builtins.
+
+	* Sven: 9876: Completion/Base/_combination,
+	Completion/User/_rlogin, Completion/User/_ssh,
+	Completion/User/_user_at_host, Doc/Zsh/compsys.yo: more flexible
+	handling of separators in combinations.
+
+	* Sven: 9870: Completion/Core/_path_files,
+	Completion/User/.distfiles, Completion/User/_dd,
+	Completion/User/_tilde_files, Src/Zle/compresult.c: better
+	handling of paths beginning ~ in various places.
+
+	* Sven: 9865: Completion/Builtins/_zstyle,
+	Completion/Core/_main_complete, Completion/Core/_setup,
+	Doc/Zsh/compsys.yo, Src/Zle/compcore.c, Src/Zle/compresult.c:
+	implement prefer-ignored style to prefer alternative matches
+	to going on to another completer.
+
+	* Sven: 9863: Src/parse.c, Src/text.c: wordcode problems, using
+	old code.
+
+	* Sven: 9861: Completion/Core/_main_complete: interaction of
+	_main_complete and _oldlist.
+
+	* Sven: 9860: Src/Zle/compctl.c: storing of match and display list.
+
+	* Sven: 9855: Completion/Core/_multi_parts, Doc/Zsh/compsys.yo:
+	_multi_parts accepts -f.
+
+2000-02-23  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Sven: 9845: Functions/Zle/incremental-complete-word: another
+	context change.
+
+	* Sven: 9844: Functions/Zle/predict-on: rationalize 9837.
+
+	* Sven: 9840: config.sub: test for alphaev6 systems.
+
+	* Sven: 9839: Src/Builtins/sched.c, Src/Modules/example.c,
+	Src/Modules/mapfile.c, Src/Modules/parameter.c,
+	Src/Modules/zftp.c, Src/Modules/zprof.c, Src/Modules/zpty.c,
+	Src/Modules/zutil.c, Src/Zle/compcore.c, Src/Zle/compctl.c,
+	Src/Zle/complete.c, Src/Zle/complist.c, Src/Zle/compresult.c,
+	Src/Zle/computil.c, Src/Zle/zle_hist.c, Src/Zle/zle_main.c,
+	Src/Zle/zle_misc.c, Src/Zle/zle_thingy.c, Src/Zle/zle_tricky.c,
+	Src/Zle/zleparameter.c, Src/builtin.c, Src/cond.c, Src/exec.c,
+	Src/glob.c, Src/hist.c, Src/init.c, Src/jobs.c, Src/lex.c,
+	Src/linklist.c, Src/loop.c, Src/main.c, Src/math.c, Src/mem.c,
+	Src/module.c, Src/params.c, Src/parse.c, Src/pattern.c,
+	Src/prompt.c, Src/signals.c, Src/subst.c, Src/utils.c, Src/zsh.h:
+	Eliminate `useheap' variable and consequent HEAPALLOC/PERMALLOC
+	usage throughout the shell (hooray!)  All memory allocation is
+	either explicitly on the heap or permanent.
+
+	* Sven: 9838: Src/Modules/parameter.c, Src/Zle/computil.c,
+	Src/Zle/zle_main.c, Src/builtin.c, Src/cond.c, Src/exec.c,
+	Src/glob.c, Src/hashtable.c, Src/init.c, Src/jobs.c, Src/lex.c,
+	Src/linklist.c, Src/loop.c, Src/params.c, Src/parse.c,
+	Src/signals.c, Src/signals.h, Src/subst.c, Src/text.c,
+	Src/version.h, Src/zsh.h: parser now emits wordcode directly; a
+	whole heap of optimisations of the execution tree.
+
+	* Sven: 9837: Completion/User/_gunzip, Functions/Zle/predict-on:
+	no. of colons in predict-on, typo in _gunzip.
+
+	* Sven: 9835: Completion/Builtins/_zstyle,
+	Completion/Core/_main_complete, Doc/Zsh/compsys.yo: document
+	single-ignored style, better handling of descriptions with
+	warnings about no matches.
+
+	* Bart: 2930: Completion/User/_ssh: basic completion for remote
+	files.
+
+2000-02-22  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Sven: 9831: Completion/Core/_multi_parts: better separator
+	removal.
+
+	* Sven: 9830: Completion/X/_x_arguments: reverse 9824, but use
+	_default instead of _files if no special arguments.
+
+	* Bart: 9828: Completion/User/_mailboxes: $i -> "$i" missed out.
+
+2000-02-21  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
+
+	* Clint: 9824: Completion/X/_x_arguments: `*/X11/*' was too broad
+	a definition for X commands taking standard arguments to be
+	useful.
+
+	* Clint: 9823: configure.in: open fifo read/write in test to avoid
+	possible (unconfirmed) hang.
+
+	* Bart: 9822: Completion/User/_mailboxes: add completions for mush
+	and tkrat; allow pine to complete mh folders.
+
+	* Sven: 9816: Completion/Core/_multi_parts,
+	Completion/User/_mailboxes: improved version of 9812/9815.
+
+	* Bart: 9812, 9815: Completion/User/_mailboxes,
+	Completion/User/_mutt: improved mailbox completion for all sorts
+	of types, currently only used for mutt.
+
+	* Sven: 9810: Completion/Core/_multi_parts: difficulties with
+	separator as initial character.
+
+	* Sven: 9809: Completion/Builtins/_popd,
+	Completion/Core/_approximate, Doc/Zsh/compsys.yo: documentation
+	improvements and typo fixes.
+
+	* Tanaka Akira/Sven: 9807: Completion/Core/_main_complete:
+	single-ignored style, as yet undocumented, for handling of
+	alternate match set.
+
+	* Sven: 9806: Completion/Core/_multi_parts: problems with literal
+	(parenthesised) arrays.
+
+	* Sven: 9805: Completion/Core/_path_files: difficulties with
+	suffixes when expanding paths.
+
+	* Sven: 9802: Src/utils.c: no need to quote !'s in ${(qq)...}
+	because they're not active in single quotes.
+
+	* Bart: 9799: Src/utils.c: better interpretation of typeahead when
+	querying user e.g. for spell checking.
+
+	* Adam: 9798: Doc/Makefile.in: use `texi' and `html' for targets
+	to avoid duplicated name complaint by gmake.
+
 2000-02-20  Peter Stephenson  <pws@pwstephenson.fsnet.co.uk>
 
 	* pws: Config/version.mk: 3.1.6-dev-19.
diff --git a/Completion/Builtins/.distfiles b/Completion/Builtins/.distfiles
index e142d0e08..389b73910 100644
--- a/Completion/Builtins/.distfiles
+++ b/Completion/Builtins/.distfiles
@@ -1,8 +1,8 @@
 DISTFILES_SRC='
     .distfiles
     _aliases _arrays _autoload _bg_jobs _bindkey _builtin _cd _command
-    _compdef _disable _echotc _enable _fc _fg_jobs _functions _hash _kill
-    _limits _nothing _pids _popd _sched _set _setopt _source _stat _trap
-    _unhash _unsetopt _vars _vars_eq _wait _which _zftp _zle _zmodload
-    _signals _zstyle
+    _compdef _disable _echotc _enable _fc _fg_jobs _functions
+    _hash _kill _limits _nothing _pids _popd _sched _set _setopt _source
+    _stat _trap _unhash _unsetopt _vars _vars_eq _wait _which _zftp _zle
+    _zmodload _zpty _signals _zstyle
 '
diff --git a/Completion/Builtins/_zstyle b/Completion/Builtins/_zstyle
index 40a66a364..9f5b0be89 100644
--- a/Completion/Builtins/_zstyle
+++ b/Completion/Builtins/_zstyle
@@ -49,13 +49,13 @@ styles=(
   packageset		 c:packageset
   path			 'c:_wanted directories expl directory _path_files -/'
   ports			 c:_ports
+  prefer-ignored         c:bool
   prefix-hidden		 c:bool
   prefix-needed		 c:bool
   prompt		 c:
   remove-all-dups	 c:bool
   single-ignored         c:single-ignored
   sort			 c:bool
-  tag-aliases            c:tag
   tag-order		 c:tag
   special-dirs		 c:sdirs
   squeeze-slashes	 c:bool
@@ -215,7 +215,7 @@ while [[ -n $state ]]; do
       ;;
 
     single-ignored)
-      _wanted values expl 'how to handle a single ignored match' \
+      _wanted values expl 'how to handle single alternate match' \
           compadd - show menu
       ;;
 
diff --git a/Completion/Commands/_next_tags b/Completion/Commands/_next_tags
index 6d3389ff1..028ba4d61 100644
--- a/Completion/Commands/_next_tags
+++ b/Completion/Commands/_next_tags
@@ -46,7 +46,7 @@ _next_tags_pre() {
 # Helper function for sorting tags. Most of this is copied from _tags.
 
 _next_tags_sort() {
-  local order tags tag nodef tmp tmp2
+  local order tags tag nodef
 
   if ! zstyle -a ":completion:${curcontext}:" tag-order order; then
     if (( $+_comp_default_tags )); then
@@ -69,49 +69,12 @@ _next_tags_sort() {
     case $tag in
     -)     nodef=yes;;
     *\(\)) "${${tag%%[ 	]#\(\)}##[ 	]#}" "$@";;
-    \!*)   comptry "${(@)argv:#(${(j:|:)~${=~tag[2,-1]}})}";;
-    ?*)    tmp=( ${${(s: :)${tag//\\\\ /$'\0'}}//$'\0'/ } ) tmp2=() tmp3=()
-           for tag in "$tmp[@]"; do
-	     if [[ "$tag" = *:* ]]; then
-	       tmp2=( "$tmp2[@]" "${(@M)^argv:#${~tag%%:*}}:${tag#*:}" )
-	     else
-	       for atag in "${(@M)argv:#${~tag}}"; do
-	         if zstyle -a ":completion:${curcontext}:${atag}" tag-aliases als; then
-		   tmp3=( "$tmp3[@]" "$als[@]" )
-		   tmp=( "${(@)tmp:#${atag}}" )
-                 else
-	           tmp2=( "$tmp2[@]" "$atag" )
-		 fi
-	       done
-	     fi
-	   done
-
-	   comptry "${(@)tmp2:#(${(j:|:)~${(q)tmp%%:*}})}" "$tmp3[@]" "$tmp[@]"
-	   ;;
+    \!*)   comptry "${(@)argv:#(${(j:|:)~${=tag[2,-1]}})}";;
+    ?*)    comptry ${=tag};;
     esac
   done
 
-  if [[ -z "$nodef" ]]; then
-    if (( $+_comp_default_tags )); then
-      for tag in "$_comp_default_tags[@]"; do
-        if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
-          comptry "$als[@]"
-        else
-          comptry "$tag"
-	fi
-      done
-    else
-      tmp2=()
-      for tag; do
-	if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
-	  tmp2=( "$tmp2[@]" "$als[@]" )
-        else
-	  tmp2=( "$tmp2[@]" "$tag" )
-	fi
-      done
-      comptry "$tmp2[@]"
-    fi
-  fi
+  [[ -z "$nodef" ]] && comptry "$@"
 }
 
 [[ -o kshautoload ]] || _next_tags "$@"
diff --git a/Completion/Core/.distfiles b/Completion/Core/.distfiles
index 0c85315fb..237018b27 100644
--- a/Completion/Core/.distfiles
+++ b/Completion/Core/.distfiles
@@ -1,10 +1,10 @@
 DISTFILES_SRC='
     .distfiles
     _alternative _approximate _call _compalso _complete _correct _description
-    _expand _files _funcall _list _main_complete _match
+    _expand _files _funcall _list _loop _main_complete _match
     _menu _multi_parts _message _normal _oldlist _options
     _parameters _path_files _prefix _requested _sep_parts
-    _set_options _setup _sort_tags _tags
+    _set_options _setup _sort_tags _tags _try
     _unset_options _wanted
     compdump compinit compinstall
 '
diff --git a/Completion/Core/_description b/Completion/Core/_description
index 7db47228b..6326d1f03 100644
--- a/Completion/Core/_description
+++ b/Completion/Core/_description
@@ -29,9 +29,8 @@ zstyle -s ":completion:${curcontext}:$1" matcher match &&
     opts=($opts -M "${(q)match}")
 [[ -n "$_matcher" ]] && opts=($opts -M "${(q)_matcher}")
 
-if [[ -z "$_comp_no_ignore" ]] &&
-   zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore; then
-  opts=( $opts -F _comp_ignore )
+if zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore; then
+  opts=( $opts -F _comp_ignore)
 else
   _comp_ignore=()
 fi
diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete
index 49e66cba7..244f06b7e 100644
--- a/Completion/Core/_main_complete
+++ b/Completion/Core/_main_complete
@@ -19,7 +19,7 @@
 setopt localoptions nullglob rcexpandparam extendedglob
 unsetopt markdirs globsubst shwordsplit nounset ksharrays
 
-local func funcs ret=1 tmp _compskip format _comp_ignore \
+local ctxt func funcs ret=1 tmp _compskip format _comp_ignore \
       _completers _completer _completer_num curtag \
       _matchers _matcher _matcher_num _comp_tags \
       context state line opt_args val_args curcontext="$curcontext" \
@@ -61,8 +61,7 @@ _last_menu_style=()
 
 # Get the names of the completers to use in the positional parameters.
 
-(( $# )) || zstyle -a ":completion:${curcontext}:" completer argv ||
-    set _complete
+(( $# )) || zstyle -a ":completion:${curcontext}:" completer argv || set _complete
 
 # And now just call the completer functions defined.
 
@@ -78,8 +77,14 @@ for func in "$funcs[@]"; do
 done
 
 for _completer; do
+  ctxt=":completion:${curcontext/::/:${_completer[2,-1]}-${(M)#_completers[1,_completer_num]:#$_completer}:}:"
 
-  zstyle -a ":completion:${curcontext/::/:${_completer[2,-1]}-${(M)#_completers[1,_completer_num]:#$_completer}:}:" matcher-list _matchers ||
+  if zstyle -t "$ctxt" prefer-ignored && (( $compstate[alternate_nmatches] )); then
+    ret=0
+    break;
+  fi
+
+  zstyle -a "$ctxt" matcher-list _matchers ||
       _matchers=( '' )
 
   _matcher_num=1
@@ -93,9 +98,26 @@ for _completer; do
   (( _completer_num++ ))
 done
 
+if zstyle -s ":completion:${curcontext}:" single-ignored tmp &&
+   [[ $compstate[old_list] != shown &&
+      $compstate[alternate_nmatches] = 1 ]]; then
+  case "$tmp" in
+  show) compstate[insert]='' compstate[list]='list force' tmp='' ;;
+  menu)
+    local expl
+
+    compstate[insert]='menu'
+    _description original expl original    
+    compadd "$expl[@]" -a -S '' - "$PREFIX$SUFFIX"
+    ;;
+  *) tmp='' ;;
+  esac
+fi
+
 if [[ -n "$tmp" || $compstate[old_list] = keep ||
-      $compstate[nmatches] -gt 1 ]]; then
-  [[ _last_nmatches -ge 0 && _last_nmatches -ne $compstate[nmatches] ]] &&
+      $compstate[nmatches]+$compstate[alternate_nmatches] -gt 1 ]]; then
+  [[ _last_nmatches -ge 0 &&
+     _last_nmatches -ne $compstate[nmatches]+$compstate[alternate_nmatches] ]] &&
       _menu_style=( "$_last_menu_style[@]" "$_menu_style[@]" )
 
   if [[ "$compstate[insert]" = "$_saved_insert" ]]; then
@@ -148,7 +170,7 @@ if [[ -n "$tmp" || $compstate[old_list] = keep ||
       fi
     fi
   fi
-elif [[ $compstate[nmatches] -eq 0 &&
+elif [[ $compstate[nmatches]+$compstate[alternate_nmatches] -eq 0 &&
         $#_lastdescr -ne 0 && $compstate[old_list] != keep ]] &&
      zstyle -s ":completion:${curcontext}:warnings" format format; then
 
diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files
index 11445c204..d5feaa540 100644
--- a/Completion/Core/_path_files
+++ b/Completion/Core/_path_files
@@ -142,9 +142,8 @@ eorig="$orig"
 
 # If given no `-F' option, we may want to use $fignore, turned into patterns.
 
-[[ -z "$_comp_no_ignore" && $#ignore -eq 0 &&
-   ( -z $gopt || "$pats" = \ #\*\ # ) && -n $FIGNORE ]] && 
-    ignore=( "?*${^fignore[@]}" )
+[[ $#ignore -eq 0 && ( -z $gopt || "$pats" = \ #\*\ # ) && -n $FIGNORE ]] && 
+   ignore=( "?*${^fignore[@]}" )
 
 if (( $#ignore )); then
   _comp_ignore=( "$_comp_ignore[@]" "$ignore[@]" )
@@ -351,7 +350,7 @@ for prepath in "$prepaths[@]"; do
       continue 2
     fi
 
-    if [[ -z "$_comp_no_ignore" && "$tpre$tsuf" != */* && $#tmp1 -ne 0 ]] &&
+    if [[ "$tpre$tsuf" != */* && $#tmp1 -ne 0 ]] &&
        zstyle -s ":completion:${curcontext}:files" ignore-parents rem &&
        [[ ( "$rem" != *dir* || "$pats" = '*(-/)' ) &&
 	  ( "$rem" != *..* || "$tmp1" = *../* ) ]]; then
diff --git a/Completion/Core/_prefix b/Completion/Core/_prefix
index 32ffaea2f..ed95140bd 100644
--- a/Completion/Core/_prefix
+++ b/Completion/Core/_prefix
@@ -7,7 +7,7 @@
 local curcontext="${curcontext/:[^:]#:/:prefix-${(M)#_completers[1,_completer_num]:#_prefix}:}" comp i
 
 zstyle -a ":completion:${curcontext}:" completer comp ||
-  comp=( "${(@)_completers[1,_completer_num-1][(R)_prefix,-1]}" )
+  comp=( "${(@)_completers[1,_completer_num][(R)_prefix,-1]}" )
 
 if zstyle -t ":completion:${curcontext}:" add-space; then
   ISUFFIX=" $SUFFIX"
diff --git a/Completion/Core/_setup b/Completion/Core/_setup
index ed7307e69..0b9e5d0a9 100644
--- a/Completion/Core/_setup
+++ b/Completion/Core/_setup
@@ -54,7 +54,7 @@ fi
     _menu_style=( "$_last_menu_style[@]" "$_menu_style[@]" )
 
 if zstyle -a ":completion:${curcontext}:$1" menu val; then
-  _last_nmatches=$nm
+  _last_nmatches=$(( $nm + $compstate[alternate_nmatches] ))
   _last_menu_style=( "$val[@]" )
 else
   _last_nmatches=-1
diff --git a/Completion/Core/_tags b/Completion/Core/_tags
index a617776d4..2dfa56f9d 100644
--- a/Completion/Core/_tags
+++ b/Completion/Core/_tags
@@ -16,7 +16,7 @@ if (( $# )); then
 
   # We have arguments: the tags supported in this context.
 
-  local curcontext="$curcontext" order tag nodef tmp tmp2 tmp3 als atag
+  local curcontext="$curcontext" order tag nodef
 
   if [[ "$1" = -C?* ]]; then
     curcontext="${curcontext%:*}:${1[3,-1]}"
@@ -51,13 +51,7 @@ if (( $# )); then
 
   if [[ -n "$_sort_tags" ]]; then
     "$_sort_tags" "$@"
-  else
-    zstyle -a ":completion:${curcontext}:" tag-order order ||
-      if [[ "$*" = *(arguments|values)* || "$*" = *options* ]] ;then
-        order=( 'arguments values' options )
-      else
-        order=()
-      fi
+  elif zstyle -a ":completion:${curcontext}:" tag-order order; then
 
     for tag in $order; do
       case $tag in
@@ -67,49 +61,33 @@ if (( $# )); then
                break
              fi
              ;;
-      \!*)   comptry "${(@)argv:#(${(j:|:)~${=~tag[2,-1]}})}";;
-      ?*)    tmp=( ${${(s: :)${tag//\\\\ /$'\0'}}//$'\0'/ } ) tmp2=() tmp3=()
-             for tag in "$tmp[@]"; do
-	       if [[ "$tag" = *:* ]]; then
-	         tmp2=( "$tmp2[@]" "${(@M)^argv:#${~tag%%:*}}:${tag#*:}" )
-	       else
-	         for atag in "${(@M)argv:#${~tag}}"; do
-	           if zstyle -a ":completion:${curcontext}:${atag}" tag-aliases als; then
-		     tmp3=( "$tmp3[@]" "$als[@]" )
-		     tmp=( "${(@)tmp:#${atag}}" )
-                   else
-	             tmp2=( "$tmp2[@]" "$atag" )
-		   fi
-		 done
-	       fi
-	     done
-
-	     comptry "${(@)tmp2:#(${(j:|:)~${(q)tmp%%:*}})}" "$tmp3[@]" "$tmp[@]"
-	     ;;
+      \!*)   comptry "${(@)argv:#(${(j:|:)~${=tag[2,-1]}})}";;
+      ?*)    comptry ${${(ps: :)${tag//\\\\ /$'\0'}}//$'\0'/ };;
       esac
     done
 
     if [[ -z "$nodef" ]]; then
       if (( $+_comp_default_tags )); then
         for tag in "$_comp_default_tags[@]"; do
-	  if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
-            comptry "$als[@]"
-          else
-            comptry "$tag"
-	  fi
+          comptry "$tag"
         done
       else
-        tmp2=()
-	for tag; do
-	  if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
-	    tmp2=( "$tmp2[@]" "$als[@]" )
-          else
-	    tmp2=( "$tmp2[@]" "$tag" )
-	  fi
-	done
-        comptry "$tmp2[@]"
+        comptry "$@"
       fi
     fi
+  else
+
+    # Use default tags...
+
+    if (( $+_comp_default_tags )); then
+      for tag in "$_comp_default_tags[@]"; do
+        comptry "$tag"
+      done
+    else
+      comptry arguments values
+      comptry options
+    fi
+    comptry "$@"
   fi
 
   # Return non-zero if at least one set of tags should be used.
diff --git a/Completion/User/.distfiles b/Completion/User/.distfiles
index 7dafbfbca..a2e47a963 100644
--- a/Completion/User/.distfiles
+++ b/Completion/User/.distfiles
@@ -2,10 +2,10 @@ DISTFILES_SRC='
     .distfiles
     _a2ps _archie _bison _bunzip2 _bzip2 _chown _compress
     _configure _cvs _dd _diff _diff_options _dir_list _dirs
-    _domains _dvi _find _finger _flex _gcc _gdb _gprof _groups
+    _domains _dvi _find _finger _flex _gcc _gdb  _getconf _gprof _groups
     _gs _gunzip _gv _gzip _hosts _ispell _killall _lp _lynx
-    _mailboxes _make _man _mh _mount _mutt _my_accounts
-    _netscape _nslookup _other_accounts _pack _patch _pbm _pdf
+    _mailboxes _make _man _mh _mount _mutt _my_accounts _mysql_utils _nedit
+    _netscape _nslookup _other_accounts _pack _patch _pbm _pdf _perl
     _perl_basepods _perl_builtin_funcs _perl_modules _perldoc
     _ports _prcs _prompt _ps _pspdf _psutils _rcs _rlogin _sh _socket
     _ssh _strip _stty _su _sudo _tar _tar_archive _telnet _tex _texi
diff --git a/Completion/User/_groups b/Completion/User/_groups
index 748536f3b..c4d53d32d 100644
--- a/Completion/User/_groups
+++ b/Completion/User/_groups
@@ -6,8 +6,7 @@ _wanted groups || return 1
 
 if ! zstyle -a ":completion:${curcontext}:" groups groups; then
   (( $+_cache_groups )) ||
-      if (( ${+commands[ypcat]} )) &&
-	  tmp=$(_call groups ypcat group.byname); then
+      if (( ${+commands[ypcat]} )) && tmp=$(ypcat group.byname); then
         : ${(A)_cache_groups:=${${(f)tmp}%%:*}} # If you use YP
       else
         : ${(A)_cache_groups:=${${(s: :)$(</etc/group)}%%:*}}
diff --git a/Completion/User/_mailboxes b/Completion/User/_mailboxes
index 784bc4e6e..369814526 100644
--- a/Completion/User/_mailboxes
+++ b/Completion/User/_mailboxes
@@ -63,6 +63,7 @@ _mailbox_cache () {
 
   setopt localoptions nullglob
 
+
   [[ -f ${~muttrc:-.} ]] &&
     _mutt_cache=( ${$(grep mailboxes ${~muttrc})[2,-1]} )
 
@@ -76,11 +77,11 @@ _mailbox_cache () {
     shift dirboxes
     if [[ -d "$i/cur" ]]; then
       _maildir_cache=( "${_maildir_cache[@]}" "$i" )
-    elif j=( $i/<1-> ) && [[ -n "$j" ]]; then
+    elif j=( "$i"/<1-> ) && [[ -n "$j" ]]; then
       _mh_cache=( "${_mh_cache[@]}" "$i" )
     else
       _mbox_cache=( "${_mbox_cache[@]}" "$i"/*(.) )
-      dirboxes=( $dirboxes $i/*(/) )
+      dirboxes=( $dirboxes "$i"/*(/) )
     fi
   done
 
diff --git a/Completion/X/.distfiles b/Completion/X/.distfiles
index 475bba785..42c69d888 100644
--- a/Completion/X/.distfiles
+++ b/Completion/X/.distfiles
@@ -1,7 +1,7 @@
 DISTFILES_SRC='
     .distfiles
-    _x_arguments _x_borderwidth _x_color _x_cursor _x_display _x_extension
-    _x_font _x_geometry _x_keysym _x_locale _x_modifier _x_name _x_resource
-    _x_selection_timeout _x_title _x_window _xdvi _xfig _xmodmap _xrdb
-    _xt_arguments _xt_session_id _xterm _xutils _xv
+    _x_arguments _x_borderwidth _x_color _x_colormapid _x_cursor _x_display
+    _x_extension _x_font _x_geometry _x_keysym _x_locale _x_modifier
+    _x_name _x_resource _x_selection_timeout _x_title _x_window _xdvi _xfig
+    _xmodmap _xrdb _xt_arguments _xt_session_id _xterm _xutils _xv _xwit
 '
diff --git a/Completion/X/_x_colormapid b/Completion/X/_x_colormapid
index 20e82fa44..4fe6aac42 100644
--- a/Completion/X/_x_colormapid
+++ b/Completion/X/_x_colormapid
@@ -2,7 +2,7 @@
 
 local expl list desc
 
-_wanted colormapids || return 1
+_wanted colormapids expl 'colormap id' || return 1
 
 list=(${(f)"$(xprop -root -f RGB_COLOR_MAP 32xcccccccxx ': $0\n'|awk -F'[ ():]' '/^[a-zA-Z_]+\(RGB_COLOR_MAP\)/ {print $5, "--", $1}')"})
 
@@ -12,4 +12,4 @@ else
   desc=()
 fi
 
-_loop colormapids expl 'colormap id' compadd "$@" "$desc[@]" - "${(@)list%% *}" 
+compadd "$expl[@]" "$@" "$desc[@]" - "${(@)list%% *}" 
diff --git a/Completion/X/_xwit b/Completion/X/_xwit
index 4a5242e18..5e14fec89 100644
--- a/Completion/X/_xwit
+++ b/Completion/X/_xwit
@@ -16,8 +16,8 @@ _xwit_guard () {
 
 _xwit_compopts () {
   local expl
-  _wanted options expl option compadd - ${(k)no[(R)*~0]} ||
-      _loop options expl option compadd - ${(k)no}
+  _description options expl option
+  compadd "$expl[@]" - ${(k)no[(R)*~0]} || compadd "$expl[@]" - ${(k)no}
 }
 
 _regex_arguments _xwit_parse \
diff --git a/Config/version.mk b/Config/version.mk
index e2100bf59..a7f855515 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-19
-VERSION_DATE='February 20, 2000'
+VERSION=3.1.6-dev-20
+VERSION_DATE='February 23, 2000'
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 0c46badc3..2c7d813d6 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -979,9 +979,8 @@ if the value contains the string tt(directory), then the tests will
 only be performed if only names of directories are completed.
 
 Note that names of directories ignored because of one of the tests
-will be ignored in the same way as the matches ignored because of the
-tt(ignored-patterns) style. I.e. by using the tt(_ignored) completer
-it is possible to complete these directories nonetheless.
+will be placed in the alternate set of completions so that they will
+be completed if there are no other possible completions.
 )
 item(tt(ignored-patterns))(
 This style is used with the tags used when adding matches and defines a
@@ -1284,6 +1283,26 @@ A style holding the service names of ports to complete. If this is
 not set by the user, the service names from `tt(/etc/services)' will
 be used.
 )
+item(tt(prefer-ignored))(
+This style is tested by the main completion function before calling a
+completer. The context name is formed in the same way as for the
+tt(matcher-list) style, i.e. it contains the name of the completer
+that will be called plus a hyphen and the number of the call to that
+completer.
+
+If the style is set to true and completion did not generate any normal 
+matches yet, but there are matches that were ignored because they
+matched one of the patterns given with the tt(fignore) array or the
+tt(ignored-patterns) style, these ignored matches are used immediatly
+and no other completer will be called.
+
+It is sometimes useful to set this style for the tt(correct) or
+tt(approximate) completer so that ignored matches are prefered over
+corrections.
+
+example(zstyle ':completion:*:complete-2:*' prefer-ignored yes
+zstyle ':completion:*:(correct|approximate)-1:*' prefer-ignored yes)
+)
 item(tt(prefix-hidden))(
 This is used when matches with a common prefix are added (e.g. option
 names). If it is `true', this prefix will not be shown in the list of
@@ -1311,8 +1330,11 @@ matches have no common prefix different from the word on the line or
 if there is such a common prefix, respectively. The sequence `tt(%c)'
 is replaced by the name of the completer function that generated the
 matches (without the leading underscore). Finally, `tt(%n)' is
-replaced by the number of matches generated
-and if the tt(list) style is set, `tt(%l)' is
+replaced by the number of matches generated, `tt(%a)' is replaced by
+an empty string if the matches are in the normal set (i.e. the one
+without file names with one of the suffixes from the
+tt(ignored-suffixes) style) and with `tt( -alt-)' if the matches are
+in the alternate set, and if the tt(list) style is set, `tt(%l)' is
 replaced by `tt(...)' if the list of matches is too long to fit on the
 screen and with an empty string otherwise. If the tt(list) style is
 `false', `tt(%l)' will always be removed.
@@ -1323,9 +1345,12 @@ all duplicate matches should be removed, rather than just consecutive
 duplicates.
 )
 item(tt(single-ignored))(
-This is used by the tt(_ignored) completer. It allows to specify what
-should be done if it can generate only one match, which is often a
-special case. If its value is tt(show), the single match will only be shown, 
+Using styles like tt(ignored-patterns) allows one to put some matches
+in the alternate set of matches which is only used if there are no
+`normal' matches. Having only one such normally ignored match is often 
+a special case because one probably doesn't want that match to be
+inserted immediatly. This style allows to configure what to do in such 
+a case. If its value is tt(show), the single match will only be shown, 
 not inserted. If the value is tt(menu), then the single match and the
 original string are both added as matches and menucompletion is
 started so that one can easily select either of them.
@@ -1388,34 +1413,6 @@ example(zstyle ':completion:*:expand:::' substitute '${NUMERIC:-1} != 1')
 substitution will be performed only if given an explicit numeric
 argument other than `tt(1)', as by typing `tt(ESC 2 TAB)'.
 )
-item(tt(tag-aliases))(
-This allows to give aliases for tags that are to be used whenever the
-tag this style is set for is used (see the tt(tag-order) style below
-for a description of tag aliases).
-
-The value is a list of strings of the same form used by the
-tt(tag-order) style: `var(tag)tt(:)var(alias)', optionally followed by 
-a second colon and a description.
-
-The effect of using this style is that the var(tag) is offered more
-than once, once for each alias. For example, together with the
-tt(ignored-patterns) style this allows to split the matches for the
-tag into different groups, as in:
-
-example(zstyle ':completion:*:options' tag-aliases \
-    'options:-long:long options' \
-    'options:-short:short options' \
-    'options:-single-letter:single letter options'
-
-zstyle ':completion:*:options-long' ignored-patterns '[-+](|-|[^-]*)'
-zstyle ':completion:*:options-short' ignored-patterns '--*' '[-+]?'
-zstyle ':completion:*:options-single-letter' ignored-patterns '???*')
-
-With the tt(group-names) style set, this makes options beginning with
-`tt(-)tt(-)', options beginning with a single `tt(-)' or `tt(+)' but
-containing multiple characters and single-letter options be displayed
-in separate groups with different descriptions.
-)
 item(tt(tag-order))(
 This provides a mechanism for sorting how the tags available in a
 particular context will be used.
@@ -1448,20 +1445,22 @@ to specify tag aliases instead of only tags. These are of the form
 by the completion function for the current context and var(alias) is a 
 name. For this, the completion function will generate matches in the
 same way as for the var(tag) but it will use the var(alias) in place
-of the tag in the context names used to look up styles. If the
-var(alias) starts with a hyphen, the var(tag) is prepended to the
-var(alias) to form the name used for lookup. This can be
+of the tag in the context names used to look up styles. This can be
 used to make the completion system try a certain tag more than once,
 supplying different style settings for each attempt. For example,
 
 example(zstyle ':completion:*:*:-command-:*' tag-order 'functions:-non-comp'
-zstyle ':completion:*:functions-non-comp' ignored-patterns '_*')
+zstyle '*:-non-comp' ignored-patterns '_*')
 
 Makes completion in command position first try only names of shell
 functions that don't match the pattern `tt(_*)'. If that generates no
 matches, the default of trying all the other things that can be
 completed in command position is used, including the names of all
-shell functions.
+shell functions. Note that the var(alias) used in this example
+`tt(-non-comp)' with the hyphen at the bginning is not in any way
+special to the completion system. But since no other tag starts with a 
+hyphen, using such a name allows to use a context pattern as short as
+the one in the second line without making it ambiguous.
 
 The var(alias) may optionally be followed by a second colon and a
 description. This description will then be used for the `tt(%d)' in
@@ -1471,53 +1470,6 @@ be quoted by preceding them with a backslash and a `tt(%d)' appearing
 in the description is replaced with the description given by the
 completion function.
 
-In each of the cases above, the tag may also be a pattern. In this
-case all of the offered tags matching this pattern will be used except 
-for those that are given explicitly in the same string. There are
-probably two main uses of this. One is the case where one wants to try
-one of the tags more than once, setting other styles differently for
-each try, but still wants to use all the other tags without having to
-bother to repeat them all. For example, to make completion of function
-names in command position first ignore all the completion functions
-starting with an underscore one could do:
-
-example(zstyle ':completion:*:*:-command-:*' tag-order \
-    'functions:-non-comp *' functions
-zstyle ':completion:*:functions-non-comp' ignored-patterns '_*')
-
-Here, the completion system will first try all tags offered, but will
-use the tag alias tt(functions-non-comp) when looking up styles for
-the function names completed. For this, the tt(ignored-patterns) style 
-is set to make functions starting with an underscore be not considered 
-as possible matches. If none of the generated matches match the string 
-on the line, the completion system will use the second value of the
-tt(tag-order) style and complete functions names again, but this time
-using so name tt(functions) to look up styles, so that the
-tt(ignored-patterns) style will not be used and all function names
-will be considered.
-
-The second interesting use of patterns is the case where one wants to
-try multiple match specifications one after another. The
-tt(atcher-list) style offers something similar, but it is tested very
-early in the completion system and hence can't be set for single
-commands or even more specific contexts. So, to make completion for
-the arguments of the command tt(foo) and only for this command first
-try normal completion with out any match specification and, if that
-generates no matches, try again with case-insensitive matching, one
-could do:
-
-example(zstyle ':completion:*:*:foo:*' tag-order '*' '*:-case'
-zstyle ':completion:*-case' matcher 'm:{a-z}={A-Z}')
-
-This will make the completion system first try all the tags offered
-when completing after tt(foo) and use the tags to do the lookup. If
-that generates no matches, the second value of tt(tag-order) is
-used. This will make all tags be tried again, but this time using the
-names of the tags with the tt(-case) appended to them for lookup of
-styles. I.e. in this second attempt, the value for the tt(matcher)
-style from the second call to tt(zstyle) in the example will be used
-to make completion case-insensitive.
-
 Strings in the value may also be of the form `var(func)tt(())'. In
 this case the function var(func) will be called which can then define
 in which order tags are to be used based on additional context
@@ -1589,6 +1541,10 @@ item(tt(users-hosts-ports))(
 Like tt(users-hosts) but used for commands like tt(telnet) and
 containing strings of the form `var(user)tt(@)var(host)tt(:)var(port)'.
 )
+item(tt(users-hosts-ports))(
+Like tt(users-hosts) but used for commands like tt(telnet) and
+containing strings of the form `var(user)tt(@)var(host)tt(:)var(port)'.
+)
 item(tt(verbose))(
 This is used in several contexts to decide if only a simple or a
 verbose list of matches should be generated. For example some commands 
@@ -1885,20 +1841,6 @@ tt(COMPLETE_IN_WORD) option is set. Because otherwise the cursor will
 be set after the word before the completion code is called and hence
 there will be no suffix.
 )
-findex(_ignored)
-item(tt(_ignored))(
-Using the tt(ignored-patterns) style it is possible to make some
-matches be ignored. This completer allows to complete these matches as 
-if no tt(ignored-patterns) style were set. Which completers are called 
-for this is determined in the same way as for the tt(_prefix)
-completer.
-
-Finally, tt(_ignored) uses the tt(single-ignored) style if only one
-match could be generated. It can be set to tt(show) to make that match 
-be only displayed, not inserted into the line or it can be set to
-tt(menu) to make the single match and the original string from the
-line be offered in a menucompletion.
-)
 findex(_menu)
 item(tt(_menu))(
 This completer is a simple example function implemented to show how
diff --git a/Doc/Zsh/compwid.yo b/Doc/Zsh/compwid.yo
index 86b7d6e31..f535b14dd 100644
--- a/Doc/Zsh/compwid.yo
+++ b/Doc/Zsh/compwid.yo
@@ -197,13 +197,16 @@ level.
 )
 item(tt(nmatches))(
 The number of matches generated and accepted by the completion code so
-far.
-)
-item(tt(ignored))(
-The number of words that were ignored because they matched one of the
-patterns given with the tt(-F) option to the tt(compadd) builtin
+far, excluding those matches that are only accepted by ignoring the
+tt(fignore) parameter and the tt(-a) option of the tt(compadd) builtin 
 command.
 )
+item(tt(alternate_nmatches))(
+Like tt(nmatches), but counts only matches in the alternate set. I.e. file
+names with one of the suffixes from the tt(fignore) array and matches
+put into the alternate set using the tt(-a) option of the tt(compadd)
+builtin command (see below) are not counted.
+)
 item(tt(restore))(
 This is set to tt(auto) before a function is entered, which forces the
 special parameters mentioned above (tt(words), tt(CURRENT), tt(PREFIX),
@@ -515,9 +518,23 @@ with any prefix specified by the tt(-p) option to form a complete filename
 for testing.  Hence it is only useful if combined with the tt(-f) flag, as
 the tests will not otherwise be performed.
 )
+item(tt(-a))(
+The completion code may build two sets of matches: the normal and the
+alternate set. Normally only the matches in the first set are used,
+but if this set is empty, the words from the alternate set are
+used. The completion code uses this mechanism, for example, to make
+filenames without one of the suffixes defined with the tt(fignore)
+shell parameter be preferred over filenames with one of these
+suffixes.
+
+With the tt(-a)-flag given, the var(words) are stored in the alternate
+set unless this flag is overridden by the tt(-F) option.
+)
 item(tt(-F) var(array))(
-Specifies an array containing patterns. Words matching one of these
-patterns are ignored, i.e. not considered to be possible matches.
+Specifies an array containing patterns.
+Words matching one of these patterns are stored in
+the alternate set of matches and words that match none of the patterns
+are stored in the normal set.
 
 The var(array) may be the name of an array parameter or a list of
 literal patterns enclosed in parentheses and quoted, as in `tt(-F "(*?.o
diff --git a/Etc/MACHINES b/Etc/MACHINES
index 34acaf453..d5f1be7ce 100644
--- a/Etc/MACHINES
+++ b/Etc/MACHINES
@@ -18,6 +18,10 @@ The format of entries is thus:
 Machines
 --------
 
+Apple/NeXT OpenStep 4.2 for i386.
+	Reported to work at least with gcc 2.8.1 and gawk 2.15 patchlevel
+	6, but not with the bundled cc 2.7.2.1 and awk.
+
 Cray: Unicos (C90 and T90)
 	Should build `out-of-the-box'.
 
@@ -66,7 +70,7 @@ IBM: AIX 3.2, 4.1
 	4.1, though native cc works. More information about this problem
 	would be appreciated.
 
-Linux: Linux (i386) [3.1.4]
+Linux: Linux (i[345]86,various Pentia,AMD K6/2)
 	Should build `out-of-the-box'.
 
 	If you are using an early minor version of libc 5, then a bug
@@ -80,6 +84,13 @@ Linux: Linux (i386) [3.1.4]
 	on Linux Alpha with egcs 1.0.3a and 1.1.1 using -O1 or greater,
 	the completion code is not correctly compiled.
 
+	Some versions of glibc2 have a conflict with <asm/resource.h>
+	which causes a redefinition warning on RLIM_INFINITY.  This
+	causes configure to decide that <sys/resource.h> is not present,
+	which can cause compilation errors in zsh's rlimit code.  The
+	best solution is to edit config.h after running configure and
+	#define HAS_SYS_RESOURCE_H.
+
 NetBSD: NetBSD 1.*
 	Should build `out-of-the-box'.
 
diff --git a/Functions/Prompts/.distfiles b/Functions/Prompts/.distfiles
index 1a4310aa8..67a71ae32 100644
--- a/Functions/Prompts/.distfiles
+++ b/Functions/Prompts/.distfiles
@@ -1,6 +1,6 @@
 DISTFILES_SRC='
     .distfiles
-    prompt_elite2_setup prompt_adam1_setup prompt_fade_setup
+    prompt_elite2_setup prompt_adam1_setup prompt_bart_setup prompt_fade_setup
     prompt_elite_setup prompt_redhat_setup prompt_adam2_setup
     prompt_fire_setup prompt_suse_setup prompt_bigfade_setup
     prompt_oliver_setup prompt_off_setup prompt_zefram_setup
diff --git a/Functions/Zle/incremental-complete-word b/Functions/Zle/incremental-complete-word
index f69af52d5..c01bc4f6b 100644
--- a/Functions/Zle/incremental-complete-word
+++ b/Functions/Zle/incremental-complete-word
@@ -17,7 +17,7 @@ incremental-complete-word() {
   unsetopt autolist menucomplete automenu # doesn't work well
 
   local key lbuf="$LBUFFER" rbuf="$RBUFFER" pmpt pstr word
-  local lastl lastr wid twid num post toolong
+  local lastl lastr wid twid num alt post toolong
   local curcontext="${curcontext}" stop brk
 
   [[ -z "$curcontext" ]] && curcontext=:::
@@ -42,6 +42,10 @@ incremental-complete-word() {
   RBUFFER="$rbuf"
   num=$_lastcomp[nmatches]
   if (( ! num )); then
+    num="${_lastcomp[alternate_nmatches]}"
+    alt=' -alt-'
+  fi
+  if (( ! num )); then
     word=''
     state='-no match-'
   elif [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
@@ -51,7 +55,7 @@ incremental-complete-word() {
     word="${_lastcomp[unambiguous]}"
     state=''
   fi
-  zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" \
+  zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" "a:$alt" \
                           "l:$toolong" "c:${_lastcomp[completer][2,-1]}"
   zle -R "$pstr"
   read -k key
@@ -84,6 +88,12 @@ incremental-complete-word() {
     RBUFFER="$lastr"
     num=$_lastcomp[nmatches]
     if (( ! num )); then
+      num="${_lastcomp[alternate_nmatches]}"
+      alt=' -alt-'
+    else
+      alt=''
+    fi
+    if (( ! num )); then
       word=''
       state='-no match-'
     elif [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
@@ -93,7 +103,7 @@ incremental-complete-word() {
       word="${_lastcomp[unambiguous]}"
       state=''
     fi
-    zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" \
+    zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" "a:$alt" \
                             "l:$toolong" "c:${_lastcomp[completer][2,-1]}"
     zle -R "$pstr"
     read -k key
diff --git a/Functions/Zle/predict-on b/Functions/Zle/predict-on
index c56198a55..de22c5170 100644
--- a/Functions/Zle/predict-on
+++ b/Functions/Zle/predict-on
@@ -131,7 +131,7 @@ predict-limit-list() {
   then
     compstate[list]=''
     compstate[force_list]=yes
-  elif zstyle -t ":completion:::predict::" list always
+  elif zstyle -t ":completion:predict::::" list always
   then
     compstate[force_list]=yes
   fi
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 3692a5224..63135c31b 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -165,7 +165,7 @@ get_pty(int *master, int *slave)
 
 #else /* ! __osf__ */
 
-#if defined(__SVR4) || defined(sinix)
+#if __SVR4
 
 #include <sys/stropts.h>
 
@@ -174,12 +174,11 @@ get_pty(int *master, int *slave)
 {
     int mfd, sfd;
     char *name;
-    int ret;
 
     if ((mfd = open("/dev/ptmx", O_RDWR)) < 0)
 	return 1;
 
-    if (grantpt(mfd) || unlockpt(mfd) || !(name = ptsname(mfd))) {
+    if (!(name = ptsname(mfd)) || grantpt(mfd) || unlockpt(mfd)) {
 	close(mfd);
 	return 1;
     }
@@ -187,31 +186,31 @@ get_pty(int *master, int *slave)
 	close(mfd);
 	return 1;
     }
-    if ((ret = ioctl(sfd, I_FIND, "ptem")) != 1)
-	if (ret == -1 || ioctl(sfd, I_PUSH, "ptem") == -1) {
-	    close(mfd);
-	    close(sfd);
-	    return 1;
-	}
-    if ((ret = ioctl(sfd, I_FIND, "ldterm")) != 1)
-	if (ret == -1 || ioctl(sfd, I_PUSH, "ldterm") == -1) {
-	    close(mfd);
-	    close(sfd);
-	    return 1;
-	}
-    if ((ret = ioctl(sfd, I_FIND, "ttcompat")) != 1)
-	if (ret == -1 || ioctl(sfd, I_PUSH, "ttcompat") == -1) {
-	    close(mfd);
-	    close(sfd);
-	    return 1;
-	}
+   if ((ret = ioctl(sfd, I_FIND, "ptem")) != 1)
+      if (ret == -1 || ioctl(sfd, I_PUSH, "ptem") == -1) {
+          close(mfd);
+          close(sfd);
+          return 1;
+      }
+   if ((ret = ioctl(sfd, I_FIND, "ldterm")) != 1)
+      if (ret == -1 || ioctl(sfd, I_PUSH, "ldterm") == -1) {
+          close(mfd);
+          close(sfd);
+          return 1;
+      }
+   if ((ret = ioctl(sfd, I_FIND, "ttcompat")) != 1)
+      if (ret == -1 || ioctl(sfd, I_PUSH, "ttcompat") == -1) {
+          close(mfd);
+          close(sfd);
+          return 1;
+      }
     *master = mfd;
     *slave = sfd;
 
     return 0;
 }
 
-#else /* ! (defined(__SVR4) || defined(sinix))  */
+#else /* ! (defined(__SVR4) || defined(sinix)) */
 
 static int
 get_pty(int *master, int *slave)
diff --git a/Src/Zle/comp.h b/Src/Zle/comp.h
index f513d4a5a..082fab912 100644
--- a/Src/Zle/comp.h
+++ b/Src/Zle/comp.h
@@ -229,9 +229,10 @@ struct menuinfo {
 
 #define CAF_QUOTE    1
 #define CAF_NOSORT   2
-#define CAF_MATCH    4
-#define CAF_UNIQCON  8
-#define CAF_UNIQALL 16
+#define CAF_ALT      4
+#define CAF_MATCH    8
+#define CAF_UNIQCON 16
+#define CAF_UNIQALL 32
 
 /* Data for compadd and addmatches() */
 
@@ -350,12 +351,12 @@ typedef void (*CLPrintFunc)(Cmgroup, Cmatch *, int, int, int, int,
 #define CP_OLDINS      (1 << CPN_OLDINS)
 #define CPN_VARED      20
 #define CP_VARED       (1 << CPN_VARED)
-#define CPN_LISTLINES  21
+#define CPN_ANMATCHES  21
+#define CP_ANMATCHES   (1 << CPN_ANMATCHES)
+#define CPN_LISTLINES  22
 #define CP_LISTLINES   (1 << CPN_LISTLINES)
-#define CPN_QUOTES     22
+#define CPN_QUOTES     23
 #define CP_QUOTES      (1 << CPN_QUOTES)
-#define CPN_IGNORED    23
-#define CP_IGNORED     (1 << CPN_IGNORED)
 
 #define CP_KEYPARAMS   24
 #define CP_ALLKEYS     ((unsigned int) 0xffffff)
diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c
index a7752967c..48189ab31 100644
--- a/Src/Zle/compcore.c
+++ b/Src/Zle/compcore.c
@@ -307,7 +307,6 @@ do_completion(Hookdef dummy, Compldat dat)
     hasmatched = hasunmatched = 0;
     minmlen = 1000000;
     maxmlen = -1;
-    compignored = 0;
 
     /* Make sure we have the completion list and compctl. */
     if (makecomplist(s, incmd, lst)) {
@@ -1464,7 +1463,7 @@ addmatches(Cadata dat, char **argv)
     int lpl, lsl, pl, sl, bcp = 0, bcs = 0, bpadd = 0, bsadd = 0;
     int ppl = 0, psl = 0;
     int llpl = 0, llsl = 0, nm = mnum, gflags = 0, ohp = haspattern;
-    int isexact, doadd, ois = instring, oib = inbackt;
+    int oisalt = 0, isalt, isexact, doadd, ois = instring, oib = inbackt;
     Cline lc = NULL, pline = NULL, sline = NULL;
     Cmatch cm;
     struct cmlist mst;
@@ -1744,6 +1743,7 @@ addmatches(Cadata dat, char **argv)
 	    } else
 		dat->prpre = dupstring(dat->prpre);
 	    /* Select the set of matches. */
+	    oisalt = (dat->aflags & CAF_ALT);
 
 	    if (dat->remf) {
 		dat->remf = dupstring(dat->remf);
@@ -1761,7 +1761,7 @@ addmatches(Cadata dat, char **argv)
 	/* Walk through the matches given. */
 	obpl = bpl;
 	obsl = bsl;
-	if (aign || pign) {
+	if (!oisalt && (aign || pign)) {
 	    int max = 0;
 	    char **ap = argv;
 
@@ -1780,8 +1780,9 @@ addmatches(Cadata dat, char **argv)
 		    disp = NULL;
 	    }
 	    sl = strlen(s);
-	    if (aign || pign) {
-		int il = ppl + sl + psl, addit = 1;
+	    isalt = oisalt;
+	    if (!isalt && (aign || pign)) {
+		int il = ppl + sl + psl;
 
 		if (ppl)
 		    memcpy(ibuf, dat->ppre, ppl);
@@ -1795,19 +1796,15 @@ addmatches(Cadata dat, char **argv)
 		    char **pt = aign;
 		    int filell;
 
-		    for (; addit && *pt; pt++)
-			addit = !((filell = strlen(*pt)) < il &&
-				  !strcmp(*pt, ibuf + il - filell));
+		    for (isalt = 0; !isalt && *pt; pt++)
+			isalt = ((filell = strlen(*pt)) < il &&
+				 !strcmp(*pt, ibuf + il - filell));
 		}
-		if (addit && pign) {
+		if (!isalt && pign) {
 		    Patprog *pt = pign;
 
-		    for (; addit && *pt; pt++)
-			addit = !pattry(*pt, ibuf);
-		}
-		if (!addit) {
-		    compignored++;
-		    continue;
+		    for (isalt = 0; !isalt && *pt; pt++)
+			isalt = pattry(*pt, ibuf);
 		}
 	    }
 	    if (!(dat->aflags & CAF_MATCH)) {
@@ -1835,7 +1832,7 @@ addmatches(Cadata dat, char **argv)
 		for (bp = obsl; bp; bp = bp->next)
 		    bp->curpos += bsadd;
 
-		if ((cm = add_match_data(0, ms, lc, dat->ipre, NULL,
+		if ((cm = add_match_data(isalt, ms, lc, dat->ipre, NULL,
 					 dat->isuf, dat->pre, dat->prpre,
 					 dat->ppre, pline,
 					 dat->psuf, sline,
@@ -2178,8 +2175,6 @@ add_match_data(int alt, char *str, Cline line,
 
     newmatches = 1;
     mgroup->new = 1;
-    if (alt)
-	compignored++;
 
     if (!complastprompt || !*complastprompt)
 	dolastprompt = 0;
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index c3a09c3dd..f625c34cd 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -36,8 +36,7 @@
 mod_export zlong compcurrent;
 /**/
 zlong complistmax,
-      complistlines,
-      compignored;
+      complistlines;
 
 /**/
 mod_export
@@ -477,6 +476,9 @@ bin_compadd(char *name, char **argv, char *ops, int func)
 		sp = &(dat.prpre);
 		e = "string expected after -%c";
 		break;
+	    case 'a':
+		dat.aflags |= CAF_ALT;
+		break;
 	    case 'M':
 		sp = &m;
 		e = "matching specification expected after -%c";
@@ -910,9 +912,9 @@ static struct compparam compkparams[] = {
     { "old_list", PM_SCALAR, VAL(compoldlist), NULL, NULL },
     { "old_insert", PM_SCALAR, VAL(compoldins), NULL, NULL },
     { "vared", PM_SCALAR, VAL(compvared), NULL, NULL },
+    { "alternate_nmatches", PM_INTEGER | PM_READONLY, NULL, NULL, VAL(get_anmatches) },
     { "list_lines", PM_INTEGER | PM_READONLY, NULL, NULL, VAL(get_listlines) },
     { "all_quotes", PM_SCALAR | PM_READONLY, VAL(compqstack), NULL, NULL },
-    { "ignored", PM_INTEGER | PM_READONLY, VAL(compignored), NULL, NULL },
     { NULL, 0, NULL, NULL, NULL }
 };
 
@@ -1023,7 +1025,14 @@ set_compstate(Param pm, HashTable ht)
 static zlong
 get_nmatches(Param pm)
 {
-    return (permmatches(0) ? 0 : nmatches);
+    return num_matches(1);
+}
+
+/**/
+static zlong
+get_anmatches(Param pm)
+{
+    return num_matches(0);
 }
 
 /**/
diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c
index 0d93b8727..c8aa96f22 100644
--- a/Src/Zle/compresult.c
+++ b/Src/Zle/compresult.c
@@ -1102,6 +1102,22 @@ do_ambig_menu(void)
     minfo.cur = mc;
 }
 
+/* Return the real number of matches. */
+
+/**/
+zlong
+num_matches(int normal)
+{
+    int alt;
+
+    alt = permmatches(0);
+
+    if (normal)
+	return (alt ? 0 : nmatches);
+    else
+	return (alt ? nmatches : 0);
+}
+
 /* Return the number of screen lines needed for the list. */
 
 /**/
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 2b5ece54d..088d89931 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -2363,7 +2363,7 @@ bin_comptags(char *nam, char **args, char *ops, int func)
 		    return 1;
 		}
 		s->ptr = q + 1;
-		setsparam(args[2], ztrdup(*v == '-' ? dyncat(args[1], v) : v));
+		setsparam(args[2], ztrdup(v));
 		return 0;
 	    }
 	    return 1;
diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index b43bfc028..75da73efb 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -333,7 +333,7 @@ zrefresh(void)
 	tsetcap(TCUNDERLINEEND, 0);
 
         if (!clearflag) {
-            if (tccan(TCCLEAREOD) && isset(ALWAYSLASTPROMPT))
+            if (tccan(TCCLEAREOD))
                 tcout(TCCLEAREOD);
             else
                 cleareol = 1;   /* request: clear to end of line */
diff --git a/Src/text.c b/Src/text.c
index c148423b8..32fcbf35b 100644
--- a/Src/text.c
+++ b/Src/text.c
@@ -122,7 +122,8 @@ getpermtext(Eprog prog, Wordcode c)
     tlim = tbuf + tsiz;
     tindent = 1;
     tjob = 0;
-    gettext2(&s);
+    if (prog->len)
+	gettext2(&s);
     *tptr = '\0';
     untokenize(tbuf);
     return tbuf;
@@ -194,9 +195,6 @@ struct tstack {
 	struct {
 	    int par;
 	} _cond;
-	struct {
-	    Wordcode end;
-	} _subsh;
     } u;
 };
 
@@ -332,10 +330,8 @@ gettext2(Estate state)
 	    if (!s) {
 		taddstr("( ");
 		tindent++;
-		n = tpush(code, 1);
-		n->u._subsh.end = state->pc + WC_SUBSH_SKIP(code);
+		tpush(code, 1);
 	    } else {
-		state->pc = s->u._subsh.end;
 		tindent--;
 		taddstr(" )");
 		stack = 1;
@@ -345,10 +341,8 @@ gettext2(Estate state)
 	    if (!s) {
 		taddstr("{ ");
 		tindent++;
-		n = tpush(code, 1);
-		n->u._subsh.end = state->pc + WC_CURSH_SKIP(code);
+		tpush(code, 1);
 	    } else {
-		state->pc = s->u._subsh.end;
 		tindent--;
 		taddstr(" }");
 		stack = 1;
diff --git a/Test/.distfiles b/Test/.distfiles
index e1f135037..e2d2f9abe 100644
--- a/Test/.distfiles
+++ b/Test/.distfiles
@@ -3,5 +3,6 @@ DISTFILES_SRC='
     ztst.zsh comptest
     01grammar.ztst 02alias.ztst 03quoting.ztst 04redirect.ztst
     05command.ztst 06arith.ztst 07cond.ztst 08traps.ztst 09funcdef.ztst
-    10prompt.ztst 50cd.ztst 51xtrace.ztst 52zregexparse.ztst 53completion.ztst
+    10prompt.ztst 11glob.ztst 50cd.ztst 51xtrace.ztst 52zregexparse.ztst
+    53completion.ztst
 '