summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2005-03-21 18:49:04 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2005-03-21 18:49:04 +0000
commit24699f961dc3757ddf692413028a4c0f03abe0fd (patch)
treeab3dcc66fd6656b5e43c7e925b06ecc65adeb007
parentf1d0ca4d80b53aaba81909ba220de64eb77408a4 (diff)
downloadzsh-24699f961dc3757ddf692413028a4c0f03abe0fd.tar.gz
zsh-24699f961dc3757ddf692413028a4c0f03abe0fd.zip
21045: fix some uses of Meta characters in completion
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/compcore.c4
-rw-r--r--Src/Zle/complete.c42
3 files changed, 43 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index e6f7981a0..c54178c51 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-03-21 Peter Stephenson <pws@csr.com>
+
+ * 21045: Src/Zle/compcore.c, Src/Zle/complete.c: more places
+ where completion didn't handled Meta characters.
+
2005-03-21 Oliver Kiddle <opk@zsh.org>
* Stephen RĂ¼ger: 21019: Completion/Unix/Command/_mpc:
diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c
index 59443a8fa..0c1f13078 100644
--- a/Src/Zle/compcore.c
+++ b/Src/Zle/compcore.c
@@ -1532,8 +1532,8 @@ set_comp_sep(void)
untokenize(ss);
compsuffix = ztrdup(ss);
}
- if ((i = strlen(compprefix)) &&
- compprefix[i - 1] == '\\' && compprefix[i - 2] != '\\')
+ if ((i = strlen(compprefix)) > 1 && compprefix[i - 1] == '\\' &&
+ compprefix[i - 2] != '\\' && compprefix[i - 2] != Meta)
compprefix[i - 1] = '\0';
tmp = tricat(compqiprefix, compiprefix, multiquote(qp, 1));
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 717be8896..d1f3366e7 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -821,18 +821,32 @@ do_comp_vars(int test, int na, char *sa, int nb, char *sb, int mod)
add = -1;
} else {
p = compprefix + 1;
+ if (*p == Meta)
+ p++;
add = 1;
}
- for (; l; l--, p += add) {
+ for (;;) {
sav = *p;
*p = '\0';
test = pattry(pp, compprefix);
*p = sav;
if (test && !--na)
break;
+ if (add > 0) {
+ if (p == compprefix + l)
+ return 0;
+ if (*p == Meta)
+ p += 2;
+ else
+ p++;
+ } else {
+ if (p == compprefix)
+ return 0;
+ p--;
+ if (p > compprefix && p[-1] == Meta)
+ p--;
+ }
}
- if (!l)
- return 0;
if (mod)
ignore_prefix(p - compprefix);
} else {
@@ -847,14 +861,30 @@ do_comp_vars(int test, int na, char *sa, int nb, char *sb, int mod)
add = 1;
} else {
p = compsuffix + l - 1;
+ if (p > compsuffix && p[-1] == Meta)
+ p--;
add = -1;
}
- for (; l; l--, p += add)
+ for (;;) {
if (pattry(pp, p) && !--na)
break;
- if (!l)
- return 0;
+ if (add > 0) {
+ if (p == compsuffix + l)
+ return 0;
+ if (*p == Meta)
+ p += 2;
+ else
+ p++;
+ } else {
+ if (p == compsuffix)
+ return 0;
+ p--;
+ if (p > compsuffix && p[-1] == Meta)
+ p--;
+ }
+ }
+
if (mod)
ignore_suffix(ol - (p - compsuffix));
}