zsh and fish completions

optparse-applicative-0.14.0.0 adds support for these, so have the
Makefile install their scripts when built with it.

CmdLine/GitAnnex/Options.hs now uses action "file" in cmdParams,
which affects the bash and zsh completions, letting them complete
filenames for subcommands that use that. This is not needed for
bash, since bash-completion.bash enables -o bashdefault, which
lets it complete filenames too. But it does not seem to break the bash
completions. It is needed for zsh; the zsh completion otherwise
does not complete filenames. The fish completion will always complete
filenames no matter what. Messy.

This commit was sponsored by Denis Dzyubenko on Patreon.
This commit is contained in:
Joey Hess 2017-06-09 11:38:20 -04:00
parent c6f087829e
commit 5cf7216774
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 24 additions and 3 deletions

View file

@ -25,6 +25,8 @@ git-annex (6.20170520) UNRELEASED; urgency=medium
* assistant: Merge changes from refs/remotes/foo/master into master.
Previously, only sync branches were merged. This makes regular git push
into a repository watched by the assistant auto-merge.
* Makefile: Install completions for the fish and zsh shells
when git-annex is built with optparse-applicative-0.14.
-- Joey Hess <id@joeyh.name> Wed, 24 May 2017 14:03:40 -0400

View file

@ -97,6 +97,7 @@ gitAnnexGlobalOptions = commonGlobalOptions ++
cmdParams :: CmdParamsDesc -> Parser CmdParams
cmdParams paramdesc = many $ argument str
( metavar paramdesc
<> action "file"
)
parseAutoOption :: Parser Bool

View file

@ -62,10 +62,16 @@ install-bins: build
ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-annex-shell
ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-remote-tor-annex
install-misc: Build/InstallDesktopFile
install-misc: build Build/InstallDesktopFile
./Build/InstallDesktopFile $(PREFIX)/bin/git-annex || true
install -d $(DESTDIR)$(PREFIX)/share/bash-completion/completions
install -m 0644 bash-completion.bash $(DESTDIR)$(PREFIX)/share/bash-completion/completions/git-annex
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions
install -m 0644 bash-completion.bash $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions/git-annex
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/zsh/vendor-completions
@./git-annex --zsh-completion-script git-annex > $(DESTDIR)$(PREFIX)/$(SHAREDIR)/zsh/vendor-completions/_git-annex || \
echo "** zsh completions not installed; built with too old version of optparse-applicative"
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/fish/completions
@./git-annex --fish-completion-script git-annex > $(DESTDIR)$(PREFIX)/$(SHAREDIR)/fish/completions/git-annex.fish || \
echo "** fish completions not installed; built with too old version of optparse-applicative"
install: install-bins install-docs install-misc

View file

@ -0,0 +1,12 @@
[[!comment format=mdwn
username="joey"
subject="""comment 1"""
date="2017-06-09T15:34:59Z"
content="""
When git-annex is built with optparse-applicative version 0.14.0.0,
it can generate its own zsh completion file. The Makefile installs that,
and it seems to work well.
So, I think that the hand-built zsh completions won't need to be maintained
much longer!
"""]]