* Some sub-commands can't be completed by TAB key. @ 2022-01-22 8:42 Hongyi Zhao 2022-01-22 14:47 ` Johannes Sixt 2022-01-25 12:49 ` [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 0 siblings, 2 replies; 17+ messages in thread From: Hongyi Zhao @ 2022-01-22 8:42 UTC (permalink / raw) To: Git List On Ubuntu 20.04.3 LTS, I use the following git version installed from its apt repository: $ git --version git version 2.25.1 I find that there are some sub-commands can't be completed by TAB key: $ git <TAB> add cherry-pick fetch latexdiff pull restore status am citool format-patch log push revert submodule apply clean fsck merge range-diff rm switch archive clone gc mergetool rebase send-email tag bisect commit gitk mv reflog shortlog whatchanged blame config grep nbdiffdriver remote show worktree branch deborig gui nbdifftool repack show-branch bundle describe help nbmergedriver replace sparse-checkout checkout diff init nbmergetool request-pull stage cherry difftool instaweb notes reset stash As you can see, there are some sub-commands which are not listed in the above list, for example, the following ones: $ git ls-remote $ git ls-files Any hints for this problem? Regards -- Assoc. Prof. Hongyi Zhao <hongyi.zhao@gmail.com> Theory and Simulation of Materials Hebei Vocational University of Technology and Engineering No. 473, Quannan West Street, Xindu District, Xingtai, Hebei province ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-22 8:42 Some sub-commands can't be completed by TAB key Hongyi Zhao @ 2022-01-22 14:47 ` Johannes Sixt 2022-01-23 0:38 ` Hongyi Zhao 2022-01-25 12:49 ` [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 1 sibling, 1 reply; 17+ messages in thread From: Johannes Sixt @ 2022-01-22 14:47 UTC (permalink / raw) To: Hongyi Zhao; +Cc: Git List Am 22.01.22 um 09:42 schrieb Hongyi Zhao: > I find that there are some sub-commands can't be completed by TAB key: > > $ git <TAB> > add cherry-pick fetch latexdiff > [...] > As you can see, there are some sub-commands which are not listed in > the above list, for example, the following ones: > > $ git ls-remote > $ git ls-files > > Any hints for this problem? Tab completion is only available for user-facing sub-commands ("porcelain"), but not for sub-commands intended for scripting ("plumbing"). The intent is to make tab completion more efficient during day-to-day work on the command line. For example, $ git l<TAB> arrives at $ git log <cursor here> instead of log ls-files ls-remote ls-tree $ git l<cursor here> -- Hannes ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-22 14:47 ` Johannes Sixt @ 2022-01-23 0:38 ` Hongyi Zhao 2022-01-23 17:31 ` Philippe Blain 0 siblings, 1 reply; 17+ messages in thread From: Hongyi Zhao @ 2022-01-23 0:38 UTC (permalink / raw) To: Johannes Sixt; +Cc: Git List On Sat, Jan 22, 2022 at 10:47 PM Johannes Sixt <j6t@kdbg.org> wrote: > > Am 22.01.22 um 09:42 schrieb Hongyi Zhao: > > I find that there are some sub-commands can't be completed by TAB key: > > > > $ git <TAB> > > add cherry-pick fetch latexdiff > > [...] > > As you can see, there are some sub-commands which are not listed in > > the above list, for example, the following ones: > > > > $ git ls-remote > > $ git ls-files > > > > Any hints for this problem? > > Tab completion is only available for user-facing sub-commands > ("porcelain"), but not for sub-commands intended for scripting > ("plumbing"). The intent is to make tab completion more efficient during > day-to-day work on the command line. For example, But there are so many git sub-commands, so if the plumbing feature is supported, it will facilitate user to check the availability of some sub-commands. > $ git l<TAB> > > arrives at > > $ git log <cursor here> I see the following: $ git l<TAB> latexdiff log > instead of > > log ls-files ls-remote ls-tree > $ git l<cursor here> > > -- Hannes ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-23 0:38 ` Hongyi Zhao @ 2022-01-23 17:31 ` Philippe Blain 2022-01-23 19:51 ` Junio C Hamano 0 siblings, 1 reply; 17+ messages in thread From: Philippe Blain @ 2022-01-23 17:31 UTC (permalink / raw) To: Hongyi Zhao, Johannes Sixt; +Cc: Git List Hi Hongyi, Le 2022-01-22 à 19:38, Hongyi Zhao a écrit : > On Sat, Jan 22, 2022 at 10:47 PM Johannes Sixt <j6t@kdbg.org> wrote: >> >> Am 22.01.22 um 09:42 schrieb Hongyi Zhao: >>> I find that there are some sub-commands can't be completed by TAB key: >>> >>> $ git <TAB> >>> add cherry-pick fetch latexdiff >>> [...] >>> As you can see, there are some sub-commands which are not listed in >>> the above list, for example, the following ones: >>> >>> $ git ls-remote >>> $ git ls-files >>> >>> Any hints for this problem? >> >> Tab completion is only available for user-facing sub-commands >> ("porcelain"), but not for sub-commands intended for scripting >> ("plumbing"). The intent is to make tab completion more efficient during >> day-to-day work on the command line. For example, > > But there are so many git sub-commands, so if the plumbing feature is > supported, it will facilitate user to check the availability of some > sub-commands. If what you want to do is "check the availability" of some sub-command, you can simply do 'git <subcommand> -h', for example, and see if Git recognizes the subcommand. If you mean discovering Git commands, you can use 'git help -a', which will list all commands, including pluming commands. If you want to customize the Bash completion so that some select plumbing commands do appear in the tab completion, you can use the config 'completion.commands' [1]. Setting it to "ls-files ls-remote ls-tree" would then give you your desired output below. > >> $ git l<TAB> >> >> arrives at >> >> $ git log <cursor here> > > I see the following: > > $ git l<TAB> > latexdiff log This would mean you have a 'git-latexdiff' command somewhere in your PATH. Hope that helps, Philippe. [1] https://git-scm.com/docs/git-config#Documentation/git-config.txt-completioncommands ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-23 17:31 ` Philippe Blain @ 2022-01-23 19:51 ` Junio C Hamano 2022-01-24 1:42 ` Hongyi Zhao 2022-01-24 9:18 ` João Victor Bonfim 0 siblings, 2 replies; 17+ messages in thread From: Junio C Hamano @ 2022-01-23 19:51 UTC (permalink / raw) To: Philippe Blain; +Cc: Hongyi Zhao, Johannes Sixt, Git List Philippe Blain <levraiphilippeblain@gmail.com> writes: >> I see the following: >> >> $ git l<TAB> >> latexdiff log > > This would mean you have a 'git-latexdiff' command somewhere in your PATH. True. On Debian-based systems, the texlive-extra-utils package has /usr/bin/git-latexdiff and that is likely where it came from. It is also worth noting that completion will also include whatever alias. I get "lg" in the mix because I have [alias] lg = "log --oneline" in my $HOME/.gitconfig, for example. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-23 19:51 ` Junio C Hamano @ 2022-01-24 1:42 ` Hongyi Zhao 2022-01-24 9:18 ` João Victor Bonfim 1 sibling, 0 replies; 17+ messages in thread From: Hongyi Zhao @ 2022-01-24 1:42 UTC (permalink / raw) To: Junio C Hamano; +Cc: Philippe Blain, Johannes Sixt, Git List On Mon, Jan 24, 2022 at 3:51 AM Junio C Hamano <gitster@pobox.com> wrote: > > Philippe Blain <levraiphilippeblain@gmail.com> writes: > > >> I see the following: > >> > >> $ git l<TAB> > >> latexdiff log > > > > This would mean you have a 'git-latexdiff' command somewhere in your PATH. > > True. On Debian-based systems, the texlive-extra-utils package has > /usr/bin/git-latexdiff and that is likely where it came from. Mine comes from TexLive: $ which git-latexdiff /opt/texlive/2021/bin/x86_64-linux/git-latexdiff > It is also worth noting that completion will also include whatever > alias. I get "lg" in the mix because I have > > [alias] > lg = "log --oneline" > > in my $HOME/.gitconfig, for example. Good example. Got it. HZ ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-23 19:51 ` Junio C Hamano 2022-01-24 1:42 ` Hongyi Zhao @ 2022-01-24 9:18 ` João Victor Bonfim 2022-01-25 7:33 ` Junio C Hamano 1 sibling, 1 reply; 17+ messages in thread From: João Victor Bonfim @ 2022-01-24 9:18 UTC (permalink / raw) To: Junio C Hamano; +Cc: Git List > It is also worth noting that completion will also include whatever > alias. I get "lg" in the mix because I have... That sounds like something that should be hidden, no? Like, all aliases are left unmentioned? ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Some sub-commands can't be completed by TAB key. 2022-01-24 9:18 ` João Victor Bonfim @ 2022-01-25 7:33 ` Junio C Hamano 0 siblings, 0 replies; 17+ messages in thread From: Junio C Hamano @ 2022-01-25 7:33 UTC (permalink / raw) To: João Victor Bonfim; +Cc: Git List João Victor Bonfim <JoaoVictorBonfim+Git-Mail-List@protonmail.com> writes: >> It is also worth noting that completion will also include whatever >> alias. I get "lg" in the mix because I have... > > That sounds like something that should be hidden, no? > Like, all aliases are left unmentioned? Unlike the plumbing commands that are meant to be used in writing scripts and not typed in interactive sessions, and more like Porcelain commands that are meant to be used by human end-users in their interactive sessions by getting typed from the keyboard, an aliase is often (and certainly my "lg" is) defined in order to give a short-and-sweet typesaver to a command with common initial options that the user finds useful in their interactive sessions. I am curious to find out what makes you think it is a good idea to omit them from completion. ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-01-22 8:42 Some sub-commands can't be completed by TAB key Hongyi Zhao 2022-01-22 14:47 ` Johannes Sixt @ 2022-01-25 12:49 ` Ævar Arnfjörð Bjarmason 2022-01-26 22:34 ` Junio C Hamano 2022-02-02 11:15 ` [PATCH v2 0/2] " Ævar Arnfjörð Bjarmason 1 sibling, 2 replies; 17+ messages in thread From: Ævar Arnfjörð Bjarmason @ 2022-01-25 12:49 UTC (permalink / raw) To: git Cc: Junio C Hamano, Hongyi Zhao, Johannes Sixt, Philippe Blain, João Victor Bonfim, Ævar Arnfjörð Bjarmason Add a GIT_COMPLETION_SHOW_ALL_COMMANDS=1 configuration setting to go with the existing GIT_COMPLETION_SHOW_ALL=1 added in c099f579b98 (completion: add GIT_COMPLETION_SHOW_ALL env var, 2020-08-19). This will include plumbing commands such as "cat-file" in "git <TAB>" and "git c<TAB>" completion. Without/with this I have 134 and 243 completion with git <TAB>, respectively. It was already possible to do this by tweaking GIT_COMPLETION_SHOW_ALL_COMMANDS from the outside, that testing variable was added in 84a97131065 (completion: let git provide the completable command list, 2018-05-20). Doing this before loading git-completion.bash worked: export GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=builtins,main,list-mainporcelain,others,nohelpers,alias,list-complete,config)" But such testing variables are not meant to be used from the outside, and we make no guarantees that those internal won't change. So let's expose this as a dedicated configuration knob. 1. https://lore.kernel.org/git/CAGP6POJ9gwp+t-eP3TPkivBLLbNb2+qj=61Mehcj=1BgrVOSLA@mail.gmail.com/ Reported-by: Hongyi Zhao <hongyi.zhao@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- n Sat, Jan 22 2022, Hongyi Zhao wrote: > On Ubuntu 20.04.3 LTS, I use the following git version installed from > its apt repository: > > $ git --version > git version 2.25.1 > > I find that there are some sub-commands can't be completed by TAB key > [...] Others have explained why this happens, but as noted above an easy but undocumented workaround for this that I use, because I'd like e.g. "cat-file" to show up in this completion. In your ~/.bashrc or equivalent do something like this before it loads git-completion.bash: export GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=builtins,main,others,alias)" But it would be even nicer to turn that into a first-class feature, this patch does so. With this you can just do: export GIT_COMPLETION_SHOW_ALL_COMMANDS=1 contrib/completion/git-completion.bash | 13 ++++++++++++- t/t9902-completion.sh | 27 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 377d6c5494a..2436b8eb6b9 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -49,6 +49,11 @@ # and git-switch completion (e.g., completing "foo" when "origin/foo" # exists). # +# GIT_COMPLETION_SHOW_ALL_COMMANDS +# +# When set to "1" suggest all commands, including plumbing commands +# which are hidden by default (e.g. "cat-file" on "git ca<TAB>"). +# # GIT_COMPLETION_SHOW_ALL # # When set to "1" suggest all options, including options which are @@ -3455,7 +3460,13 @@ __git_main () then __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config + + if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1" + then + list_cmds=builtins,$list_cmds + fi + __gitcomp "$(__git --list-cmds=$list_cmds)" fi ;; esac diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 98c62806328..e3ea6a41b00 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -2432,6 +2432,33 @@ test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' EOF ' +test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' ' + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + + # Just mainporcelain, not plumbing commands + run_completion "git c" && + grep checkout out && + ! grep cat-file out +' + +test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' ' + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + GIT_COMPLETION_SHOW_ALL_COMMANDS=1 && + export GIT_COMPLETION_SHOW_ALL_COMMANDS && + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + + # Both mainporcelain and plumbing commands + run_completion "git c" && + grep checkout out && + grep cat-file out && + + # Check "gitk", a "main" command, but not a built-in + more plumbing + run_completion "git g" && + grep gitk out && + grep get-tar-commit-id out +' + test_expect_success '__git_complete' ' unset -f __git_wrap__git_main && -- 2.35.0.rc2.886.ga87834885e8 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-01-25 12:49 ` [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason @ 2022-01-26 22:34 ` Junio C Hamano 2022-02-02 11:15 ` [PATCH v2 0/2] " Ævar Arnfjörð Bjarmason 1 sibling, 0 replies; 17+ messages in thread From: Junio C Hamano @ 2022-01-26 22:34 UTC (permalink / raw) To: Ævar Arnfjörð Bjarmason Cc: git, Hongyi Zhao, Johannes Sixt, Philippe Blain, João Victor Bonfim Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes: > Add a GIT_COMPLETION_SHOW_ALL_COMMANDS=1 configuration setting to go > with the existing GIT_COMPLETION_SHOW_ALL=1 added in > c099f579b98 (completion: add GIT_COMPLETION_SHOW_ALL env var, > 2020-08-19). > > This will include plumbing commands such as "cat-file" in "git <TAB>" > and "git c<TAB>" completion. Without/with this I have 134 and 243 > completion with git <TAB>, respectively. OK. This makes sense in the sense that more choice is better. > It was already possible to do this by tweaking > GIT_COMPLETION_SHOW_ALL_COMMANDS from the outside, that testing > variable was added in 84a97131065 (completion: let git provide the > completable command list, 2018-05-20). Doing this before loading > git-completion.bash worked: Perhaps there is a typo that ruined whole the paragraph. We are adding that variable with this patch, so by definition, it did not exist before, which means we cannot "tweak" it because it did not exist. > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -49,6 +49,11 @@ > # and git-switch completion (e.g., completing "foo" when "origin/foo" > # exists). > # > +# GIT_COMPLETION_SHOW_ALL_COMMANDS > +# > +# When set to "1" suggest all commands, including plumbing commands > +# which are hidden by default (e.g. "cat-file" on "git ca<TAB>"). > +# Usually we frown upon inserting a new thing to the middle of a list of things that has no inherent order. In this case, I think this is OK, as the existing "all" (below) is about completing options, while the new one is about completing subcommands, and the latter is at a higher conceptual level than the former. > # GIT_COMPLETION_SHOW_ALL > # > # When set to "1" suggest all options, including options which are > @@ -3455,7 +3460,13 @@ __git_main () > then > __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" > else > - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" > + local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config > + > + if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1" > + then > + list_cmds=builtins,$list_cmds It is sad that there is no "plumbing" class (assuming the goal is "we by default exclude plumbing, so add that to the list"), or just "everything under the sun" class. If there were a plumbing command that is not implemented as a built-in, adding buitlins to list_cmds will not show the command, will it? Also, because nohelpers is not removed from list_cmds, whatever command that were removed from exclude_helpers_from_list() will be hidden. It looks as though help.c needs a new list_all_cmds() that can be called from git.c::list_cmds() when "all" is asked for, and dumps everything from command_list[] plus whatever load_command_list() loads. > + fi > + __gitcomp "$(__git --list-cmds=$list_cmds)" > fi > ;; > esac Having said all that, assuming that including "builtins" is a good enough approximation (which I do not have no opinion on), the implementation looks good to me. > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index 98c62806328..e3ea6a41b00 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -2432,6 +2432,33 @@ test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' > EOF > ' > > +test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' ' > + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && > + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && As we've done dot-sourcing of the file at the beginning of the script already, dot-sourcing the same thing again would only overwrite what was done before, without clearing the deck. Which may not hurt for the purpose of _this_ test _right_ _now_q. But as this is not done inside a subshell, whetever we dot-source here will persist til the end of the script. Which may be more problematic as it will affect the tests that come (and new tests that will be added) after this point. The same comment applies to the other new test added immediately after this one. Other than that, looks sensible to me. Thanks. ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 0/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-01-25 12:49 ` [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 2022-01-26 22:34 ` Junio C Hamano @ 2022-02-02 11:15 ` Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 1/2] completion tests: re-source git-completion.bash in a subshell Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 1 sibling, 2 replies; 17+ messages in thread From: Ævar Arnfjörð Bjarmason @ 2022-02-02 11:15 UTC (permalink / raw) To: git Cc: Junio C Hamano, Hongyi Zhao, Philippe Blain, João Victor Bonfim, Ævar Arnfjörð Bjarmason This series adds an opt-in configuration to make "git <TAB>" complete the likes of "cat-file" (plumbing), in addition to the existing completion for the likes of "status" (porcelain). This v2 addresses feedback from Junio on the v1, I also added a preceding patch to change the re-sourcing of git-completion.bash in some existing tests to use a subshell, which is a pattern I'd buggily copied in the v1. Ævar Arnfjörð Bjarmason (2): completion tests: re-source git-completion.bash in a subshell completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS contrib/completion/git-completion.bash | 13 ++++- t/t9902-completion.sh | 81 +++++++++++++++++++------- 2 files changed, 72 insertions(+), 22 deletions(-) Range-diff against v1: -: ----------- > 1: cf09546e079 completion tests: re-source git-completion.bash in a subshell 1: 5f18305ca08 ! 2: 2e2e3569e02 completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS @@ Commit message completion with git <TAB>, respectively. It was already possible to do this by tweaking - GIT_COMPLETION_SHOW_ALL_COMMANDS from the outside, that testing + GIT_TESTING_PORCELAIN_COMMAND_LIST= from the outside, that testing variable was added in 84a97131065 (completion: let git provide the completable command list, 2018-05-20). Doing this before loading git-completion.bash worked: @@ Commit message and we make no guarantees that those internal won't change. So let's expose this as a dedicated configuration knob. + It would be better to teach --list-cmds=* a new category which would + include all of these groups, but that's a larger change that we can + leave for some other time. + 1. https://lore.kernel.org/git/CAGP6POJ9gwp+t-eP3TPkivBLLbNb2+qj=61Mehcj=1BgrVOSLA@mail.gmail.com/ Reported-by: Hongyi Zhao <hongyi.zhao@gmail.com> @@ contrib/completion/git-completion.bash: __git_main () ## t/t9902-completion.sh ## @@ t/t9902-completion.sh: test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' - EOF + ) ' +test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' ' -+ . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && -+ sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && ++ ( ++ . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && ++ sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + -+ # Just mainporcelain, not plumbing commands -+ run_completion "git c" && -+ grep checkout out && -+ ! grep cat-file out ++ # Just mainporcelain, not plumbing commands ++ run_completion "git c" && ++ grep checkout out && ++ ! grep cat-file out ++ ) +' + +test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' ' -+ . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && -+ GIT_COMPLETION_SHOW_ALL_COMMANDS=1 && -+ export GIT_COMPLETION_SHOW_ALL_COMMANDS && -+ sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && ++ ( ++ . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && ++ GIT_COMPLETION_SHOW_ALL_COMMANDS=1 && ++ export GIT_COMPLETION_SHOW_ALL_COMMANDS && ++ sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + -+ # Both mainporcelain and plumbing commands -+ run_completion "git c" && -+ grep checkout out && -+ grep cat-file out && ++ # Both mainporcelain and plumbing commands ++ run_completion "git c" && ++ grep checkout out && ++ grep cat-file out && + -+ # Check "gitk", a "main" command, but not a built-in + more plumbing -+ run_completion "git g" && -+ grep gitk out && -+ grep get-tar-commit-id out ++ # Check "gitk", a "main" command, but not a built-in + more plumbing ++ run_completion "git g" && ++ grep gitk out && ++ grep get-tar-commit-id out ++ ) +' + test_expect_success '__git_complete' ' -- 2.35.0.913.g12b4baa2536 ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 1/2] completion tests: re-source git-completion.bash in a subshell 2022-02-02 11:15 ` [PATCH v2 0/2] " Ævar Arnfjörð Bjarmason @ 2022-02-02 11:15 ` Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 1 sibling, 0 replies; 17+ messages in thread From: Ævar Arnfjörð Bjarmason @ 2022-02-02 11:15 UTC (permalink / raw) To: git Cc: Junio C Hamano, Hongyi Zhao, Philippe Blain, João Victor Bonfim, Ævar Arnfjörð Bjarmason Change tests of git-completion.bash that re-source it to do so inside a subshell. Re-sourcing it will clobber variables it sets, and in the case of the "GIT_COMPLETION_SHOW_ALL=1" test added in ca2d62b7879 (parse-options: don't complete option aliases by default, 2021-07-16) change the behavior of the completion persistently. Aside from the addition of "(" and ")" on new lines this is an indentation-only change, only the "(" and ")" lines are changed under "git diff -w". So let's change that test, and for good measure do the same for the three tests that precede it, which were added in 8b0eaa41f23 (completion: clear cached --options when sourcing the completion script, 2018-03-22). The may not be wrong, but doing this establishes a more reliable pattern for future tests, which might use these as a template to copy. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- t/t9902-completion.sh | 50 +++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 98c62806328..c9805f2147d 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -2396,27 +2396,33 @@ test_expect_success 'options with value' ' ' test_expect_success 'sourcing the completion script clears cached commands' ' - __git_compute_all_commands && - verbose test -n "$__git_all_commands" && - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && - verbose test -z "$__git_all_commands" + ( + __git_compute_all_commands && + verbose test -n "$__git_all_commands" && + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + verbose test -z "$__git_all_commands" + ) ' test_expect_success 'sourcing the completion script clears cached merge strategies' ' - __git_compute_merge_strategies && - verbose test -n "$__git_merge_strategies" && - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && - verbose test -z "$__git_merge_strategies" + ( + __git_compute_merge_strategies && + verbose test -n "$__git_merge_strategies" && + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + verbose test -z "$__git_merge_strategies" + ) ' test_expect_success 'sourcing the completion script clears cached --options' ' - __gitcomp_builtin checkout && - verbose test -n "$__gitcomp_builtin_checkout" && - __gitcomp_builtin notes_edit && - verbose test -n "$__gitcomp_builtin_notes_edit" && - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && - verbose test -z "$__gitcomp_builtin_checkout" && - verbose test -z "$__gitcomp_builtin_notes_edit" + ( + __gitcomp_builtin checkout && + verbose test -n "$__gitcomp_builtin_checkout" && + __gitcomp_builtin notes_edit && + verbose test -n "$__gitcomp_builtin_notes_edit" && + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + verbose test -z "$__gitcomp_builtin_checkout" && + verbose test -z "$__gitcomp_builtin_notes_edit" + ) ' test_expect_success 'option aliases are not shown by default' ' @@ -2424,12 +2430,14 @@ test_expect_success 'option aliases are not shown by default' ' ' test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && - GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL && - test_completion "git clone --recurs" <<-\EOF - --recurse-submodules Z - --recursive Z - EOF + ( + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL && + test_completion "git clone --recurs" <<-\EOF + --recurse-submodules Z + --recursive Z + EOF + ) ' test_expect_success '__git_complete' ' -- 2.35.0.913.g12b4baa2536 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-02-02 11:15 ` [PATCH v2 0/2] " Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 1/2] completion tests: re-source git-completion.bash in a subshell Ævar Arnfjörð Bjarmason @ 2022-02-02 11:15 ` Ævar Arnfjörð Bjarmason 2022-02-06 13:30 ` SZEDER Gábor 1 sibling, 1 reply; 17+ messages in thread From: Ævar Arnfjörð Bjarmason @ 2022-02-02 11:15 UTC (permalink / raw) To: git Cc: Junio C Hamano, Hongyi Zhao, Philippe Blain, João Victor Bonfim, Ævar Arnfjörð Bjarmason Add a GIT_COMPLETION_SHOW_ALL_COMMANDS=1 configuration setting to go with the existing GIT_COMPLETION_SHOW_ALL=1 added in c099f579b98 (completion: add GIT_COMPLETION_SHOW_ALL env var, 2020-08-19). This will include plumbing commands such as "cat-file" in "git <TAB>" and "git c<TAB>" completion. Without/with this I have 134 and 243 completion with git <TAB>, respectively. It was already possible to do this by tweaking GIT_TESTING_PORCELAIN_COMMAND_LIST= from the outside, that testing variable was added in 84a97131065 (completion: let git provide the completable command list, 2018-05-20). Doing this before loading git-completion.bash worked: export GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=builtins,main,list-mainporcelain,others,nohelpers,alias,list-complete,config)" But such testing variables are not meant to be used from the outside, and we make no guarantees that those internal won't change. So let's expose this as a dedicated configuration knob. It would be better to teach --list-cmds=* a new category which would include all of these groups, but that's a larger change that we can leave for some other time. 1. https://lore.kernel.org/git/CAGP6POJ9gwp+t-eP3TPkivBLLbNb2+qj=61Mehcj=1BgrVOSLA@mail.gmail.com/ Reported-by: Hongyi Zhao <hongyi.zhao@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- contrib/completion/git-completion.bash | 13 ++++++++++- t/t9902-completion.sh | 31 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 377d6c5494a..2436b8eb6b9 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -49,6 +49,11 @@ # and git-switch completion (e.g., completing "foo" when "origin/foo" # exists). # +# GIT_COMPLETION_SHOW_ALL_COMMANDS +# +# When set to "1" suggest all commands, including plumbing commands +# which are hidden by default (e.g. "cat-file" on "git ca<TAB>"). +# # GIT_COMPLETION_SHOW_ALL # # When set to "1" suggest all options, including options which are @@ -3455,7 +3460,13 @@ __git_main () then __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config + + if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1" + then + list_cmds=builtins,$list_cmds + fi + __gitcomp "$(__git --list-cmds=$list_cmds)" fi ;; esac diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index c9805f2147d..c6d6d6ef896 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -2440,6 +2440,37 @@ test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' ) ' +test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' ' + ( + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + + # Just mainporcelain, not plumbing commands + run_completion "git c" && + grep checkout out && + ! grep cat-file out + ) +' + +test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' ' + ( + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && + GIT_COMPLETION_SHOW_ALL_COMMANDS=1 && + export GIT_COMPLETION_SHOW_ALL_COMMANDS && + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && + + # Both mainporcelain and plumbing commands + run_completion "git c" && + grep checkout out && + grep cat-file out && + + # Check "gitk", a "main" command, but not a built-in + more plumbing + run_completion "git g" && + grep gitk out && + grep get-tar-commit-id out + ) +' + test_expect_success '__git_complete' ' unset -f __git_wrap__git_main && -- 2.35.0.913.g12b4baa2536 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-02-02 11:15 ` [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason @ 2022-02-06 13:30 ` SZEDER Gábor 2022-02-06 20:09 ` Junio C Hamano 0 siblings, 1 reply; 17+ messages in thread From: SZEDER Gábor @ 2022-02-06 13:30 UTC (permalink / raw) To: Ævar Arnfjörð Bjarmason Cc: git, Junio C Hamano, Hongyi Zhao, Philippe Blain, João Victor Bonfim On Wed, Feb 02, 2022 at 12:15:10PM +0100, Ævar Arnfjörð Bjarmason wrote: > Add a GIT_COMPLETION_SHOW_ALL_COMMANDS=1 configuration setting to go > with the existing GIT_COMPLETION_SHOW_ALL=1 added in > c099f579b98 (completion: add GIT_COMPLETION_SHOW_ALL env var, > 2020-08-19). > > This will include plumbing commands such as "cat-file" in "git <TAB>" > and "git c<TAB>" completion. I've tried this a couple of times in the last dozen years or so... and ended up hating it every single time, because it too often made completion of frequently used porcelain commands more cumbersome, and quickly reverted it. Since 6532f3740b (completion: allow to customize the completable command list, 2018-05-20) it is possible to include and exclude certain commands from the list offered for 'git <TAB>'. So if you use some plumbing command frequently, then you can add them to the 'completion.commands' config variable, and they will show up for 'git <TAB>', too, without any of the other plumbing commands to get annoying. To complete only rarely used plumbing commands in a non-intrusive way, in my experience, it's best to first attempt to complete only porcelains and aliases, and fall back to complete all commands, plumbing included, only when no porcelains match the current word to be completed. E.g.: $ git d<TAB> describe diff difftool $ git diff-<TAB> diff-files diff-index diff-tree $ git p<TAB> prune pull push $ git pa<TAB> pack-objects pack-redundant pack-refs patch-id --- >8 --- Subject: [PATCH] completion: list all git commands as fallback --- contrib/completion/git-completion.bash | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 3edd1cade6..67978e6f22 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -3465,6 +3465,9 @@ __git_main () __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + if [ ${#COMPREPLY[@]} -eq 0 ]; then + __gitcomp "$(__git --list-cmds=main,others,nohelpers,alias,list-complete,config)" + fi fi ;; esac -- 2.35.1.482.g3282949ee0 --- 8< --- I've been using 'completion.commands' and the patch above for a few years now, and this combination worked out the best so far. > Without/with this I have 134 and 243 > completion with git <TAB>, respectively. Those numbers include all your aliases and additional 'git-foo' commands in your PATH; I only get 74 without this patch. To show the effect of this patch I think it would be more relevant to count only Git's commands. > It was already possible to do this by tweaking > GIT_TESTING_PORCELAIN_COMMAND_LIST= from the outside, that testing > variable was added in 84a97131065 (completion: let git provide the > completable command list, 2018-05-20). Doing this before loading > git-completion.bash worked: > > export GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=builtins,main,list-mainporcelain,others,nohelpers,alias,list-complete,config)" > > But such testing variables are not meant to be used from the outside, > and we make no guarantees that those internal won't change. So let's > expose this as a dedicated configuration knob. > > It would be better to teach --list-cmds=* a new category which would > include all of these groups, but that's a larger change that we can > leave for some other time. > > 1. https://lore.kernel.org/git/CAGP6POJ9gwp+t-eP3TPkivBLLbNb2+qj=61Mehcj=1BgrVOSLA@mail.gmail.com/ > > Reported-by: Hongyi Zhao <hongyi.zhao@gmail.com> > Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> > --- > contrib/completion/git-completion.bash | 13 ++++++++++- > t/t9902-completion.sh | 31 ++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+), 1 deletion(-) > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 377d6c5494a..2436b8eb6b9 100644 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -49,6 +49,11 @@ > # and git-switch completion (e.g., completing "foo" when "origin/foo" > # exists). > # > +# GIT_COMPLETION_SHOW_ALL_COMMANDS > +# > +# When set to "1" suggest all commands, including plumbing commands > +# which are hidden by default (e.g. "cat-file" on "git ca<TAB>"). > +# > # GIT_COMPLETION_SHOW_ALL > # > # When set to "1" suggest all options, including options which are > @@ -3455,7 +3460,13 @@ __git_main () > then > __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" > else > - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" > + local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config > + > + if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1" > + then > + list_cmds=builtins,$list_cmds > + fi > + __gitcomp "$(__git --list-cmds=$list_cmds)" > fi > ;; > esac > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index c9805f2147d..c6d6d6ef896 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -2440,6 +2440,37 @@ test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' ' > ) > ' > > +test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' ' > + ( > + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && > + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && > + > + # Just mainporcelain, not plumbing commands > + run_completion "git c" && > + grep checkout out && > + ! grep cat-file out > + ) > +' > + > +test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' ' > + ( > + . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" && > + GIT_COMPLETION_SHOW_ALL_COMMANDS=1 && > + export GIT_COMPLETION_SHOW_ALL_COMMANDS && This variable only affects the completion script itself, but none of the commands invoked by it, so the 'export' is unnecessary. > + sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST && > + > + # Both mainporcelain and plumbing commands > + run_completion "git c" && > + grep checkout out && > + grep cat-file out && > + > + # Check "gitk", a "main" command, but not a built-in + more plumbing > + run_completion "git g" && > + grep gitk out && > + grep get-tar-commit-id out > + ) > +' > + > test_expect_success '__git_complete' ' > unset -f __git_wrap__git_main && > > -- > 2.35.0.913.g12b4baa2536 > ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-02-06 13:30 ` SZEDER Gábor @ 2022-02-06 20:09 ` Junio C Hamano 2022-02-06 22:47 ` SZEDER Gábor 0 siblings, 1 reply; 17+ messages in thread From: Junio C Hamano @ 2022-02-06 20:09 UTC (permalink / raw) To: SZEDER Gábor Cc: Ævar Arnfjörð Bjarmason, git, Hongyi Zhao, Philippe Blain, João Victor Bonfim SZEDER Gábor <szeder.dev@gmail.com> writes: > To complete only rarely used plumbing commands in a non-intrusive way, > in my experience, it's best to first attempt to complete only > porcelains and aliases, and fall back to complete all commands, > plumbing included, only when no porcelains match the current word to > be completed. E.g.: > > $ git d<TAB> > describe diff difftool > $ git diff-<TAB> > diff-files diff-index diff-tree So after getting $ git diff<TAB> diff difftool you _have_ to know, if you are not happy with these two, that the next letter in the name of the command you forgot is a dash, to be able to say $ git diff-<TAB> which is a bit unfortunate, but I agree that it is much nicer than getting all the plumbing when trying to complete "git d<TAB>". I wonder if we can do better, and teach the completion logic an ability to say this: "I gave 'diff and difftool' after being asked for 'git diff<TAB>' and then the user is asking the same again without choosing either. Perhaps I should add less frequent one to the mix"? I.e. the end-user session may look like $ git diff<TAB> diff difftool $ git diff<TAB> diff difftool diff-files diff-index diff-tree ? ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-02-06 20:09 ` Junio C Hamano @ 2022-02-06 22:47 ` SZEDER Gábor 2022-02-07 7:03 ` Junio C Hamano 0 siblings, 1 reply; 17+ messages in thread From: SZEDER Gábor @ 2022-02-06 22:47 UTC (permalink / raw) To: Junio C Hamano Cc: Ævar Arnfjörð Bjarmason, git, Hongyi Zhao, Philippe Blain, João Victor Bonfim On Sun, Feb 06, 2022 at 12:09:35PM -0800, Junio C Hamano wrote: > SZEDER Gábor <szeder.dev@gmail.com> writes: > > > To complete only rarely used plumbing commands in a non-intrusive way, > > in my experience, it's best to first attempt to complete only > > porcelains and aliases, and fall back to complete all commands, > > plumbing included, only when no porcelains match the current word to > > be completed. E.g.: > > > > $ git d<TAB> > > describe diff difftool > > $ git diff-<TAB> > > diff-files diff-index diff-tree > > So after getting > > $ git diff<TAB> > diff difftool > > you _have_ to know, if you are not happy with these two, that the > next letter in the name of the command you forgot is a dash, Yeah, it can only save a couple of keystrokes, but it's not really useful when you want to use it to jog your memory. I naively assumed that if you use plumbing, then you know what you are doing and which command you want to execute :) > to be > able to say > > $ git diff-<TAB> > > which is a bit unfortunate, but I agree that it is much nicer than > getting all the plumbing when trying to complete "git d<TAB>". > > I wonder if we can do better, and teach the completion logic an > ability to say this: "I gave 'diff and difftool' after being asked > for 'git diff<TAB>' and then the user is asking the same again > without choosing either. Perhaps I should add less frequent one to > the mix"? > > I.e. the end-user session may look like > > $ git diff<TAB> > diff difftool > $ git diff<TAB> > diff difftool diff-files diff-index diff-tree > > ? Hrm, interesting, but dunno. When completing commands in __git_main() we could save the current word to be completed in a variable, and when completing commands the next time we could check whether the current word is still the same, and then include plumbing as well. However, when the current word can't be uniquely completed, then we have to press TAB twice to get the list of possible completion, so we have to preserve the last two current words, and only list plumbing when both match. --- >8 --- diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 377d6c5494..cda6b48c4e 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -3455,8 +3455,17 @@ __git_main () then __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + echo >>/tmp/COMPLOG "__git_main() cur: '$cur' last: '$__git_last_command_cur' last2: '$__git_last_command_cur2'" + if test "$cur" = "$__git_last_command_cur" && + test "$cur" = "$__git_last_command_cur2" + then + __gitcomp "$(__git --list-cmds=main,others,nohelpers,alias,list-complete)" + else + __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + fi fi + __git_last_command_cur2=$__git_last_command_cur + __git_last_command_cur=$cur ;; esac return --- 8< --- Superficial testing shows that it appears to work in common cases, but we'll have to think it through when and how to clear these variables. E.g.: $ git d<TAB><TAB> describe diff difftool # Oh, but I wanted to disable the pager $ git --no-p<TAB> # this completes the option uniquely $ git --no-pager d<TAB><TAB> daemon diff diff-index diff-tree describe diff-files difftool I think here it should list only porcelains, but because both those last_cur variables still contain 'd', it lists plumbing as well. And, of course, 'git <TAB><TAB>' in a newly started terminal should list only porcelains, but it lists plumbing as well. ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS 2022-02-06 22:47 ` SZEDER Gábor @ 2022-02-07 7:03 ` Junio C Hamano 0 siblings, 0 replies; 17+ messages in thread From: Junio C Hamano @ 2022-02-07 7:03 UTC (permalink / raw) To: SZEDER Gábor Cc: Ævar Arnfjörð Bjarmason, git, Hongyi Zhao, Philippe Blain, João Victor Bonfim SZEDER Gábor <szeder.dev@gmail.com> writes: > Superficial testing shows that it appears to work in common cases, but > we'll have to think it through when and how to clear these variables. > E.g.: > > $ git d<TAB><TAB> > describe diff difftool > # Oh, but I wanted to disable the pager > $ git --no-p<TAB> > # this completes the option uniquely > $ git --no-pager d<TAB><TAB> > daemon diff diff-index diff-tree > describe diff-files difftool > > I think here it should list only porcelains, but because both those > last_cur variables still contain 'd', it lists plumbing as well. Yup, it always is tricky to "invalidate" a cached value. ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2022-02-07 7:13 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-01-22 8:42 Some sub-commands can't be completed by TAB key Hongyi Zhao 2022-01-22 14:47 ` Johannes Sixt 2022-01-23 0:38 ` Hongyi Zhao 2022-01-23 17:31 ` Philippe Blain 2022-01-23 19:51 ` Junio C Hamano 2022-01-24 1:42 ` Hongyi Zhao 2022-01-24 9:18 ` João Victor Bonfim 2022-01-25 7:33 ` Junio C Hamano 2022-01-25 12:49 ` [PATCH] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 2022-01-26 22:34 ` Junio C Hamano 2022-02-02 11:15 ` [PATCH v2 0/2] " Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 1/2] completion tests: re-source git-completion.bash in a subshell Ævar Arnfjörð Bjarmason 2022-02-02 11:15 ` [PATCH v2 2/2] completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS Ævar Arnfjörð Bjarmason 2022-02-06 13:30 ` SZEDER Gábor 2022-02-06 20:09 ` Junio C Hamano 2022-02-06 22:47 ` SZEDER Gábor 2022-02-07 7:03 ` Junio C Hamano
Code repositories for project(s) associated with this public inbox https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).