aboutsummaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2015-03-04 15:56:17 +0000
committerPeter Stephenson <pws@zsh.org>2015-03-04 15:56:17 +0000
commit0ac87e3f595ac49e0536eaac2109f0a1f30a7af9 (patch)
tree87a52a6166170d7c182a9077b2415bcbdf497545 /Src
parent42e5f591f5227d829ca27fd534c34400d92a8553 (diff)
downloadzsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.tar.gz
zsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.tar.xz
zsh-0ac87e3f595ac49e0536eaac2109f0a1f30a7af9.zip
34641: make it possible to alias tokens
Diffstat (limited to 'Src')
-rw-r--r--Src/lex.c71
1 files changed, 41 insertions, 30 deletions
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 */