summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Completion/Base/Utility/_arguments8
-rw-r--r--Src/Zle/computil.c8
3 files changed, 19 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f7418026..4f8801e50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-07-30 Sven Wischnowsky <wischnow@zsh.org>
+
+ * 15526: Completion/Base/Utility/_arguments, Src/Zle/computil.c:
+ change order in which compgroups adds groups; add comment to
+ _arguments trying to explain how and why the return value is
+ wrong
+
2001-07-28 Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
* 15511: Functions/Misc/zcalc, Doc/Zsh/contrib.yo: make
diff --git a/Completion/Base/Utility/_arguments b/Completion/Base/Utility/_arguments
index 006e80374..0551afcf2 100644
--- a/Completion/Base/Utility/_arguments
+++ b/Completion/Base/Utility/_arguments
@@ -428,6 +428,14 @@ if (( $# )) && comparguments -i "$autod" "$singopt[@]" "$@"; then
if [[ -n "$aret" ]]; then
[[ -n $rawret ]] && return 300
+
+### Returning non-zero would allow the calling function to add its own
+### completions if we generated only options and have to use a ->state
+### action. But if that then doesn't generate matches, the calling
+### function's return value would be wrong unless it compares
+### $compstate[nmatches] to its previous value. Ugly.
+###
+### return 1
else
[[ -n "$noargs" && nm -eq "$compstate[nmatches]" ]] && _message "$noargs"
fi
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 552f5f745..12fafc71d 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -4281,9 +4281,7 @@ bin_compgroups(char *nam, char **args, char *ops, int func)
SWITCHHEAPS(oldheap, compheap) {
while ((n = *args++)) {
endcmgroup(NULL);
- begcmgroup(n, 0);
- endcmgroup(NULL);
- begcmgroup(n, CGF_NOSORT);
+ begcmgroup(n, CGF_NOSORT|CGF_UNIQCON);
endcmgroup(NULL);
begcmgroup(n, CGF_UNIQALL);
endcmgroup(NULL);
@@ -4291,7 +4289,9 @@ bin_compgroups(char *nam, char **args, char *ops, int func)
endcmgroup(NULL);
begcmgroup(n, CGF_UNIQALL);
endcmgroup(NULL);
- begcmgroup(n, CGF_NOSORT|CGF_UNIQCON);
+ begcmgroup(n, CGF_NOSORT);
+ endcmgroup(NULL);
+ begcmgroup(n, 0);
}
} SWITCHBACKHEAPS(oldheap);