84 lines
2.5 KiB
Bash
84 lines
2.5 KiB
Bash
# -*- sh -*-
|
|
#
|
|
# Copyright (C) 2016-2017 Canonical Ltd
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 3 as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
_complete_snap() {
|
|
# TODO: add support for sourcing this function from the core snap.
|
|
local cur prev words cword
|
|
_init_completion -n : || return
|
|
|
|
if [[ ${#words[@]} -le 2 ]]; then
|
|
# we're completing on the first word
|
|
COMPREPLY=($(GO_FLAGS_COMPLETION=1 "${words[@]}"))
|
|
return 0
|
|
fi
|
|
|
|
local command
|
|
if [[ ${words[1]} =~ ^- ]]; then
|
|
# global options take no args
|
|
return 0
|
|
fi
|
|
|
|
for w in "${words[@]:1}"; do
|
|
if [[ "$w" == "-h" || "$w" == "--help" ]]; then
|
|
# completing on help gets confusing
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
command="${words[1]}"
|
|
|
|
# Only split on newlines
|
|
local IFS=$'\n'
|
|
|
|
# now we pass _just the bit that's being completed_ of the command
|
|
# to snap for it to figure it out. go-flags isn't smart enough to
|
|
# look at COMP_WORDS etc. itself.
|
|
if [ "$command" = "debug" ]; then
|
|
command="${words[2]}"
|
|
COMPREPLY=($(GO_FLAGS_COMPLETION=1 snap debug "$command" "$cur"))
|
|
elif [ "$command" = "routine" ]; then
|
|
command="${words[2]}"
|
|
COMPREPLY=($(GO_FLAGS_COMPLETION=1 snap routine "$command" "$cur"))
|
|
else
|
|
COMPREPLY=($(GO_FLAGS_COMPLETION=1 snap "$command" "$cur"))
|
|
fi
|
|
|
|
case $command in
|
|
install|info|sign-build)
|
|
_filedir "snap"
|
|
;;
|
|
ack)
|
|
_filedir
|
|
;;
|
|
try)
|
|
_filedir -d
|
|
;;
|
|
connect|disconnect|interfaces)
|
|
# interface completions will only end in ':' when they all
|
|
# end in ':' (i.e. you either get offered snap names up to
|
|
# and including the ':', or you get offered the whole thing)
|
|
if [[ "$COMPREPLY" == *: ]]; then
|
|
compopt -o nospace
|
|
fi
|
|
esac
|
|
|
|
__ltrim_colon_completions "$cur"
|
|
|
|
return 0
|
|
}
|
|
|
|
complete -F _complete_snap snap
|