contrib/bash_completion
author mpm@selenic.com
Wed, 17 Aug 2005 12:22:12 -0800
changeset 935 925563ff1b18
parent 929 26bb67b7ec14
child 945 f15901d053e1
child 946 6d21a3488df9
child 948 ffb0665028f0
child 952 dbfabfcb485e
child 981 4f81068ed8cd
permissions -rw-r--r--
bash: Add smarter completion of add/commit/remove/forget/diff/revert Use hg status to determine which files are interesting for various commands. Thus, hg add [tab] finds unknown files, and hg commit [tab] finds added, modified, or removed files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     1
_hg_commands()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     2
{
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     3
    local commands="$(hg -v help | sed -e '1,/^list of commands:/d' \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     4
                                       -e '/^global options:/Q' \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     5
				       -e '/^ [^ ]/!d; s/[,:]//g;')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     6
    
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     7
    # hide debug commands from users, but complete them if 
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     8
    # specifically asked for
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
     9
    if [[ "$cur" == de* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    10
	commands="$commands debugcheckstate debugstate debugindex"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    11
	commands="$commands debugindexdot debugwalk"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    12
    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    13
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$commands" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    14
}
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    15
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    16
_hg_paths()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    17
{
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    18
    local paths="$(hg paths | sed -e 's/ = .*$//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    19
    COMPREPLY=(${COMPREPLY[@]:-} $( compgen -W "$paths" -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    20
}
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    21
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    22
_hg_status()
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    23
{
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    24
    local files="$( hg status -$1 | cut -b 3- )"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    25
    COMPREPLY=(${COMPREPLY[@]:-} $( compgen -W "$files" -- "$cur" ))
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    26
}
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
    27
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    28
_hg_tags()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    29
{
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    30
    local tags="$(hg tags | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    31
    COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$tags" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    32
}
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    33
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    34
# this is "kind of" ugly...
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    35
_hg_count_non_option()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    36
{
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    37
    local i count=0
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    38
    local filters="$1"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    39
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    40
    for (( i=1; $i<=$COMP_CWORD; i++ )); do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    41
	if [[ "${COMP_WORDS[i]}" != -* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    42
	    for f in $filters; do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    43
		if [[ ${COMP_WORDS[i-1]} == $f ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    44
		    continue 2
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    45
		fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    46
	    done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    47
	    count=$(($count + 1))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    48
	fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    49
    done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    50
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    51
    echo $(($count - 1))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    52
}
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    53
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    54
_hg()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    55
{
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    56
    local cur prev cmd opts i
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    57
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    58
    COMPREPLY=()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    59
    cur="$2"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    60
    prev="$3"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    61
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    62
    # searching for the command 
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    63
    # (first non-option argument that doesn't follow -R/--repository)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    64
    for (( i=1; $i<=$COMP_CWORD; i++ )); do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    65
	if [[ ${COMP_WORDS[i]} != -* ]] \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    66
	   && [ "${COMP_WORDS[i-1]}" != -R ] \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    67
	   && [ "${COMP_WORDS[i-1]}" != --repository ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    68
	    cmd="${COMP_WORDS[i]}"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    69
	    break
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    70
	fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    71
    done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    72
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    73
    if [[ "$cur" == -* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    74
	opts="$(hg -v help | sed -e '1,/^global options/d; /^ -/!d')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    75
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    76
	if [ -n "$cmd" ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    77
	    opts="$opts $(hg help "$cmd" | sed -e '/^ -/!d; s/ [^-][^ ]*//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    78
	fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    79
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    80
	COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$opts" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    81
	return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    82
    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    83
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    84
    if [ "$prev" = -R ] || [ "$prev" = --repository ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    85
        COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    86
	return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    87
    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    88
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    89
    if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    90
	_hg_commands
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    91
	return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    92
    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    93
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    94
    if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" = --rev ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    95
	_hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    96
	return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    97
    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    98
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
    99
    case "$cmd" in
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   100
	help)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   101
	    _hg_commands
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   102
	;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   103
	export|manifest|update|checkout|up|co)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   104
	    _hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   105
	;;
929
26bb67b7ec14 Add incoming to completions
mpm@selenic.com
parents: 922
diff changeset
   106
	pull|push|outgoing|incoming)
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   107
	    _hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   108
	    COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   109
	;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   110
	paths)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   111
	    _hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   112
	;;
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   113
	add)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   114
	    _hg_status "u"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   115
	;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   116
	commit)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   117
	    _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   118
	;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   119
	remove)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   120
	    _hg_status "r"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   121
	;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   122
	forget)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   123
	    _hg_status "a"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   124
	;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   125
	diff)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   126
	    _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   127
	;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   128
	revert)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   129
	    _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   130
	;;
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   131
	clone)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   132
	    local count=$(_hg_count_non_option)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   133
	    if [ $count = 1 ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   134
		_hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   135
	    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   136
	    COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   137
	;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   138
	cat)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   139
	    local count=$(_hg_count_non_option -o --output)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   140
	    if [ $count = 2 ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   141
		_hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   142
	    else
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   143
		COMPREPLY=(${COMPREPLY[@]:-} $( compgen -f -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   144
	    fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   145
	;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   146
	*) 
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   147
            COMPREPLY=(${COMPREPLY[@]:-} $( compgen -f -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   148
	;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   149
    esac
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   150
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   151
}
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
   152
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
   153
complete -o default -F _hg hg