pass.zsh-completion (4040B)
1 #compdef pass 2 #autoload 3 4 # Copyright (C) 2012 - 2014: 5 # Johan Venant <jvenant@invicem.pro> 6 # Brian Mattern <rephorm@rephorm.com> 7 # Jason A. Donenfeld <Jason@zx2c4.com>. 8 # All Rights Reserved. 9 # This file is licensed under the GPLv2+. Please see COPYING for more information. 10 11 12 # If you use multiple repositories, you can configure completion like this: 13 # 14 # compdef _pass workpass 15 # zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass" 16 # workpass() { 17 # PASSWORD_STORE_DIR=$HOME/work/pass pass $@ 18 # } 19 20 21 _pass () { 22 local cmd 23 if (( CURRENT > 2)); then 24 cmd=${words[2]} 25 # Set the context for the subcommand. 26 curcontext="${curcontext%:*:*}:pass-$cmd" 27 # Narrow the range of words we are looking at to exclude `pass' 28 (( CURRENT-- )) 29 shift words 30 # Run the completion for the subcommand 31 case "${cmd}" in 32 init) 33 _arguments : \ 34 "-p[gpg-id will only be applied to this subfolder]" \ 35 "--path[gpg-id will only be applied to this subfolder]" 36 _pass_complete_keys 37 ;; 38 ls|list|edit) 39 _pass_complete_entries_with_subdirs 40 ;; 41 insert) 42 _arguments : \ 43 "-e[echo password to console]" \ 44 "--echo[echo password to console]" \ 45 "-m[multiline]" \ 46 "--multiline[multiline]" 47 _pass_complete_entries_with_subdirs 48 ;; 49 generate) 50 _arguments : \ 51 "-n[don't include symbols in password]" \ 52 "--no-symbols[don't include symbols in password]" \ 53 "-c[copy password to the clipboard]" \ 54 "--clip[copy password to the clipboard]" \ 55 "-f[force overwrite]" \ 56 "--force[force overwrite]" \ 57 "-i[replace first line]" \ 58 "--in-place[replace first line]" 59 _pass_complete_entries_with_subdirs 60 ;; 61 cp|copy|mv|rename) 62 _arguments : \ 63 "-f[force rename]" \ 64 "--force[force rename]" 65 _pass_complete_entries_with_subdirs 66 ;; 67 rm) 68 _arguments : \ 69 "-f[force deletion]" \ 70 "--force[force deletion]" \ 71 "-r[recursively delete]" \ 72 "--recursive[recursively delete]" 73 _pass_complete_entries_with_subdirs 74 ;; 75 git) 76 local -a subcommands 77 subcommands=( 78 "init:Initialize git repository" 79 "push:Push to remote repository" 80 "pull:Pull from remote repository" 81 "config:Show git config" 82 "log:Show git log" 83 "reflog:Show git reflog" 84 ) 85 _describe -t commands 'pass git' subcommands 86 ;; 87 show|*) 88 _pass_cmd_show 89 ;; 90 esac 91 else 92 local -a subcommands 93 subcommands=( 94 "init:Initialize new password storage" 95 "ls:List passwords" 96 "find:Find password files or directories based on pattern" 97 "grep:Search inside decrypted password files for matching pattern" 98 "show:Decrypt and print a password" 99 "insert:Insert a new password" 100 "generate:Generate a new password using pwgen" 101 "edit:Edit a password with \$EDITOR" 102 "mv:Rename the password" 103 "cp:Copy the password" 104 "rm:Remove the password" 105 "git:Call git on the password store" 106 "version:Output version information" 107 "help:Output help message" 108 ) 109 _describe -t commands 'pass' subcommands 110 _arguments : \ 111 "--version[Output version information]" \ 112 "--help[Output help message]" 113 _pass_cmd_show 114 fi 115 } 116 117 _pass_cmd_show () { 118 _arguments : \ 119 "-c[put it on the clipboard]" \ 120 "--clip[put it on the clipboard]" 121 _pass_complete_entries 122 } 123 _pass_complete_entries_helper () { 124 local IFS=$'\n' 125 local prefix 126 zstyle -s ":completion:${curcontext}:" prefix prefix || prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}" 127 _values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' -e 's#\\#\\\\#g' -e 's#:#\\:#g' | sort):-""} 128 } 129 130 _pass_complete_entries_with_subdirs () { 131 _pass_complete_entries_helper 132 } 133 134 _pass_complete_entries () { 135 _pass_complete_entries_helper -type f 136 } 137 138 _pass_complete_keys () { 139 local IFS=$'\n' 140 # Extract names and email addresses from gpg --list-keys 141 _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d') 142 } 143 144 _pass