160 lines
4.4 KiB
Bash
160 lines
4.4 KiB
Bash
|
# forgit completions for bash
|
||
|
|
||
|
# When using forgit as a subcommand of git, put this file in one of the
|
||
|
# following places and it will be loaded automatically on tab completion of
|
||
|
# 'git forgit' or any configured git aliases of it:
|
||
|
#
|
||
|
# /usr/share/bash-completion/completions
|
||
|
# ~/.local/share/bash-completion/completions
|
||
|
#
|
||
|
# When using forgit via the shell plugin, source this file explicitly after
|
||
|
# forgit.plugin.zsh to enable tab completion for shell functions and aliases.
|
||
|
|
||
|
_git_branch_delete()
|
||
|
{
|
||
|
__gitcomp_nl "$(__git_heads)"
|
||
|
}
|
||
|
|
||
|
_git_checkout_branch()
|
||
|
{
|
||
|
__gitcomp_nl "$(__git branch -a --format '%(refname:short)')"
|
||
|
}
|
||
|
|
||
|
_git_checkout_file()
|
||
|
{
|
||
|
__gitcomp_nl "$(__git ls-files --modified)"
|
||
|
}
|
||
|
|
||
|
_git_checkout_tag()
|
||
|
{
|
||
|
__gitcomp_nl "$(__git_tags)"
|
||
|
}
|
||
|
|
||
|
_git_stash_show()
|
||
|
{
|
||
|
__gitcomp_nl "$(__git stash list | sed -n -e 's/:.*//p')"
|
||
|
}
|
||
|
|
||
|
# Completion for git-forgit
|
||
|
# This includes git aliases, e.g. "alias.cb=forgit checkout_branch" will
|
||
|
# correctly complete available branches on "git cb".
|
||
|
_git_forgit()
|
||
|
{
|
||
|
local subcommand cword cur prev cmds
|
||
|
|
||
|
subcommand="${COMP_WORDS[1]}"
|
||
|
if [[ "$subcommand" != "forgit" ]]
|
||
|
then
|
||
|
# Forgit is obviously called via a git alias. Get the original
|
||
|
# aliased subcommand and proceed as if it was the previous word.
|
||
|
prev=$(git config --get "alias.$subcommand" | cut -d' ' -f 2)
|
||
|
cword=$((${COMP_CWORD} + 1))
|
||
|
else
|
||
|
cword=${COMP_CWORD}
|
||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||
|
fi
|
||
|
|
||
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||
|
|
||
|
cmds="
|
||
|
add
|
||
|
blame
|
||
|
branch_delete
|
||
|
checkout_branch
|
||
|
checkout_commit
|
||
|
checkout_file
|
||
|
checkout_tag
|
||
|
cherry_pick
|
||
|
cherry_pick_from_branch
|
||
|
clean
|
||
|
diff
|
||
|
fixup
|
||
|
ignore
|
||
|
log
|
||
|
reflog
|
||
|
rebase
|
||
|
reset_head
|
||
|
revert_commit
|
||
|
stash_show
|
||
|
stash_push
|
||
|
"
|
||
|
|
||
|
case ${cword} in
|
||
|
2)
|
||
|
COMPREPLY=($(compgen -W "${cmds}" -- ${cur}))
|
||
|
;;
|
||
|
3)
|
||
|
case ${prev} in
|
||
|
add) _git_add ;;
|
||
|
branch_delete) _git_branch_delete ;;
|
||
|
checkout_branch) _git_checkout_branch ;;
|
||
|
checkout_commit) _git_checkout ;;
|
||
|
checkout_file) _git_checkout_file ;;
|
||
|
checkout_tag) _git_checkout_tag ;;
|
||
|
cherry_pick) _git_cherry_pick ;;
|
||
|
cherry_pick_from_branch) _git_checkout_branch ;;
|
||
|
clean) _git_clean ;;
|
||
|
diff) _git_diff ;;
|
||
|
fixup) _git_branch ;;
|
||
|
log) _git_log ;;
|
||
|
reflog) _git_reflog ;;
|
||
|
rebase) _git_rebase ;;
|
||
|
reset_head) _git_reset ;;
|
||
|
revert_commit) _git_revert ;;
|
||
|
stash_show) _git_stash_show ;;
|
||
|
esac
|
||
|
;;
|
||
|
*)
|
||
|
COMPREPLY=()
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
# Check if forgit plugin is loaded
|
||
|
if [[ $(type -t forgit::add) == function ]]
|
||
|
then
|
||
|
# We're reusing existing git completion functions, so load those first
|
||
|
# and check if completion function exists afterwards.
|
||
|
_completion_loader git
|
||
|
[[ $(type -t __git_complete) == function ]] || return 1
|
||
|
|
||
|
# Completion for forgit plugin shell functions
|
||
|
__git_complete forgit::add _git_add
|
||
|
__git_complete forgit::branch::delete _git_branch_delete
|
||
|
__git_complete forgit::checkout::branch _git_checkout_branch
|
||
|
__git_complete forgit::checkout::commit _git_checkout
|
||
|
__git_complete forgit::checkout::file _git_checkout_file
|
||
|
__git_complete forgit::checkout::tag _git_checkout_tag
|
||
|
__git_complete forgit::cherry::pick _git_cherry_pick
|
||
|
__git_complete forgit::cherry::pick::from::branch _git_checkout_branch
|
||
|
__git_complete forgit::clean _git_clean
|
||
|
__git_complete forgit::diff _git_diff
|
||
|
__git_complete forgit::fixup _git_branch
|
||
|
__git_complete forgit::log _git_log
|
||
|
__git_complete forgit::reflog _git_reflog
|
||
|
__git_complete forgit::rebase _git_rebase
|
||
|
__git_complete forgit::reset::head _git_reset
|
||
|
__git_complete forgit::revert::commit _git_revert
|
||
|
__git_complete forgit::stash::show _git_stash_show
|
||
|
|
||
|
# Completion for forgit plugin shell aliases
|
||
|
if [[ -z "$FORGIT_NO_ALIASES" ]]; then
|
||
|
__git_complete "${forgit_add}" _git_add
|
||
|
__git_complete "${forgit_branch_delete}" _git_branch_delete
|
||
|
__git_complete "${forgit_checkout_branch}" _git_checkout_branch
|
||
|
__git_complete "${forgit_checkout_commit}" _git_checkout
|
||
|
__git_complete "${forgit_checkout_file}" _git_checkout_file
|
||
|
__git_complete "${forgit_checkout_tag}" _git_checkout_tag
|
||
|
__git_complete "${forgit_cherry_pick}" _git_checkout_branch
|
||
|
__git_complete "${forgit_clean}" _git_clean
|
||
|
__git_complete "${forgit_diff}" _git_diff
|
||
|
__git_complete "${forgit_fixup}" _git_branch
|
||
|
__git_complete "${forgit_log}" _git_log
|
||
|
__git_complete "${forgit_reflog}" _git_reflog
|
||
|
__git_complete "${forgit_rebase}" _git_rebase
|
||
|
__git_complete "${forgit_reset_head}" _git_reset
|
||
|
__git_complete "${forgit_revert_commit}" _git_revert
|
||
|
__git_complete "${forgit_stash_show}" _git_stash_show
|
||
|
fi
|
||
|
fi
|