From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28704 invoked by alias); 18 Jun 2018 19:47:31 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43059 Received: (qmail 27326 invoked by uid 1010); 18 Jun 2018 19:47:31 -0000 X-Qmail-Scanner-Diagnostics: from mail-wm0-f65.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(74.125.82.65):SA:0(-1.9/5.0):. Processed in 0.911152 secs); 18 Jun 2018 19:47:31 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS, T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: doron.behar@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Skdj1ejJ/ODSrmJ/37AZwxcOpIWmGUwID+OrMRTUfbs=; b=tw6gWwkjHTeKrrA+xL4MjpaQ1w9ypQVJEdvPbn3eyf1w2stkASLBO3GEvoqSvlTsxM JZWFtCTwo0gwoqxweV7gPNm0CG2NMibfq6ZtI8bKSXWIlUB8A15JvbmSgLPn17Psboca Fmf6YNuEFBn6JB38dvoj4II6I7T37PfCKEhaPFKzs8cstdhgrEdVwSgIssbxZyiSAtgj MX5yMwDXxS+3TulcAjVTG+WklzusnoGF/QdqjqrkwwSmWU9YDNo4KE5m+rOzfDtoA0Vh ZapaFHv7EHHKQpKpz4yys7RWfFaylGD8VbRNNxSAeugnPDIoudevY6OieRMG9Nmz3foc NBDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=Skdj1ejJ/ODSrmJ/37AZwxcOpIWmGUwID+OrMRTUfbs=; b=IrO9vz9USUwakoymV5Ej8Od2C/VoBHcEOSd6ke/Qr1rEWqsWCForRA+v/sJ4ZEx/cJ pwVDZyOrQhxqU8AE6Oeu4NJ8wp5dk4S7G1oFAXE60tiQIvhdCK+8yUruSms3nzss2J2m qnjCCpqiwETrq9UsynMQCzxFciKx8OvNXfFzMFdoKFDfIRa/fiqy7DGTAasIFUhZHaDi YpJfQlyfiPzJ49igqRhfG/YwCTiU1tofYBOxOcZHInxxGtD8FXiNbiuu3QdpVwA8wTLQ tkxUDut1DS6dSxn+HawDBzllFwkSQDhCN8cYabhM9xDd9zSJfiBFtM6Hc9frgGkevYKD Zz1w== X-Gm-Message-State: APt69E1oJk4KJZW2Cx4N4P1X2aRwuRkxT/PqA8B8DrP3sDpcJmHzz39V Oa5JV2gl0Arg00+hDQmFKagwvwJH X-Google-Smtp-Source: ADUXVKIrY3LvLEj/8q4N3xkpWxS3O6m3eBE1lJNK2cjMWgvvgDk5KqPtnRX70zFlIyTHnN72GBIy2w== X-Received: by 2002:a1c:dcd:: with SMTP id 196-v6mr9911306wmn.131.1529351246847; Mon, 18 Jun 2018 12:47:26 -0700 (PDT) From: doron.behar@gmail.com To: zsh-workers@zsh.org Subject: [PATCH] _gpg: Use explicit UIDs for state = public keys. Date: Mon, 18 Jun 2018 22:47:48 +0300 Message-Id: <20180618194748.4676-1-doron.behar@gmail.com> X-Mailer: git-send-email 2.17.1 From: Doron Behar Use the `--with-colons` option and parse the output according to the format specified in the documentation. --- Completion/Unix/Command/_gpg | 62 ++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/Completion/Unix/Command/_gpg b/Completion/Unix/Command/_gpg index 48a36eff2..b35693d1f 100644 --- a/Completion/Unix/Command/_gpg +++ b/Completion/Unix/Command/_gpg @@ -206,20 +206,68 @@ fi case "$state" in public-keys) - _wanted public-keys expl 'public key' \ - compadd ${${(Mo)$(_call_program public-keys $words[1] $needed --list-public-keys --list-options no-show-photos):%<*>}//(<|>)/} && return + local public_keys_lines=(${(f)"$(_call_program public-keys ${(q)words[1]} ${(q)needed} --list-public-keys --list-options no-show-photos --with-colons)"}) + local -a uids emails + local i j parts current_uid + for (( i = 1; i < ${#public_keys_lines[@]}; ++i )); do + parts=("${(@s.:.)public_keys_lines[$i]}") + if [[ ${parts[1]} == "fpr" ]]; then + current_uid="${parts[10]}" + i=$((i + 1)) + parts=("${(@s.:.)public_keys_lines[$i]}") + while [[ ${parts[1]} == "uid" ]]; do + uids+=("${current_uid}") + emails+=("${parts[10]}") + i=$((i + 1)) + parts=("${(@s.:.)public_keys_lines[$i]}") + done + fi + done + _describe -t public-keys 'public key' emails uids ;; secret-keys) - _wanted secret-keys expl 'secret key' compadd \ - ${${(Mo)$(_call_program secret-keys $words[1] $needed --list-secret-keys --list-options no-show-photos):%<*>}//(<|>)/} && return + local secret_keys_lines=(${(f)"$(_call_program secret-keys ${(q)words[1]} ${(q)needed} --list-secret-keys --list-options no-show-photos --with-colons)"}) + local -a uids emails + local i j parts current_uid + for (( i = 1; i < ${#secret_keys_lines[@]}; ++i )); do + parts=("${(@s.:.)secret_keys_lines[$i]}") + if [[ ${parts[1]} == "fpr" ]]; then + current_uid="${parts[10]}" + i=$((i + 1)) + parts=("${(@s.:.)secret_keys_lines[$i]}") + while [[ ${parts[1]} == "uid" ]]; do + uids+=("${current_uid}") + emails+=("${parts[10]}") + i=$((i + 1)) + parts=("${(@s.:.)secret_keys_lines[$i]}") + done + fi + done + _describe -t secret-keys 'secret key' emails uids ;; ciphers) _wanted ciphers expl cipher compadd \ - ${${(s.,.)${(M)${(f)${"$(_call_program ciphers $words[1] $needed --version)"}//,$'\n' #/, }:#Cipher*}#*:}# } && return + ${${(s.,.)${(M)${(f)${"$(_call_program ciphers ${(q)words[1]} ${(q)needed} --version)"}//,$'\n' #/, }:#Cipher*}#*:}# } && return ;; (public-keyids) - _wanted public-keys expl 'public keyid' \ - compadd ${(M)${${(f)"$(_call_program public-keyids $words[1] $needed --list-public-keys --list-options no-show-photos)"}## #}:#[0-9A-F](#c40)} && return + local public_keys_lines=(${(f)"$(_call_program public-keyids ${(q)words[1]} ${(q)needed} --list-public-keys --list-options no-show-photos --with-colons)"}) + local -a uids emails + local i j parts current_uid + for (( i = 1; i < ${#public_keys_lines[@]}; ++i )); do + parts=("${(@s.:.)public_keys_lines[$i]}") + if [[ ${parts[1]} == "fpr" ]]; then + current_uid="${parts[10]}" + i=$((i + 1)) + parts=("${(@s.:.)public_keys_lines[$i]}") + while [[ ${parts[1]} == "uid" ]]; do + uids+=("${current_uid}") + emails+=("${parts[10]}") + i=$((i + 1)) + parts=("${(@s.:.)public_keys_lines[$i]}") + done + fi + done + _describe -t public-keyids 'public key' emails uids ;; (option-list) _sequence _wanted options expl option \ -- 2.17.1