summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2023-09-26 23:08:54 +0200
committerOliver Kiddle <opk@zsh.org>2023-10-11 01:06:50 +0200
commit70320635b4b50b1e84f70e17bf40f107d140bdcf (patch)
tree1cc25c768b07ea9fe565c3aac15b45f5fcdff6bb
parent985952e2f616c816e24c4cf5aee70416e4f23e07 (diff)
downloadzsh-70320635b4b50b1e84f70e17bf40f107d140bdcf.tar.gz
zsh-70320635b4b50b1e84f70e17bf40f107d140bdcf.zip
52189: ignore compadd -M if -U also specified as they don't make sense together
This fixes df completion.
-rw-r--r--ChangeLog4
-rw-r--r--Completion/Unix/Type/_umountable3
-rw-r--r--Src/Zle/complete.c4
3 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index cfc1a2841..a933a5186 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2023-10-10 Oliver Kiddle <opk@zsh.org>
+ * 52189: Completion/Unix/Type/_umountable, Src/Zle/complete.c:
+ ignore compadd -M if -U also specified as they don't make
+ sense together, this fixes df completion
+
* 52217: Completion/BSD/Command/_freebsd-update,
Completion/BSD/Command/_ipfw, Completion/BSD/Command/_pfctl,
Completion/BSD/Command/_sockstat, Completion/Unix/Command/_cmp,
diff --git a/Completion/Unix/Type/_umountable b/Completion/Unix/Type/_umountable
index 6e4988e2d..0111555b6 100644
--- a/Completion/Unix/Type/_umountable
+++ b/Completion/Unix/Type/_umountable
@@ -1,6 +1,6 @@
#autoload
local tmp
-local dev_tmp dpath_tmp mp_tmp mline
+local -a dev_tmp dpath_tmp mp_tmp mline
case "$OSTYPE" in
linux*)
@@ -15,6 +15,7 @@ irix*)
;;
freebsd*|dragonfly*)
/sbin/mount | while read mline; do
+ [[ $mline[(w)1] = map ]] && continue
dev_tmp+=( $mline[(w)1] )
mp_tmp+=( $mline[(w)3] )
done
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 96ad7b3f1..342611f1f 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -829,7 +829,9 @@ bin_compadd(char *name, char **argv, UNUSED(Options ops), UNUSED(int func))
ca_args:
- if (mstr && (match = parse_cmatcher(name, mstr)) == pcm_err) {
+ if (mstr && (dat.aflags & CAF_MATCH) &&
+ (match = parse_cmatcher(name, mstr)) == pcm_err)
+ {
zsfree(mstr);
zfree(dat.dpar, dparsize);
return 1;