mirror of
https://github.com/wfxr/forgit.git
synced 2026-09-10 07:16:23 -04:00
Some checks are pending
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)"
|