Skip to content
Snippets Groups Projects
pass.zsh-completion 3.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • Johan Venant's avatar
    Johan Venant committed
    #autoload
    
    # Copyright (C) 2012:
    #    Johan Venant <jvenant@invicem.pro>
    #    Brian Mattern <rephorm@rephorm.com>
    #    Jason A. Donenfeld <Jason@zx2c4.com>.
    
    Johan Venant's avatar
    Johan Venant committed
    #    Santiago Borrazás <sanbor@gmail.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 : \
    
    Johan Venant's avatar
    Johan Venant committed
    					"-e[re-encrypt existing passwords]" \
    					"--reencrypt[re-encrypt existing passwords]" \
    					"-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]"
    				_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
    
    		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"
    			"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
    
    	_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 -L "$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')