O preenchimento automático exclui o último caractere das palavras às vezes

1

Eu tenho um comando personalizado define que obtém a definição de palavras do dicionário. Eu queria criar um script de preenchimento automático para completar as palavras que desejo definir usando a lista de palavras encontrada em /usr/share/dict/words . Isso é o que eu tenho até agora:

Script de autocompletar: /etc/bash_completion.d/define

_define()
{
    dict='/usr/share/dict/words'
    cur=${COMP_WORDS[COMP_CWORD]}
    regex="^$cur*"
    words=$(grep $regex $dict)

    if [[ $cur != -* ]]
    then
        COMPREPLY=( $( compgen -W "$(echo $words)" $cur) )
    else
        COMPREPLY=()
    fi
    return 0
}

complete -F _define define

Quando eu bato [tab][tab] , às vezes, eu obtenho uma lista de palavras que começam com a palavra digitada, outras vezes apenas apaga o último caractere. Por exemplo, quando eu faço define wall [tab][tab] eu recebo define wal , mas se eu faço define wal [tab][tab] eu recebo uma lista de palavras.

Por que isso está acontecendo?

    
por razzak 10.07.2016 / 02:04

1 resposta

1

O problema acabou sendo algo a ver com caracteres de aspas simples na lista de palavras de conclusão ' , corrigi-lo alterando% regex do comandogrep de ^$cur* para ^$cur[^']*$ :

_define()
{
    local dict='/usr/share/dict/words'
    local cur=${COMP_WORDS[COMP_CWORD]}
    local regex="^$cur[^']*$"

    if [[ $cur == -* ]]
    then
        COMPREPLY=()
    else
        local WORDS="$( grep "$regex" $dict )"
        COMPREPLY=( $(compgen -W "${WORDS}" -- $cur) )
    fi
}

complete -F _define define
    
por 10.07.2016 / 05:10