Skip to content
Snippets Groups Projects
pass.bash-completion 2.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • # completion file for bash
    
    # Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com> and
    
    # Brian Mattern <rephorm@rephorm.com>. All Rights Reserved.
    
    # This file is licensed under the GPLv2+. Please see COPYING for more information.
    
    Brian Mattern's avatar
    Brian Mattern committed
    _pass_complete_entries () {
    
    	prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store/}"
    
    Brian Mattern's avatar
    Brian Mattern committed
    	local items=($(compgen -f $prefix$cur))
    	for item in ${items[@]}; do
    
    		if [[ $item == $prefix.* ]]; then
    			continue
    		fi
    
    Brian Mattern's avatar
    Brian Mattern committed
    
    		# if there is a unique match, and it is a directory with one entry
    		# autocomplete the subentry as well (recursively)
    		if [[ ${#items[@]} -eq 1 && $autoexpand -eq 1 ]]; then
    			while [[ -d $item ]]; do
    				local subitems=($(compgen -f "$item/"))
    
    				if [[ ${#subitems[@]} -eq 1 ]]; then
    					item="${subitems[0]}"
    				else
    					break
    				fi
    
    Brian Mattern's avatar
    Brian Mattern committed
    			done
    		fi
    
    		# append / to directories
    		[[ -d $item ]] && item="$item/"
    
    
    		item="${item%$suffix}"
    
    _pass_complete_keys () {
    	local IFS=$'\n'
    	# Extract names and email addresses from gpg --list-keys
    
    	local keys="$(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')"
    
    Brian Mattern's avatar
    Brian Mattern committed
    	COMPREPLY+=($(compgen -W "${keys}" -- ${cur}))
    
    Brian Mattern's avatar
    Brian Mattern committed
    _pass()
    {
    
    	local commands="init ls show insert generate edit rm git help version"
    
    	if [[ $COMP_CWORD -gt 1 ]]; then
    		case "${COMP_WORDS[1]}" in
    			init)
    				COMPREPLY+=($(compgen -W "-e --reencrypt" -- ${cur}))
    
    				_pass_complete_keys
    
    				_pass_complete_entries
    				;;
    			show|-*)
    				COMPREPLY+=($(compgen -W "-c --clip" -- ${cur}))
    				_pass_complete_entries 1
    				;;
    			insert)
    
    				COMPREPLY+=($(compgen -W "-e --echo -m --multiline -f --force" -- ${cur}))
    
    				_pass_complete_entries
    				;;
    			generate)
    				COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force" -- ${cur}))
    				_pass_complete_entries
    				;;
    			rm|remove|delete)
    				COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur}))
    				_pass_complete_entries
    				;;
    			git)
    				COMPREPLY+=($(compgen -W "init push pull config log reflog" -- ${cur}))
    				;;
    		esac
    	else
    		COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
    		_pass_complete_entries 1
    	fi
    
    Brian Mattern's avatar
    Brian Mattern committed
    complete -o filenames -o nospace -F _pass pass