Configure o autocomplete para o primeiro argumento, deixe os outros sozinhos

2

Eu tenho um utilitário que leva uma carga de argumentos diferentes. Por enquanto, quero concluir automaticamente o primeiro argumento, mas deixar todos os outros passarem ao autocompletar normal. Como eu faço isso?

function _my_autocomplete_()
{
    case $COMP_CWORD in
        1) COMPREPLY=($(compgen -W "$(get_args_somehow)" -- ${COMP_WORDS[COMP_CWORD]}));;
        *) # What goes here?
    esac
}

complete -F _my_autocomplete_ mycommand
    
por Dominic Rodger 02.03.2012 / 16:09

1 resposta

5

Aparentemente, perdi completamente a sua pergunta. A resposta é que não há "autocompletar normal" bem definido. No entanto, se você souber que tipo de coisa gostaria de concluir (arquivos, aliases, pids, nomes de variáveis etc.), poderá atribuir um ou mais sinalizadores a compgen . Veja esta página de manual do compgen , especificamente as opções -A em complete (são as mesmas). Por exemplo. Se você quiser completar os nomes dos arquivos, você usaria isso:

compgen -f -- "${COMP_WORDS[COMP_CWORD]}"

Se você quiser completar comandos (incluindo aliases, funções, etc.), você pode usar isto:

compgen -back -A function -- "${COMP_WORDS[COMP_CWORD]}"

Use $COMP_CWORD para obter o índice da palavra que está sendo concluída. Se o índice não for 1, defina $COMPREPLY para () e retorne.

COMP_CWORD

    An index into ${COMP_WORDS} of the word containing the current 
    cursor position. This variable is available only in shell functions
    invoked by the programmable completion facilities
    
por 02.03.2012 / 17:14