Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: Fix inverted condition for unique completions



This change makes most-recent-file[1] completion take a few milliseconds
instead of close to a minute in a directory of 30000 files. I'm not sure
exactly what's going on with these flags, but surely if they are not set,
then we should not deduplicate the set of matches. Most likely this was
a thinko-copy-paste-o from the first NOSORT case which does have to be
negated. I'm not sure why regular tab-press was always fast, but it is
still fast after this change for me.

I don't know when these flags are supposed to be set, so I haven't tested
that case.

[1]
zstyle ':completion:(*-|)most-recent-file:*' match-original both
zstyle ':completion:(*-|)most-recent-file:*' file-sort modification
zstyle ':completion:(*-|)most-recent-file:*' file-patterns '*:all\ files'
zstyle ':completion:most-recent-file:*' hidden all
zstyle ':completion:(*-|)most-recent-file:*' completer _files

---

This bug is present since before cvs, according to git blame.

 Src/Zle/compcore.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c
index ebcd7d85bb..778a4ff571 100644
--- a/Src/Zle/compcore.c
+++ b/Src/Zle/compcore.c
@@ -3254,7 +3254,7 @@ makearray(LinkList l, int type, int flags, int *np, int *nlp, int *llp)
 	    qsort((void *) rp, n, sizeof(Cmatch),
 		  (int (*) _((const void *, const void *)))matchcmp);
 
-	    if (!(flags & CGF_UNIQCON)) {
+	    if (flags & CGF_UNIQCON) {
 		int dup;
 
 		/* And delete the ones that occur more than once. */
@@ -3280,7 +3280,7 @@ makearray(LinkList l, int type, int flags, int *np, int *nlp, int *llp)
 		    nl++;
 	    }
 	} else {
-	    if (!(flags & CGF_UNIQALL) && !(flags & CGF_UNIQCON)) {
+	    if (flags & CGF_UNIQALL) {
                 int dup;
 
 		for (ap = rp; *ap; ap++) {
@@ -3303,7 +3303,7 @@ makearray(LinkList l, int type, int flags, int *np, int *nlp, int *llp)
                             (*ap)->flags |= CMF_FMULT;
                     }
 		}
-	    } else if (!(flags & CGF_UNIQCON)) {
+	    } else if (flags & CGF_UNIQCON) {
 		int dup;
 
 		for (ap = cp = rp; *ap; ap++) {
-- 
2.15.1





Messages sorted by: Reverse Date, Date, Thread, Author