diff --git a/contrib/zsh_completion b/contrib/zsh_completion --- a/contrib/zsh_completion +++ b/contrib/zsh_completion @@ -116,54 +116,18 @@ typeset -A _hg_cmd_globals _hg_get_commands() { typeset -ga _hg_cmd_list typeset -gA _hg_alias_list - local hline cmd cmdalias helpstate - local helpmode=$1 - - _call_program help hg --verbose help $helpmode 2>/dev/null | while read -A hline - do - if [ "$hline" = "list of commands:" ] - then - helpstate="commands" - continue - elif [ "$hline" = "enabled extensions:" ] - then - helpstate="extensions" - continue - elif [ "$hline" = "additional help topics:" ] - then - helpstate="topics" - continue - fi + local hline cmd cmdalias - if [ "$helpstate" = commands ] - then - cmd="$hline[1]" - case $cmd in - *:) - cmd=${cmd%:} - _hg_cmd_list+=($cmd) - ;; - *,) - cmd=${cmd%,} - _hg_cmd_list+=($cmd) - integer i=2 - while (( i <= $#hline )) - do - cmdalias=${hline[$i]%(:|,)} - _hg_cmd_list+=($cmdalias) - _hg_alias_list+=($cmdalias $cmd) - (( i++ )) - done - ;; - esac - elif [ -z "$helpmode" -a "$helpstate" = extensions ] - then - cmd="$hline[1]" - if [ -n "$cmd" ] - then - _hg_get_commands $cmd - fi - fi + _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline + do + cmd=$hline[1] + _hg_cmd_list+=($cmd) + + for cmdalias in $hline[2,-1] + do + _hg_cmd_list+=($cmdalias) + _hg_alias_list+=($cmdalias $cmd) + done done }