Re: [PATCH v3 2/4] completion: introduce __gitcomp_nl_append ()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 3, 2014, 20:41 UTC
- Message-ID
- <xmqq38l4n6h9.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1388779022-14536-3-git-send-email-artagnon@gmail.com>
Ramkumar Ramachandra <artagnon@gmail.com> writes:
Show 20 quoted lines
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 51c2dd4..bf358d6 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -233,6 +233,19 @@ __gitcomp_nl ()
> __gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
> }
>
> +# Variation of __gitcomp_nl () that appends to the existing list of
> +# completion candidates, COMPREPLY.
> +__gitcomp_nl_append ()
> +{
> + local IFS=$'\n'
> + local i=${#COMPREPLY[@]}
> + for x in $1; do
> + if [[ "$x" == "$3"* ]]; then
> + COMPREPLY[i++]="$2$x$4"
> + fi
> + done
> +}Hmph. Why so much duplication with __gitcompadd, though.
I would have expected that this "append" behaviour to be done at the lower level by introducing __gitcompappend that does not forcibly truncate by starting from a hard-coded i=0, i.e. a collection of small helper functions plus a single implementation of the logic to push elements into COMPREPLY[] in __gitcompappend, perhaps like these:
__gitcompappend () {
local i=${#COMPREPLY[@]}
for x in $1; do
if [[ "$x" == "$3"* ]]; then
COMPREPLY[i++]="$2$x$4"
fi
done
} __gitcompadd () {
COMPREPLY=()
__gitcompappend "$@"
} __gitcomp_nl_append () {
local IFS=$'\n'
__gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }"
} __gitcomp_nl () {
COMPREPLY=()
__gitcomp_nl_append "$@"
}
Is it because going this route and doing it at such a low level
would make zsh completion (which I have no clue about ;-)
unnecessarily complex?Show 23 quoted lines
> +
> # Generates completion reply with compgen from newline-separated possible
> # completion filenames.
> # It accepts 1 to 3 arguments:
> diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
> index 6fca145..6b77968 100644
> --- a/contrib/completion/git-completion.zsh
> +++ b/contrib/completion/git-completion.zsh
> @@ -76,6 +76,14 @@ __gitcomp_nl ()
> compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
> }
>
> +__gitcomp_nl_append ()
> +{
> + emulate -L zsh
> +
> + local IFS=$'\n'
> + compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
> +}
> +
> __gitcomp_file ()
> {
> emulate -L zsh