Merge branch 'ml/completion-zsh'

* ml/completion-zsh:
  completion: make compatible with zsh
This commit is contained in:
Junio C Hamano 2010-10-26 21:39:03 -07:00
commit 5a3a484d57

View File

@ -21,6 +21,11 @@
# 2) Added the following line to your .bashrc: # 2) Added the following line to your .bashrc:
# source ~/.git-completion.sh # source ~/.git-completion.sh
# #
# Or, add the following lines to your .zshrc:
# autoload bashcompinit
# bashcompinit
# source ~/.git-completion.sh
#
# 3) Consider changing your PS1 to also show the current branch: # 3) Consider changing your PS1 to also show the current branch:
# PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
# #
@ -138,11 +143,12 @@ __git_ps1_show_upstream ()
# get the upstream from the "git-svn-id: ..." in a commit message # get the upstream from the "git-svn-id: ..." in a commit message
# (git-svn uses essentially the same procedure internally) # (git-svn uses essentially the same procedure internally)
local svn_upstream=($(git log --first-parent -1 \ local svn_upstream=($(git log --first-parent -1 \
--grep="^git-svn-id: \(${svn_url_pattern:2}\)" 2>/dev/null)) --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
if [[ 0 -ne ${#svn_upstream[@]} ]]; then if [[ 0 -ne ${#svn_upstream[@]} ]]; then
svn_upstream=${svn_upstream[ ${#svn_upstream[@]} - 2 ]} svn_upstream=${svn_upstream[ ${#svn_upstream[@]} - 2 ]}
svn_upstream=${svn_upstream%@*} svn_upstream=${svn_upstream%@*}
for ((n=1; "$n" <= "${#svn_remote[@]}"; ++n)); do local n_stop="${#svn_remote[@]}"
for ((n=1; n <= n_stop; ++n)); do
svn_upstream=${svn_upstream#${svn_remote[$n]}} svn_upstream=${svn_upstream#${svn_remote[$n]}}
done done
@ -2339,6 +2345,11 @@ _git ()
{ {
local i c=1 command __git_dir local i c=1 command __git_dir
if [[ -n $ZSH_VERSION ]]; then
emulate -L bash
setopt KSH_TYPESET
fi
while [ $c -lt $COMP_CWORD ]; do while [ $c -lt $COMP_CWORD ]; do
i="${COMP_WORDS[c]}" i="${COMP_WORDS[c]}"
case "$i" in case "$i" in
@ -2372,17 +2383,22 @@ _git ()
fi fi
local completion_func="_git_${command//-/_}" local completion_func="_git_${command//-/_}"
declare -F $completion_func >/dev/null && $completion_func && return declare -f $completion_func >/dev/null && $completion_func && return
local expansion=$(__git_aliased_command "$command") local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then if [ -n "$expansion" ]; then
completion_func="_git_${expansion//-/_}" completion_func="_git_${expansion//-/_}"
declare -F $completion_func >/dev/null && $completion_func declare -f $completion_func >/dev/null && $completion_func
fi fi
} }
_gitk () _gitk ()
{ {
if [[ -n $ZSH_VERSION ]]; then
emulate -L bash
setopt KSH_TYPESET
fi
__git_has_doubledash && return __git_has_doubledash && return
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
@ -2417,3 +2433,29 @@ if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \ complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
|| complete -o default -o nospace -F _git git.exe || complete -o default -o nospace -F _git git.exe
fi fi
if [[ -n $ZSH_VERSION ]]; then
shopt () {
local option
if [ $# -ne 2 ]; then
echo "USAGE: $0 (-q|-s|-u) <option>" >&2
return 1
fi
case "$2" in
nullglob)
option="$2"
;;
*)
echo "$0: invalid option: $2" >&2
return 1
esac
case "$1" in
-q) setopt | grep -q "$option" ;;
-u) unsetopt "$option" ;;
-s) setopt "$option" ;;
*)
echo "$0: invalid flag: $1" >&2
return 1
esac
}
fi