contrib/bash_completion
author bos@serpentine.internal.keyresearch.com
Mon, 22 Aug 2005 15:08:20 -0700
changeset 1003 6dfc9cc71f42
parent 981 4f81068ed8cd
child 1018 bb3f23fe59f0
permissions -rw-r--r--
Emacs support: numerous changes. Most SCM commands now work in derived buffers (e.g. diff viewing buffers) as well as buffers backed by files. diff and log now work properly on repositories and files. Commit support is more solid. Doc strings are better.
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' \
952
dbfabfcb485e bash_completion: support GNU sed 3 and non-GNU sed
TK Soh <teekaysoh@yahoo.com>
parents: 935
diff changeset
     4
                                       -e '/^global options:/,$d' \
916
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