summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_gpg23
2 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 62e3bf2b0..fa6981903 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-01 Peter Stephenson <pws@csr.com>
+
+ * users/10564: Completion/Unix/Command/_gpg: use appropriate
+ key ring arguments to search key rings.
+
2006-07-30 Barton E. Schaefer <schaefer@zsh.org>
* unposted (see users/10559): Functions/Zle/keymap+widget: a
diff --git a/Completion/Unix/Command/_gpg b/Completion/Unix/Command/_gpg
index 04b6f714c..a4680a0c2 100644
--- a/Completion/Unix/Command/_gpg
+++ b/Completion/Unix/Command/_gpg
@@ -139,18 +139,35 @@ if [[ $state = args ]]; then
fi
fi
+# We need to keep some arguments to get a consistent list of keys
+# etc.
+local -a needed
+integer krind=${words[(I)--keyring(|=*)]}
+needed=(${words[(r)--no-default-keyring]})
+if (( krind )); then
+ # We have a --keyring option. We can't be completing its
+ # argument because that was handled above, so it must be complete.
+ if [[ $words[krind] = --keyring ]]; then
+ if [[ -n $words[krind+1] ]]; then
+ needed+=(--keyring=$words[krind+1])
+ fi
+ else
+ needed+=($words[krind])
+ fi
+fi
+
case "$state" in
public-keys)
_wanted public-keys expl 'public key' \
- compadd ${${(Mo)$(_call_program public-keys gpg --list-keys 2>/dev/null):%<*>}//(<|>)/} && return
+ compadd ${${(Mo)$(_call_program public-keys gpg $needed --list-keys 2>/dev/null):%<*>}//(<|>)/} && return
;;
secret-keys)
_wanted secret-keys expl 'secret key' compadd \
- ${${(Mo)$(_call_program secret-keys gpg --list-secret-keys 2>/dev/null):%<*>}//(<|>)/} && return
+ ${${(Mo)$(_call_program secret-keys gpg $needed --list-secret-keys 2>/dev/null):%<*>}//(<|>)/} && return
;;
ciphers)
_wanted ciphers expl cipher compadd \
- ${${(s.,.)${(M)${(f)"$(_call_program ciphers gpg --version)"}:#Cipher*}#*:}# } && return
+ ${${(s.,.)${(M)${(f)"$(_call_program ciphers gpg $needed --version)"}:#Cipher*}#*:}# } && return
;;
esac