Bash – Smart Auto-completion in SVN (and other programs!)

bashcommand-line-interfacesvn

When I type "svn add path/to/somefile…" and tab to autocomplete, the system should only complete files/directories that are not currently under SVN control. Likewise, when I commit, remove or resolve files, the tab completion should only complete files that are relevant to what I'm doing (i.e., modified, currently in SVN or conflicted). This is especially important in SVN where every single file name you type could potentially benefit from smart autocompletion, but it of applies to other programs.

I know bash has a bash_completion file that can be used to programatically alter this behaviour but I've not found a decent example of SVN completion which actually completes file names rather than SVN command names.

My question is: Does anyone have such a setup? Does anyone use a different shell or tool that does something similar? Has anyone given this any thought?

Best Answer

Take a look at the completion script found here. It may approach doing what you want.

An excerpt looks promising:

    # 'files' is set according to the current subcommand
    case $cmd in
        st*) # status completion must include all files
        files=$cur*
        ;;
        ci|commit|revert|di*) # anything edited
        files=$($status $cs| _svn_grcut '@([MADR!]*| M*|_M*)')
        ;;
        add) # unknown files
        files=$($status $cs| _svn_grcut '\?*')
        ;;