66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
# Completion script for hledger.
 | 
						|
# Created using a Makefile and real hledger.
 | 
						|
 | 
						|
#set -eo pipefail
 | 
						|
 | 
						|
completeFunction() {
 | 
						|
    declare cmd=$1
 | 
						|
    declare wordToComplete=$2
 | 
						|
    declare precedingWord=$3
 | 
						|
 | 
						|
    declare subcommand
 | 
						|
    for subcommand in "${COMP_WORDS[@]}"; do
 | 
						|
	if grep -Fxq "$subcommand" commands.txt; then
 | 
						|
	    #declare -a options
 | 
						|
	    #readarray -t options <(grep "^$wordToComplete" "$subcommand-options.txt")
 | 
						|
	    #COMPREPLY+=( "${options[@]}" )
 | 
						|
	    COMPREPLY+=( $(cat "$subcommand-options.txt" | grep "^$wordToComplete") )
 | 
						|
	    break
 | 
						|
	fi
 | 
						|
	subcommand=
 | 
						|
    done
 | 
						|
 | 
						|
    if [[ -z $subcommand ]]; then
 | 
						|
 | 
						|
	# echo;echo no subcommand
 | 
						|
 | 
						|
	case $precedingWord in
 | 
						|
	    -f|--file|--rules-file)
 | 
						|
		# COMPREPLY+=( $(compgen -df | grep "^$wordToComplete") )
 | 
						|
		:
 | 
						|
		;;
 | 
						|
	    *)
 | 
						|
		# echo "completing sub commands and general options"
 | 
						|
		COMPREPLY+=( $(cat commands.txt generic-options.txt | grep "^$wordToComplete") )
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
 | 
						|
    else
 | 
						|
	:
 | 
						|
	# echo;echo subcommand is $subcommand
 | 
						|
 | 
						|
	# if grep -Eqv '\b(register|reg|r)\b' <<< "$COMP_LINE"; then
 | 
						|
	#     return
 | 
						|
	# fi
 | 
						|
	# case $precedingWord in
 | 
						|
	    # register|reg|r) : ;;
 | 
						|
	    # *) return 1 ;;
 | 
						|
	# esac
 | 
						|
 | 
						|
	declare journalFile
 | 
						|
	# TODO try to get file from -f --file first
 | 
						|
	if [[ -n $HLEDGER_FILE ]]; then
 | 
						|
	    journalFile=$HLEDGER_FILE
 | 
						|
	else
 | 
						|
	    journalFile=~/.hledger.journal
 | 
						|
	fi
 | 
						|
	COMP_WORDBREAKS=' '
 | 
						|
	COMPREPLY+=( $(sed -rn 's/^ +([-_:a-zA-Z0-9]+).*/\1/p' "$journalFile" | grep "^$wordToComplete") )
 | 
						|
 | 
						|
    fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
complete -F completeFunction hledger
 |