Hash :
c1b5da1d
        
        Author :
  
        
        Date :
2024-01-12T10:40:26
        
      
tools: Fix bash completion permissions There is no need to give execution permission. It also creates an unnecessary work for packaging. Fixed by removing execution permission.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
# bash completion support for xkbcli.
# See completion API documentation: https://github.com/scop/bash-completion
# NOTE: The script parses the commands help messages to provide the completions,
#       thus any new subcommand or option will be supported, as long as it has its
#       entry in the help messages. This should result in low maintenancei effort.
___xkbcli_main()
{
    # Initialization: https://github.com/scop/bash-completion/blob/fdf4456186eb4548ef628e65fb1be73d8e4695e9/bash_completion.d/000_bash_completion_compat.bash#L205
    local cur prev words cword cmd
    _init_completion -s || return
    # Find subcommand
    local i=1
    while [[ "$i" -lt "$COMP_CWORD" ]]; do
        local s="${COMP_WORDS[i]}"
        case "$s" in
            -*) ;;
            *)
            cmd="$s"
            break
            ;;
        esac
        (( i++ ))
    done
    # Parse available subcommands
    local line
    local is_command_list=false
    local subcommands=()
    while IFS='' read -r line; do
        # Traverse subcommand list
        if [[ "$is_command_list" == true ]]; then
            # Check for subcommand based on the indentation
            if [[ "$line" =~ ^[[:blank:]]{2}([[:alpha:]]([[:alnum:]]|-)+)$ ]]; then
                subcommands+=("${BASH_REMATCH[1]}")
            # Detect end of subcommand list based on indentation
            elif [[ "$line" =~ ^[[:graph:]] ]]; then
                is_command_list=false
            fi
        # Detect start of subcommand list
        elif [[ "$line" == "Commands:" ]]; then
            is_command_list=true
        fi
    # NOTE: <( COMMAND ) Bash construct is “process substitution”.
    done < <(xkbcli --help)
    # No previous subcommand or incomplete: completion for root xkbcli command
    if [[ "$i" -eq "$COMP_CWORD" ]]; then
        local opts
        # Doc for _parse_help: https://github.com/scop/bash-completion/blob/fdf4456186eb4548ef628e65fb1be73d8e4695e9/bash_completion.d/000_bash_completion_compat.bash#L311
        opts=$(_parse_help xkbcli)
        local cur="${COMP_WORDS[COMP_CWORD]}"
        COMPREPLY=($(compgen -W "${subcommands[*]} $opts" -- "$cur"))
        return
    fi
    # Found a supported subcommand: proceed to completion
    if [[ "${subcommands[*]}" =~ (^| )$cmd( |$) ]]; then
        ___xkbcli_subcommand "$cmd"
    fi
}
___xkbcli_subcommand()
{
    # Some special cases
    case $1 in
        compile-keymap | interactive-evdev)
            case ${COMP_WORDS[COMP_CWORD-1]} in
                --include | --keymap)
                    _filedir
                    return;;
            esac
            ;;
        compile-compose)
            case ${COMP_WORDS[COMP_CWORD-1]} in
                --file)
                    _filedir
                    return;;
            esac
            ;;
        list)
            if [[ ${COMP_WORDS[COMP_CWORD]} != -* ]]; then
                _filedir
                return
            fi
            ;;
    esac
    # Parse help to get command options
    local opts
    # Doc for _parse_usage and _parse_help:
    # • https://github.com/scop/bash-completion/blob/fdf4456186eb4548ef628e65fb1be73d8e4695e9/bash_completion.d/000_bash_completion_compat.bash#L335
    # • https://github.com/scop/bash-completion/blob/fdf4456186eb4548ef628e65fb1be73d8e4695e9/bash_completion.d/000_bash_completion_compat.bash#L311
    # We need both as the current help messages adopt both GNU and BSD styles.
    opts=$(_parse_usage xkbcli "$1 --help")
    opts+="
    "
    opts+=$(_parse_help xkbcli "$1 --help")
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=($(compgen -W "$opts" -- "$cur"))
}
complete -F ___xkbcli_main xkbcli