es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Simule la respuesta COMPREPLY de Bash sin completarla realmente.

Pasos para reproducir

  • Crea un directorio en tmp y agrega 1 archivo adentro.

    mkdir /tmp/testdir && touch /tmp/testdir/examplefile

  • Pega el siguiente script en /tmp/completion.sh

    # COMIENZO AUTOCOMPLETADO
    function foocompletar() {
    local comnum cur opts
    [[ “${COMPWORDS[@]}” == *”-“* ]] && comnum=2 || comnum=1;
    COMPREPLY=()
    cur=”${COMPWORDS[COMPCWORD]}”
    opts=”–help –restart -h -r”
    if (( COMPCWORD > comnum )); then
    COMPREPLY=( $(for filename in “/tmp/testdir/”; do echo ${filename##/}; done) )
    return
    fi
    if [[ ${cur} == -* ]]; then
    COMPREPLY=( $(compgen -W “${opts}” — ${cur}) )
    return 0
    else
    COMPREPLY=( $(for filelist in /tmp/testdir/”$2″; do echo ${filelist##/}; done) )
    fi
    }
    complete -F foocompletar foo.sh
    # FIN AUTOCOMPLETADO

  • Fuente luego.

    . /tmp/completion.sh


Resultado esperado

$ foo.sh --restart examplefile <tab><tab>
examplefile           
$ foo.sh --restart examplefile <tab><tab>
examplefile        
$ foo.sh --restart examplefile <tab><tab>
examplefile     
$ foo.sh --restart examplefile <tab><tab>

En cambio, sucede lo siguiente

$ foo.sh --restart examplefile <tab><tab> examplefile <tab><tab> examplefile <tab><tab> examplefile <tab><tab> examplefile <tab><tab> examplefile

Quiero que la sugerencia aparezca como completado posible, pero sin completarlo realmente (por motivos de visualización). Esta pregunta se ha hecho anteriormente, pero hasta la fecha no se ha dado ninguna respuesta.

En relación a -o nosort

Investigué esa opción y solo está disponible en Bash 4.4+, la probé en mi máquina 16.04 y falló. Busco una solución más “global”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, sin usar la opción -o nosort o actualizar a Bash 4.4+ no hay una solución global para lograr el comportamiento deseado de mostrar sugerencias de autocompletado sin completar realmente la palabra. Una solución alternativa es usar la función _get_comp_words_by_ref para acceder a la palabra actual que se está completando, y luego construir y mostrar manualmente las sugerencias de autocompletado sin completar realmente la palabra. Sin embargo, este enfoque requeriría modificar la función _foo_complete en el script proporcionado.

Comments are closed.