You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							145 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							145 lines
						
					
					
						
							4.0 KiB
						
					
					
				| #compdef pass | |
| #autoload | |
|  | |
| # Copyright (C) 2012 - 2014: | |
| #    Johan Venant <jvenant@invicem.pro> | |
| #    Brian Mattern <rephorm@rephorm.com> | |
| #    Jason A. Donenfeld <Jason@zx2c4.com>. | |
| # All Rights Reserved. | |
| # This file is licensed under the GPLv2+. | |
| # Please visit https://git.zx2c4.com/password-store/tree/COPYING for more information. | |
|  | |
|  | |
| # If you use multiple repositories, you can configure completion like this: | |
| # | |
| # compdef _pass workpass | |
| # zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass" | |
| # workpass() { | |
| #   PASSWORD_STORE_DIR=$HOME/work/pass pass $@ | |
| # } | |
|  | |
|  | |
| _pass () { | |
| 	local cmd | |
| 	if (( CURRENT > 2)); then | |
| 		cmd=${words[2]} | |
| 		# Set the context for the subcommand. | |
| 		curcontext="${curcontext%:*:*}:pass-$cmd" | |
| 		# Narrow the range of words we are looking at to exclude `pass' | |
| 		(( CURRENT-- )) | |
| 		shift words | |
| 		# Run the completion for the subcommand | |
| 		case "${cmd}" in | |
| 			init) | |
| 				_arguments : \ | |
| 					"-p[gpg-id will only be applied to this subfolder]" \ | |
| 					"--path[gpg-id will only be applied to this subfolder]" | |
| 				_pass_complete_keys | |
| 				;; | |
| 			ls|list|edit) | |
| 				_pass_complete_entries_with_subdirs | |
| 				;; | |
| 			insert) | |
| 				_arguments : \ | |
| 					"-e[echo password to console]" \ | |
| 					"--echo[echo password to console]" \ | |
| 					"-m[multiline]" \ | |
| 					"--multiline[multiline]" | |
| 				_pass_complete_entries_with_subdirs | |
| 				;; | |
| 			generate) | |
| 				_arguments : \ | |
| 					"-n[don't include symbols in password]" \ | |
| 					"--no-symbols[don't include symbols in password]" \ | |
| 					"-c[copy password to the clipboard]" \ | |
| 					"--clip[copy password to the clipboard]" \ | |
| 					"-f[force overwrite]" \ | |
| 					"--force[force overwrite]" \ | |
| 					"-i[replace first line]" \ | |
| 					"--in-place[replace first line]" | |
| 				_pass_complete_entries_with_subdirs | |
| 				;; | |
| 			cp|copy|mv|rename) | |
| 				_arguments : \ | |
| 					"-f[force rename]" \ | |
| 					"--force[force rename]" | |
| 					_pass_complete_entries_with_subdirs | |
| 				;; | |
| 			rm) | |
| 				_arguments : \ | |
| 					"-f[force deletion]" \ | |
| 					"--force[force deletion]" \ | |
| 					"-r[recursively delete]" \ | |
| 					"--recursive[recursively delete]" | |
| 					_pass_complete_entries_with_subdirs | |
| 				;; | |
| 			git) | |
| 				local -a subcommands | |
| 				subcommands=( | |
| 					"init:Initialize git repository" | |
| 					"push:Push to remote repository" | |
| 					"pull:Pull from remote repository" | |
| 					"config:Show git config" | |
| 					"log:Show git log" | |
| 					"reflog:Show git reflog" | |
| 				) | |
| 				_describe -t commands 'pass git' subcommands | |
| 				;; | |
| 			show|*) | |
| 				_pass_cmd_show | |
| 				;; | |
| 		esac | |
| 	else | |
| 		local -a subcommands | |
| 		subcommands=( | |
| 			"init:Initialize new password storage" | |
| 			"ls:List passwords" | |
| 			"find:Find password files or directories based on pattern" | |
| 			"grep:Search inside decrypted password files for matching pattern" | |
| 			"show:Decrypt and print a password" | |
| 			"insert:Insert a new password" | |
| 			"generate:Generate a new password using pwgen" | |
| 			"edit:Edit a password with \$EDITOR" | |
| 			"mv:Rename the password" | |
| 			"cp:Copy the password" | |
| 			"rm:Remove the password" | |
| 			"git:Call git on the password store" | |
| 			"version:Output version information" | |
| 			"help:Output help message" | |
| 		) | |
| 		_describe -t commands 'pass' subcommands | |
| 		_arguments : \ | |
| 			"--version[Output version information]" \ | |
| 			"--help[Output help message]" | |
| 		_pass_cmd_show | |
| 	fi | |
| } | |
|  | |
| _pass_cmd_show () { | |
| 	_arguments : \ | |
| 		"-c[put it on the clipboard]" \ | |
| 		"--clip[put it on the clipboard]" | |
| 	_pass_complete_entries | |
| } | |
| _pass_complete_entries_helper () { | |
| 	local IFS=$'\n' | |
| 	local prefix | |
| 	zstyle -s ":completion:${curcontext}:" prefix prefix || prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}" | |
| 	_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#\\#\\\\#' | sort):-""} | |
| } | |
|  | |
| _pass_complete_entries_with_subdirs () { | |
| 	_pass_complete_entries_helper | |
| } | |
|  | |
| _pass_complete_entries () { | |
| 	_pass_complete_entries_helper -type f | |
| } | |
|  | |
| _pass_complete_keys () { | |
| 	local IFS=$'\n' | |
| 	# Extract names and email addresses from gpg --list-keys | |
| 	_values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d') | |
| } | |
|  | |
| _pass
 | |
| 
 |