diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Doc/Zsh/invoke.yo | 7 | ||||
-rw-r--r-- | Src/init.c | 20 |
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"); |