[[ "$1" != "" ]] || { echo "Usage: source _completion_template " } [[ "$1" = "" ]] || { _pm() { local cur prev local IFS=$'\n' # Retrieve the original value local width=$(bind -v | sed -n 's/^set completion-display-width //p') if [[ $width -ne 0 ]]; then # Change the readline variable bind "set completion-display-width 0" # On the first tab press, expand a common prefix # On the second tab press, list out options # Any subsequent tab presses cycle through these options bind "set show-all-if-ambiguous on" bind "set menu-complete-display-prefix on" bind "TAB: menu-complete" bind "set colored-completion-prefix on" bind "set colored-stats on" # Set up PROMPT_COMMAND to reset itself to its current value PROMPT_COMMAND="PROMPT_COMMAND=$(printf %q "$PROMPT_COMMAND")" # Set up PROMPT_COMMAND to reset the readline variable PROMPT_COMMAND+="; bind 'set completion-display-width $width'" fi cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} # Get all options from omelette COMPREPLY=( $(compgen -W '$(./'$1' --compbash --compgen "${COMP_CWORD}" "${prev}" "${COMP_LINE}")' -- "$cur") ) # If no options available, print files and folders if [ ${#COMPREPLY[@]} -eq 0 ]; then COMPREPLY=( $(compgen -f -o default -o plusdirs $cur) ) fi return 0 } complete -F _pm $1 }