about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--Doc/Zsh/builtins.yo12
-rw-r--r--Doc/Zsh/grammar.yo4
-rw-r--r--Etc/zsh-development-guide16
-rw-r--r--README43
-rw-r--r--Src/Builtins/rlimits.mdd1
-rw-r--r--Src/builtin.c11
-rw-r--r--Src/init.c1
-rw-r--r--Src/mkbltnmlst.sh40
9 files changed, 112 insertions, 28 deletions
diff --git a/ChangeLog b/ChangeLog
index 83da8f9a7..1c03b841b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-02-03  Peter Stephenson  <pws@csr.com>
+
+	* 27648, 267650/1, unposted README change: README,
+	Doc/Zsh/builtins.yo, Doc/Zsh/grammar.yo,
+	Etc/zsh-development-guide, Src/builtin.c, Src/init.c,
+	Src/mkbltnmlst.sh, Src/Builtins/rlimits.mdd: "repeat"
+        is not available when starting in emulation mode,
+	"ulimit" is; document that "sched", "limit", "unlimit"
+	already aren't.
+
 2010-02-02  Peter Stephenson  <p.w.stephenson@ntlworld.com>
 
 	* Mikael: 27647: Completion/Unix/Command/_cp: update
@@ -12669,5 +12679,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4880 $
+* $Revision: 1.4881 $
 *****************************************************
diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo
index cc771096a..0a8038f6c 100644
--- a/Doc/Zsh/builtins.yo
+++ b/Doc/Zsh/builtins.yo
@@ -872,6 +872,10 @@ sitem(var(n)tt(k))(kilobytes (default))
 sitem(var(n)tt(m))(megabytes or minutes)
 sitem([var(mm)tt(:)]var(ss))(minutes and seconds)
 endsitem()
+
+The tt(limit) command is not made available by default when the
+shell starts in a mode emulating another shell.  It can be made available
+with the command `tt(zmodload -F zsh/rlimits b:limit)'.
 )
 findex(local)
 item(tt(local) [ {tt(PLUS())|tt(-)}tt(AEFHUahlprtux) ] \
@@ -1286,6 +1290,10 @@ all parameters are printed on the standard output.  If the only argument is
 For historical reasons, `tt(set -)' is treated as `tt(set +xv)'
 and `tt(set -) var(args)' as `tt(set +xv --) var(args)' when in
 any other emulation mode than zsh's native mode.
+
+The tt(sched) builtin is not made available by default when the shell
+starts in a mode emulating another shell.  It can be made available
+with the command `tt(zmodload -F zsh/sched b:sched)'.
 )
 module(setcap)(zsh/cap)
 findex(setopt)
@@ -1794,6 +1802,10 @@ If the tt(-h) flag is given and the shell has appropriate privileges,
 the hard resource limit for each var(resource) is removed.
 The resources of the shell process are only changed if the tt(-s)
 flag is given.
+
+The tt(unlimit) command is not made available by default when the
+shell starts in a mode emulating another shell.  It can be made available
+with the command `tt(zmodload -F zsh/rlimits b:unlimit)'.
 )
 findex(unset)
 cindex(parameters, unsetting)
diff --git a/Doc/Zsh/grammar.yo b/Doc/Zsh/grammar.yo
index 64cc1e26c..a8e223bb9 100644
--- a/Doc/Zsh/grammar.yo
+++ b/Doc/Zsh/grammar.yo
@@ -222,6 +222,10 @@ item(tt(repeat) var(word) tt(do) var(list) tt(done))(
 var(word) is expanded and treated as an arithmetic expression,
 which must evaluate to a number var(n).
 var(list) is then executed var(n) times.
+
+The tt(repeat) syntax is disabled by default when the
+shell starts in a mode emulating another shell.  It can be enabled
+with the command `tt(enable -r repeat)'
 )
 findex(case)
 cindex(case selection)
diff --git a/Etc/zsh-development-guide b/Etc/zsh-development-guide
index fcbc3eab6..db78f94a6 100644
--- a/Etc/zsh-development-guide
+++ b/Etc/zsh-development-guide
@@ -198,12 +198,16 @@ following shell variables:
   - nozshdep        non-empty indicates no dependence on the `zsh/main'
                     pseudo-module
   - alwayslink      if non-empty, always link the module into the executable
-  - autobins        builtins defined by the module, for autoloading
-  - autoinfixconds  infix condition codes defined by the module, for
-                    autoloading (without the leading `-')
-  - autoprefixconds like autoinfixconds, but for prefix condition codes
-  - autoparams      parameters defined by the module, for autoloading
-  - automathfuncs   math functions defined by the module, for autoloading
+  - autofeatures    features defined by the module for autoloading,
+                    a space-separated list.  The syntax for features is as
+                    for zmodload -F, e.g. b:mybin refers to the builtin
+                    mybin.  This replaces the previous mechanism with
+                    separate variables for builtins, conditions, math
+                    functions and parameters.  Note the features are only
+                    available in zsh's native mode, not in emulation modes.
+  - autofeatures_emu As autofeatures, but the features so presented are
+                    available in modes that are *not* zsh's native mode.
+		    The variable autofeatures must also be present.
   - objects         .o files making up this module (*must* be defined)
   - proto           .syms files for this module (default generated from $objects)
   - headers         extra headers for this module (default none)
diff --git a/README b/README
index f30b037f6..9f5195bea 100644
--- a/README
+++ b/README
@@ -136,6 +136,17 @@ The variable HOME is no longer set by the shell if zsh is emulating any
 other shell at startup; it must be present in the environment or set
 subsequently by the user.  It is valid for the variable to be unset.
 
+If the shell starts in a mode where it is emulating another shell
+(typically because the base name of the shell was "sh" or another known
+shell), the "repeat" syntax is not available by default, to avoid clashes
+with external commands, but the "ulimit" command is available by default.
+"limit", "sched" and "unlimit" are not available by default in such modes:
+this has been the case for many versions but is now documented for the
+first time.  (Users should note that emulation modes are not designed for
+backwards compatibility with previous versions of zsh, but to maximise
+compatibility with other shells, hence it is not safe to assume emulation
+modes will behave consistently between zsh versions.)
+
 Parameter substitutions in the form ${param//#%search/replace} match
 against "search" anchored at both ends of the parameter value.  Previously
 this syntax would have matched against "%search", anchored only at the head
@@ -143,23 +154,33 @@ of the value.  The form ${param//#$search/replace} where the value
 $search starts with "%" considers the "%" to be part of the search
 string as before.
 
-The MULTIBYTE option is on by default where it is available; this
-causes many operations to recognise characters as in the current locale.
-Older versions of the shell always assumed a character was one byte.
-In some places the width of the character will be used; this is transparent
-when used for calculations of screen position, but also occurs, for
-example, in calculations of padding width.  Note that MULTIBYTE is
-not automatically set when emulating Bourne- and POSIX-style shells;
-for interative use of these emulations it may be necessary to set
-it by hand.
+Configure attempts to decide if multibyte characters are supported by the
+system and if so sets the effect of --enable-multibyte, unless
+--disable-multibyte was passed on the command line.  When
+--enable-multibyte is in effect, the MULTIBYTE shell option is on by
+default; this causes many operations to recognise characters in the current
+locale.  (Most typically this is used for a UTF-8 character set but the
+shell will work with any character set provided by the system where
+individual octets are either US ASCII characters or have the top bit set.)
+Older versions of the shell always assumed a character was one byte; this
+remains the case if --disable-multibyte is in effect or if the MULTIBYTE
+option is unset.  In some places the width of characters will be taken into
+account where previously a raw string length was used; this is transparent
+in calculations of screen position, but also occurs, for example, in
+calculations of padding width.  Note that MULTIBYTE is not automatically
+set when emulating Bourne- and POSIX-style shells; for interactive use of
+these emulations it may be necessary to set it by hand.  Note also that the
+option COMBINING_CHARS is not set by default due to difficulties detecting
+the ability of the terminal to display combining characters correctly; MAC
+users in particular will probably wish to set this option.
 
 Zsh has previously been lax about whether it allows octets with the
 top bit set to be part of a shell identifier.  Older versions of the shell
 assumed all such octets were allowed in identifiers, however the POSIX
 standard does not allow such characters in identifiers.  The older
 behaviour is still obtained with --disable-multibyte in effect.
-With --enable-multibyte in effect (this is now the default anywhere
-it is supported) there are three possible cases:
+With --enable-multibyte in effect (see previous paragraph) there are three
+possible cases:
   MULTIBYTE option unset:  only ASCII characters are allowed; the
     shell does not attempt to identify non-ASCII characters at all.
   MULTIBYTE option set, POSIX_IDENTIFIERS option unset: in addition
diff --git a/Src/Builtins/rlimits.mdd b/Src/Builtins/rlimits.mdd
index 63ca7f9f3..ca9fa8b84 100644
--- a/Src/Builtins/rlimits.mdd
+++ b/Src/Builtins/rlimits.mdd
@@ -3,6 +3,7 @@ link=either
 load=yes
 
 autofeatures="b:limit b:ulimit b:unlimit"
+autofeatures_emu="b:ulimit"
 
 objects="rlimits.o"
 
diff --git a/Src/builtin.c b/Src/builtin.c
index 0ce3aef56..1eca82099 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -206,6 +206,17 @@ freebuiltinnode(HashNode hn)
     }
 }
 
+/**/
+void
+init_builtins(void)
+{
+    if (!EMULATION(EMULATE_ZSH)) {
+	HashNode hn = reswdtab->getnode2(reswdtab, "repeat");
+	if (hn)
+	    reswdtab->disablenode(hn, 0);
+    }
+}
+
 /* Make sure we have space for a new option and increment. */
 
 #define OPT_ALLOC_CHUNK 16
diff --git a/Src/init.c b/Src/init.c
index 812cd8409..02129ddbb 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -1443,6 +1443,7 @@ zsh_main(UNUSED(int argc), char **argv)
     setupvals();
     init_signals();
     init_bltinmods();
+    init_builtins();
     run_init_scripts();
     init_misc();
 
diff --git a/Src/mkbltnmlst.sh b/Src/mkbltnmlst.sh
index d9c5b13e9..c4611d8b3 100644
--- a/Src/mkbltnmlst.sh
+++ b/Src/mkbltnmlst.sh
@@ -37,18 +37,38 @@ for x_mod in $x_mods; do
         echo "/* non-linked-in known module \`$x_mod' */"
 	linked=no
     esac
-    unset moddeps autofeatures
+    unset moddeps autofeatures autofeatures_emu
     . $srcdir/../$modfile
     if test "x$autofeatures" != x; then
-	echo "  if (EMULATION(EMULATE_ZSH)) {"
-	echo "    char *features[] = { "
-	for feature in $autofeatures; do
-	    echo "      \"$feature\","
-	done
-	echo "      NULL"
-	echo "    }; "
-	echo "    autofeatures(\"zsh\", \"$x_mod\", features, 0, 1);"
-	echo "  }"
+        if test "x$autofeatures_emu" != x; then
+            echo "  {"
+	    echo "    char *zsh_features[] = { "
+	    for feature in $autofeatures; do
+		echo "      \"$feature\","
+	    done
+	    echo "      NULL"
+	    echo "    }; "
+	    echo "    char *emu_features[] = { "
+	    for feature in $autofeatures_emu; do
+		echo "      \"$feature\","
+	    done
+	    echo "      NULL"
+	    echo "    }; "
+	    echo "    autofeatures(\"zsh\", \"$x_mod\","
+	    echo "       EMULATION(EMULATE_ZSH) ? zsh_features : emu_features,"
+	    echo "       0, 1);"
+	    echo "  }"
+        else
+	    echo "  if (EMULATION(EMULATE_ZSH)) {"
+	    echo "    char *features[] = { "
+	    for feature in $autofeatures; do
+		echo "      \"$feature\","
+	    done
+	    echo "      NULL"
+	    echo "    }; "
+	    echo "    autofeatures(\"zsh\", \"$x_mod\", features, 0, 1);"
+	    echo "  }"
+	fi
     fi
     for dep in $moddeps; do
 	echo "  add_dep(\"$x_mod\", \"$dep\");"