about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog166
-rw-r--r--Completion/Base/.distfiles4
-rw-r--r--Completion/Core/.distfiles2
-rw-r--r--Completion/Debian/.distfiles5
-rw-r--r--Completion/Linux/.distfiles5
-rw-r--r--Completion/Linux/_rpm2
-rw-r--r--Completion/User/.distfiles11
-rw-r--r--Completion/User/_hosts2
-rw-r--r--Completion/User/_perldoc2
-rw-r--r--Completion/X/.distfiles6
-rw-r--r--Config/version.mk4
-rw-r--r--Doc/Zsh/compsys.yo24
-rw-r--r--Doc/Zsh/expn.yo17
-rw-r--r--Doc/ztexi.yo2
-rw-r--r--Functions/Misc/.distfiles2
-rw-r--r--INSTALL6
-rw-r--r--Src/Modules/mapfile.c3
-rw-r--r--Src/Modules/parameter.c13
-rw-r--r--Src/Zle/zle_thingy.c8
-rw-r--r--Src/Zle/zle_tricky.c4
-rw-r--r--Src/subst.c122
-rw-r--r--configure.in2
22 files changed, 237 insertions, 175 deletions
diff --git a/ChangeLog b/ChangeLog
index e4a1827c3..b02b24993 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,169 @@
+1999-09-06  Peter Stephenson  <pws@ibmth.df.unipi.it>
+
+	* pws: Config/version.mk: 3.1.6-pws-3
+
+	* pws: 7651: Doc/Zsh/options.yo: document HIST_FIND_NO_DUPS.
+
+	* Sven: 7650: Doc/Zsh/compsys.yo, Completion/Base/_arguments,
+	  Completion/Core/_display, Completion/Core/compinit,
+	  Completion/Linux/_rpm, Completion/User/_urls,
+	  Completion/X/_x_color, Etc/completion-style-guide:
+	  urls_dir -> urls_path, colors_path allow paths for URLs and X
+	  colours; funcall; _arguments changes: options assoc, states
+	  available using '->name', option descriptions for mutually
+	  incompatible options, descriptions of individual options,
+	  option_prefix allows ~command; _display for compadd -y;
+	  new _rpm; style guide additions.
+
+	* pws: 7649: Src/pattern.c: bug with excluding multiple
+	  directories with ~ in 7611, 7626.
+
+	* Adam Spiers: 7647: Completion/User/_perl_basepods,
+	  Completion/User/_perl_builtin_funcs,
+	  Completion/User/_perl_modules, Completion/User/_perldoc:
+	  completion for perldoc.
+
+	* Tanaka Akira: 7641, 7646: Completion/Debian/_apt-get,
+	  Completion/Debian/_deb_packages: handle different apt-get
+	  keywords.
+
+1999-09-03  Peter Stephenson  <pws@ibmth.df.unipi.it>
+
+	* pws: 7639: Doc/Zsh/expn.yo, Src/glob.c: remember that
+	  (foo/)# is a special case for file globbing; fix bug that
+	  that pattern generated a null string.
+
+	* pws: 7637: Doc/Zsh/expn.yo: clarify some glob descriptions
+	  including change that / inside parentheses is error (rather than
+	  just screwing up pattern) for file globbing.
+
+	* Bart: zsh-users/2567: Doc/Zsh/options.yo: new improved
+	  GLOB_COMPLETE description.
+
+	* pws: 7636: Doc/Zsh/builtins.yo, Doc/Zsh/params.yo,
+	  Src/builtin.c, Src/zsh.h, Src/Modules/mapfile.c,
+	  Src/Modules/parameter.c: typeset -h allows locals to hide
+	  specials; turned on automatically for specials in mapfile and
+	  parameter modules.
+
+	* Sven: 7635: Completion/User/_urls: change configuration key to
+	  urls_dir.
+
+	* Tanaka Akira: 7634: Completion/Debian/_apt-get,
+	  Completion/Debian/_deb_packages: completion for apt-get.
+
+	* Tanaka Akira: 7633: Completion/User/_lynx,
+	  Completion/User/_urls: completion for lynx and general URL
+	  completion.	
+
+1999-09-02  Peter Stephenson  <pws@ibmth.df.unipi.it>
+
+	* pws: 7632: Doc/Zsh/zftpsys.yo, Functions/Zftp/zfautocheck,
+	  Functions/Zftp/zfinit, Functions/Zftp/zfrglob,
+	  Functions/Zftp/zftp_progress: bar-style progress meter, zfconfig
+	  associative array for configuration.
+
+	* Sven: 7631: Completion/User/_pbm: comment about overriding
+	  definitions.
+
+	* Sven: 7630: Src/zle_tricky.c: when using a matcher spec
+	  generating matches with missing characters, position on last set
+	  of missing characters instead of first.
+
+	* Sven: 7628: Src/params.c, Src/Modules/parameter.c,
+	  Completion/Core/_parameters, Completion/Core/_path_files:
+	  parameters gives `undefined' message; _parameters doesn't
+	  load undefined parameters; do partial path expansion after
+	  parameters.
+
+	* pws: 7627: Src/params.c: don't autoload parameter just to
+	  unset it (replaces 7616).
+
+	* Sven: 7625: Completion/Base/_arguments: expansion fix.
+
+	* Tanaka Akira: 7623: Completion/X/_xv: complete .jpg and .png
+	  files.
+
+	* Bart: 7618: Config/installfns.sh, Config/uninstallfns.sh:
+	  space required in $sdir substitution.
+
+	* Bart: 7617: Src/signals.c: set err to -1.
+
+1999-09-01  Peter Stephenson  <pws@ibmth.df.unipi.it>
+
+	* pws: 7613: Completion/User/_gv: typos
+
+	* pws: 7611, 7626: Src/pattern.c, Src/parse.c, Doc/Zsh/expn.yo:
+	  strip parentheses from case label with open and close
+	  parentheses; use unions for pattern alignment, optimize lowest
+	  level character reading routine, optimize ...*string pattern,
+	  optimize search for characters terminating processing, document
+	  some more existing pattern features.
+	
+	* Sven: 7607: Completion/Base/_arguments: behaviour after a
+	  non-option when using `*::'.
+
+	* Sven: 7605: Src/exec.c, Src/jobs.c: use killpg instead of
+	  altering process group when leader exits, fix fg test to use
+	  killpg.
+
+	* Sven: 7598: Src/Zle/zle_tricky.c: REC_EXACT behaviour.
+
+	* Sven: 7596, 7601: Completion/Base/_arguments: interaction of option
+	  arguments with default.
+
+	* pws: 7591: Src/utils.c: cap_free should take caps (not pointer
+	  to it) as arg.
+
+	* Bart: 7584: Src/jobs.c, Src/signals.c, Src/system.h: handle
+	  broken ESRCH by redefining ESRCH to EINVAL.
+
+	* Tanaka Akira: 7580: Completion/Cvs/_cvs,
+	  Completion/Cvs/_cvs_diff, Completion/Cvs/_cvs?history_x:
+	  arguments for options; cvs diff description.
+
+	* Sven: 7574, 7577, 7597: Src/subst.c, Doc/Zsh/expn.yo: modify
+	  7539 so that the % flag just does % expansion, while %% does
+	  full prompt expansion.
+	
+	* Sven: 7573: Src/signals.c, Src/exec.c, Src/utils.c: fix return
+	  value of killjb(); pipelines which lose their leader get a new
+	  one.
+
+1999-08-31  Peter Stephenson  <pws@ibmth.df.unipi.it>
+
+	* Will Day: 7362: Src/Makefile.in, Src/hist.c, Src/jobs.c,
+	  Src/signals.c, Src/system.h, acconfig.h: support for BeOS: test
+	  more capabilities.  This was present in 6-pws-1, but without
+	  a Changelog entry.
+
+	* Sven: -7540: withdrawn, use ${${${(M)name#pattern}:+then}:-else}.
+	
+	* Tanaka Akira: 7436: Src/exec.c: exec last command in sequence
+	  properly; don't increment SHLVL when exec'ing.
+
+	* Sven: 7564: Completion/X/_xterm, Completion/Pbmplus/_pgmtoppm,
+	  Completion/Pbmplus/_pnmalias, Completion/Pbmplus/_pnmmargin,
+	  Completion/Pbmplus/_ppmchange, Completion/Pbmplus/_ppmmake,
+	  Completion/Pbmplus/_ppmtoacad, Completion/User/_gs,
+	  Completion/X/_xdvi, Completion/X/_xfig, Completion/X/_xsetroot,
+	  Completion/X/_xt_arguments, Completion/X/_xterm,
+	  Completion/X/_xv: change some names.
+	
+	* Bart: 7562: corresponding fix for Config/uninstallfns.sh
+
+	* Tanaka Akira: 7561: Config/installfns.sh: administrative files
+	  from Functions and Completion were installed by mistake.
+
+	* Bart: 7414: Doc/ztexi.yo: @'@' breaks texinfo; use '@:'.
+
+	* Bart: 7557: Src/Makefile.in: typo adding $(DESTDIR) patch by
+	  hand.  (Also from Ollivier Robert, 7558, and Oliver Kiddle).
+
 1999-08-30  Peter Stephenson  <pws@ibmth.df.unipi.it>
 
+	* pws: Config/version.mk: 3.1.6-pws-2 made available.
+	
 	* Tanaka Akira: 7551: Doc/Zsh/expn.yo: mismatched parenthesis.
 
 	* Sven: 7549: Src/hist.c: shell wouldn't exit if writing history
@@ -238,7 +402,7 @@
 	* Sven: 7373: Src/Zle/comp.h, Src/Zle/zle_tricky.c,
 	  Completion/Base/_brace_parameter:  support nested parameter
 	  expansion type of deal.
-
+	
 1999-08-04  Peter Stephenson  <pws@ibmth.df.unipi.it>
 
 	* Sven: 7355: Src/Zle/compctl.c, Src/Zle/zle_tricky.c: make
diff --git a/Completion/Base/.distfiles b/Completion/Base/.distfiles
index a2657a48d..13e60b400 100644
--- a/Completion/Base/.distfiles
+++ b/Completion/Base/.distfiles
@@ -1,7 +1,7 @@
 DISTFILES_SRC='
     .distfiles 
-    _arguments _brace_parameter _command_names _complete_opts
+    _arguments _brace_parameter _command_names
     _condition _default _equal _first
     _math _parameter _precommand _redirect _subscript
-    _tilde _vars 
+    _tilde _values _vars 
 '
diff --git a/Completion/Core/.distfiles b/Completion/Core/.distfiles
index 63592dfaf..8c69871d7 100644
--- a/Completion/Core/.distfiles
+++ b/Completion/Core/.distfiles
@@ -1,6 +1,6 @@
 DISTFILES_SRC='
     .distfiles
-    _approximate _compalso _complete _correct _description _expand
+    _approximate _compalso _complete _correct _description _display _expand
     _files _list _main_complete _match _menu _multi_parts
     _message _normal _oldlist _options _parameters _path_files
     _sep_parts _set_options _unset_options
diff --git a/Completion/Debian/.distfiles b/Completion/Debian/.distfiles
new file mode 100644
index 000000000..b2064b60c
--- /dev/null
+++ b/Completion/Debian/.distfiles
@@ -0,0 +1,5 @@
+DISTFILES_SRC='
+    .distfiles
+    _apt-get _deb_packages
+'
+
diff --git a/Completion/Linux/.distfiles b/Completion/Linux/.distfiles
new file mode 100644
index 000000000..e99912a5c
--- /dev/null
+++ b/Completion/Linux/.distfiles
@@ -0,0 +1,5 @@
+DISTFILES_SRC='
+    .distfiles
+    _rpm
+'
+
diff --git a/Completion/Linux/_rpm b/Completion/Linux/_rpm
index 7fdc80ab0..e90402a75 100644
--- a/Completion/Linux/_rpm
+++ b/Completion/Linux/_rpm
@@ -3,7 +3,7 @@
 # This uses `_arguments' in a state-machine kind of way. These states
 # have names and before executing the default action for such a state
 # we try to call a function with the name `_rpm_<state>'. If such a
-# function exists, we return with it's return status immediatly. This
+# function exists, we return with its return status immediately. This
 # allows users to override the default completions by simply defining
 # these functions.
 # The states (and possible values for the `<state>' above) are:
diff --git a/Completion/User/.distfiles b/Completion/User/.distfiles
index f2b0f520f..caf25f120 100644
--- a/Completion/User/.distfiles
+++ b/Completion/User/.distfiles
@@ -1,8 +1,9 @@
 DISTFILES_SRC='
     .distfiles
-    _a2ps _bunzip2 _bzip2 _chown _colors _compress _configure _cursors _cvs
-    _dd _dir_list _dvi _exec_funcs _find _gdb _gprof _groups _gs _gs_name
-    _gunzip _gv _gzip _hosts _make _man _mh _patch _pbm _pdf _ps _pspdf
-    _rcs _rlogin _sh _strip _stty _su _tar _tar_archive _tex _uncompress
-    _use_lo _users _xargs
+    _a2ps _bunzip2 _bzip2 _chown _compress _configure _dd _dir_list _dvi
+    _exec_funcs _find _gdb _gprof _groups _gs _gs_name _gunzip _gv _gzip
+    _hosts _lynx _make _man _mh _nslookup _patch _pbm _pdf _perl_basepods
+    _perl_builtin_funcs _perl_modules _perldoc _ps _pspdf _rcs _rlogin _sh
+    _strip _stty _su _tar _tar_archive _tex _uncompress _urls _use_lo
+    _users _xargs
 '
diff --git a/Completion/User/_hosts b/Completion/User/_hosts
index a159a9291..6b2f350aa 100644
--- a/Completion/User/_hosts
+++ b/Completion/User/_hosts
@@ -1,4 +1,4 @@
-#compdef ftp ncftp ping rwho rup xping traceroute telnet
+#compdef ftp ncftp ping rwho rup xping traceroute nslookup telnet
 
 local expl
 
diff --git a/Completion/User/_perldoc b/Completion/User/_perldoc
index cd5383a45..d15650448 100644
--- a/Completion/User/_perldoc
+++ b/Completion/User/_perldoc
@@ -15,9 +15,9 @@ if [[ $CURRENT -eq 3 && $words[2] == '-f' ]]; then
   _perl_builtin_funcs
 elif [[ $CURRENT -eq 3 && $words[2] == '-q' ]]; then
   zle -R "I can't read your mind!"
+  return 1
 else
   _perl_modules
   _perl_basepods
   _path_files -/ -g '*.(pod|pm)'
 fi
-
diff --git a/Completion/X/.distfiles b/Completion/X/.distfiles
index dd427af1c..10cebc77c 100644
--- a/Completion/X/.distfiles
+++ b/Completion/X/.distfiles
@@ -1,6 +1,6 @@
 DISTFILES_SRC='
     .distfiles
-    _x_borderwidth _x_display _x_font _x_geometry _x_locale _x_name
-    _x_options _x_resource _x_selection_timeout _x_title _xdvi _xfig
-    _xsetroot _xt_arguments _xt_session_id _xterm _xv
+    _x_borderwidth _x_color _x_cursor _x_display _x_font _x_geometry
+    _x_locale _x_name _x_arguments _x_resource _x_selection_timeout
+    _x_title _xdvi _xfig _xsetroot _xt_arguments _xt_session_id _xterm _xv
 '
diff --git a/Config/version.mk b/Config/version.mk
index 7c4751380..3bdd89dc0 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-pws-2
-VERSION_DATE='August 30, 1999'
+VERSION=3.1.6-pws-3
+VERSION_DATE='September 6, 1999'
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 492128bfb..8f235710b 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -996,10 +996,10 @@ argument), options are considered to be one-character options and the
 strings from the line may contain more than one such option letter.
 
 The function can also be made to automatically complete long options
-for commands that support the `tt(-)tt(-help)' option as, for example,
-most of the GNU commands do. For this, the string `tt(-)tt(-)' must be
+for commands that support the `tt(--help)' option as, for example,
+most of the GNU commands do. For this, the string `tt(--)' must be
 given as one argument and if it is, the command from the line is
-invoked with the `tt(-)tt(-help)' option and its output is parsed to find
+invoked with the `tt(--help)' option and its output is parsed to find
 possible option names. Note that this means that you should be careful
 to make sure that this feature is not used for a command that does not
 support this option.
@@ -1007,13 +1007,13 @@ support this option.
 For options that get an argument after a `tt(=)', the function also tries
 to automatically find out what should be completed as the argument.
 The possible completions for option-arguments can be described with
-the arguments after the `tt(-)tt(-)' (which are not used as described
+the arguments after the `tt(--)' (which are not used as described
 above). Each argument contains one description of the form
 `var(pattern)tt(:)var(message)tt(:)var(action)'. The var(message) and
 the var(action) have the same format as for the normal option
 descriptions described above. The var(action) will be executed to
 complete arguments of options whose description in the output of the
-command from the line with the `tt(-)tt(-help)' option matches the
+command from the line with the `tt(--help)' option matches the
 var(pattern). For example:
 
 example(_arguments -- '*\*'     '(yes no)' \ 
@@ -1035,17 +1035,17 @@ detect this, the colon before the var(message) can be doubled to tell
 it about this as described for the normal option descriptions above.
 
 The option `tt(-i) var(patterns)' (which must be given after the
-`tt(-)tt(-)') can be used to give patterns for options which should not be
+`tt(--)') can be used to give patterns for options which should not be
 completed. The patterns can be given as the name of an array parameter
 or as a literal list in parentheses. E.g. `tt(-i
-"LPAR()-)tt(-(en|dis)able-FEATURE*RPAR()")' will make the options
-`tt(-)tt(-enable-FEATURE)' and `tt(-)tt(-disable-FEATURE)' be ignored. The
-option `tt(-s) var(pairs)' (again, after the `tt(-)tt(-)') can be used to
+"(--(en|dis)able-FEATURE*)")' will make the options
+`tt(--enable-FEATURE)' and `tt(--disable-FEATURE)' be ignored. The
+option `tt(-s) var(pairs)' (again, after the `tt(--)') can be used to
 describe option aliases. Each var(pair) consists of a pattern and a
 replacement. E.g. some tt(configure)-scripts describe options only as
-`tt(-)tt(-enable-foo)', but also accept `tt(disable-foo)'. To allow
-completion of the second form, one would use `tt(-s "LPAR()#-)tt(-enable-
--)tt(-disable-RPAR()")'.
+`tt(--enable-foo)', but also accept `tt(disable-foo)'. To allow
+completion of the second form, one would use `tt(-s "(#--enable-
+--disable-)")'.
 
 Finally, this function uses the configuration key tt(option_prefix). If
 it is set to a non-empty string, option names are added as possible
diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
index b548770a2..323ea7480 100644
--- a/Doc/Zsh/expn.yo
+++ b/Doc/Zsh/expn.yo
@@ -447,21 +447,6 @@ match for tt(t*e) is substituted and the result is `tt(spy star)',
 while in the second case, the shortest matches are taken and the
 result is `tt(spy spy lispy star)'.
 )
-xitem(tt(${)var(name)tt(^)var(pattern)tt(^)var(then)tt(^)var(else)tt(}))
-item(tt(${)var(name)tt(^^)var(pattern)tt(^)var(then)tt(^)var(else)tt(}))(
-If the expansion of var(name) matches the var(pattern), the var(then)
-string is substituted, otherwise the var(else) string is
-substituted. In the second form the var(pattern) is taken to be
-negated (even if the tt(EXTENDED_GLOB) option is not set). The
-var(else) string with the preceding `tt(^)' may be omitted in which
-case the expansion behaves as if var(name) were unset (or, if
-var(name) is an array, as if the element compared did not exist). In
-the var(pattern) and the var(then) string a `tt(^)' may be included by 
-preceding it with two backslashes. Finally, the var(then) and
-var(else) string may consist of only a dot to make it expand to the
-original string. To make them expand to only a dot, the string
-`tt(\.)' has to be used.
-)
 item(tt(${#)var(spec)tt(}))(
 If var(spec) is one of the above substitutions, substitute
 the length in characters of the result instead of
@@ -1113,7 +1098,7 @@ to have a `tt(/)' within a group (this only applies for patterns used in
 filename generation).  There is one exception:  a group of the form
 tt(LPAR())var(pat)tt(/RPAR()#) appearing as a complete path segment can
 match a sequence of directories.  For example, tt(foo/(a*/)#bar) matches
-tt(foo/bar), tt(foo/any/bar), tt(foo/any/anyother/bar), and so on).
+tt(foo/bar), tt(foo/any/bar), tt(foo/any/anyother/bar), and so on.
 )
 item(var(x)tt(|)var(y))(
 Matches either var(x) or var(y).
diff --git a/Doc/ztexi.yo b/Doc/ztexi.yo
index 96985539d..33535abc4 100644
--- a/Doc/ztexi.yo
+++ b/Doc/ztexi.yo
@@ -55,7 +55,7 @@ def(texinfo)(2)(\
   NOTRANS(@c %**end of header)NL()\
   NL()\
   NOTRANS(@ifinfo)NL()\
-  NOTRANS(@set dsq @'@')NL()\
+  NOTRANS(@set dsq '@:')NL()\
   NOTRANS(@end ifinfo)NL()\
   NOTRANS(@iftex)NL()\
   NOTRANS(@set dsq '{}')NL()\
diff --git a/Functions/Misc/.distfiles b/Functions/Misc/.distfiles
index eab3626b6..6e481e916 100644
--- a/Functions/Misc/.distfiles
+++ b/Functions/Misc/.distfiles
@@ -1,6 +1,6 @@
 DISTFILES_SRC='
     .distfiles
     acx allopt cat cdmatch cdmatch2 checkmail cx harden mere multicomp
-    proto pushd randline run-help yp yu zed zless zls
+    nslookup proto pushd randline run-help yp yu zed zless zls
 '
 
diff --git a/INSTALL b/INSTALL
index 5c9ecae06..8bdf86725 100644
--- a/INSTALL
+++ b/INSTALL
@@ -253,7 +253,7 @@ FUNCTIONS_INSTALL, either when running configure (e.g.
 Completion or Functions subdirectories.  By default, all the functions for
 the Completion system will be installed (see the zshcompsys manual page),
 plus those provide functions for the line editor, i.e.
-  FUNCTIONS_INSTALL='Core/* Base/* Builtins/* User/* Commands/* Zle/*'
+  FUNCTIONS_INSTALL='Core/* Base/* Builtins/* User/* Commands/* Cvs/* Debian/*  Linux/* X/* Zle/*'
 and if the --enable-dynamic option was given, the functions in
 Functions/Zftp, which require the zftp module to be available (see the
 zshzftpsys manual page), will be included as well.  Note, however, that
@@ -262,8 +262,8 @@ system-specific.
 
 There are also some miscellaneous functions with documentation in comments;
 the complete set of functions can be installed with
-  FUNCTIONS_INSTALL='Core/* Base/* Builtins/* User/* Commands/* \
-  Misc/* Zftp/* Zle/*'
+  FUNCTIONS_INSTALL='Core/* Base/* Builtins/* User/* Commands/* Cvs/* \
+  Debian/* Linux/* X/* Misc/* Zftp/* Zle/*'
 Note you should set this by hand to include `Zftp/*' if you have zftp
 compiled into a statically linked shell.
 
diff --git a/Src/Modules/mapfile.c b/Src/Modules/mapfile.c
index cd9c0120d..431c488e6 100644
--- a/Src/Modules/mapfile.c
+++ b/Src/Modules/mapfile.c
@@ -83,8 +83,7 @@ createmapfilehash()
     Param pm;
     HashTable ht;
 
-    if ((pm = (Param) gethashnode2(paramtab, mapfile_nam)))
-	unsetparam_pm(pm, 0, 1);
+    unsetparam(mapfile_nam);
     mapfile_pm = NULL;
 
     if (!(pm = createparam(mapfile_nam,
diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index 14f05d41d..bd0d68c67 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -620,28 +620,23 @@ boot_parameter(Module m)
      * As an example for autoloaded parameters, this is probably a bad
      * example, because we the zsh core doesn't support creation of
      * special hashes, yet. */
-    Param pm;
 
-    if ((pm = (Param) gethashnode2(paramtab, PAR_NAM)))
-	unsetparam_pm(pm, 0, 1);
+    unsetparam(PAR_NAM);
     if (!(parpm = createspecialhash(PAR_NAM, getpmparameter,
 				    scanpmparameters)))
 	return 1;
     parpm->flags |= PM_READONLY;
-    if ((pm = (Param) gethashnode2(paramtab, CMD_NAM)))
-	unsetparam_pm(pm, 0, 1);
+    unsetparam(CMD_NAM);
     if (!(cmdpm = createspecialhash(CMD_NAM, getpmcommand,
 				    scanpmcommands)))
 	return 1;
     cmdpm->sets.hfn = setpmcommands;
-    if ((pm = (Param) gethashnode2(paramtab, FUN_NAM)))
-	unsetparam_pm(pm, 0, 1);
+    unsetparam(FUN_NAM);
     if (!(funpm = createspecialhash(FUN_NAM, getpmfunction,
 				    scanpmfunctions)))
 	return 1;
     funpm->sets.hfn = setpmfunctions;
-    if ((pm = (Param) gethashnode2(paramtab, OPT_NAM)))
-	unsetparam_pm(pm, 0, 1);
+    unsetparam(OPT_NAM);
     if (!(optpm = createspecialhash(OPT_NAM, getpmoption,
 				    scanpmoptions)))
 	return 1;
diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c
index 4f1bb03f2..f753b4769 100644
--- a/Src/Zle/zle_thingy.c
+++ b/Src/Zle/zle_thingy.c
@@ -399,10 +399,6 @@ bin_zle_refresh(char *name, char **args, char *ops, char func)
     char *s = statusline;
     int sl = statusll, ocl = clearlist;
 
-    if (!zleactive) {
-	zerrnam(name, "can only be called from widget function", NULL, 0);
-	return 1;
-    }
     statusline = NULL;
     statusll = 0;
     if (*args) {
@@ -439,10 +435,6 @@ bin_zle_unget(char *name, char **args, char *ops, char func)
 {
     char *p = *args;
 
-    if (!zleactive) {
-	zerrnam(name, "can only be called from widget function", NULL, 0);
-	return 1;
-    }
     while (*p)
 	ungetkey((int) *p++);
     return 0;
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index 672b049f7..652ef24c1 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -874,8 +874,6 @@ docomplete(int lst)
     metafy_line();
 
     ocs = cs;
-    origline = dupstring((char *) line);
-    origcs = cs;
     if (!isfirstln && chline != NULL) {
 	/* If we are completing in a multi-line buffer (which was not  *
 	 * taken from the history), we have to prepend the stuff saved *
@@ -899,6 +897,8 @@ docomplete(int lst)
     autoq = '\0';
     /* Get the word to complete. */
     noerrs = 1;
+    origline = dupstring((char *) line);
+    origcs = cs;
     s = get_comp_string();
     DPUTS(wb < 0 || cs < wb || cs > we,
 	  "BUG: 0 <= wb <= cs <= we is not true!");
diff --git a/Src/subst.c b/Src/subst.c
index 0ced984cb..a86f1dc93 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -725,8 +725,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
     char *sep = NULL, *spsep = NULL;
     char *premul = NULL, *postmul = NULL, *preone = NULL, *postone = NULL;
     char *replstr = NULL;	/* replacement string for /orig/repl */
-    char *thenstr, *elsestr;    /* then and else for ${..^..^..^..} */
-    int negpat = 0;
     zlong prenum = 0, postnum = 0;
     int copied = 0;
     int arrasg = 0;
@@ -1229,8 +1227,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 		    *s == '%' ||
 		    *s == '#' || *s == Pound ||
 		    *s == '?' || *s == Quest ||
-		    *s == '/' ||
-		    *s == '^' || *s == Hat)) {
+		    *s == '/')) {
 
 	if (!flnum)
 	    flnum++;
@@ -1285,47 +1282,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	    untokenize(replstr);
 	    *ptr = '\0';
 	}
-	if (s[-1] == '^' || s[-1] == Hat) {
-	    char *ptr = s;
 
-	    if (*s == s[-1]) {
-		s++;
-		negpat = 1;
-	    }
-	    for (ptr = s; *ptr && *ptr != '^' && *ptr != Hat; ptr++)
-		if (*ptr == '\\' && (ptr[1] == '^' || ptr[1] == Hat))
-		    chuck(ptr);
-	    if (!*ptr || !ptr[1]) {
-		zerr("missing `then' string", NULL, 0);
-		return NULL;
-	    }
-	    *ptr++ = '\0';
-	    thenstr = ptr;
-	    for (; *ptr && *ptr != '^' && *ptr != Hat; ptr++)
-		if (*ptr == '\\' && (ptr[1] == '^' || ptr[1] == Hat))
-		    chuck(ptr);
-	    if (*ptr) {
-		elsestr = ptr + 1;
-		if (elsestr[0] == '\\' && elsestr[1] == '.')
-		    elsestr++;
-		if (elsestr[0] == '.' && !elsestr[1])
-		    elsestr = (char *) 1;
-		else {
-		    singsub(&elsestr);
-		    untokenize(elsestr);
-		}
-		*ptr = '\0';
-	    } else
-		elsestr = NULL;
-	    if (thenstr[0] == '\\' && thenstr[1] == '.')
-		thenstr++;
-	    if (thenstr[0] == '.' && !thenstr[1])
-		thenstr = (char *) 1;
-	    else {
-		singsub(&thenstr);
-		untokenize(thenstr);
-	    }
-	}
 	if (colf)
 	    flags |= SUB_ALL;
 	/*
@@ -1439,8 +1396,6 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 	case '#':
 	case Pound:
 	case '/':
-	case '^':
-	case Hat:
 	    if (qt) {
 		int one = noerrs, oef = errflag, haserr;
 
@@ -1462,66 +1417,27 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
 		char t = s[-1];
 
 		singsub(&s);
-		if (t == '^' || t == Hat) {
-		    if (!vunset && isarr) {
-			char **ap, **pp;
-			Patprog pprg;
-
-			if (!(pprg = patcompile(s, PAT_STATIC, NULL))) {
-			    zerr("bad pattern: %s", s, 0);
-			    return NULL;
-			}
-			if (!copied)
-			    aval = arrdup(aval), copied = 1;
-			for (ap = pp = aval; *ap; ap++) {
-			    if ((!!pattry(pprg, *ap)) ^ negpat)
-				*pp++ = dupstring(thenstr == ((char *) 1) ?
-						  *ap : thenstr);
-			    else if (elsestr)
-				*pp++ = dupstring(elsestr == ((char *) 1) ?
-						  *ap : elsestr);
-			}
-			*pp = NULL;
-		    } else {
-			Patprog pprg;
-
-			if (vunset)
-			    val = dupstring("");
-			if ((pprg = patcompile(s, PAT_STATIC, NULL)) &&
-			    ((!!pattry(pprg, val)) ^ negpat))
-			    val = dupstring(thenstr == ((char *) 1) ?
-					    val : thenstr);
-			else if (elsestr)
-			    val = dupstring(elsestr == ((char *) 1) ?
-					    val : elsestr);
-			else {
-			    vunset = 1;
-			    val = dupstring("");
-			}
-			copied = 1;
-		    }
-		} else {
-		    if (t == '/' && (flags & SUB_SUBSTR)) {
-			if (*s == '#' || *s == '%') {
-			    flags &= ~SUB_SUBSTR;
-			    if (*s == '%')
-				flags |= SUB_END;
-			    s++;
-			} else if (*s == '\\') {
-			    s++;
-			}
-		    }
-		    if (!vunset && isarr) {
-			getmatcharr(&aval, s, flags, flnum, replstr);
-			copied = 1;
-		    } else {
-			if (vunset)
-			    val = dupstring("");
-			getmatch(&val, s, flags, flnum, replstr);
-			copied = 1;
+		if (t == '/' && (flags & SUB_SUBSTR)) {
+		    if (*s == '#' || *s == '%') {
+			flags &= ~SUB_SUBSTR;
+			if (*s == '%')
+			    flags |= SUB_END;
+			s++;
+		    } else if (*s == '\\') {
+			s++;
 		    }
 		}
 	    }
+
+	    if (!vunset && isarr) {
+		getmatcharr(&aval, s, flags, flnum, replstr);
+		copied = 1;
+	    } else {
+		if (vunset)
+		    val = dupstring("");
+		getmatch(&val, s, flags, flnum, replstr);
+		copied = 1;
+	    }
 	    break;
 	}
     } else {			/* no ${...=...} or anything, but possible modifiers. */
diff --git a/configure.in b/configure.in
index 3a3faa5c0..e4e82b025 100644
--- a/configure.in
+++ b/configure.in
@@ -215,7 +215,7 @@ AC_ARG_ENABLE(function-subdirs,
 [  --enable-function-subdirs  install functions in subdirectories])
 
 if test "x${FUNCTIONS_INSTALL+set}" != xset; then
-  FUNCTIONS_INSTALL="Core/* Base/* Builtins/* User/* Commands/* Cvs/* Pbmplus/* X/* Rpm/* Zle/*"
+  FUNCTIONS_INSTALL="Core/* Base/* Builtins/* User/* Commands/* Cvs/* Debian/* Linux/* X/* Zle/*"
   if test $dynamic != no; then
     FUNCTIONS_INSTALL="${FUNCTIONS_INSTALL} Zftp/*"
   fi