summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Main <zefram@users.sourceforge.net>2000-07-30 19:18:13 +0000
committerAndrew Main <zefram@users.sourceforge.net>2000-07-30 19:18:13 +0000
commit84b04a8728ec1e618b6feb508a12de460fe13428 (patch)
tree1362c72c67296818ed50d71561c986c935e923cf
parent9743c19d618056b3af1f5efe887a1e8a9944e27b (diff)
downloadzsh-84b04a8728ec1e618b6feb508a12de460fe13428.tar.gz
zsh-84b04a8728ec1e618b6feb508a12de460fe13428.zip
12436: Doc/Zsh/invoke.yo, Src/init.c: Make -b behave like
the csh -b, permitting more options to be stacked after it and take effect. Make -b take effect depending on SH_OPTION_LETTERS, consistent with all the other single-letter options, rather than having a clashing check of emulation type.
-rw-r--r--ChangeLog8
-rw-r--r--Doc/Zsh/invoke.yo7
-rw-r--r--Src/init.c20
3 files changed, 23 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 7649ef8f8..7e966ca2a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2000-07-30 Andrew Main <zefram@zsh.org>
+ * 12436: Doc/Zsh/invoke.yo, Src/init.c: Make -b behave like
+ the csh -b, permitting more options to be stacked after it and
+ take effect. Make -b take effect depending on SH_OPTION_LETTERS,
+ consistent with all the other single-letter options, rather than
+ having a clashing check of emulation type.
+
+2000-07-30 Andrew Main <zefram@zsh.org>
+
* 12434: Doc/Zsh/invoke.yo, Src/init.c, Src/options.c, Src/zsh.h,
Src/zsh.mdd: Allow options to be specified on the zsh command line
in the form of GNU-style long options. Also handle --version
diff --git a/Doc/Zsh/invoke.yo b/Doc/Zsh/invoke.yo
index de0ed6b6b..2d6767975 100644
--- a/Doc/Zsh/invoke.yo
+++ b/Doc/Zsh/invoke.yo
@@ -72,8 +72,11 @@ with preceding options (so `tt(-x-)' is equivalent to `tt(-x --)'). Options
are not permitted to be stacked after `tt(--)' (so `tt(-x-f)' is an error),
but note the GNU-style option form discussed above, where `tt(--shwordsplit)'
is permitted and does not end option processing.
-Except when emulating sh or ksh, the option `tt(-b)' is treated the same way
-as `tt(--)' for the purpose of ending option processing.
+
+Except when the bf(sh)/bf(ksh) emulation single-letter options are in effect,
+the option `tt(-b)' (or `tt(PLUS()b)') ends option processing.
+`tt(-b)' is like `tt(--)', except that further single-letter options can be
+stacked after the `tt(-b)' and will take effect as normal.
startmenu()
menu(Compatibility)
diff --git a/Src/init.c b/Src/init.c
index 04ed141dd..d0140a525 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -186,10 +186,10 @@ static int restricted;
void
parseargs(char **argv)
{
+ int optionbreak = 0;
char **x;
int action, optno;
LinkList paramlist;
- int bourne = (emulation == EMULATE_KSH || emulation == EMULATE_SH);
argzero = *argv++;
SHIN = 0;
@@ -206,17 +206,15 @@ parseargs(char **argv)
opts[SINGLECOMMAND] = 0;
/* loop through command line options (begins with "-" or "+") */
- while (*argv && (**argv == '-' || **argv == '+')) {
+ while (!optionbreak && *argv && (**argv == '-' || **argv == '+')) {
char *args = *argv;
action = (**argv == '-');
if (!argv[0][1])
*argv = "--";
while (*++*argv) {
- /* The pseudo-option `--' signifies the end of options. *
- * `-b' does too, csh-style, unless we're emulating a *
- * Bourne style shell. */
- if (**argv == '-' || (!bourne && **argv == 'b')) {
+ if (**argv == '-') {
if(!argv[0][1]) {
+ /* The pseudo-option `--' signifies the end of options. */
argv++;
goto doneoptions;
}
@@ -240,7 +238,11 @@ parseargs(char **argv)
goto longoptions;
}
- if (**argv == 'c') { /* -c command */
+ if (unset(SHOPTIONLETTERS) && **argv == 'b') {
+ /* -b ends options at the end of this argument */
+ optionbreak = 1;
+ } else if (**argv == 'c') {
+ /* -c command */
cmd = *argv;
opts[INTERACTIVE] &= 1;
opts[SHINSTDIN] = 0;
@@ -321,13 +323,11 @@ parseargs(char **argv)
static void
printhelp(void)
{
- int bourne = (emulation == EMULATE_KSH || emulation == EMULATE_SH);
-
printf("Usage: %s [<options>] [<argument> ...]\n", argzero);
printf("\nSpecial options:\n");
printf(" --help show this message, then exit\n");
printf(" --version show zsh version number, then exit\n");
- if(!bourne)
+ if(unset(SHOPTIONLETTERS))
printf(" -b end option processing, like --\n");
printf(" -c take first argument as a command to execute\n");
printf(" -o OPTION set an option by name (see below)\n");