mirror of
https://github.com/wfxr/forgit.git
synced 2026-09-10 07:16:23 -04:00
Fish started shipping git completions in the binary with 4.2.0 and deprecated the old completion files with 4.8.0. Update forgit’s fish completion loader to support both models: * prefer `status get-file completions/git.fish` (binary-embedded completions) * fall back to `$__fish_data_dir/completions/git.fish` (completion files) Also refactors loading into a helper function to allow early returns and reduce nesting.
104 lines
6.7 KiB
Fish
104 lines
6.7 KiB
Fish
#
|
|
# forgit completions for fish plugin
|
|
#
|
|
# Place this file inside your <fish_config_dir>/completions/ directory.
|
|
# It's usually located at ~/.config/fish/completions/. The file is lazily
|
|
# sourced when git-forgit command or forgit subcommand of git is invoked.
|
|
|
|
function __fish_forgit_needs_subcommand
|
|
for subcmd in add blame branch_delete checkout_branch checkout_commit checkout_file checkout_file_from_commit \
|
|
checkout_tag cherry_pick cherry_pick_from_branch clean diff fixup ignore log reflog rebase reset_head \
|
|
restore revert_commit reword squash stash_show stash_push switch_branch worktree worktree_add worktree_delete
|
|
if contains -- $subcmd (commandline -opc)
|
|
return 1
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function __fish_forgit_worktrees
|
|
git worktree list --porcelain 2>/dev/null | string match -r '^worktree .+' | string replace 'worktree ' ''
|
|
end
|
|
|
|
# Load git completion functions
|
|
function __fish_forgit_load_git_completions
|
|
if functions -q __fish_git
|
|
return 0
|
|
end
|
|
|
|
# Fish >= 4.2.0 ships git completions in its binary
|
|
if set --local git_completions (status get-file completions/git.fish)
|
|
printf '%s\n' $git_completions | source
|
|
return 0
|
|
end
|
|
|
|
# Older fish versions ship completions in a file
|
|
set --local git_completions_file "$__fish_data_dir/completions/git.fish"
|
|
if test -f "$git_completions_file"
|
|
source "$git_completions_file"
|
|
return 0
|
|
end
|
|
|
|
return 1
|
|
end
|
|
|
|
__fish_forgit_load_git_completions || exit
|
|
|
|
# No file completion by default
|
|
complete -c git-forgit -x
|
|
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a add -d 'git add selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a blame -d 'git blame viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a branch_delete -d 'git branch deletion selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a checkout_branch -d 'git checkout branch selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a checkout_commit -d 'git checkout commit selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a checkout_file -d 'git checkout-file selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a checkout_file_from_commit -d 'git checkout-file from commit selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a checkout_tag -d 'git checkout tag selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a cherry_pick -d 'git cherry-picking'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a cherry_pick_from_branch -d 'git cherry-picking with interactive branch selection'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a clean -d 'git clean selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a diff -d 'git diff viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a fixup -d 'git fixup'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a ignore -d 'git ignore generator'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a log -d 'git commit viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a reflog -d 'git reflog viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a rebase -d 'git rebase'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a reset_head -d 'git reset HEAD (unstage) selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a restore -d 'git restore file selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a revert_commit -d 'git revert commit selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a reword -d 'git fixup=reword'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a show -d 'git show viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a squash -d 'git squash'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a stash_show -d 'git stash viewer'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a stash_push -d 'git stash push selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a switch_branch -d 'git switch branch selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a worktree -d 'git worktree browser'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a worktree_add -d 'git worktree add selector'
|
|
complete -c git-forgit -n __fish_forgit_needs_subcommand -a worktree_delete -d 'git worktree remove selector'
|
|
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from add' -a "(complete -C 'git add ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from branch_delete' -a "(__fish_git_local_branches)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from checkout_branch' -a "(complete -C 'git switch ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from checkout_commit' -a "(__fish_git_commits)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from checkout_file' -a "(__fish_git_files modified)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from checkout_file_from_commit' -a "(complete -C 'git switch ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from checkout_tag' -a "(__fish_git_tags)" -d Tag
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from cherry_pick' -a "(complete -C 'git cherry-pick ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from clean' -a "(__fish_git_files untracked ignored)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from diff' -a "(complete -C 'git diff ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from fixup' -a "(complete -C 'git log ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from log' -a "(complete -C 'git log ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from reflog' -a "(complete -C 'git reflog ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from rebase' -a "(complete -C 'git rebase ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from reset_head' -a "(__fish_git_files all-staged)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from restore' -a "(complete -C 'git restore ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from revert_commit' -a "(__fish_git_commits)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from reword' -a "(complete -C 'git log ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from show' -a "(complete -C 'git show ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from squash' -a "(complete -C 'git log ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from stash_show' -a "(__fish_git_complete_stashes)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from stash_push' -a "(__fish_git_files modified deleted modified-staged-deleted)"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from switch_branch' -a "(complete -C 'git switch ')"
|
|
complete -c git-forgit -n '__fish_seen_subcommand_from worktree_delete' -a "(__fish_forgit_worktrees)"
|