about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rwxr-xr-xConfig/installfns.sh6
-rw-r--r--Doc/META-FAQ.yo10
-rw-r--r--Doc/Makefile.in4
-rw-r--r--Doc/Zsh/builtins.yo2
-rw-r--r--Doc/Zsh/compsys.yo7
-rw-r--r--Doc/Zsh/contrib.yo3
-rw-r--r--Doc/Zsh/expn.yo21
-rw-r--r--Doc/Zsh/files.yo3
-rw-r--r--Doc/Zsh/func.yo8
-rw-r--r--Doc/Zsh/index.yo2
-rw-r--r--Doc/Zsh/mod_mathfunc.yo12
-rw-r--r--Doc/Zsh/mod_zftp.yo11
-rw-r--r--Doc/Zsh/mod_zselect.yo13
-rw-r--r--Doc/Zsh/options.yo6
-rw-r--r--Doc/Zsh/tcpsys.yo4
-rw-r--r--Doc/Zsh/zftpsys.yo2
-rw-r--r--Doc/Zsh/zle.yo6
-rw-r--r--Doc/zmacros.yo23
-rw-r--r--Doc/zman.yo84
-rw-r--r--Doc/zsh.yo2
-rw-r--r--Doc/ztexi.yo121
-rw-r--r--Makefile.in1
-rw-r--r--README2
24 files changed, 217 insertions, 147 deletions
diff --git a/ChangeLog b/ChangeLog
index f27275681..dfa3b831e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2006-03-20  Peter Stephenson  <pws@csr.com>
+
+	* 22360, 22365: Makefile.in, README, Config/installfns.sh,
+	Doc/Makefile.in, Doc/META-FAQ.yo, Doc/zmacros.yo, Doc/zman.yo,
+	Doc/zsh.yo, Doc/ztexi.yo, Doc/Zsh/builtins.yo, Doc/Zsh/compsys.yo,
+	Doc/Zsh/contrib.yo, Doc/Zsh/expn.yo, Doc/Zsh/files.yo,
+	Doc/Zsh/func.yo, Doc/Zsh/index.yo, Doc/Zsh/mod_mathfunc.yo,
+	Doc/Zsh/mod_zftp.yo, Doc/Zsh/mod_zselect.yo, Doc/Zsh/options.yo,
+	Doc/Zsh/tcpsys.yo, Doc/Zsh/zftpsys.yo, Doc/Zsh/zle.yo: support
+	version 2 of Yodl.
+
 2006-03-17  Clint Adams  <clint@zsh.org>
 
 	* 22364: Src/Builtins/rlimits.awk: add 'nice' and
diff --git a/Config/installfns.sh b/Config/installfns.sh
index d680b4b28..68ffa4c6d 100755
--- a/Config/installfns.sh
+++ b/Config/installfns.sh
@@ -45,6 +45,10 @@ for file in $allfuncs; do
       esac
     fi
     test -d $instdir || /bin/sh $sdir_top/mkinstalldirs $instdir || exit 1
-    $INSTALL_DATA $sdir_top/$file $instdir || exit 1
+    if test -x $sdir_top/$file; then
+	$INSTALL_PROGRAM $sdir_top/$file $instdir || exit 1
+    else
+	$INSTALL_DATA $sdir_top/$file $instdir || exit 1
+    fi
   fi
 done
diff --git a/Doc/META-FAQ.yo b/Doc/META-FAQ.yo
index 019264601..bfdb76b77 100644
--- a/Doc/META-FAQ.yo
+++ b/Doc/META-FAQ.yo
@@ -1,4 +1,8 @@
+IFDEF(INCWSLEVEL)(\
+INCWSLEVEL()\
+)(\
 STARTDEF()
+)
 INCLUDEFILE(zmacros.yo)
 
 def(startmenu)(0)(DELLINE)
@@ -21,7 +25,7 @@ def(nofill)(1)(ARG1)
 def(startitem)(0)(NEXTLINE DELLINE)
 def(enditem)(0)(DELLINE)
 def(item)(2)(
-      ARG1+USECHARTABLE(indent2)ARG2 DELLINE USECHARTABLE(standard))
+      ARG1+USECHARTABLE(indent2)ARG2 DELLINE +USECHARTABLE(standard))
 
 def(startlist)(0)(DELLINE)
 def(endlist)(0)(DELLINE)
@@ -34,7 +38,11 @@ DEFINECHARTABLE(indent2)(
   '\n' = "\n            "
 )
 
+IFDEF(DECWSLEVEL)(\
+DECWSLEVEL()\
+)(\
 ENDDEF()\
+)\
 ------------------------
 META-FAQ for the Z Shell
 ------------------------
diff --git a/Doc/Makefile.in b/Doc/Makefile.in
index 998085c30..32bcb4aa0 100644
--- a/Doc/Makefile.in
+++ b/Doc/Makefile.in
@@ -205,10 +205,10 @@ zshzle.1: Zsh/zle.yo
 
 version.yo: $(sdir_top)/Config/version.mk
 	( \
-	  echo 'STARTDEF()'; \
+	  echo 'IFDEF(INCWSLEVEL)(INCWSLEVEL())(STARTDEF())'; \
 	  echo 'def(version)(0)('$(VERSION)')'; \
 	  echo 'def(date)(0)('$(VERSION_DATE)')'; \
-	  echo 'ENDDEF()#' | tr '#' '\\'; \
+	  echo 'IFDEF(DECWSLEVEL)(DECWSLEVEL())(ENDDEF())#' | tr '#' '\\'; \
 	) > $(sdir)/version.yo
 
 Zsh/modlist.yo: $(MODDOCSRC)
diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo
index b0de7e391..99b3238bd 100644
--- a/Doc/Zsh/builtins.yo
+++ b/Doc/Zsh/builtins.yo
@@ -1212,7 +1212,7 @@ example(trap 'print $LINENO' DEBUG)
 
 will print the line number of a command executed after it has run, while
 
-example(TRAPDEBUG() { print $LINENO; })
+example(TRAPDEBUG+LPAR()RPAR() { print $LINENO; })
 
 will always print the number zero.
 
diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 5c844e133..f798bd759 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -1308,7 +1308,8 @@ which are not used.  Its value consists of elements of the form
 such specifications separated by spaces.
 
 The var(pattern) is a pattern that is to be used to generate filenames.
-Any occurrence of the sequence `tt(%p)' is replaced by any pattern(s)
+Any occurrence of the sequence `tt(%p)' is replaced by any
+pattern+LPAR()s+RPAR()
 passed by the function calling tt(_files).  Colons in the pattern must
 be preceded by a backslash to make them distinguishable from the colon
 before the var(tag).  If more than one pattern is needed, the patterns
@@ -2467,7 +2468,7 @@ files are completed separately, so if the tt(hosts) style is set hosts
 can be completed without reference to the tt(urls) style.
 
 See the description in the function tt(_urls) itself
-for more information (e.g. `tt(more $^fpath/_urls(N))').
+for more information (e.g. `tt(more $^fpath/_urls+LPAR()N+RPAR())').
 )
 kindex(use-cache, completion style)
 item(tt(use-cache))(
@@ -3195,7 +3196,7 @@ combined in a single word even if one or more of the options take
 arguments.  For example, if tt(-a) takes an argument, with no
 tt(-s) `tt(-ab)' is considered as a single (unhandled) option; with
 tt(-s) tt(-ab) is an option with the argument `tt(b)'; with both tt(-s)
-and tt(-w), tt(-ab) may be the option tt(-a) and the option(-b) with
+and tt(-w), tt(-ab) may be the option tt(-a) and the option tt(-b) with
 arguments still to come.
 
 The option tt(-W) takes this a stage further:  it is possible to
diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index 534c8d4de..bf83a69e2 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -1032,7 +1032,8 @@ For example, starting from the line:
 
 example(print This line contains fan and fond)
 
-and invoking tt(replace-pattern) with the source string `tt(f(?)n)' and
+and invoking tt(replace-pattern) with the source string
+`tt(f+LPAR()?+RPAR()n)' and
 the replacment string `tt(c\1r)' produces the not very useful line:
 
 example(print This line contains car and cord)
diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
index 4d9df9895..2c705a141 100644
--- a/Doc/Zsh/expn.yo
+++ b/Doc/Zsh/expn.yo
@@ -1507,7 +1507,8 @@ parentheses may be nested.  There are special rules for parentheses followed
 by `tt(#)' or `tt(##)'.  Only the last match of the parenthesis is
 remembered: for example, in `tt([[ abab = (#b)([ab])# ]])', only the final
 `tt(b)' is stored in tt(match[1]).  Thus extra parentheses may be necessary
-to match the complete segment: for example, use `tt(X((ab|cd)#)Y)' to match
+to match the complete segment: for example, use
+`tt(X+LPAR()(ab|cd)#+RPAR()Y)' to match
 a whole string of either `tt(ab)' or `tt(cd)' between `tt(X)' and `tt(Y)',
 using the value of tt($match[1]) rather than tt($match[2]).
 
@@ -1561,12 +1562,13 @@ The `tt((#s))' flag succeeds only at the start of the test string, and the
 correspond to `tt(^)' and `tt($)' in standard regular expressions.  They
 are useful for matching path segments in patterns other than those in
 filename generation (where path segments are in any case treated
-separately).  For example, `tt(*((#s)|/)test((#e)|/)*)' matches a path
-segment `tt(test)' in any of the following strings: tt(test),
+separately).  For example, `tt(*((#s)|/)test+LPAR()(#e)|/+RPAR()*)' matches
+a path segment `tt(test)' in any of the following strings: tt(test),
 tt(test/at/start), tt(at/end/test), tt(in/test/middle).
 
 Another use is in parameter substitution; for example
-`tt(${array/(#s)A*Z(#e)})' will remove only elements of an array which
+`tt(${array/(#s)A*Z+LPAR()#e+RPAR()})' will remove only elements of an
+array which
 match the complete pattern `tt(A*Z)'.  There are other ways of performing
 many operations of this type, however the combination of the substitution
 operations `tt(/)' and `tt(//)' with the `tt((#s))' and `tt((#e))' flags
@@ -1582,7 +1584,8 @@ item(tt(q))(
 A `tt(q)' and everything up to the closing parenthesis of the globbing
 flags are ignored by the pattern matching code.  This is intended to
 support the use of glob qualifiers, see below.  The result is that
-the pattern `tt((#b)(*).c(#q.))' can be used both for globbing and for
+the pattern `tt((#b)(*).c+LPAR()#q.+RPAR())' can be used both for globbing
+and for
 matching against a string.  In the former case, the `tt((#q.))' will be
 treated as a glob qualifier and the `tt((#b))' will not be useful, while in
 the latter case the `tt((#b))' is useful for backreferences and the
@@ -1662,8 +1665,8 @@ the pattern
 tt(LPAR()#a1)tt(RPAR()cat)tt(LPAR()#a0)tt(RPAR()dog)tt(LPAR()#a1)tt(RPAR()fox)
 is equivalent.  Note that the point at which an error is first found is the
 crucial one for establishing whether to use approximation; for example,
-tt((#a1)abc(#a0)xyz) will not match tt(abcdxyz), because the error occurs
-at the `tt(x)', where approximation is turned off.
+tt((#a1)abc+LPAR()#a0+RPAR()xyz) will not match tt(abcdxyz), because the
+error occurs at the `tt(x)', where approximation is turned off.
 
 Entire path segments may be matched approximately, so that
 `tt((#a1)/foo/d/is/available/at/the/bar)' allows one error in any path
@@ -1871,7 +1874,7 @@ characters following the tt(PLUS()) that are alphanumeric or underscore.
 Typically var(cmd) will be the name of a shell function that contains the
 appropriate test.  For example,
 
-example(nt() { [[ $REPLY -nt $NTREF ]] }
+example(nt+LPAR()RPAR() { [[ $REPLY -nt $NTREF ]] }
 NTREF=reffile
 ls -l *(+nt))
 
@@ -2032,7 +2035,7 @@ lists all files having a link count of one whose names contain a dot
 (but not those starting with a dot, since tt(GLOB_DOTS) is explicitly
 switched off) except for tt(lex.c), tt(lex.h), tt(parse.c) and tt(parse.h).
 
-example(print b*.pro(#q:s/pro/shmo/)(#q.:s/builtin/shmiltin/))
+example(print b*.pro+LPAR()#q:s/pro/shmo/+RPAR()(#q.:s/builtin/shmiltin/))
 
 demonstrates how colon modifiers and other qualifiers may be chained
 together.  The ordinary qualifier `tt(.)' is applied first, then the colon
diff --git a/Doc/Zsh/files.yo b/Doc/Zsh/files.yo
index ba4330644..658d09e1f 100644
--- a/Doc/Zsh/files.yo
+++ b/Doc/Zsh/files.yo
@@ -15,7 +15,8 @@ Commands are first read from tt(/etc/zshenv); this cannot be overridden.
 Subsequent behaviour is modified by the tt(RCS) and
 tt(GLOBAL_RCS) options; the former affects all startup files, while the
 second only affects those in the tt(/etc) directory.  If one of the options
-is unset at any point, any subsequent startup file(s) of the corresponding
+is unset at any point, any subsequent startup file+LPAR()s+RPAR()
+of the corresponding
 type will not be read.  It is also possible for a file in tt($ZDOTDIR) to
 re-enable tt(GLOBAL_RCS). Both tt(RCS) and tt(GLOBAL_RCS) are set by
 default.
diff --git a/Doc/Zsh/func.yo b/Doc/Zsh/func.yo
index f596afef5..471954c25 100644
--- a/Doc/Zsh/func.yo
+++ b/Doc/Zsh/func.yo
@@ -110,7 +110,7 @@ arguments, at the end.
 
 For example, suppose the autoload file tt(func) contains
 
-example(func() { print This is func; }
+example(func+LPAR()RPAR() { print This is func; }
 print func is initialized
 )
 
@@ -125,7 +125,7 @@ but which loads its own definition by searching tt(fpath), by using
 `tt(autoload -X)' within a shell function.  For example, the following are
 equivalent:
 
-example(myfunc() {
+example(myfunc+LPAR()RPAR() {
   autoload -X
 }
 myfunc args...)
@@ -203,7 +203,7 @@ Programs terminated by uncaught signals typically return the status 128
 plus the signal number.  Hence the following causes the handler for
 tt(SIGINT) to print a message, then mimic the usual effect of the signal.
 
-example(TRAPINT() {
+example(TRAPINT+LPAR()RPAR() {
   print "Caught SIGINT, aborting."
   return $(( 128 + $1 ))
 })
@@ -239,7 +239,7 @@ run in the environment of the calling process, rather than in their own
 function environment.  Apart from the difference in calling procedure and
 the fact that the function form appears in lists of functions, the forms
 
-example(TRAPNAL() { 
+example(TRAPNAL+LPAR()RPAR() { 
  # code
 })
 
diff --git a/Doc/Zsh/index.yo b/Doc/Zsh/index.yo
index 9555b5d41..191e0f2f9 100644
--- a/Doc/Zsh/index.yo
+++ b/Doc/Zsh/index.yo
@@ -1,7 +1,7 @@
 ifztexi(\
 def(printindex)(2)(\
   texipage()NL()\
-  NOTRANS(@unnumbered) ARG1NL()\
+  NOTRANS(@unnumbered) ARG1+NL()\
   NL()\
   NOTRANS(@printindex) ARG2\
 )\
diff --git a/Doc/Zsh/mod_mathfunc.yo b/Doc/Zsh/mod_mathfunc.yo
index 637c22d8f..dda4f36fd 100644
--- a/Doc/Zsh/mod_mathfunc.yo
+++ b/Doc/Zsh/mod_mathfunc.yo
@@ -8,7 +8,7 @@ mathematical functions for use when
 evaluating mathematical formulae.  The syntax agrees with normal C and
 FORTRAN conventions, for example,
 
-example((( f = sin(0.3) )))
+example((( f = sin+LPAR()0.3+RPAR() )))
 
 assigns the sine of 0.3 to the parameter f.
 
@@ -33,8 +33,8 @@ returns an integer.
 The function tt(signgam) takes no arguments, and returns an integer, which
 is the C variable of the same name, as described in manref(gamma)(3).  Note
 that it is therefore only useful immediately after a call to tt(gamma) or
-tt(lgamma).  Note also that `tt(signgam())' and `tt(signgam)' are distinct
-expressions.
+tt(lgamma).  Note also that `tt(signgam+LPAR()RPAR)' and `tt(signgam)' are
+distinct expressions.
 
 The following functions take two floating point arguments: tt(copysign),
 tt(fmod), tt(hypot), tt(nextafter).
@@ -58,7 +58,8 @@ has the function tt(erand48(3)).  It returns a pseudo-random floating point
 number between 0 and 1.  It takes a single string optional argument.
 
 If the argument is not present, the random number seed is initialised by
-three calls to the tt(rand(3)) function --- this produces the same random
+three calls to the tt(rand+LPAR()3+RPAR()) function --- this produces the
+same random
 numbers as the next three values of tt($RANDOM).
 
 If the argument is present, it gives the name of a scalar parameter where
@@ -80,7 +81,8 @@ print $(( rand48(seed) )))
 
 Assuming tt($seed) does not exist, it will be initialised by the first
 call.  In the second call, the default seed is initialised; note, however,
-that because of the properties of tt(rand()) there is a correlation between
+that because of the properties of tt(rand+LPAR()RPAR()) there is a
+correlation between
 the seeds used for the two initialisations, so for more secure uses, you
 should generate your own 12-byte seed.  The third call returns to the same
 sequence of random numbers used in the first call, unaffected by the
diff --git a/Doc/Zsh/mod_zftp.yo b/Doc/Zsh/mod_zftp.yo
index 66699db1b..de53cdbb3 100644
--- a/Doc/Zsh/mod_zftp.yo
+++ b/Doc/Zsh/mod_zftp.yo
@@ -112,8 +112,9 @@ silent, apart from messages printed by the tt($ZFTP_VERBOSE)
 mechanism, or error messages if the connection closes.  There is no
 network overhead for this test.
 
-The test is only supported on systems with either the tt(select(2)) or
-tt(poll(2)) system calls; otherwise the message `tt(not
+The test is only supported on systems with either the
+tt(select+LPAR()2+RPAR()) or
+tt(poll+LPAR()2+RPAR()) system calls; otherwise the message `tt(not
 supported on this system)' is printed instead.
 
 The tt(test) subcommand will automatically be called at the start of any
@@ -496,6 +497,6 @@ all connections, and deleting a session changes the ordering of that
 information.
 
 On some operating systems, the control connection is not valid after a
-fork(), so that operations in subshells, on the left hand side of a
-pipeline, or in the background are not possible, as they should be.  This
-is presumably a bug in the operating system.
+fork+LPAR()RPAR(), so that operations in subshells, on the left hand side
+of a pipeline, or in the background are not possible, as they should be.
+This is presumably a bug in the operating system.
diff --git a/Doc/Zsh/mod_zselect.yo b/Doc/Zsh/mod_zselect.yo
index 43f010a10..23beef1e8 100644
--- a/Doc/Zsh/mod_zselect.yo
+++ b/Doc/Zsh/mod_zselect.yo
@@ -40,7 +40,8 @@ finer-grained replacement for `sleep'; not, however, the return status is
 always 1 for a timeout.
 
 The option `tt(-a) var(array)' indicates that tt(array) should be set to
-indicate the file descriptor(s) which are ready.  If the option is not
+indicate the file descriptor+LPAR()s+RPAR() which are ready.  If the option
+is not
 given, the array tt(reply) will be used for this purpose.  The array will
 contain a string similar to the arguments for tt(zselect).  For example,
 
@@ -51,11 +52,11 @@ might return immediately with status 0 and tt($reply) containing `tt(-r 0 -w
 operations.
 
 The option `tt(-A) var(assoc)' indicates that the associative array
-tt(assoc) should be set to indicate the file descriptor(s) which are
-ready.  This option overrides the option tt(-a), nor will tt(reply) be
-modified.  The keys of tt(assoc) are the file descriptors, and the
-corresponding values are any of the characters `tt(rwe)' to indicate the
-condition.
+tt(assoc) should be set to indicate the file descriptor+LPAR()s+LPAR()
+which are ready.  This option overrides the option tt(-a), nor will
+tt(reply) be modified.  The keys of tt(assoc) are the file descriptors, and
+the corresponding values are any of the characters `tt(rwe)' to indicate
+the condition.
 
 The command returns status 0 if some file descriptors are ready for
 reading.  If the operation timed out, or a timeout of 0 was given and no
diff --git a/Doc/Zsh/options.yo b/Doc/Zsh/options.yo
index 1d0c7a24f..74f8b4c84 100644
--- a/Doc/Zsh/options.yo
+++ b/Doc/Zsh/options.yo
@@ -315,8 +315,8 @@ item(tt(CASE_GLOB) <D>)(
 Make globbing (filename generation) sensitive to case.  Note that other
 uses of patterns are always sensitive to case.  If the option is unset,
 the presence of any character which is special to filename generation
-will cause case-insensitive matching.  For example, tt(cvs(/)) can
-match the directory tt(CVS) owing to the presence of the globbing flag
+will cause case-insensitive matching.  For example, tt(cvs+LPAR()/+RPAR())
+can match the directory tt(CVS) owing to the presence of the globbing flag
 (unless the option tt(BARE_GLOB_QUAL) is unset).
 )
 pindex(CSH_NULL_GLOB)
@@ -1039,7 +1039,7 @@ For example,
 
 example(unsetopt localtraps
 trap - INT
-fn() { setopt localtraps; trap '' INT; sleep 3; })
+fn+LPAR()RPAR() { setopt localtraps; trap '' INT; sleep 3; })
 
 will restore normally handling of tt(SIGINT) after the function exits.
 )
diff --git a/Doc/Zsh/tcpsys.yo b/Doc/Zsh/tcpsys.yo
index bf04be4db..f8f65b634 100644
--- a/Doc/Zsh/tcpsys.yo
+++ b/Doc/Zsh/tcpsys.yo
@@ -202,8 +202,8 @@ tt(tcp_send); they are simply passed down to tt(print -r).
 
 If the parameter tt($TCP_OUTPUT) is a non-empty string and logging is
 enabled then the data sent to each session will be echoed to the log
-file(s) with tt($TCP_OUTPUT) in front where appropriate, much in the manner
-of tt($TCP_PROMPT).
+file+LPAR()s+RPAR() with tt($TCP_OUTPUT) in front where appropriate, much
+in the manner of tt($TCP_PROMPT).
 )
 enditem()
 
diff --git a/Doc/Zsh/zftpsys.yo b/Doc/Zsh/zftpsys.yo
index 95cb6f5d2..627e0582d 100644
--- a/Doc/Zsh/zftpsys.yo
+++ b/Doc/Zsh/zftpsys.yo
@@ -477,7 +477,7 @@ local and remote hostnames and current directories.  It works best when
 combined with the function tt(chpwd).  In particular, a function of 
 the form
 
-example(chpwd() {
+example(chpwd+LPAR()RPAR() {
   if [[ -n $ZFTP_USER ]]; then
     zftp_chpwd
   else
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index f0808314a..fb6f508a0 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -482,7 +482,7 @@ if the remote side has closed the connection; we handle that by testing
 for a failed read.
 example(if ztcp pwspc 2811; then
   tcpfd=$REPLY
-  handler() {
+  handler+LPAR()RPAR() {
     zle -I
     local line
     if ! read -r line <&$1; then
@@ -774,7 +774,7 @@ Executed every time the line editor is started to read a new line
 of input.  The following example puts the line editor into vi command
 mode when it starts up.
 
-example(zle-line-init() { zle -K vicmd; }
+example(zle-line-init+LPAR()RPAR() { zle -K vicmd; }
 zle -N zle-line-init)
 
 (The command inside the function sets the keymap directly; it is
@@ -1776,7 +1776,7 @@ the command line or key bindings temporarily.
 
 
 The following widget, tt(caps-lock), serves as an example.
-example(self-insert-ucase() {
+example(self-insert-ucase+LPAR()RPAR() {
   LBUFFER+=${(U)KEYS[-1]}
 }
 
diff --git a/Doc/zmacros.yo b/Doc/zmacros.yo
index 1c3319059..19506d222 100644
--- a/Doc/zmacros.yo
+++ b/Doc/zmacros.yo
@@ -1,8 +1,12 @@
+IFDEF(INCWSLEVEL)(\
+INCWSLEVEL()\
+)(\
 STARTDEF()
+)
 
 DEFINEMACRO(includefile)(1)(\
   TYPEOUT(Including file ARG1)\
-  comment(Yodl file: ARG1)NL()\
+  comment(Yodl file: ARG1)+NL()\
   INCLUDEFILE(ARG1)\
 )
 
@@ -10,10 +14,18 @@ DEFINEMACRO(def)(3)(\
   DEFINEMACRO(ARG1)(ARG2)(ARG3)\
 )
 DEFINEMACRO(undef)(1)(\
+  IFDEF(DELETEMACRO)(\
+  DELETEMACRO(ARG1)\
+  )(\
   UNDEFINEMACRO(ARG1)\
+  )\
 )
 DEFINEMACRO(redef)(3)(\
+  IFDEF(DELETEMACRO)(\
+  DELETEMACRO(ARG1)\
+  )(\
   UNDEFINEMACRO(ARG1)\
+  )\
   DEFINEMACRO(ARG1)(ARG2)(ARG3)\
 )
 
@@ -24,12 +36,15 @@ DEFINEMACRO(PLUS)(0)(CHAR(43))
 
 DEFINEMACRO(DASH)(0)(ifztexi(--)ifnztexi(-))
 
-DEFINEMACRO(NL)(0)(
-)
+DEFINEMACRO(NL)(0)(CHAR(10))
 
 DEFINEMACRO(ifzman)(1)()
 DEFINEMACRO(ifnzman)(1)(ARG1)
 DEFINEMACRO(ifztexi)(1)()
 DEFINEMACRO(ifnztexi)(1)(ARG1)
 
-ENDDEF()
+IFDEF(DECWSLEVEL)(\
+DECWSLEVEL()\
+)(\
+ENDDEF()\
+)\
diff --git a/Doc/zman.yo b/Doc/zman.yo
index 468decd6b..7aa0913cd 100644
--- a/Doc/zman.yo
+++ b/Doc/zman.yo
@@ -1,7 +1,11 @@
+IFDEF(INCWSLEVEL)(\
+INCWSLEVEL()\
+DEFINESYMBOL(zman)()\
+)(\
 STARTDEF()
-
-TYPEOUT(Zsh Yodl-to-man converter)
 DEFINESYMBOL(zman)
+)
+TYPEOUT(Zsh Yodl-to-man converter)
 
 INCLUDEFILE(zmacros)
 redef(ifzman)(1)(ARG1)
@@ -25,10 +29,10 @@ def(STDPAR)(0)(\
 
 COMMENT(--- emphasised text ---)
 
-def(em)(1)(NOTRANS(\fI)ARG1NOTRANS(\fP))
-def(bf)(1)(NOTRANS(\fB)ARG1NOTRANS(\fP))
-def(tt)(1)(NOTRANS(\fB)ARG1NOTRANS(\fP))
-def(var)(1)(NOTRANS(\fI)ARG1NOTRANS(\fP))
+def(em)(1)(NOTRANS(\fI)ARG1+NOTRANS(\fP))
+def(bf)(1)(NOTRANS(\fB)ARG1+NOTRANS(\fP))
+def(tt)(1)(NOTRANS(\fB)ARG1+NOTRANS(\fP))
+def(var)(1)(NOTRANS(\fI)ARG1+NOTRANS(\fP))
 
 COMMENT(--- man page headers ---)
 
@@ -36,7 +40,7 @@ def(manpage)(4)(\
   NOTRANS(.TH ")ARG1" "ARG2" "ARG3" "ARG4"\
 )
 def(manpagename)(2)(\
-  sect(NAME)NL()\
+  sect(NAME)+NL()\
   ARG1 - ARG2\
 )
 
@@ -62,15 +66,19 @@ COMMENT(--- section divisions ---)
 
 def(chapter)(1)(CMT())
 
-COMMENT(--- the "" works around a yodl bug ---)
+COMMENT(--- the "" works around a yodl bug in versions before 2 ---)
 def(sect)(1)(\
-  NOTRANS(.SH )UPPERCASE(ARG1)(0)""NL()\
+  IFDEF(INCWSLEVEL)(\
+  NOTRANS(.SH )"UPPERCASE(ARG1)(0)"+NL()\
+  )(\
+  NOTRANS(.SH )UPPERCASE(ARG1)(0)""+NL()\
+  )\
   STDPAR()\
   CMT()\
 )
 
 def(subsect)(1)(\
-  NOTRANS(.SS ")ARG1"NL()\
+  NOTRANS(.SS ")ARG1"+NL()\
   CMT()\
 )
 
@@ -82,13 +90,13 @@ DEFINECHARTABLE(roffcomment)(
 def(comment)(1)(\
   USECHARTABLE(roffcomment)\
   NOTRANS(.\" )ARG1\
-  USECHARTABLE(standard)\
+  +USECHARTABLE(standard)\
 )
 
 COMMENT(--- cross-references ---)
 
 def(manref)(2)(\
-  NOTRANS(\fI)ARG1NOTRANS(\fP)(ARG2)\
+  NOTRANS(\fI)ARG1+NOTRANS(\fP)(ARG2)\
 )
 def(zmanref)(1)(manref(ARG1)(1))
 def(noderef)(1)(the section `ARG1')
@@ -97,31 +105,31 @@ COMMENT(--- lists ---)
 
 def(startitem)(0)(\
   NOTRANS(.PD 0)\
-  redef(ITEM)(0)(NOTRANS(.PD)NL())\
+  +redef(ITEM)(0)(NOTRANS(.PD)+NL())\
 )
 def(enditem)(0)(\
   ENDITEM()\
   STDPAR()\
-  redef(ENDITEM)(0)(NOTRANS(.RE)STDPAR())\
+  +redef(ENDITEM)(0)(NOTRANS(.RE)STDPAR())\
 )
 def(item)(2)(\
-  NOTRANS(.TP)NL()\
+  NOTRANS(.TP)+NL()\
   ITEM()\
-  redef(ITEM)(0)()\
+  +redef(ITEM)(0)()\
   ARG1\
-  redef(ENDITEM)(0)(CMT())\
-  redef(PARAGRAPH)(0)(\
-    NL()NOTRANS(.RS)NL()NOTRANS(.PP)NL()\
+  +redef(ENDITEM)(0)(CMT())\
+  +redef(PARAGRAPH)(0)(\
+    NL()NOTRANS(.RS)+NL()NOTRANS(.PP)+NL()\
     STDPAR()\
-    redef(ENDITEM)(0)(NOTRANS(.RE)STDPAR())\
+    +redef(ENDITEM)(0)(NOTRANS(.RE)STDPAR())\
   )\
   ARG2\
-  ENDITEM()\
+  +ENDITEM()\
 )
 def(xitem)(1)(\
-  NOTRANS(.TP)NL()\
-  NOTRANS(.PD 0)NL()\
-  redef(ITEM)(0)(NOTRANS(.PD)NL())\
+  NOTRANS(.TP)+NL()\
+  NOTRANS(.PD 0)+NL()\
+  +redef(ITEM)(0)(NOTRANS(.PD)+NL())\
   ARG1\
 )
 
@@ -132,12 +140,12 @@ def(endsitem)(0)(\
   NOTRANS(.PD)\
 )
 def(sitem)(2)(\
-  NOTRANS(.TP)NL()\
-  ARG1NL()\
+  NOTRANS(.TP)+NL()\
+  ARG1+NL()\
   ARG2\
 )
 def(sxitem)(1)(\
-  NOTRANS(.TP)NL()\
+  NOTRANS(.TP)+NL()\
   ARG1\
 )
 
@@ -148,7 +156,7 @@ def(endlist)(0)(\
   NOTRANS(.PD)\
 )
 def(list)(1)(\
-  NOTRANS(.TP)NL()\
+  NOTRANS(.TP)+NL()\
   ARG1\
 )
 
@@ -159,27 +167,27 @@ def(enditemize)(0)(\
   enditem()\
 )
 def(itemiz)(1)(\
-  item(NOTRANS(\)LPAR()NOTRANS(bu))(NL()ARG1NL())\
+  item(NOTRANS(\)+LPAR()+NOTRANS(bu))(NL()ARG1+NL())\
 )
 
 COMMENT(--- special effects ---)
 
 def(example)(1)(\
-  NOTRANS(.RS)NL()NOTRANS(.nf)NL()\
-  NOTRANS(\fB)ARG1NOTRANS(\fP)\
-  NL()NOTRANS(.fi)NL()NOTRANS(.RE)\
+  NOTRANS(.RS)+NL()NOTRANS(.nf)+NL()\
+  NOTRANS(\fB)ARG1+NOTRANS(\fP)\
+  +NL()NOTRANS(.fi)+NL()NOTRANS(.RE)\
 )
 
 def(nofill)(1)(\
-  NOTRANS(.nf)NL()\
+  NOTRANS(.nf)+NL()\
   ARG1\
-  NL()NOTRANS(.fi)\
+  +NL()NOTRANS(.fi)\
 )
 
 def(indent)(1)(\
-  NOTRANS(.RS)NL()NOTRANS(.nf)NL()\
+  NOTRANS(.RS)+NL()NOTRANS(.nf)+NL()\
   ARG1\
-  NL()NOTRANS(.fi)NL()NOTRANS(.RE)\
+  +NL()NOTRANS(.fi)+NL()NOTRANS(.RE)\
 )
 
 COMMENT(--- hyperlink menus ---)
@@ -197,4 +205,8 @@ def(pindex)(1)(CMT())
 def(tindex)(1)(CMT())
 def(vindex)(1)(CMT())
 
+IFDEF(DECWSLEVEL)(\
+DECWSLEVEL()\
+)(\
 ENDDEF()\
+)\
diff --git a/Doc/zsh.yo b/Doc/zsh.yo
index 6b4076d8c..0517c8748 100644
--- a/Doc/zsh.yo
+++ b/Doc/zsh.yo
@@ -68,7 +68,7 @@ ifnzman(includefile(Zsh/tcpsys.yo))
 ifnzman(includefile(Zsh/zftpsys.yo))
 ifnzman(includefile(Zsh/contrib.yo))
 ifzshall(\
-def(source)(1)(NOTRANS(.so )man1/ARG1NOTRANS(.)1)\
+def(source)(1)(NOTRANS(.so )man1/ARG1+NOTRANS(.)1)\
 CMT()
 source(zshroadmap)
 source(zshmisc)
diff --git a/Doc/ztexi.yo b/Doc/ztexi.yo
index efb1d5e15..0d242d2e8 100644
--- a/Doc/ztexi.yo
+++ b/Doc/ztexi.yo
@@ -1,7 +1,12 @@
+IFDEF(INCWSLEVEL)(\
+INCWSLEVEL()\
+DEFINESYMBOL(ztexi)()\
+)(\
 STARTDEF()
+DEFINESYMBOL(ztexi)
+)
 
 TYPEOUT(Zsh Yodl-to-TeXinfo converter)
-DEFINESYMBOL(ztexi)
 
 INCLUDEFILE(zmacros)
 redef(ifztexi)(1)(ARG1)
@@ -11,7 +16,7 @@ def(CMT)(0)(NOTRANS(@c))
 
 ATEXIT(\
   NL()\
-  NOTRANS(@contents)NL()\
+  NOTRANS(@contents)+NL()\
   NOTRANS(@bye)NL()\
 )
 
@@ -24,17 +29,17 @@ DEFINECHARTABLE(standard)(
   '}' = "@}"
 )
 USECHARTABLE(standard)
-SUBST('')(NOTRANS(@value{dsq}))
-SUBST(``)(NOTRANS(@value{dsbq}))
+SUBST('')(+NOTRANS(@value{dsq}))
+SUBST(``)(+NOTRANS(@value{dsbq}))
 
-def(STDPAR)(0)(redef(PARAGRAPH)(0)(NL()NL()NOTRANS(@noindent)NL()))
+def(STDPAR)(0)(redef(PARAGRAPH)(0)(NL()NL()NOTRANS(@noindent)+NL()))
 
 COMMENT(--- emphasised text ---)
 
-def(em)(1)(NOTRANS(@emph{)ARG1NOTRANS(}))
-def(bf)(1)(NOTRANS(@cite{)ARG1NOTRANS(}))
-def(tt)(1)(NOTRANS(@t{)ARG1NOTRANS(}))
-def(var)(1)(NOTRANS(@var{)ARG1NOTRANS(}))
+def(em)(1)(+NOTRANS(@emph{)ARG1+NOTRANS(}))
+def(bf)(1)(+NOTRANS(@cite{)ARG1+NOTRANS(}))
+def(tt)(1)(+NOTRANS(@t{)ARG1+NOTRANS(}))
+def(var)(1)(+NOTRANS(@var{)ARG1+NOTRANS(}))
 
 COMMENT(--- man page headers ---)
 
@@ -45,46 +50,46 @@ COMMENT(--- TeXinfo headers and conditionals ---)
 
 def(texinfo)(2)(\
   STDPAR()\
-  NOTRANS(\input texinfo.tex)NL()\
-  NOTRANS(@c %**start of header)NL()\
-  NOTRANS(@iftex)NL()\
-  NOTRANS(@afourpaper)NL()\
-  NOTRANS(@setchapternewpage off)NL()\
-  NOTRANS(@end iftex)NL()\
-  NOTRANS(@setfilename )ARG1NL()\
-  NOTRANS(@settitle )ARG2NL()\
-  NOTRANS(@c %**end of header)NL()\
-  NL()\
-  NOTRANS(@ifinfo)NL()\
-  NOTRANS(@set dsq '@:')NL()\
-  NOTRANS(@set dsbq `@:`)NL()\
-  NOTRANS(@end ifinfo)NL()\
-  NOTRANS(@iftex)NL()\
-  NOTRANS(@set dsq '{}')NL()\
-  NOTRANS(@set dsbq `{}`)NL()\
-  NOTRANS(@end iftex)NL()\
-  NOTRANS(@ifinfo)NL()\
-  NOTRANS(@dircategory Utilities)NL()\
-  NOTRANS(@direntry)NL()\
-  NOTRANS(     * ZSH: (zsh).                     The Z Shell Manual.)NL()\
-  NOTRANS(@end direntry)NL()\
-  NOTRANS(@end ifinfo)NL()\
+  NOTRANS(\input texinfo.tex)+NL()\
+  NOTRANS(@c %**start of header)+NL()\
+  NOTRANS(@iftex)+NL()\
+  NOTRANS(@afourpaper)+NL()\
+  NOTRANS(@setchapternewpage off)+NL()\
+  NOTRANS(@end iftex)+NL()\
+  NOTRANS(@setfilename )ARG1+NL()\
+  NOTRANS(@settitle )ARG2+NL()\
+  NOTRANS(@c %**end of header)+NL()\
+  +NL()\
+  NOTRANS(@ifinfo)+NL()\
+  NOTRANS(@set dsq '@:')+NL()\
+  NOTRANS(@set dsbq `@:`)+NL()\
+  NOTRANS(@end ifinfo)+NL()\
+  NOTRANS(@iftex)+NL()\
+  NOTRANS(@set dsq '{}')+NL()\
+  NOTRANS(@set dsbq `{}`)+NL()\
+  NOTRANS(@end iftex)+NL()\
+  NOTRANS(@ifinfo)+NL()\
+  NOTRANS(@dircategory Utilities)+NL()\
+  NOTRANS(@direntry)+NL()\
+  NOTRANS(     * ZSH: (zsh).                     The Z Shell Manual.)+NL()\
+  NOTRANS(@end direntry)+NL()\
+  NOTRANS(@end ifinfo)+NL()\
 )
 
 def(texiifinfo)(1)(\
-  NOTRANS(@ifinfo)NL()\
+  NOTRANS(@ifinfo)+NL()\
   ARG1\
-  NOTRANS(@end ifinfo)NL()\
+  +NOTRANS(@end ifinfo)+NL()\
 )
 def(texiiftex)(1)(\
-  NOTRANS(@iftex)NL()\
+  NOTRANS(@iftex)+NL()\
   ARG1\
-  NOTRANS(@end iftex)NL()\
+  +NOTRANS(@end iftex)+NL()\
 )
 def(texiifnottex)(1)(\
-  NOTRANS(@ifnottex)NL()\
+  NOTRANS(@ifnottex)+NL()\
   ARG1\
-  NOTRANS(@end ifnottex)NL()\
+  +NOTRANS(@end ifnottex)+NL()\
 )
 
 def(texipage)(0)(\
@@ -117,19 +122,19 @@ COMMENT(--- section divisions ---)
 
 def(chapter)(1)(\
   NL()\
-  NOTRANS(@chapter )ARG1NL()\
+  NOTRANS(@chapter )ARG1+NL()\
   NOTRANS(@noindent)\
 )
 
 def(sect)(1)(\
   NL()\
-  NOTRANS(@section )ARG1NL()\
+  NOTRANS(@section )ARG1+NL()\
   NOTRANS(@noindent)\
 )
 
 def(subsect)(1)(\
   NL()\
-  NOTRANS(@subsection )ARG1NL()\
+  NOTRANS(@subsection )ARG1+NL()\
   NOTRANS(@noindent)\
 )
 
@@ -141,22 +146,22 @@ DEFINECHARTABLE(texicomment)(
 def(comment)(1)(\
   USECHARTABLE(texicomment)\
   NOTRANS(@c )ARG1\
-  USECHARTABLE(standard)\
+  +USECHARTABLE(standard)\
 )
 
 COMMENT(--- cross-references ---)
 
-def(manref)(2)(man page ARG1LPAR()ARG2RPAR())
+def(manref)(2)(man page ARG1+LPAR()ARG2+RPAR())
 def(zmanref)(1)(manref(ARG1)(1))
 def(noderef)(1)(\
-  NOTRANS(@ref{)ARG1NOTRANS(})\
+  NOTRANS(@ref{)ARG1+NOTRANS(})\
 )
 
 COMMENT(--- lists ---)
 
 def(startitem)(0)(\
   NOTRANS(@table @asis)\
-  redef(ITEMX)(0)()\
+  +redef(ITEMX)(0)()\
 )
 def(enditem)(0)(\
   NOTRANS(@end table)\
@@ -164,11 +169,11 @@ def(enditem)(0)(\
 def(item)(2)(\
   NOTRANS(@item)ITEMX() ARG1\
   ARG2\
-  redef(ITEMX)(0)()\
+  +redef(ITEMX)(0)()\
 )
 def(xitem)(1)(\
   NOTRANS(@item)ITEMX() ARG1\
-  redef(ITEMX)(0)(x)\
+  +redef(ITEMX)(0)(x)\
 )
 
 def(startsitem)(0)(\
@@ -188,7 +193,7 @@ def(startlist)(0)(\
   startitem()\
 )
 def(endlist)(0)(\
-  NOTRANS(@item)NL()\
+  NOTRANS(@item)+NL()\
   enditem()\
 )
 def(list)(1)(\
@@ -196,7 +201,7 @@ def(list)(1)(\
 )
 
 def(startitemize)(0)(\
-  NOTRANS(@itemize @bullet)NL()\
+  NOTRANS(@itemize @bullet)+NL()\
 )
 def(enditemize)(0)(\
   NOTRANS(@end itemize)\
@@ -216,19 +221,19 @@ DEFINECHARTABLE(nofillchars)(
 def(nofill)(1)(\
   USECHARTABLE(nofillchars)\
   ARG1\
-  USECHARTABLE(standard)\
+  +USECHARTABLE(standard)\
 )
 
 def(example)(1)(\
-  NOTRANS(@example)NL()\
+  NOTRANS(@example)+NL()\
   ARG1\
-  NL()NOTRANS(@end example)\
+  +NL()NOTRANS(@end example)\
 )
 
 def(indent)(1)(\
-  NOTRANS(@quotation)NL()\
+  NOTRANS(@quotation)+NL()\
   ARG1\
-  NL()NOTRANS(@end quotation)\
+  +NL()NOTRANS(@end quotation)\
 )
 
 COMMENT(--- hyperlink menus ---)
@@ -240,7 +245,7 @@ def(endmenu)(0)(\
   NOTRANS(@end menu)\
 )
 def(menu)(1)(\
-  * ARG1NOTRANS(::)\
+  * ARG1+NOTRANS(::)\
 )
 
 COMMENT(--- indices ---)
@@ -269,4 +274,8 @@ def(vindex)(1)(\
   NOTRANS(@vindex )ARG1\
 )
 
+IFDEF(DECWSLEVEL)(\
+DECWSLEVEL()\
+)(\
 ENDDEF()\
+)\
diff --git a/Makefile.in b/Makefile.in
index 75f951081..58620209e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -87,6 +87,7 @@ install.fns:
 	  scriptdir="$(scriptdir)" \
 	  FUNCTIONS_SUBDIRS="$(FUNCTIONS_SUBDIRS)" \
 	  INSTALL_DATA="$(INSTALL_DATA)" \
+	  INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \
 	  DESTDIR="$(DESTDIR)" VERSION="$(VERSION)" \
 	  $(SHELL) $(sdir_top)/Config/installfns.sh || exit 1; \
 	fi; \
diff --git a/README b/README
index f803fe4ae..b27108b36 100644
--- a/README
+++ b/README
@@ -73,7 +73,7 @@ Doc/Zsh/*.yo	The master source for the zsh documentation is written in
 		It is not required by zsh but but it is a nice program so
 		you might want to get it anyway, especially if you are a
 		zsh developer.  It can be downloaded from
-		ftp://ftp.lilypond.org/pub/yodl/
+		ftp://yodl.sourceforge.net/
 
 Doc/zsh*.1	Man pages in nroff format.  These will be installed
 		by "make install.man" or "make install".  By default,