summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-07-19 08:40:36 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-07-19 08:40:36 +0000
commitfacff10b116622e8cb409d5b1aa6eaa7574f949d (patch)
treecf1f9806ba88aafe762663f8c4b2b1cec44c59b9
parent6a3e89d5391073cf51c459e7ab7b5c1e3b4528d4 (diff)
downloadzsh-facff10b116622e8cb409d5b1aa6eaa7574f949d.tar.gz
zsh-facff10b116622e8cb409d5b1aa6eaa7574f949d.zip
yet another followup to 15497; make _describe filter out non-matching strings before calling compdescribe, otherwise some matches will be hiddens (15415)
-rw-r--r--ChangeLog7
-rw-r--r--Completion/Base/Utility/_describe43
-rw-r--r--Src/Zle/computil.c6
3 files changed, 53 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 1d0560fe4..b402514e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-07-19 Sven Wischnowsky <wischnow@zsh.org>
+
+ * 15415: Completion/Base/Utility/_describe, Src/Zle/computil.c:
+ yet another followup to 15407; make _describe filter out
+ non-matching strings before calling compdescribe, otherwise
+ some matches will be hiddens
+
2001-07-18 Sven Wischnowsky <wischnow@zsh.org>
* 15409: Src/Zle/computil.c: fix for 15407; there may be sets
diff --git a/Completion/Base/Utility/_describe b/Completion/Base/Utility/_describe
index a58954f47..45b8c17d6 100644
--- a/Completion/Base/Utility/_describe
+++ b/Completion/Base/Utility/_describe
@@ -21,8 +21,49 @@ fi
# Do the tests. `showd' is set if the descriptions should be shown.
zstyle -T ":completion:${curcontext}:$_type" verbose && _showd=yes
+
if zstyle -T ":completion:${curcontext}:$_type" list-grouped; then
+ local _argv _new _strs _mats _opts _i=2
+
+ _argv=( "$@" )
_grp=(-g)
+ _new=( "$1" )
+ shift
+
+ while (( $# )); do
+
+ _strs="_a_$_i"
+ eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )'
+ _argv[_i]="_a_$_i"
+ shift
+ (( _i++ ))
+
+ if [[ "$1" = (|-*) ]]; then
+ _mats=
+ else
+ _matss="_a_$_i"
+ eval local "_a_$_i;_a_$_i"'=( "${'$1'[@]}" )'
+ _argv[_i]="_a_$_i"
+ shift
+ (( _i++ ))
+ fi
+
+ _opts=( "${(@)argv[1,(i)--]:#--}" )
+ shift "$#_opts"
+ (( _i += $#_opts ))
+ if [[ $1 == -- ]]; then
+ shift
+ (( _i++ ))
+ fi
+
+ if [[ -n $_mats ]]; then
+ compadd "$_opts[@]" -O $_strs -D $_mats -a $_strs
+ else
+ compadd "$_opts[@]" -O $_strs -a $_strs
+ fi
+ done
+
+ set - "$_argv[@]"
else
_grp=()
fi
@@ -50,9 +91,11 @@ while _tags; do
if [[ -n "$_hide" ]]; then
if [[ "$PREFIX" = --* ]]; then
_tmpd=( "${(@)_tmpd#--}" )
+ _tmph=( "${(@)_tmph#--}" )
_tmps=( "${(@)_tmps#--}" )
elif [[ "$PREFIX" = [-+]* ]]; then
_tmpd=( "${(@)_tmpd#[-+]}" )
+ _tmph=( "${(@)_tmph#[-+]}" )
_tmps=( "${(@)_tmps#[-+]}" )
fi
fi
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 32147dd52..299f3ca98 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -64,7 +64,7 @@ struct cdset {
/* Maximum string length when used with descriptions. */
-#define CD_MAXLEN 20
+#define CD_MAXLEN 30
static struct cdstate cd_state;
@@ -171,8 +171,8 @@ cd_calc()
}
}
}
- if (cd_state.pre > 20)
- cd_state.pre = 20;
+ if (cd_state.pre > CD_MAXLEN)
+ cd_state.pre = CD_MAXLEN;
}
/* Initialisation. Store and calculate the string and matches and so on. */