diff options
-rw-r--r-- | Completion/Core/_display | 7 | ||||
-rw-r--r-- | Src/Zle/zle_tricky.c | 19 |
2 files changed, 20 insertions, 6 deletions
diff --git a/Completion/Core/_display b/Completion/Core/_display index 5bddeaac1..331915b91 100644 --- a/Completion/Core/_display +++ b/Completion/Core/_display @@ -39,7 +39,7 @@ if (( $#_arr )); then # descriptions. _simple=() - _len=1 + _len=-1 for _i in "$_arr[@]"; do _tmp="${#_i%%:*}" if [[ "$_i" = *:?* ]]; then @@ -49,6 +49,11 @@ if (( $#_arr )); then fi done + if [[ _len -lt 0 ]]; then + eval "${_param}=''" + return 1 + fi + # Now we build the list in `_tmp', adding one line per string. _tmp='' diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c index b3a54bf59..f3d8677a8 100644 --- a/Src/Zle/zle_tricky.c +++ b/Src/Zle/zle_tricky.c @@ -3951,16 +3951,21 @@ addmatches(Cadata dat, char **argv) } else dat->prpre = dupstring(dat->prpre); /* Select the group in which to store the matches. */ - if (dat->group || dat->ylist) { + if (dat->group) { endcmgroup(NULL); - begcmgroup((dat->ylist ? NULL : dat->group), - (dat->aflags & CAF_NOSORT)); + begcmgroup(dat->group, (dat->aflags & CAF_NOSORT)); if (dat->aflags & CAF_NOSORT) mgroup->flags |= CGF_NOSORT; } else { endcmgroup(NULL); begcmgroup("default", 0); } + if (dat->ylist) { + endcmgroup(NULL); + begcmgroup(NULL, (dat->aflags & CAF_NOSORT)); + if (dat->aflags & CAF_NOSORT) + mgroup->flags |= CGF_NOSORT; + } /* Select the set of matches. */ oisalt = (dat->aflags & CAF_ALT); @@ -5944,9 +5949,13 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd) curcc = cc; mflags = 0; - if (cc->ylist || cc->gname) { + if (cc->gname) { + endcmgroup(NULL); + begcmgroup(cc->gname, cc->mask2 & CC_NOSORT); + } + if (cc->ylist) { endcmgroup(NULL); - begcmgroup((cc->ylist ? NULL : cc->gname), cc->mask2 & CC_NOSORT); + begcmgroup(NULL, cc->mask2 & CC_NOSORT); } if (cc->mask & CC_REMOVE) mflags |= CMF_REMOVE; |