Pregunta

Estoy intentando configurar finalización fiesta para una secuencia de comandos de utilidad que escribí, por lo que añade el siguiente script para /etc/bash_completion.d:

_mcd()
{
    local cur words
    COMPREPLY=()

    cur="${COMP_WORDS[COMP_CWORD]}"
    words=`mcd-completion-words`
    COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
    return 0
}
complete -F _mcd mcd

El script mcd-completion-words encuentra programación operadores disponibles para el comando. Cuando reinicie bash (o fuente de la secuencia de comandos), que pueda pestaña éxito completo, pero si lo hago, no puedo retroceso ya no más allá de un personaje completado.

Además, si intento enumerar todas las opciones (por ejemplo, yo intento ficha completa w / ninguna palabra en su lugar), golpe del añade una ficha para el comando, que también puede no retroceso.

¿Cómo puedo hacer que el comportamiento finalización archivo normal imitan fiesta? Cualquier ayuda es apreciada. Gracias!


He aquí un caso de prueba reducida para MCD-terminación, palabras que todavía presenta el mismo comportamiento. Curiosamente, el caso de Dennis funciona para mí también (cuando se sustituye con palabras = 'uno, dos, tres', por ejemplo).

#!/usr/bin/env php
<?php

print "one two three four five six seven eight nine";
¿Fue útil?

Solución

He aquí un caso de prueba reducida; incluso un comando vacío 'php' hace que el comportamiento de la finalización errónea:

$ _mcd() { php -r ""; COMPREPLY=( one ); }
$ complete -F _mcd mcd
$ mcd <TAB>            # Becomes 'mcd one' all right
$ mcd one <BACKSPACE>  # ERROR: doesn't work

Este es en la máquina (Ubuntu) tanto con bash-3.2.48 / bash-4.0.33 y php-5.2.6-3ubuntu4. En otra máquina (Debian) con bash-3.2.39 y PHP-5.2.6-1 + lenny9, terminación y de retroceso va bien.

El uso de perl -e "" en lugar de php -r "" también va bien.

No sé lo que está pasando, php en conflicto con readline? Tal vez usted puede intentar lista de correo bug-fiesta?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top