fix bash completion of filenames containing spaces
Work around https://github.com/pcapriotti/optparse-applicative/issues/146 by not using action "file" and instead passing -o bashdefault -o default to complete. This way, when optparse fails to complete a filename, bash will fall back to regular filename completion. Unfortunately, optparse-applicative does not provide a way to control the options passed to complete, so I had to modify its generated completion script. Note that for "git annex" command completion, git's completion script already used -o bashdefault -o default, so that works too.
This commit is contained in:
parent
36cf98a24f
commit
07c108e70e
2 changed files with 13 additions and 3 deletions
|
@ -89,8 +89,6 @@ gitAnnexGlobalOptions = commonGlobalOptions ++
|
|||
cmdParams :: CmdParamsDesc -> Parser CmdParams
|
||||
cmdParams paramdesc = many $ argument str
|
||||
( metavar paramdesc
|
||||
-- Let bash completion complete files
|
||||
<> action "file"
|
||||
)
|
||||
|
||||
parseAutoOption :: Parser Bool
|
||||
|
|
|
@ -1,7 +1,19 @@
|
|||
# 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)
|
||||
_git-annex()
|
||||
{
|
||||
local cmdline
|
||||
CMDLINE=(--bash-completion-index $COMP_CWORD)
|
||||
|
||||
for arg in ${COMP_WORDS[@]}; do
|
||||
CMDLINE=(${CMDLINE[@]} --bash-completion-word $arg)
|
||||
done
|
||||
|
||||
COMPREPLY=( $(git-annex "${CMDLINE[@]}") )
|
||||
}
|
||||
|
||||
complete -o bashdefault -o default -o filenames -F _git-annex git-annex
|
||||
|
||||
# Called by git's bash completion script when completing "git annex"
|
||||
_git_annex() {
|
||||
|
|
Loading…
Reference in a new issue