Skip to content
Snippets Groups Projects
pass.bash-completion 2.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • # completion file for bash
    
    # (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com> and
    # Brian Mattern <rephorm@rephorm.com>. All Rights Reserved.
    
    # This is released 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/}"
    
    	local IFS=$'\n'
    	local i=0
    
    	for item in $(compgen -f $prefix$cur); do
    		if [[ $item == $prefix.* ]]; then
    			continue
    		fi
    
    		# append / to directories and recursively expand single-entry dirs
    		while [[ -d $item ]]; do
    			item="$item/"
    			if [[ $autoexpand -eq 1 ]]; then
    				subitems=($(compgen -f $item))
    				if [[ ${#subitems[@]} -eq 1 ]]; then
    					item="${subitems[0]}"
    				else
    					break
    				fi
    			else
    				break
    			fi
    		done
    
    		item="${item%$suffix}"
    
    		COMPREPLY[$i]=$(printf "%q" "${item#$prefix}" )
    
    Brian Mattern's avatar
    Brian Mattern committed
    
    _pass()
    {
    
    	local cur prev opts base
    
    	COMPREPLY=()
    	cur="${COMP_WORDS[COMP_CWORD]}"
    	prev="${COMP_WORDS[COMP_CWORD-1]}"
    
    	commands="init ls show insert generate edit rm git help --help version --version"
    	if [[ $COMP_CWORD -gt 1 ]]; then
    		case "${COMP_WORDS[1]}" in
    			init)
    				COMPREPLY+=($(compgen -W "-e --reencrypt" -- ${cur}))
    				keys=$(gpg --list-keys |grep uid |sed 's/.*<\(.*\)>/\1/')
    				COMPREPLY+=($(compgen -W "${keys}" -- ${cur}))
    				;;
    			ls|list)
    				_pass_complete_entries
    				;;
    			show|-*)
    				COMPREPLY+=($(compgen -W "-c --clip" -- ${cur}))
    				_pass_complete_entries 1
    				;;
    			insert)
    				COMPREPLY+=($(compgen -W "-n --no-echo -m --multiline -f --force" -- ${cur}))
    				_pass_complete_entries
    				;;
    			generate)
    				COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force" -- ${cur}))
    				_pass_complete_entries
    				;;
    			edit)
    				_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 nospace -F _pass pass