diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2007-08-14 11:51:16 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2007-08-14 11:51:16 +0000 |
commit | 83cbc075ac169570427879fc34200367c149ca96 (patch) | |
tree | fa83e51d87bcc5608288ca7a476d99fd509f60ac | |
parent | 649d87c8cb45fdcd1fe39560b04a1dd22c417bbb (diff) | |
download | zsh-83cbc075ac169570427879fc34200367c149ca96.tar.gz zsh-83cbc075ac169570427879fc34200367c149ca96.tar.xz zsh-83cbc075ac169570427879fc34200367c149ca96.zip |
23757: suppress correction of command words followed by ()
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Src/lex.c | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index c467050e8..0748f6710 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-08-14 Peter Stephenson <pws@csr.com> + + * 23757: Src/lex.c: suppression correction of command + words immediately followed by () or something that looks + like it's going to be one. + 2007-08-12 Andrey Borzenkov <bor@zsh.org> * 23751: Completion/Linux/Command/_modutils: support for diff --git a/Src/lex.c b/Src/lex.c index 776eaf95a..8bf90847a 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -66,7 +66,12 @@ int isfirstch; /**/ int inalmore; -/* don't do spelling correction */ +/* + * Don't do spelling correction. + * Bit 1 is only valid for the current word. It's + * set when we detect a lookahead that stops the word from + * needing correction. + */ /**/ int nocorrect; @@ -344,6 +349,7 @@ yylex(void) do tok = gettok(); while (tok != ENDINPUT && exalias()); + nocorrect &= 1; if (tok == NEWLIN || tok == ENDINPUT) { while (hdocs) { struct heredocs *next = hdocs->next; @@ -629,7 +635,7 @@ isnumglob(void) } /**/ -int +static int gettok(void) { int c, d; @@ -1036,8 +1042,16 @@ gettokstr(int c, int sub) * pws 1999/6/14 */ if (e == ')' || (isset(SHGLOB) && inblank(e) && !bct && - !brct && !intpos && incmdpos)) + !brct && !intpos && incmdpos)) { + /* + * Either a () token, or a command word with + * something suspiciously like a ksh function + * definition. + * The current word isn't spellcheckable. + */ + nocorrect |= 2; goto brk; + } } /* * This also handles the [k]sh `foo( )' function definition. |