From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3729 invoked by alias); 2 Jun 2018 15:27:06 -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: 42916 Received: (qmail 10914 invoked by uid 1010); 2 Jun 2018 15:27:06 -0000 X-Qmail-Scanner-Diagnostics: from mail-wr0-f177.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(209.85.128.177):SA:0(-1.9/5.0):. Processed in 0.539688 secs); 02 Jun 2018 15:27:06 -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,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=Tbf/RQLwixdUZmDNgZTjqgg7kQcIiPjFu8UzE1b66w0=; b=MdAvPTeE4JrDGXibeMhi7ORTfDQcwdeKOdetqQjJ5U2nASOYP8gLkTnDYBWc7TiEUq 7Y4JTv4f2Bt+0UVl/FZkPwYMC3qxPdce3dgqLifeD93LMPt5o9BOVuvNUZdDjsKFB3AL oxo5tJ2wj5s9UNu6dA11LiArO8yIZK0JU7T+NC23BokRUm7aF3EUe6nKJwiUjN6Uiy45 cGkv49qxVMlIvehlq5GaZdT6Coa/uwiBlqyPzX/Patz/9JzP3gMVxZabo1Lr7zExbajZ UvFZZP78NERpH6AmnnBmZ8NTWqLCws7PsJIv5UR3aPTK6TGVSWxEnPds+SrUBes/J/Rv kjeQ== 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=Tbf/RQLwixdUZmDNgZTjqgg7kQcIiPjFu8UzE1b66w0=; b=pBLd2OpW8uhIlkWXrZFKS2s35ci09f1pw7Ue21EUiOLXBVSOdT1is2V6iFyob2shWg kjnXFOm87Byolp6kHlr+u72n+lV9spqGW9CdOZxzKwJVVOm0VEQuwvtC2wS/STvHJzCD Y96N38Uyx98YtMb6CPJ8Twqes0lQz+T61Be7qqZ4U1JTHirO7I3lGvrcxtF6J6szW+6v +L6FTPbWRlHD/NlbcvsEuxeEi97JKN2equg7GzDmhlsgrr3SpS+8gKyQWpg7/3Ruoatd wfHZla4FgFQSYX3zhnv+oenHg6oeyHQGgZz78bF6pJKD1aHKi0axXF2wmSGmsaXqYUCk 5jkw== X-Gm-Message-State: ALKqPwff1J7XeE48UBtFlcu43n/GTxOR/LupwfB8blsXS5wlpUfcHunH muGGqENUpSnQOXUeEUEIVpgOxGps X-Google-Smtp-Source: ADUXVKJCrLCWFjDjM+OAApJDOE72T8WxCN2ETQ7WaBOdmPe8NACgQcuNdrFUxHfK2+R/to+AjUqZDw== X-Received: by 2002:adf:91e5:: with SMTP id 92-v6mr11559811wri.124.1527953221507; Sat, 02 Jun 2018 08:27:01 -0700 (PDT) From: doron.behar@gmail.com To: zsh-workers@zsh.org Subject: [PATCH] _gpg: Use explicit UIDs for public / secret keys. Date: Sat, 2 Jun 2018 18:26:51 +0300 Message-Id: <20180602152651.16904-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. --- Completion/Unix/Command/_gpg | 69 ++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/Completion/Unix/Command/_gpg b/Completion/Unix/Command/_gpg index 48a36eff2..7e707c5f6 100644 --- a/Completion/Unix/Command/_gpg +++ b/Completion/Unix/Command/_gpg @@ -206,20 +206,77 @@ 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=(${(@s.:.)$(_call_program public-keys eval IFS=$'\n' $words[1] $needed --list-public-keys --list-options no-show-photos --with-colons)}) + local -a uids_and_emails + local i + for i in {1..${#public_keys[@]}}; do + if [[ ${public_keys[$i]} == "fpr" ]]; then + i=$((i + 1)) + local j=$i + while [[ ${public_keys[$j]} != "fpr" ]] && [ $j -lt ${#public_keys[@]} ]; do + if [[ ${public_keys[$j]} =~ "@" ]]; then + local email="${public_keys[$j]}" + local uid=${public_keys[$i]} + uids_and_emails+=("${uid}":"${email}") + i=$j + break + fi + j=$((j + 1)) + done + i=$j + fi + done + _describe -t public-keys 'public key' uids_and_emails ;; 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=(${(@s.:.)$(_call_program secret-keys eval IFS=$'\n' $words[1] $needed --list-secret-keys --list-options no-show-photos --with-colons)}) + local -a uids_and_emails + local i + for i in {1..${#secret_keys[@]}}; do + if [[ ${secret_keys[$i]} == "fpr" ]]; then + i=$((i + 1)) + local j=$i + while [[ ${secret_keys[$j]} != "fpr" ]] && [ $j -lt ${#secret_keys[@]} ]; do + if [[ ${secret_keys[$j]} =~ "@" ]]; then + local email="${secret_keys[$j]}" + local uid=${secret_keys[$i]} + uids_and_emails+=("${uid}":"${email}") + i=$j + break + fi + j=$((j + 1)) + done + i=$j + fi + done + _describe -t secret-keys 'secret key' uids_and_emails ;; ciphers) _wanted ciphers expl cipher compadd \ ${${(s.,.)${(M)${(f)${"$(_call_program ciphers $words[1] $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=(${(@s.:.)$(_call_program public-keyids eval IFS=$'\n' $words[1] $needed --list-public-keys --list-options no-show-photos --with-colons)}) + local -a uids_and_emails + local i + for i in {1..${#public_keys[@]}}; do + if [[ ${public_keys[$i]} == "fpr" ]]; then + i=$((i + 1)) + local j=$i + while [[ ${public_keys[$j]} != "fpr" ]] && [ $j -lt ${#public_keys[@]} ]; do + if [[ ${public_keys[$j]} =~ "@" ]]; then + local email="${public_keys[$j]}" + local uid=${public_keys[$i]} + uids_and_emails+=("${uid}":"${email}") + i=$j + break + fi + j=$((j + 1)) + done + i=$j + fi + done + _describe -t public-keyids 'public keyids' uids_and_emails ;; (option-list) _sequence _wanted options expl option \ -- 2.17.1