summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--bash-completion.bash25
-rw-r--r--doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment8
-rw-r--r--doc/git-annex.mdwn12
4 files changed, 29 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index 2f7d3b244..ddc56e3f8 100644
--- a/Makefile
+++ b/Makefile
@@ -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`.