@@ -158,5 +158,7 @@ if [ $shell = "bash" ]; then
|
||||
# If you know how to rewrite _git_index_tab_completion() for zsh, please send me a pull request!
|
||||
complete -o nospace -F _git_index_tab_completion git_index
|
||||
complete -o nospace -F _git_index_tab_completion $git_index_alias
|
||||
else
|
||||
compdef _git_index_tab_completion git_index $git_index_alias
|
||||
fi
|
||||
|
||||
|
||||
@@ -281,40 +281,75 @@ function _git_index_batch_cmd() {
|
||||
}
|
||||
|
||||
|
||||
# Bash tab completion function for git_index()
|
||||
function _git_index_tab_completion() {
|
||||
_check_git_index
|
||||
local curw
|
||||
IFS=$'\n'
|
||||
COMPREPLY=()
|
||||
curw=${COMP_WORDS[COMP_CWORD]}
|
||||
if [ $shell = 'bash' ]; then
|
||||
# Bash tab completion function for git_index()
|
||||
function _git_index_tab_completion() {
|
||||
_check_git_index
|
||||
local curw
|
||||
IFS=$'\n'
|
||||
COMPREPLY=()
|
||||
curw=${COMP_WORDS[COMP_CWORD]}
|
||||
|
||||
# If the first part of $curw matches a high-level directory,
|
||||
# then match on sub-directories for that project
|
||||
local project=$(echo "$curw" | cut -d "/" -f1)
|
||||
local base_path=$(\grep "/$project$" "$GIT_REPO_DIR/.git_index" | sed 's/ /\\ /g')
|
||||
# If the first part of $curw matches a high-level directory,
|
||||
# then match on sub-directories for that project
|
||||
local project=$(echo "$curw" | cut -d "/" -f1)
|
||||
local base_path=$(\grep "/$project$" "$GIT_REPO_DIR/.git_index" | sed 's/ /\\ /g')
|
||||
|
||||
# If matching project path was found and curr string contains a /, then complete project sub-directories
|
||||
if [[ -n "$base_path" && $curw == */* ]]; then
|
||||
local search_path=$(echo "$curw" | sed "s:^${project/\\/\\\\\\}::")
|
||||
COMPREPLY=($(compgen -d "$base_path$search_path" | \grep -v "/.git" | sed -e "s:$base_path:$project:" -e "s:$:/:" ))
|
||||
# If matching project path was found and curr string contains a /, then complete project sub-directories
|
||||
if [[ -n "$base_path" && $curw == */* ]]; then
|
||||
local search_path=$(echo "$curw" | sed "s:^${project/\\/\\\\\\}::")
|
||||
COMPREPLY=($(compgen -d "$base_path$search_path" | \grep -v "/.git" | sed -e "s:$base_path:$project:" -e "s:$:/:" ))
|
||||
|
||||
# If curr string starts with /, tab complete top-level directories in root project dir
|
||||
elif ([ $shell = "bash" ] && [ "${curw:0:1}" = "/" ]) || \
|
||||
([ $shell = "zsh" ] && [ "${curw[1,1]}" = "/" ]); then
|
||||
COMPREPLY=($(compgen -d "$GIT_REPO_DIR$curw" | sed -e "s:$GIT_REPO_DIR/::" -e "s:^:/:"))
|
||||
# If curr string starts with /, tab complete top-level directories in root project dir
|
||||
elif [ "${curw:0:1}" = "/" ]; then
|
||||
COMPREPLY=($(compgen -d "$GIT_REPO_DIR$curw" | sed -e "s:$GIT_REPO_DIR/::" -e "s:^:/:"))
|
||||
|
||||
# If curr string starts with --, tab complete commands
|
||||
elif ([ $shell = "bash" ] && [ "${curw:0:2}" = "--" ]) || \
|
||||
([ $shell = "zsh" ] && [ "${curw[1,2]}" = "--" ]); then
|
||||
local commands="--list\n--rebuild\n--update-all\n--batch-cmd\n--count-by-host"
|
||||
COMPREPLY=($(compgen -W '$(echo -e "\n"$commands)' -- $curw))
|
||||
# If curr string starts with --, tab complete commands
|
||||
elif [ "${curw:0:2}" = "--" ]; then
|
||||
local commands="--list\n--rebuild\n--update-all\n--batch-cmd\n--count-by-host"
|
||||
COMPREPLY=($(compgen -W '$(echo -e "\n"$commands)' -- $curw))
|
||||
|
||||
# Else, tab complete the entries in .git_index
|
||||
else
|
||||
COMPREPLY=($(compgen -W '$(sed -e "s:.*/::" -e "s:$:/:" "$GIT_REPO_DIR/.git_index" | sort)' -- $curw))
|
||||
fi
|
||||
IFS=$' \t\n'
|
||||
return 0
|
||||
}
|
||||
# Else, tab complete the entries in .git_index
|
||||
else
|
||||
COMPREPLY=($(compgen -W '$(sed -e "s:.*/::" -e "s:$:/:" "$GIT_REPO_DIR/.git_index" | sort)' -- $curw))
|
||||
fi
|
||||
IFS=$' \t\n'
|
||||
return 0
|
||||
}
|
||||
else
|
||||
function _git_index_tab_completion() {
|
||||
typeset -A opt_args
|
||||
local state state_descr context line
|
||||
|
||||
_arguments \
|
||||
"--rebuild[Rebuild repository index]" \
|
||||
"--update-all[Update all indexed repositories]" \
|
||||
"--update-all-with-notifications[Update all indexed repositories with notifications]" \
|
||||
"--list[List all repositories currently present in the index]" \
|
||||
"--count-by-host[Count all repositories per host]" \
|
||||
"--batch-cmd+[Run a command on all repositories]:command:->command" \
|
||||
"1::Git projects:->projects" \
|
||||
&& return 0
|
||||
|
||||
|
||||
case "$state" in
|
||||
projects)
|
||||
# Only check and rebuild index if necessary
|
||||
_check_git_index
|
||||
if [[ $PREFIX == /* ]]; then
|
||||
PREFIX=$PREFIX[2,-1]
|
||||
_files -X "Files in project directory" -W $GIT_REPO_DIR
|
||||
else
|
||||
compadd -X "Git projects" $(sed -e 's:.*/::' -e 's:$:/:' "$GIT_REPO_DIR/.git_index") && return 0
|
||||
fi
|
||||
;;
|
||||
command)
|
||||
local ret=1
|
||||
_call_function ret _command_names
|
||||
return ret
|
||||
;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user