Re: [PATCH v2 2/2] completion: add git status
- From
SZEDER Gábor <szeder@ira.uka.de>
- Date
- Jun 1, 2016, 12:15 UTC
- Message-ID
- <20160601141510.Horde.M2zGuJrzBNqf_2zYLo0P2Sx@webmail.informatik.kit.edu>
- In-Reply-To
- <1464773857.4315.1.camel@virtuell-zuhause.de>
Quoting Thomas Braun <thomas.braun@virtuell-zuhause.de>:
Show 41 quoted lines
> Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
> ---
> contrib/completion/git-completion.bash | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/contrib/completion/git-completion.bash
> b/contrib/completion/git-completion.bash
> index addea89..77343da 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -1782,6 +1782,35 @@ _git_stage ()
> _git_add
> }
>
> +_git_status ()
> +{
> + case "$cur" in
> + --ignore-submodules=*)
> + __gitcomp "none untracked dirty all" "" "${cur##--ignore-submodules=}"
> + return
> + ;;
> + --untracked-files=*)
> + __gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}"
> + return
> + ;;
> + --column=*)
> + __gitcomp "
> + always never auto column row plain dense nodense
> + " "" "${cur##--column=}"
> + return
> + ;;
> + --*)
> + __gitcomp "
> + --short --branch --porcelain --long --verbose
> + --untracked-files= --ignore-submodules= --ignored
> + --column= --no-column
> + "
> + return
> + ;;
> + esac
> + __git_complete_file__git_complete_file()'s job is to complete the '<rev>:<path>' notation, e.g. 'master:Mak<TAB>', which is not what we want here, because this notation doesn't make sense for 'git status' and because 'git status <TAB>' would then offer refs instead of files.
I think there are two choices what to do instead:
- Don't do anything :) Bash will then fall back to filename
completion, which is quite close to what we want here (and in this
case the return statements from the other case arms can go away as
well). The drawback is that all ignored files in the current
working directory will show up after 'git status <TAB>'. - use __git_complete_index_file() with appropriate options, perhaps
'--cached --others', but I didn't think this through. For bonus
points pass additional options when certain 'git status' options are
already present on the command line, e.g. pass '--ignored', too, if
it is present.Show 5 quoted lines
> +}
> +
> __git_config_get_set_variables ()
> {
> local prevword word config_file= c=$cword