On Sat, Nov 17, 2012 at 8:28 PM, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > On Sat, Nov 17, 2012 at 8:08 PM, Felipe Contreras > <felipe.contreras@xxxxxxxxx> wrote: >> On Sat, Nov 17, 2012 at 3:14 PM, SZEDER Gábor <szeder@xxxxxxxxxx> wrote: >>> On Sat, Nov 17, 2012 at 12:50:39PM +0100, Felipe Contreras wrote: >>>> On Sat, Nov 17, 2012 at 12:05 PM, SZEDER Gábor <szeder@xxxxxxxxxx> wrote: >>>> >>>> > __gitcomp_nl () >>>> > { >>>> > local IFS=$'\n' >>>> > - COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}")) >>>> > + COMPREPLY=($(awk -v pfx="${2-}" -v sfx="${4- }" -v cur="${3-$cur}" ' >>>> > + BEGIN { >>>> > + FS="\n"; >>>> > + len=length(cur); >>>> > + } >>>> > + { >>>> > + if (cur == substr($1, 1, len)) >>>> > + print pfx$1sfx; >>>> > + }' <<< "$1" )) >>>> > } >>>> >>>> Does this really perform better than my alternative? >>>> >>>> + for x in $1; do >>>> + if [[ "$x" = "$3"* ]]; then >>>> + COMPREPLY+=("$2$x$4") >>>> + fi >>>> + done >>> >>> It does: >>> >>> My version: >>> >>> $ refs="$(for i in {0..9999} ; do echo branch$i ; done)" >>> $ time __gitcomp_nl "$refs" >>> >>> real 0m0.109s >>> user 0m0.096s >>> sys 0m0.012s >>> >>> Yours: >>> >>> $ time __gitcomp_nl "$refs" >>> >>> real 0m0.321s >>> user 0m0.312s >>> sys 0m0.008s >> >> Yeah, for 10000 refs, which is not the common case: > > And this beats both in every case: > > while read -r x; do > if [[ "$x" == "$3"* ]]; then > COMPREPLY+=("$2$x$4") > fi > done <<< $1 Nevermind that. Here's another: local IFS=$'\n' COMPREPLY=($(printf -- "$2%s$4\n" $1 | grep "^$2$3")) -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html