On Fri, Feb 8, 2019 at 9:19 PM SZEDER Gábor <szeder.dev@xxxxxxxxx> wrote: > > On Fri, Feb 08, 2019 at 04:04:00PM +0700, Nguyễn Thái Ngọc Duy wrote: > > Completion support for --guess could be made better. If no --detach is > > given, we should only provide a list of refs/heads/* and dwim ones, > > not the entire ref space. But I still can't penetrate that > > __git_refs() function yet. > > > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > > --- > > contrib/completion/git-completion.bash | 26 ++++++++++++++++++++++++++ > > 1 file changed, 26 insertions(+) > > > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > > index 499e56f83d..891abb72d7 100644 > > --- a/contrib/completion/git-completion.bash > > +++ b/contrib/completion/git-completion.bash > > @@ -2126,6 +2126,32 @@ _git_status () > > __git_complete_index_file "$complete_opt" > > } > > > > +_git_switch () > > +{ > > + case "$cur" in > > + --conflict=*) > > + __gitcomp "diff3 merge" "" "${cur##--conflict=}" > > + ;; > > + --*) > > + __gitcomp_builtin switch > > + ;; > > + *) > > + # check if ---guess was specified to enable DWIM mode > > Nit: s/---/--/ > > > + local track_opt= only_local_ref=n > > + if [ -n "$(__git_find_on_cmdline "-g --guess")" ]; then > > + track_opt='--track' > > + elif [ -z "$(__git_find_on_cmdline "-d --detach")" ]; then > > + only_local_ref=y > > + fi > > Could these two options be used together? I think they could. It does not make much sense when dwim is active since you'll be creating a new branch then detach from it. But yeah when you give a real branch, no dwim, no new branch created, then "git switch -dg" should work. Will fix. > If > that's the case, then the two conditions shouldn't be chained with > elif, but should be two separate if statements (even eliminating > $only_local_ref, while at it?). If that's not the case, then the two > __git_find_on_cmdline() calls could be combined into one, and a case > statement could act according the option found, sparing one of the > subshells from the two. > > > + if [ $only_local_ref = y ]; then > > + __gitcomp_direct "$(__git_heads "" "$cur" " ")" > > + else > > + __git_complete_refs $track_opt > > + fi > > + ;; > > + esac > > +} > > + > > __git_config_get_set_variables () > > { > > local prevword word config_file= c=$cword > > -- > > 2.20.1.682.gd5861c6d90 > > -- Duy