about summary refs log tree commit diff
path: root/Src/Zle/complete.c
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-01-28 14:04:23 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-01-28 14:04:23 +0000
commit17ef03b99b637609286ea8fe365f90df91a577ab (patch)
treec20c2be67155007b50e56f01a4c047b653020edc /Src/Zle/complete.c
parent5ce459243f75e0505383340cace0c5838cff5133 (diff)
downloadzsh-17ef03b99b637609286ea8fe365f90df91a577ab.tar.gz
zsh-17ef03b99b637609286ea8fe365f90df91a577ab.tar.xz
zsh-17ef03b99b637609286ea8fe365f90df91a577ab.zip
zsh-workers/9458
Diffstat (limited to 'Src/Zle/complete.c')
-rw-r--r--Src/Zle/complete.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 75bda321e..0b9aa20ad 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -1026,7 +1026,7 @@ makecompparams(void)
 
     comprpms[CPN_COMPSTATE] = cpm;
     tht = paramtab;
-    cpm->level = locallevel;
+    cpm->level = locallevel + 1;
     cpm->gets.hfn = get_compstate;
     cpm->sets.hfn = set_compstate;
     cpm->unsetfn = compunsetfn;
@@ -1146,8 +1146,24 @@ compunsetfn(Param pm, int exp)
 	    }
 	}
     } else if (PM_TYPE(pm->flags) == PM_HASHED) {
+	Param *p;
+	int i;
+
 	deletehashtable(pm->u.hash);
 	pm->u.hash = NULL;
+
+	for (p = compkpms, i = CP_KEYPARAMS; i--; p++)
+	    *p = NULL;
+    }
+    if (!exp) {
+	Param *p;
+	int i;
+
+	for (p = comprpms, i = CP_REALPARAMS; i; p++, i--)
+	    if (*p == pm) {
+		*p = NULL;
+		break;
+	    }
     }
 }
 
@@ -1159,18 +1175,22 @@ comp_setunset(int rset, int runset, int kset, int kunset)
 
     if (comprpms && (rset >= 0 || runset >= 0)) {
 	for (p = comprpms; rset || runset; rset >>= 1, runset >>= 1, p++) {
-	    if (rset & 1)
-		(*p)->flags &= ~PM_UNSET;
-	    if (runset & 1)
-		(*p)->flags |= PM_UNSET;
+	    if (*p) {
+		if (rset & 1)
+		    (*p)->flags &= ~PM_UNSET;
+		if (runset & 1)
+		    (*p)->flags |= PM_UNSET;
+	    }
 	}
     }
-    if (comprpms && (kset >= 0 || kunset >= 0)) {
+    if (compkpms && (kset >= 0 || kunset >= 0)) {
 	for (p = compkpms; kset || kunset; kset >>= 1, kunset >>= 1, p++) {
-	    if (kset & 1)
-		(*p)->flags &= ~PM_UNSET;
-	    if (kunset & 1)
-		(*p)->flags |= PM_UNSET;
+	    if (*p) {
+		if (kset & 1)
+		    (*p)->flags &= ~PM_UNSET;
+		if (kunset & 1)
+		    (*p)->flags |= PM_UNSET;
+	    }
 	}
     }
 }