#!/usr/bin/env bash # Bash completion for redmine_contacts.py # Usage: # source /path/to/redmine_contacts_completion.sh # Or copy into /etc/bash_completion.d/ (or ~/.local/share/bash-completion/completions/) _redmine_contacts_completion() { local cur prev cmd i COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" local global_opts="--base-url --project --cache -h --help" local commands="fetch search show update batch-update loop-run helpdesk-ticket issue-full helpdesk-issues helpdesk-messages helpdesk-timeline" # Determine active subcommand (first non-option token after argv0) cmd="" for ((i=1; i<${#COMP_WORDS[@]}; i++)); do if [[ "${COMP_WORDS[i]}" != -* ]]; then cmd="${COMP_WORDS[i]}" break fi done # Value completion for option arguments case "${prev}" in --cache|--profile) COMPREPLY=( $(compgen -f -- "${cur}") ) return 0 ;; --cache-mode) COMPREPLY=( $(compgen -W "full filtered" -- "${cur}") ) return 0 ;; --source) if [[ "${cmd}" == "show" ]]; then COMPREPLY=( $(compgen -W "auto cache api" -- "${cur}") ) else COMPREPLY=( $(compgen -W "cache api" -- "${cur}") ) fi return 0 ;; --contact-source) COMPREPLY=( $(compgen -W "api cache auto" -- "${cur}") ) return 0 ;; --order) COMPREPLY=( $(compgen -W "as-is oldest-updated-first newest-updated-first oldest-created-first newest-created-first id-asc id-desc" -- "${cur}") ) return 0 ;; --set) COMPREPLY=( $(compgen -W "first_name= middle_name= last_name= company= website= skype_name= birthday= job_title= background= phone= email= tag_list=" -- "${cur}") ) return 0 ;; --set-custom-field) COMPREPLY=( $(compgen -W "account-number= instagram= facebook= youtube= linkedin= whatsapp= x-twitter=" -- "${cur}") ) return 0 ;; esac # If no command selected yet, complete command names + global options if [[ -z "${cmd}" ]]; then COMPREPLY=( $(compgen -W "${commands} ${global_opts}" -- "${cur}") ) return 0 fi local common_filter_opts="--created-after --created-before --updated-after --updated-before --with-tag --without-tag --no-tags" case "${cmd}" in fetch) COMPREPLY=( $(compgen -W "${global_opts} --limit --cache-mode ${common_filter_opts}" -- "${cur}") ) ;; search) COMPREPLY=( $(compgen -W "${global_opts} --refresh --offline-cache --limit --min-score ${common_filter_opts}" -- "${cur}") ) ;; show) COMPREPLY=( $(compgen -W "${global_opts} --source --refresh-cache" -- "${cur}") ) ;; update) COMPREPLY=( $(compgen -W "${global_opts} --set --add-tag --remove-tag --set-custom-field --contact-source --apply" -- "${cur}") ) ;; batch-update) COMPREPLY=( $(compgen -W "${global_opts} --max-contacts --order --source --refresh-cache ${common_filter_opts} --set --add-tag --remove-tag --set-custom-field --apply" -- "${cur}") ) ;; loop-run) COMPREPLY=( $(compgen -W "${global_opts} --profile --max-contacts --order --source --refresh-cache ${common_filter_opts} --apply" -- "${cur}") ) ;; helpdesk-ticket) COMPREPLY=( $(compgen -W "${global_opts}" -- "${cur}") ) ;; issue-full) COMPREPLY=( $(compgen -W "${global_opts} --message-limit" -- "${cur}") ) ;; helpdesk-issues|helpdesk-messages|helpdesk-timeline) COMPREPLY=( $(compgen -W "${global_opts} --limit" -- "${cur}") ) ;; esac return 0 } complete -F _redmine_contacts_completion redmine_contacts.py complete -F _redmine_contacts_completion redmine_contacts