diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-07-16 13:32:23 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-07-16 13:32:23 -0400 |
commit | 94c8afbfec3c47132b106eb98bbf59defeef449f (patch) | |
tree | c0f4169419256e07992db001633c412f85ffc46d | |
parent | fe70e063d020dcc9d74edae7b7e3b3db2b089c66 (diff) |
got bash completion working for "git annex" not just "git-annex"
This needs a patch to git to cause the git-annex completion to be
auto-loaded when completing "git annex <tab>". Otherwise, it will only
load when "git-annex" is tab completed. Once loaded, it works for both
uses. I've submitted the git patch to the git mailing list.
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | bash-completion.bash | 25 | ||||
-rw-r--r-- | doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment | 8 | ||||
-rw-r--r-- | doc/git-annex.mdwn | 12 |
4 files changed, 29 insertions, 18 deletions
@@ -49,7 +49,7 @@ install: build install-docs Build/InstallDesktopFile ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-annex-shell ./Build/InstallDesktopFile $(PREFIX)/bin/git-annex || true install -d $(DESTDIR)$(PREFIX)/share/bash-completion/completions - ./git-annex --bash-completion-script git-annex > $(DESTDIR)$(PREFIX)/share/bash-completion/completions/git-annex + install -m 0644 bash-completion.bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/git-annex test: git-annex ./git-annex test diff --git a/bash-completion.bash b/bash-completion.bash new file mode 100644 index 000000000..b0367c030 --- /dev/null +++ b/bash-completion.bash @@ -0,0 +1,25 @@ +# Use git-annex's built-in bash completion +# This bash completion is generated by the option parser, so it covers all +# commands, all options, and will never go out of date! +source <(git-annex --bash-completion-script git-annex) + +# Called by git's bash completion script when completing "git annex" +_git_annex() { + local cmdline + CMDLINE=(--bash-completion-index $(($COMP_CWORD - 1))) + + local seen_git + local seen_annex + for arg in ${COMP_WORDS[@]}; do + if [ "$arg" = git ] && [ -z "$seen_git" ]; then + seen_git=1 + CMDLINE=(${CMDLINE[@]} --bash-completion-word git-annex) + elif [ "$arg" = annex ] && [ -z "$seen_annex" ]; then + seen_annex=1 + else + CMDLINE=(${CMDLINE[@]} --bash-completion-word $arg) + fi + done + + COMPREPLY=( $(git-annex "${CMDLINE[@]}") ) +} diff --git a/doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment b/doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment index 050c81d2c..d6797b5e1 100644 --- a/doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment +++ b/doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment @@ -3,13 +3,11 @@ subject="""comment 5""" date="2015-07-15T15:44:11Z" content=""" -I've recently added built-in bash completion to git-annex, which is output -by the `--bash-completion-script` option. It knows about all sub-commands, +I've recently added built-in bash completion to git-annex, enabled by the +`bash-completion.bash` file. It knows about all sub-commands, and all options, and will automatically always be up-to-date with the argument parser! Currently, it only works for completing "git-annex", not "git annex". -Supporting the latter would probably require some hacks to git's own bash -completion code, or possibly a smart way to hook into it.. Help with that -would be appreciated. +I have submitted a patch to git's bash completion to make the latter work. """]] diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 5cbab5978..73894c0d8 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -763,18 +763,6 @@ may not be explicitly listed on their individual man pages. Overrides git configuration settings. May be specified multiple times. -# COMMAND-LINE TAB COMPLETION - -To enable bash completion, paste this into your shell prompt: - - source <(git-annex --bash-completion-script git-annex) - -The output of "git-annex --bash-completion-script git-annex" can also -be written to a bash completion file so bash loads it automatically. - -This bash completion is generated by the option parser, so it covers all -commands, all options, and will never go out of date! - # CONFIGURATION VIA .git/config Like other git commands, git-annex is configured via `.git/config`. |