From befa2407562cdd2ed72b0fd39d772b64eb2f2900 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Tue, 24 Jan 2023 19:16:23 +0100 Subject: [PATCH] completions/git: use builtin path for finding subcommands This is more elegant and efficient. No functional change. As suggested by 2da1a4ae7 (completions/git: Fix git-foo commands, 2023-01-09). --- share/completions/git.fish | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/share/completions/git.fish b/share/completions/git.fish index b4265b8bc..6b635c031 100644 --- a/share/completions/git.fish +++ b/share/completions/git.fish @@ -2386,16 +2386,13 @@ end # source git-* commands' autocompletion file if exists set -l __fish_git_custom_commands_completion -for file in $PATH/git-* - not command -q $file - and continue - - set -l subcommand (string replace -r -- '.*/git-([^/]*)$' '$1' $file) - +for file in (path filter -xZ $PATH/git-* | path basename) # Already seen this command earlier in $PATH. - contains -- $subcommand $__fish_git_custom_commands_completion + contains -- $file $__fish_git_custom_commands_completion and continue - complete -c git -f -n "__fish_git_using_command $subcommand" -a "(__fish_git_complete_custom_command $subcommand)" - set -a __fish_git_custom_commands_completion $subcommand + # Running `git foo` ends up running `git-foo`, so we need to ignore the `git-` here. + set -l cmd (string replace -r '^git-' '' -- $file) + complete -c git -f -n "__fish_git_using_command $cmd" -a "(__fish_git_complete_custom_command $cmd)" + set -a __fish_git_custom_commands_completion $file end