Problema de autocompletar no bash com sinal de igual (=)

6

Estou tentando fazer o preenchimento automático funcionar e escrevi um código para demonstrar um problema que enfrentei:

$ cat completion.sh
function _completion_command() {
    compopt +o bashdefault +o default +o dirnames +o filenames +o nospace +o plusdirs
    local cur=${COMP_WORDS[COMP_CWORD]}
    local prev=${COMP_WORDS[COMP_CWORD-1]}
    case "$prev" in
        -u)
            compopt -o nospace
            COMPREPLY=($(compgen -S\= -W "parm" -- $cur))
            return 0
            ;;
         parm)
            COMPREPLY=($(compgen  -W "a b c" -- $cur))
            return 0
            ;;
    esac
    COMPREPLY=($(compgen  -W "-u" -- $cur))
    return 0
}
complete -F _completion_command command

Eu esperava que o autocomplemento oferecesse argumentos possíveis para o parâmetro chamado "parm":

. completion.sh
./command -u parm=

Separador Separador

a b c

Mas no meu caso, o autocomplete não me oferece nada. Qualquer idéia de como fazê-lo funcionar é bem-vinda. Obrigado antecipadamente.

    
por dchirikov 09.02.2015 / 09:55

1 resposta

2

prev contém parm e cur contém = e compgen -W "a b c" -- = não produz nada

Você pode usar _get_comp_words_by_ref de conclusão do bash :

source bash-completion # /usr/share/bash-completion/bash_completion on Ubuntu with bash-complete installed

function _completion_command() {
  local cur prev
  _get_comp_words_by_ref -n = cur prev
  case "$prev" in
    -u)
      case "$cur" in
        parm=*)
          COMPREPLY=($(compgen -W "a b c" -- ${cur#*=}))
          return 0;
          ;;
        *)
          compopt -o nospace
          COMPREPLY=($(compgen -S\= -W "parm" -- $cur))
          return 0;
          ;;
      esac
      ;;
  esac

  COMPREPLY=($(compgen  -W "-u" -- $cur))
}

complete -F _completion_command command
    
por 26.06.2015 / 04:21