AutoYADM commit: 2025-04-16 01:00:05
This commit is contained in:
parent
f7710b4829
commit
45759b8f8c
8 changed files with 1632 additions and 1 deletions
133
.config/fish/completions/_git-forgit
Normal file
133
.config/fish/completions/_git-forgit
Normal file
|
@ -0,0 +1,133 @@
|
|||
#compdef git-forgit -p forgit::*
|
||||
#description Utility tool for using git interactively
|
||||
#
|
||||
# forgit completions for zsh
|
||||
#
|
||||
# Place this file in your $fpath (e.g. /usr/share/zsh/site-functions) to enable
|
||||
# tab completions for forgit.
|
||||
|
||||
_git-branches() {
|
||||
_alternative "branches:branchname:($(git branch -a --format '%(refname:short)'))"
|
||||
}
|
||||
|
||||
_git-checkout-file() {
|
||||
_alternative "files:filename:($(git ls-files --modified))"
|
||||
}
|
||||
|
||||
_git-stash-show() {
|
||||
_alternative "files:filename:($(git stash list | sed -n -e 's/:.*//p'))"
|
||||
}
|
||||
|
||||
# The completions for git already define a _git-diff completion function, but
|
||||
# it provides the wrong results when called from _git-forgit because it heavily
|
||||
# depends on the context it's been called from (usage of $curcontext and
|
||||
# $CURRENT), so we use a simplified version here which always provides the same
|
||||
# results independent of the context.
|
||||
_git-forgit-diff() {
|
||||
_alternative \
|
||||
'commit-ranges::__git_commit_ranges' \
|
||||
'blobs-and-trees-in-treeish::__git_blobs_and_trees_in_treeish' \
|
||||
'files::__git_changed-in-working-tree_files' \
|
||||
'blobs::__git_blobs '
|
||||
}
|
||||
|
||||
_git-staged() {
|
||||
_alternative "files:filename:($(git diff --name-only --staged))"
|
||||
}
|
||||
|
||||
_git-forgit-reflog() {
|
||||
declare -a cmds
|
||||
cmds=('expire:prune old reflog entries' 'delete:delete entries from reflog' 'show:show log of ref' 'exists:check whether a ref has a reflog')
|
||||
_alternative 'cmds:: _describe -t cmds cmd cmds' 'refs:: __git_references'
|
||||
}
|
||||
|
||||
_git-forgit() {
|
||||
local subcommand cmd
|
||||
subcommand="${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.
|
||||
cmd=$(git config --get "alias.$subcommand" | cut -d ' ' -f 2)
|
||||
else
|
||||
# The last word is the relevant command
|
||||
cmd=${words[(( ${#words} - 1 ))]}
|
||||
fi
|
||||
|
||||
case ${cmd} in
|
||||
forgit)
|
||||
local -a subcommands
|
||||
subcommands=(
|
||||
'add:git add selector'
|
||||
'blame:git blame viewer'
|
||||
'branch_delete:git branch deletion selector'
|
||||
'checkout_branch:git checkout branch selector'
|
||||
'checkout_commit:git checkout commit selector'
|
||||
'checkout_file:git checkout-file selector'
|
||||
'checkout_tag:git checkout tag selector'
|
||||
'cherry_pick:git cherry-picking'
|
||||
'cherry_pick_from_branch:git cherry-picking with interactive branch selection'
|
||||
'clean:git clean selector'
|
||||
'diff:git diff viewer'
|
||||
'fixup:git fixup'
|
||||
'ignore:git ignore generator'
|
||||
'log:git commit viewer'
|
||||
'reflog:git reflog viewer'
|
||||
'rebase:git rebase'
|
||||
'reset_head:git reset HEAD (unstage) selector'
|
||||
'revert_commit:git revert commit selector'
|
||||
'stash_show:git stash viewer'
|
||||
'stash_push:git stash push selector'
|
||||
)
|
||||
_describe -t commands 'git forgit' subcommands
|
||||
;;
|
||||
add) _git-add ;;
|
||||
branch_delete) _git-branches ;;
|
||||
checkout_branch) _git-branches ;;
|
||||
checkout_commit) __git_recent_commits ;;
|
||||
checkout_file) _git-checkout-file ;;
|
||||
checkout_tag) __git_tags ;;
|
||||
cherry_pick) _git-cherry-pick ;;
|
||||
cherry_pick_from_branch) _git-branches ;;
|
||||
clean) _git-clean ;;
|
||||
diff) _git-forgit-diff ;;
|
||||
fixup) __git_branch_names ;;
|
||||
log) _git-log ;;
|
||||
reflog) _git-forgit-reflog ;;
|
||||
rebase) _git-rebase ;;
|
||||
reset_head) _git-staged ;;
|
||||
revert_commit) __git_recent_commits ;;
|
||||
stash_show) _git-stash-show ;;
|
||||
show) _git-show ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# We're reusing existing completion functions, so load those first
|
||||
# if not already loaded and check if completion function exists afterwards.
|
||||
(( $+functions[_git-add] )) || _git
|
||||
(( $+functions[_git-add] )) || return 1
|
||||
# Completions for forgit plugin shell functions (also works for aliases)
|
||||
compdef _git-add forgit::add
|
||||
compdef _git-branches forgit::branch::delete
|
||||
compdef _git-branches forgit::checkout::branch
|
||||
compdef __git_recent_commits forgit::checkout::commit
|
||||
compdef _git-checkout-file forgit::checkout::file
|
||||
compdef __git_tags forgit::checkout::tag
|
||||
compdef _git-cherry-pick forgit::cherry::pick
|
||||
compdef _git-branches forgit::cherry::pick::from::branch
|
||||
compdef _git-clean forgit::clean
|
||||
compdef _git-forgit-diff forgit::diff
|
||||
compdef __git_branch_names forgit::fixup
|
||||
compdef _git-log forgit::log
|
||||
compdef _git-reflog forgit::reflog
|
||||
compdef _git-rebase forgit::rebase
|
||||
compdef _git-staged forgit::reset::head
|
||||
compdef __git_recent_commits forgit::revert::commit
|
||||
compdef _git-stash-show forgit::stash::show
|
||||
compdef _git-show forgit::show
|
||||
|
||||
# this is the case of calling the command and pressing tab
|
||||
# the very first time of a shell session, we have to manually
|
||||
# call the dispatch function
|
||||
if [[ $funcstack[1] == "_git-forgit" ]]; then
|
||||
_git-forgit "$@"
|
||||
fi
|
163
.config/fish/completions/git-forgit.bash
Executable file
163
.config/fish/completions/git-forgit.bash
Executable file
|
@ -0,0 +1,163 @@
|
|||
# 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
|
||||
show
|
||||
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 ;;
|
||||
show) _git_show ;;
|
||||
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::show _git_show
|
||||
__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_show}" _git_show
|
||||
__git_complete "${forgit_stash_show}" _git_stash_show
|
||||
fi
|
||||
fi
|
62
.config/fish/completions/git-forgit.fish
Normal file
62
.config/fish/completions/git-forgit.fish
Normal file
|
@ -0,0 +1,62 @@
|
|||
#
|
||||
# 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_tag \
|
||||
cherry_pick cherry_pick_from_branch clean diff fixup ignore log reflog rebase reset_head \
|
||||
revert_commit stash_show stash_push
|
||||
if contains -- $subcmd (commandline -opc)
|
||||
return 1
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
# Load helper functions in git completion file
|
||||
not functions -q __fish_git && source $__fish_data_dir/completions/git.fish
|
||||
|
||||
# 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_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 revert_commit -d 'git revert commit selector'
|
||||
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 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_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_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 fixup' -a "(__fish_git_local_branches)"
|
||||
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 revert_commit' -a "(__fish_git_commits)"
|
||||
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)"
|
Loading…
Add table
Add a link
Reference in a new issue