[Bash-completion-devel] hostname completion issues

Freddy Vulto fvulto at gmail.com
Sun Jul 26 10:22:54 UTC 2009


On Sat, Jul 25, 2009 at 6:28 PM, Ville Skyttä<ville.skytta at iki.fi> wrote:
> On Saturday 25 July 2009, Guillaume Rousse wrote:
>> I like the idea, but using stdout for output would force to use
>> subshells to get the result.
> [...]
>> I guess there would be additional overhead added.
>
> It would also require the caller to take care of $IFS stuff, whereas if adding
> directly to an array, functions can take care of that internally as
> appropriate.

The helper functions already do a subshell and this gets removed, so
isn't the overhead only in each caller repeating a subshell
assignment - not in doing an additional subshell?

However, to avoid the redundancy, what about two helper-helper
functions `_compfset' and `_compfadd' - defaulting to IFS=$'\t\n':

    # @param $1  Function id
    # @param $2  CWORD to complete on
    _compfadd() {
        local IFS=$'\t\n'
        COMPREPLY=( ${COMPREPLY[@]:-} $( _compgen_$1 "$2") )
    }

    # @param $1  Function id
    # @param $2  CWORD to complete on
    _compfset() {
        COMPREPLY=()
        _compfadd "$@"
    }


    _compgen_pci_ids() {
        compgen -W "$( lspci -n | awk '{print $3}')" -- "$1"
    }

    _compgen_filedir() { ... }

    etc.

Then we could have something as:

    case f)
        _compfset filedir "$cur"

The `_compfadd', `_compfset' and `_compgen_...' functions can be
adorned with additional options for prefixes and suffixes, as bash's
`compgen': [-P prefix] [-S suffix].

What do you think?

Regards,
Freddy Vulto
http://fvue.nl



More information about the Bash-completion-devel mailing list