diff options
author | Peter Stephenson <pws@zsh.org> | 2015-03-04 15:56:17 +0000 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2015-03-04 15:56:17 +0000 |
commit | 0ac87e3f595ac49e0536eaac2109f0a1f30a7af9 (patch) | |
tree | 87a52a6166170d7c182a9077b2415bcbdf497545 | |
parent | 42e5f591f5227d829ca27fd534c34400d92a8553 (diff) | |
download | zsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.tar.gz zsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.tar.xz zsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.zip |
34641: make it possible to alias tokens
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/lex.c | 71 |
2 files changed, 44 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog index 2be4a7f65..d4c6c4d4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2015-03-04 Peter Stephenson <p.stephenson@samsung.com> + * 34641: Src/lex.c, Test/A02alias.ztst: make it possible to + alias tokens. + * Daniel Shahaf: 34640: Doc/Zsh/compsys.yo: clarify documentation for _guard function. diff --git a/Src/lex.c b/Src/lex.c index 307b6e985..a07661404 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -1728,13 +1728,48 @@ gotword(void) } } +/* Check if current lex text matches an alias: 1 if so, else 0 */ + +static int +checkalias(void) +{ + Alias an; + + if (!noaliases && isset(ALIASESOPT) && + (!isset(POSIXALIASES) || + !reswdtab->getnode(reswdtab, zshlextext))) { + char *suf; + + an = (Alias) aliastab->getnode(aliastab, zshlextext); + if (an && !an->inuse && + ((an->node.flags & ALIAS_GLOBAL) || incmdpos || inalmore)) { + inpush(an->text, INP_ALIAS, an); + if (an->text[0] == ' ' && !(an->node.flags & ALIAS_GLOBAL)) + aliasspaceflag = 1; + lexstop = 0; + return 1; + } + if ((suf = strrchr(zshlextext, '.')) && suf[1] && + suf > zshlextext && suf[-1] != Meta && + (an = (Alias)sufaliastab->getnode(sufaliastab, suf+1)) && + !an->inuse && incmdpos) { + inpush(dupstring(zshlextext), INP_ALIAS, NULL); + inpush(" ", INP_ALIAS, NULL); + inpush(an->text, INP_ALIAS, an); + lexstop = 0; + return 1; + } + } + + return 0; +} + /* expand aliases and reserved words */ /**/ int exalias(void) { - Alias an; Reswd rw; hwend(); @@ -1746,7 +1781,7 @@ exalias(void) if (!tokstr) { zshlextext = tokstrings[tok]; - return 0; + return checkalias(); } else { VARARR(char, copy, (strlen(tokstr) + 1)); @@ -1772,34 +1807,10 @@ exalias(void) if (tok == STRING) { /* Check for an alias */ - if (!noaliases && isset(ALIASESOPT) && - (!isset(POSIXALIASES) || - !reswdtab->getnode(reswdtab, zshlextext))) { - char *suf; - - an = (Alias) aliastab->getnode(aliastab, zshlextext); - if (an && !an->inuse && - ((an->node.flags & ALIAS_GLOBAL) || incmdpos || inalmore)) { - inpush(an->text, INP_ALIAS, an); - if (an->text[0] == ' ' && !(an->node.flags & ALIAS_GLOBAL)) - aliasspaceflag = 1; - lexstop = 0; - if (zshlextext == copy) - zshlextext = tokstr; - return 1; - } - if ((suf = strrchr(zshlextext, '.')) && suf[1] && - suf > zshlextext && suf[-1] != Meta && - (an = (Alias)sufaliastab->getnode(sufaliastab, suf+1)) && - !an->inuse && incmdpos) { - inpush(dupstring(zshlextext), INP_ALIAS, NULL); - inpush(" ", INP_ALIAS, NULL); - inpush(an->text, INP_ALIAS, an); - lexstop = 0; - if (zshlextext == copy) - zshlextext = tokstr; - return 1; - } + if (checkalias()) { + if (zshlextext == copy) + zshlextext = tokstr; + return 1; } /* Then check for a reserved word */ |