Add completion for pass (password-store)
This is a copy of https://github.com/zx2c4/password-store/blob/master/contrib/pass.zsh-completion
This commit is contained in:
		
							parent
							
								
									107bdaba20
								
							
						
					
					
						commit
						545c7b6d6b
					
				|  | @ -0,0 +1,116 @@ | |||
| #compdef pass | ||||
| 
 | ||||
| # Copyright (C) 2012: | ||||
| #    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 see COPYING for more information. | ||||
| 
 | ||||
| _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 : \ | ||||
| 					"-r[re-encrypt existing passwords]" \ | ||||
| 					"--reencrypt[re-encrypt existing passwords]" | ||||
| 				_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]" | ||||
| 				_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" | ||||
| 			"show:Decrypt and print a password" | ||||
| 			"insert:Insert a new password" | ||||
| 			"generate:Generate a new password using pwgen" | ||||
| 			"edit:Edit a password with \$EDITOR" | ||||
| 			"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="${PASSWORD_STORE_DIR:-$HOME/.password-store}" | ||||
| 	_values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | 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') | ||||
| } | ||||
		Loading…
	
		Reference in New Issue