mirror of
https://github.com/ohmybash/oh-my-bash.git
synced 2024-05-11 05:55:37 +00:00
OMB - Major Refactor (#39)
* OMB - Major Refactor - Aliases and completions now works like plugins (need to enabled in .bashrc) - Removed the compatible check in spectrum.sh, OMB now works with Bash v3.x like the old days. - Removed core plugin, added those bash functions into base.sh and load during startup. - Updated OSH template for new installations - Added history config and few other stuff from #17 @TODO: Added a shell script to update old version of .bashrc to new one. * Fixed ShellCheck issues * Fixed ShellCheck issues
This commit is contained in:
56
completions/apm.completion.sh
Normal file
56
completions/apm.completion.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# apm-bash-completion is written by Ugur Ozyilmazel
|
||||
# repo: https://github.com/vigo/apm-bash-completion
|
||||
|
||||
__apm(){
|
||||
local cur prev options apm_command
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
__apm_get_command
|
||||
if [[ $cur = -* ]]; then
|
||||
options="--color"
|
||||
if [[ -z $apm_command ]]; then
|
||||
options="$options --version --help"
|
||||
fi
|
||||
if [[ $apm_command && $apm_command = publish ]]; then
|
||||
options="--tag --rename"
|
||||
fi
|
||||
else
|
||||
if [[ -z $apm_command || $apm_command = help ]]; then
|
||||
options="help clean config dedupe deinstall delete dev develop docs erase featured home init install link linked links list ln lns login ls open outdated publish rebuild rebuild-module-cache remove rm search show star starred stars test uninstall unlink unpublish unstar update upgrade view"
|
||||
fi
|
||||
if [[ $apm_command && $apm_command = publish ]]; then
|
||||
options="major minor patch build"
|
||||
fi
|
||||
if [[ $apm_command && $apm_command = config ]]; then
|
||||
options="set get delete list edit"
|
||||
fi
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "$options" -- "$cur"))
|
||||
}
|
||||
__apm_get_command() {
|
||||
local i
|
||||
for ((i=1; i < $COMP_CWORD; ++i)); do
|
||||
local arg=${COMP_WORDS[$i]}
|
||||
case $arg in
|
||||
[^-]*)
|
||||
apm_command=$arg
|
||||
return;;
|
||||
--version)
|
||||
apm_command=-
|
||||
return;;
|
||||
--help)
|
||||
apm_command=help
|
||||
return;;
|
||||
publish)
|
||||
apm_command=publish
|
||||
return;;
|
||||
config)
|
||||
apm_command=config
|
||||
return;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
complete -F __apm -o bashdefault -o default apm
|
1
completions/awscli.completion.sh
Normal file
1
completions/awscli.completion.sh
Normal file
@@ -0,0 +1 @@
|
||||
[[ -x "$(which aws_completer)" ]] &>/dev/null && complete -C "$(which aws_completer)" aws
|
9
completions/brew.completion.sh
Normal file
9
completions/brew.completion.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
if which brew >/dev/null 2>&1; then
|
||||
if [ -f `brew --prefix`/etc/bash_completion ]; then
|
||||
. `brew --prefix`/etc/bash_completion
|
||||
fi
|
||||
|
||||
if [ -f `brew --prefix`/Library/Contributions/brew_bash_completion.sh ]; then
|
||||
. `brew --prefix`/Library/Contributions/brew_bash_completion.sh
|
||||
fi
|
||||
fi
|
55
completions/bundler.completion.sh
Normal file
55
completions/bundler.completion.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#! bash
|
||||
# bash completion for the `bundle` command.
|
||||
#
|
||||
# Copyright (c) 2011-2013 Daniel Luz <dev at mernen dot com>.
|
||||
# Distributed under the MIT license.
|
||||
# http://mernen.com/projects/completion-ruby
|
||||
#
|
||||
# To use, source this file on bash:
|
||||
# . completion-bundle
|
||||
|
||||
__bundle() {
|
||||
local cur=$2
|
||||
local prev=$3
|
||||
local bundle_command
|
||||
__bundle_get_command
|
||||
COMPREPLY=()
|
||||
|
||||
local options
|
||||
if [[ $cur = -* ]]; then
|
||||
options="--no-color --verbose"
|
||||
if [[ -z $bundle_command ]]; then
|
||||
options="$options --version --help"
|
||||
fi
|
||||
else
|
||||
if [[ -z $bundle_command || $bundle_command = help ]]; then
|
||||
options="help install update package exec config check list show
|
||||
console open viz init gem"
|
||||
fi
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "$options" -- "$cur"))
|
||||
}
|
||||
|
||||
__bundle_get_command() {
|
||||
local i
|
||||
for ((i=1; i < $COMP_CWORD; ++i)); do
|
||||
local arg=${COMP_WORDS[$i]}
|
||||
|
||||
case $arg in
|
||||
[^-]*)
|
||||
bundle_command=$arg
|
||||
return;;
|
||||
--version)
|
||||
# command-killer
|
||||
bundle_command=-
|
||||
return;;
|
||||
--help)
|
||||
bundle_command=help
|
||||
return;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
complete -F __bundle -o bashdefault -o default bundle
|
||||
# vim: ai ft=sh sw=4 sts=2 et
|
24
completions/capistrano.completion.sh
Executable file
24
completions/capistrano.completion.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash completion support for Capistrano.
|
||||
|
||||
export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}
|
||||
|
||||
_capcomplete() {
|
||||
if [ -f Capfile ]; then
|
||||
recent=`ls -t .cap_tasks~ Capfile **/*.cap 2> /dev/null | head -n 1`
|
||||
if [[ $recent != '.cap_tasks~' ]]; then
|
||||
cap --version | grep 'Capistrano v2.' > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
# Capistrano 2.x
|
||||
cap --tool --verbose --tasks | cut -d " " -f 2 > .cap_tasks~
|
||||
else
|
||||
# Capistrano 3.x
|
||||
cap --all --tasks | cut -d " " -f 2 > .cap_tasks~
|
||||
fi
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "`cat .cap_tasks~`" -- ${COMP_WORDS[COMP_CWORD]}))
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _capcomplete cap
|
133
completions/composer.completion.sh
Normal file
133
completions/composer.completion.sh
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
_composer()
|
||||
{
|
||||
local cur script coms opts com
|
||||
COMPREPLY=()
|
||||
_get_comp_words_by_ref -n : cur words
|
||||
|
||||
# for an alias, get the real script behind it
|
||||
if [[ $(type -t ${words[0]}) == "alias" ]]; then
|
||||
script=$(alias ${words[0]} | sed -E "s/alias ${words[0]}='(.*)'/\1/")
|
||||
else
|
||||
script=${words[0]}
|
||||
fi
|
||||
|
||||
# lookup for command
|
||||
for word in ${words[@]:1}; do
|
||||
if [[ $word != -* ]]; then
|
||||
com=$word
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# completing for an option
|
||||
if [[ ${cur} == --* ]] ; then
|
||||
opts="--help --quiet --verbose --version --ansi --no-ansi --no-interaction --profile --no-plugins --working-dir"
|
||||
|
||||
case "$com" in
|
||||
about)
|
||||
opts="${opts} "
|
||||
;;
|
||||
archive)
|
||||
opts="${opts} --format --dir --file"
|
||||
;;
|
||||
browse)
|
||||
opts="${opts} --homepage --show"
|
||||
;;
|
||||
clear-cache)
|
||||
opts="${opts} "
|
||||
;;
|
||||
config)
|
||||
opts="${opts} --global --editor --auth --unset --list --file --absolute"
|
||||
;;
|
||||
create-project)
|
||||
opts="${opts} --stability --prefer-source --prefer-dist --repository --repository-url --dev --no-dev --no-custom-installers --no-scripts --no-progress --no-secure-http --keep-vcs --no-install --ignore-platform-reqs"
|
||||
;;
|
||||
depends)
|
||||
opts="${opts} --recursive --tree"
|
||||
;;
|
||||
diagnose)
|
||||
opts="${opts} "
|
||||
;;
|
||||
dump-autoload)
|
||||
opts="${opts} --no-scripts --optimize --classmap-authoritative --apcu --no-dev"
|
||||
;;
|
||||
exec)
|
||||
opts="${opts} --list"
|
||||
;;
|
||||
global)
|
||||
opts="${opts} "
|
||||
;;
|
||||
help)
|
||||
opts="${opts} --xml --format --raw"
|
||||
;;
|
||||
init)
|
||||
opts="${opts} --name --description --author --type --homepage --require --require-dev --stability --license --repository"
|
||||
;;
|
||||
install)
|
||||
opts="${opts} --prefer-source --prefer-dist --dry-run --dev --no-dev --no-custom-installers --no-autoloader --no-scripts --no-progress --no-suggest --optimize-autoloader --classmap-authoritative --apcu-autoloader --ignore-platform-reqs"
|
||||
;;
|
||||
licenses)
|
||||
opts="${opts} --format --no-dev"
|
||||
;;
|
||||
list)
|
||||
opts="${opts} --xml --raw --format"
|
||||
;;
|
||||
outdated)
|
||||
opts="${opts} --outdated --all --direct --strict"
|
||||
;;
|
||||
prohibits)
|
||||
opts="${opts} --recursive --tree"
|
||||
;;
|
||||
remove)
|
||||
opts="${opts} --dev --no-progress --no-update --no-scripts --update-no-dev --update-with-dependencies --no-update-with-dependencies --ignore-platform-reqs --optimize-autoloader --classmap-authoritative --apcu-autoloader"
|
||||
;;
|
||||
require)
|
||||
opts="${opts} --dev --prefer-source --prefer-dist --no-progress --no-suggest --no-update --no-scripts --update-no-dev --update-with-dependencies --ignore-platform-reqs --prefer-stable --prefer-lowest --sort-packages --optimize-autoloader --classmap-authoritative --apcu-autoloader"
|
||||
;;
|
||||
run-script)
|
||||
opts="${opts} --timeout --dev --no-dev --list"
|
||||
;;
|
||||
search)
|
||||
opts="${opts} --only-name --type"
|
||||
;;
|
||||
self-update)
|
||||
opts="${opts} --rollback --clean-backups --no-progress --update-keys --stable --preview --snapshot"
|
||||
;;
|
||||
show)
|
||||
opts="${opts} --all --installed --platform --available --self --name-only --path --tree --latest --outdated --minor-only --direct --strict"
|
||||
;;
|
||||
status)
|
||||
opts="${opts} "
|
||||
;;
|
||||
suggests)
|
||||
opts="${opts} --by-package --by-suggestion --no-dev"
|
||||
;;
|
||||
update)
|
||||
opts="${opts} --prefer-source --prefer-dist --dry-run --dev --no-dev --lock --no-custom-installers --no-autoloader --no-scripts --no-progress --no-suggest --with-dependencies --optimize-autoloader --classmap-authoritative --apcu-autoloader --ignore-platform-reqs --prefer-stable --prefer-lowest --interactive --root-reqs"
|
||||
;;
|
||||
validate)
|
||||
opts="${opts} --no-check-all --no-check-lock --no-check-publish --with-dependencies --strict"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
__ltrim_colon_completions "$cur"
|
||||
|
||||
return 0;
|
||||
fi
|
||||
|
||||
# completing for a command
|
||||
if [[ $cur == $com ]]; then
|
||||
coms="about archive browse clear-cache config create-project depends diagnose dump-autoload exec global help init install licenses list outdated prohibits remove require run-script search self-update show status suggests update validate"
|
||||
|
||||
COMPREPLY=($(compgen -W "${coms}" -- ${cur}))
|
||||
__ltrim_colon_completions "$cur"
|
||||
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o default -F _composer composer
|
4
completions/conda.completion.sh
Normal file
4
completions/conda.completion.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
which register-python-argcomplete &> /dev/null \
|
||||
&& eval "$(register-python-argcomplete conda)" \
|
||||
|| echo "Please install argcomplete to use conda completion" > /dev/null
|
175
completions/defaults.completion.sh
Normal file
175
completions/defaults.completion.sh
Normal file
@@ -0,0 +1,175 @@
|
||||
# defaults
|
||||
# Bash command line completion for defaults
|
||||
#
|
||||
# Created by Jonathon Mah on 2006-11-08.
|
||||
# Copyright 2006 Playhaus. All rights reserved.
|
||||
#
|
||||
# Version 1.0 (2006-11-08)
|
||||
|
||||
|
||||
_defaults_domains()
|
||||
{
|
||||
local cur
|
||||
COMPREPLY=()
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
|
||||
local domains=$( defaults domains | sed -e 's/, /:/g' | tr : '\n' | sed -e 's/ /\\ /g' | grep -i "^$cur" )
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=( $domains )
|
||||
if [[ $( echo '-app' | grep "^$cur" ) ]]; then
|
||||
COMPREPLY[${#COMPREPLY[@]}]="-app"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
_defaults()
|
||||
{
|
||||
local cur prev host_opts cmds cmd domain keys key_index
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
host_opts='-currentHost -host'
|
||||
cmds='read read-type write rename delete domains find help'
|
||||
|
||||
if [[ $COMP_CWORD -eq 1 ]]; then
|
||||
COMPREPLY=( $( compgen -W "$host_opts $cmds" -- $cur ) )
|
||||
return 0
|
||||
elif [[ $COMP_CWORD -eq 2 ]]; then
|
||||
if [[ "$prev" == "-currentHost" ]]; then
|
||||
COMPREPLY=( $( compgen -W "$cmds" -- $cur ) )
|
||||
return 0
|
||||
elif [[ "$prev" == "-host" ]]; then
|
||||
return 0
|
||||
_known_hosts -a
|
||||
else
|
||||
_defaults_domains
|
||||
return 0
|
||||
fi
|
||||
elif [[ $COMP_CWORD -eq 3 ]]; then
|
||||
if [[ ${COMP_WORDS[1]} == "-host" ]]; then
|
||||
_defaults_domains
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Both a domain and command have been specified
|
||||
|
||||
if [[ ${COMP_WORDS[1]} == [${cmds// /|}] ]]; then
|
||||
cmd=${COMP_WORDS[1]}
|
||||
domain=${COMP_WORDS[2]}
|
||||
key_index=3
|
||||
if [[ "$domain" == "-app" ]]; then
|
||||
if [[ $COMP_CWORD -eq 3 ]]; then
|
||||
# Completing application name. Can't help here, sorry
|
||||
return 0
|
||||
fi
|
||||
domain="-app ${COMP_WORDS[3]}"
|
||||
key_index=4
|
||||
fi
|
||||
elif [[ ${COMP_WORDS[2]} == "-currentHost" ]] && [[ ${COMP_WORDS[2]} == [${cmds// /|}] ]]; then
|
||||
cmd=${COMP_WORDS[2]}
|
||||
domain=${COMP_WORDS[3]}
|
||||
key_index=4
|
||||
if [[ "$domain" == "-app" ]]; then
|
||||
if [[ $COMP_CWORD -eq 4 ]]; then
|
||||
# Completing application name. Can't help here, sorry
|
||||
return 0
|
||||
fi
|
||||
domain="-app ${COMP_WORDS[4]}"
|
||||
key_index=5
|
||||
fi
|
||||
elif [[ ${COMP_WORDS[3]} == "-host" ]] && [[ ${COMP_WORDS[3]} == [${cmds// /|}] ]]; then
|
||||
cmd=${COMP_WORDS[3]}
|
||||
domain=${COMP_WORDS[4]}
|
||||
key_index=5
|
||||
if [[ "$domain" == "-app" ]]; then
|
||||
if [[ $COMP_CWORD -eq 5 ]]; then
|
||||
# Completing application name. Can't help here, sorry
|
||||
return 0
|
||||
fi
|
||||
domain="-app ${COMP_WORDS[5]}"
|
||||
key_index=6
|
||||
fi
|
||||
fi
|
||||
|
||||
keys=$( defaults read $domain 2>/dev/null | sed -n -e '/^ [^}) ]/p' | sed -e 's/^ \([^" ]\{1,\}\) = .*$/\1/g' -e 's/^ "\([^"]\{1,\}\)" = .*$/\1/g' | sed -e 's/ /\\ /g' )
|
||||
|
||||
case $cmd in
|
||||
read|read-type)
|
||||
# Complete key
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=( $( echo "$keys" | grep -i "^${cur//\\/\\\\}" ) )
|
||||
;;
|
||||
write)
|
||||
if [[ $key_index -eq $COMP_CWORD ]]; then
|
||||
# Complete key
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=( $( echo "$keys" | grep -i "^${cur//\\/\\\\}" ) )
|
||||
elif [[ $((key_index+1)) -eq $COMP_CWORD ]]; then
|
||||
# Complete value type
|
||||
# Unfortunately ${COMP_WORDS[key_index]} fails on keys with spaces
|
||||
local value_types='-string -data -integer -float -boolean -date -array -array-add -dict -dict-add'
|
||||
local cur_type=$( defaults read-type $domain ${COMP_WORDS[key_index]} 2>/dev/null | sed -e 's/^Type is \(.*\)/-\1/' -e's/dictionary/dict/' | grep "^$cur" )
|
||||
if [[ $cur_type ]]; then
|
||||
COMPREPLY=( $cur_type )
|
||||
else
|
||||
COMPREPLY=( $( compgen -W "$value_types" -- $cur ) )
|
||||
fi
|
||||
elif [[ $((key_index+2)) -eq $COMP_CWORD ]]; then
|
||||
# Complete value
|
||||
# Unfortunately ${COMP_WORDS[key_index]} fails on keys with spaces
|
||||
COMPREPLY=( $( defaults read $domain ${COMP_WORDS[key_index]} 2>/dev/null | grep -i "^${cur//\\/\\\\}" ) )
|
||||
fi
|
||||
;;
|
||||
rename)
|
||||
if [[ $key_index -eq $COMP_CWORD ]] ||
|
||||
[[ $((key_index+1)) -eq $COMP_CWORD ]]; then
|
||||
# Complete source and destination keys
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=( $( echo "$keys" | grep -i "^${cur//\\/\\\\}" ) )
|
||||
fi
|
||||
;;
|
||||
delete)
|
||||
if [[ $key_index -eq $COMP_CWORD ]]; then
|
||||
# Complete key
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=( $( echo "$keys" | grep -i "^${cur//\\/\\\\}" ) )
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _defaults -o default defaults
|
||||
|
||||
|
||||
# This file is licensed under the BSD license, as follows:
|
||||
#
|
||||
# Copyright (c) 2006, Playhaus
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
# * Neither the name of the Playhaus nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
#
|
||||
# This software is provided by the copyright holders and contributors "as is"
|
||||
# and any express or implied warranties, including, but not limited to, the
|
||||
# implied warranties of merchantability and fitness for a particular purpose are
|
||||
# disclaimed. In no event shall the copyright owner or contributors be liable
|
||||
# for any direct, indirect, incidental, special, exemplary, or consequential
|
||||
# damages (including, but not limited to, procurement of substitute goods or
|
||||
# services; loss of use, data, or profits; or business interruption) however
|
||||
# caused and on any theory of liability, whether in contract, strict liability,
|
||||
# or tort (including negligence or otherwise) arising in any way out of the use
|
||||
# of this software, even if advised of the possibility of such damage.
|
15
completions/dirs.completion.sh
Normal file
15
completions/dirs.completion.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash completion support for the 'dirs' plugin (commands G, R).
|
||||
|
||||
_dirs-complete() {
|
||||
local CURRENT_PROMPT="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
# parse all defined shortcuts from ~/.dirs
|
||||
if [ -r "$HOME/.dirs" ]; then
|
||||
COMPREPLY=($(compgen -W "$(grep -v '^#' ~/.dirs | sed -e 's/\(.*\)=.*/\1/')" -- ${CURRENT_PROMPT}) )
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _dirs-complete G R
|
72
completions/django.completion.sh
Normal file
72
completions/django.completion.sh
Normal file
@@ -0,0 +1,72 @@
|
||||
# #########################################################################
|
||||
# This bash script adds tab-completion feature to django-admin.py and
|
||||
# manage.py.
|
||||
#
|
||||
# Testing it out without installing
|
||||
# =================================
|
||||
#
|
||||
# To test out the completion without "installing" this, just run this file
|
||||
# directly, like so:
|
||||
#
|
||||
# . ~/path/to/django_bash_completion
|
||||
#
|
||||
# Note: There's a dot ('.') at the beginning of that command.
|
||||
#
|
||||
# After you do that, tab completion will immediately be made available in your
|
||||
# current Bash shell. But it won't be available next time you log in.
|
||||
#
|
||||
# Installing
|
||||
# ==========
|
||||
#
|
||||
# To install this, point to this file from your .bash_profile, like so:
|
||||
#
|
||||
# . ~/path/to/django_bash_completion
|
||||
#
|
||||
# Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
|
||||
#
|
||||
# Settings will take effect the next time you log in.
|
||||
#
|
||||
# Uninstalling
|
||||
# ============
|
||||
#
|
||||
# To uninstall, just remove the line from your .bash_profile and .bashrc.
|
||||
|
||||
_django_completion()
|
||||
{
|
||||
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
|
||||
COMP_CWORD=$COMP_CWORD \
|
||||
DJANGO_AUTO_COMPLETE=1 $1 ) )
|
||||
}
|
||||
complete -F _django_completion -o default django-admin.py manage.py django-admin
|
||||
|
||||
_python_django_completion()
|
||||
{
|
||||
if [[ ${COMP_CWORD} -ge 2 ]]; then
|
||||
PYTHON_EXE=$( basename -- ${COMP_WORDS[0]} )
|
||||
echo $PYTHON_EXE | egrep "python([2-9]\.[0-9])?" >/dev/null 2>&1
|
||||
if [[ $? == 0 ]]; then
|
||||
PYTHON_SCRIPT=$( basename -- ${COMP_WORDS[1]} )
|
||||
echo $PYTHON_SCRIPT | egrep "manage\.py|django-admin(\.py)?" >/dev/null 2>&1
|
||||
if [[ $? == 0 ]]; then
|
||||
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]:1}" \
|
||||
COMP_CWORD=$(( COMP_CWORD-1 )) \
|
||||
DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) )
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Support for multiple interpreters.
|
||||
unset pythons
|
||||
if command -v whereis &>/dev/null; then
|
||||
python_interpreters=$(whereis python | cut -d " " -f 2-)
|
||||
for python in $python_interpreters; do
|
||||
pythons="${pythons} $(basename -- $python)"
|
||||
done
|
||||
pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
|
||||
else
|
||||
pythons=python
|
||||
fi
|
||||
|
||||
complete -F _python_django_completion -o default $pythons
|
||||
|
561
completions/docker-compose.completion.sh
Normal file
561
completions/docker-compose.completion.sh
Normal file
@@ -0,0 +1,561 @@
|
||||
#!bash
|
||||
#
|
||||
# bash completion for docker-compose
|
||||
#
|
||||
# This work is based on the completion for the docker command.
|
||||
#
|
||||
# This script provides completion of:
|
||||
# - commands and their options
|
||||
# - service names
|
||||
# - filepaths
|
||||
#
|
||||
# To enable the completions either:
|
||||
# - place this file in /etc/bash_completion.d
|
||||
# or
|
||||
# - copy this file to e.g. ~/.docker-compose-completion.sh and add the line
|
||||
# below to your .bashrc after bash completion features are loaded
|
||||
# . ~/.docker-compose-completion.sh
|
||||
|
||||
|
||||
__docker_compose_q() {
|
||||
docker-compose 2>/dev/null $daemon_options "$@"
|
||||
}
|
||||
|
||||
# Transforms a multiline list of strings into a single line string
|
||||
# with the words separated by "|".
|
||||
__docker_compose_to_alternatives() {
|
||||
local parts=( $1 )
|
||||
local IFS='|'
|
||||
echo "${parts[*]}"
|
||||
}
|
||||
|
||||
# Transforms a multiline list of options into an extglob pattern
|
||||
# suitable for use in case statements.
|
||||
__docker_compose_to_extglob() {
|
||||
local extglob=$( __docker_compose_to_alternatives "$1" )
|
||||
echo "@($extglob)"
|
||||
}
|
||||
|
||||
# suppress trailing whitespace
|
||||
__docker_compose_nospace() {
|
||||
# compopt is not available in ancient bash versions
|
||||
type compopt &>/dev/null && compopt -o nospace
|
||||
}
|
||||
|
||||
# Extracts all service names from the compose file.
|
||||
___docker_compose_all_services_in_compose_file() {
|
||||
__docker_compose_q config --services
|
||||
}
|
||||
|
||||
# All services, even those without an existing container
|
||||
__docker_compose_services_all() {
|
||||
COMPREPLY=( $(compgen -W "$(___docker_compose_all_services_in_compose_file)" -- "$cur") )
|
||||
}
|
||||
|
||||
# All services that have an entry with the given key in their compose_file section
|
||||
___docker_compose_services_with_key() {
|
||||
# flatten sections under "services" to one line, then filter lines containing the key and return section name
|
||||
__docker_compose_q config \
|
||||
| sed -n -e '/^services:/,/^[^ ]/p' \
|
||||
| sed -n 's/^ //p' \
|
||||
| awk '/^[a-zA-Z0-9]/{printf "\n"};{printf $0;next;}' \
|
||||
| awk -F: -v key=": +$1:" '$0 ~ key {print $1}'
|
||||
}
|
||||
|
||||
# All services that are defined by a Dockerfile reference
|
||||
__docker_compose_services_from_build() {
|
||||
COMPREPLY=( $(compgen -W "$(___docker_compose_services_with_key build)" -- "$cur") )
|
||||
}
|
||||
|
||||
# All services that are defined by an image
|
||||
__docker_compose_services_from_image() {
|
||||
COMPREPLY=( $(compgen -W "$(___docker_compose_services_with_key image)" -- "$cur") )
|
||||
}
|
||||
|
||||
# The services for which containers have been created, optionally filtered
|
||||
# by a boolean expression passed in as argument.
|
||||
__docker_compose_services_with() {
|
||||
local containers names
|
||||
containers="$(__docker_compose_q ps -q)"
|
||||
names=$(docker 2>/dev/null inspect -f "{{if ${1:-true}}}{{range \$k, \$v := .Config.Labels}}{{if eq \$k \"com.docker.compose.service\"}}{{\$v}}{{end}}{{end}}{{end}}" $containers)
|
||||
COMPREPLY=( $(compgen -W "$names" -- "$cur") )
|
||||
}
|
||||
|
||||
# The services for which at least one paused container exists
|
||||
__docker_compose_services_paused() {
|
||||
__docker_compose_services_with '.State.Paused'
|
||||
}
|
||||
|
||||
# The services for which at least one running container exists
|
||||
__docker_compose_services_running() {
|
||||
__docker_compose_services_with '.State.Running'
|
||||
}
|
||||
|
||||
# The services for which at least one stopped container exists
|
||||
__docker_compose_services_stopped() {
|
||||
__docker_compose_services_with 'not .State.Running'
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_build() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--force-rm --help --no-cache --pull" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_from_build
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_bundle() {
|
||||
case "$prev" in
|
||||
--output|-o)
|
||||
_filedir
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
COMPREPLY=( $( compgen -W "--fetch-digests --help --output -o" -- "$cur" ) )
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_config() {
|
||||
COMPREPLY=( $( compgen -W "--help --quiet -q --services" -- "$cur" ) )
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_create() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--force-recreate --help --no-build --no-recreate" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_docker_compose() {
|
||||
case "$prev" in
|
||||
--tlscacert|--tlscert|--tlskey)
|
||||
_filedir
|
||||
return
|
||||
;;
|
||||
--file|-f)
|
||||
_filedir "y?(a)ml"
|
||||
return
|
||||
;;
|
||||
$(__docker_compose_to_extglob "$daemon_options_with_args") )
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "$daemon_boolean_options $daemon_options_with_args --help -h --verbose --version -v" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_down() {
|
||||
case "$prev" in
|
||||
--rmi)
|
||||
COMPREPLY=( $( compgen -W "all local" -- "$cur" ) )
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --rmi --volumes -v --remove-orphans" -- "$cur" ) )
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_events() {
|
||||
case "$prev" in
|
||||
--json)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --json" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_exec() {
|
||||
case "$prev" in
|
||||
--index|--user)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "-d --help --index --privileged -T --user" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_running
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_help() {
|
||||
COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_kill() {
|
||||
case "$prev" in
|
||||
-s)
|
||||
COMPREPLY=( $( compgen -W "SIGHUP SIGINT SIGKILL SIGUSR1 SIGUSR2" -- "$(echo $cur | tr '[:lower:]' '[:upper:]')" ) )
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help -s" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_running
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_logs() {
|
||||
case "$prev" in
|
||||
--tail)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--follow -f --help --no-color --tail --timestamps -t" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_pause() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_running
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_port() {
|
||||
case "$prev" in
|
||||
--protocol)
|
||||
COMPREPLY=( $( compgen -W "tcp udp" -- "$cur" ) )
|
||||
return;
|
||||
;;
|
||||
--index)
|
||||
return;
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --index --protocol" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_ps() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help -q" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_pull() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --ignore-pull-failures" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_from_image
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_push() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --ignore-push-failures" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_restart() {
|
||||
case "$prev" in
|
||||
--timeout|-t)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_running
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_rm() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--force -f --help -v" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_stopped
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_run() {
|
||||
case "$prev" in
|
||||
-e)
|
||||
COMPREPLY=( $( compgen -e -- "$cur" ) )
|
||||
__docker_compose_nospace
|
||||
return
|
||||
;;
|
||||
--entrypoint|--name|--user|-u|--workdir|-w)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "-d --entrypoint -e --help --name --no-deps --publish -p --rm --service-ports -T --user -u --workdir -w" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_scale() {
|
||||
case "$prev" in
|
||||
=)
|
||||
COMPREPLY=("$cur")
|
||||
return
|
||||
;;
|
||||
--timeout|-t)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=( $(compgen -S "=" -W "$(___docker_compose_all_services_in_compose_file)" -- "$cur") )
|
||||
__docker_compose_nospace
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_start() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_stopped
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_stop() {
|
||||
case "$prev" in
|
||||
--timeout|-t)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_running
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_unpause() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_paused
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_up() {
|
||||
case "$prev" in
|
||||
--timeout|-t)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--abort-on-container-exit --build -d --force-recreate --help --no-build --no-color --no-deps --no-recreate --timeout -t --remove-orphans" -- "$cur" ) )
|
||||
;;
|
||||
*)
|
||||
__docker_compose_services_all
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose_version() {
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--short" -- "$cur" ) )
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
_docker_compose() {
|
||||
local previous_extglob_setting=$(shopt -p extglob)
|
||||
shopt -s extglob
|
||||
|
||||
local commands=(
|
||||
build
|
||||
bundle
|
||||
config
|
||||
create
|
||||
down
|
||||
events
|
||||
exec
|
||||
help
|
||||
kill
|
||||
logs
|
||||
pause
|
||||
port
|
||||
ps
|
||||
pull
|
||||
push
|
||||
restart
|
||||
rm
|
||||
run
|
||||
scale
|
||||
start
|
||||
stop
|
||||
unpause
|
||||
up
|
||||
version
|
||||
)
|
||||
|
||||
# options for the docker daemon that have to be passed to secondary calls to
|
||||
# docker-compose executed by this script
|
||||
local daemon_boolean_options="
|
||||
--skip-hostname-check
|
||||
--tls
|
||||
--tlsverify
|
||||
"
|
||||
local daemon_options_with_args="
|
||||
--file -f
|
||||
--host -H
|
||||
--project-name -p
|
||||
--tlscacert
|
||||
--tlscert
|
||||
--tlskey
|
||||
"
|
||||
|
||||
COMPREPLY=()
|
||||
local cur prev words cword
|
||||
_get_comp_words_by_ref -n : cur prev words cword
|
||||
|
||||
# search subcommand and invoke its handler.
|
||||
# special treatment of some top-level options
|
||||
local command='docker_compose'
|
||||
local daemon_options=()
|
||||
local counter=1
|
||||
|
||||
while [ $counter -lt $cword ]; do
|
||||
case "${words[$counter]}" in
|
||||
$(__docker_compose_to_extglob "$daemon_boolean_options") )
|
||||
local opt=${words[counter]}
|
||||
daemon_options+=($opt)
|
||||
;;
|
||||
$(__docker_compose_to_extglob "$daemon_options_with_args") )
|
||||
local opt=${words[counter]}
|
||||
local arg=${words[++counter]}
|
||||
daemon_options+=($opt $arg)
|
||||
;;
|
||||
-*)
|
||||
;;
|
||||
*)
|
||||
command="${words[$counter]}"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
(( counter++ ))
|
||||
done
|
||||
|
||||
local completions_func=_docker_compose_${command//-/_}
|
||||
declare -F $completions_func >/dev/null && $completions_func
|
||||
|
||||
eval "$previous_extglob_setting"
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _docker_compose docker-compose
|
252
completions/docker-machine.completion.sh
Normal file
252
completions/docker-machine.completion.sh
Normal file
@@ -0,0 +1,252 @@
|
||||
#
|
||||
# bash completion file for docker-machine commands
|
||||
#
|
||||
# This script provides completion of:
|
||||
# - commands and their options
|
||||
# - machine names
|
||||
# - filepaths
|
||||
#
|
||||
# To enable the completions either:
|
||||
# - place this file in /etc/bash_completion.d
|
||||
# or
|
||||
# - copy this file to e.g. ~/.docker-machine-completion.sh and add the line
|
||||
# below to your .bashrc after bash completion features are loaded
|
||||
# . ~/.docker-machine-completion.sh
|
||||
#
|
||||
|
||||
_docker_machine_active() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=()
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_config() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--swarm --help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_create() {
|
||||
# cheating, b/c there are approximately one zillion options to create
|
||||
COMPREPLY=($(compgen -W "$(docker-machine create --help | grep '^ -' | sed 's/^ //; s/[^a-z0-9-].*$//')" -- "${cur}"))
|
||||
}
|
||||
|
||||
_docker_machine_env() {
|
||||
case "${prev}" in
|
||||
--shell)
|
||||
# What are the options for --shell?
|
||||
COMPREPLY=()
|
||||
;;
|
||||
*)
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--swarm --shell --unset --no-proxy --help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
esac
|
||||
}
|
||||
|
||||
# See docker-machine-wrapper.bash for the use command
|
||||
_docker_machine_use() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--swarm --unset --help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_inspect() {
|
||||
case "${prev}" in
|
||||
-f|--format)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
*)
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--format --help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_docker_machine_ip() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_kill() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_ls() {
|
||||
case "${prev}" in
|
||||
--filter)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=($(compgen -W "--quiet --filter --format --timeout --help" -- "${cur}"))
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_docker_machine_regenerate_certs() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help --force" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_restart() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_rm() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help --force -y" -- "${cur}"))
|
||||
else
|
||||
# For rm, it's best to be explicit
|
||||
COMPREPLY=()
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_ssh() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_scp() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help --recursive" -- "${cur}"))
|
||||
else
|
||||
_filedir
|
||||
# It would be really nice to ssh to the machine and ls to complete
|
||||
# remote files.
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q | sed 's/$/:/')" -- "${cur}") "${COMPREPLY[@]}")
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_start() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_status() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_stop() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_upgrade() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_url() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_version() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_help() {
|
||||
if [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "${commands[*]}" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine_docker_machine() {
|
||||
if [[ " ${wants_file[*]} " =~ " ${prev} " ]]; then
|
||||
_filedir
|
||||
elif [[ " ${wants_dir[*]} " =~ " ${prev} " ]]; then
|
||||
_filedir -d
|
||||
elif [[ "${cur}" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "${flags[*]} ${wants_dir[*]} ${wants_file[*]}" -- "${cur}"))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "${commands[*]}" -- "${cur}"))
|
||||
fi
|
||||
}
|
||||
|
||||
_docker_machine() {
|
||||
COMPREPLY=()
|
||||
local commands=(active config create env inspect ip kill ls regenerate-certs restart rm ssh scp start status stop upgrade url version help)
|
||||
|
||||
local flags=(--debug --native-ssh --github-api-token --bugsnag-api-token --help --version)
|
||||
local wants_dir=(--storage-path)
|
||||
local wants_file=(--tls-ca-cert --tls-ca-key --tls-client-cert --tls-client-key)
|
||||
|
||||
# Add the use subcommand, if we have an alias loaded
|
||||
if [[ ${DOCKER_MACHINE_WRAPPED} = true ]]; then
|
||||
commands=("${commands[@]}" use)
|
||||
fi
|
||||
|
||||
local cur prev words cword
|
||||
_get_comp_words_by_ref -n : cur prev words cword
|
||||
local i
|
||||
local command=docker-machine
|
||||
|
||||
for (( i=1; i < ${cword}; ++i)); do
|
||||
local word=${words[i]}
|
||||
if [[ " ${wants_file[*]} ${wants_dir[*]} " =~ " ${word} " ]]; then
|
||||
# skip the next option
|
||||
(( ++i ))
|
||||
elif [[ " ${commands[*]} " =~ " ${word} " ]]; then
|
||||
command=${word}
|
||||
fi
|
||||
done
|
||||
|
||||
local completion_func=_docker_machine_"${command//-/_}"
|
||||
if declare -F "${completion_func}" > /dev/null; then
|
||||
${completion_func}
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _docker_machine docker-machine
|
2965
completions/docker.completion.sh
Normal file
2965
completions/docker.completion.sh
Normal file
File diff suppressed because it is too large
Load Diff
37
completions/drush.completion.sh
Normal file
37
completions/drush.completion.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# bash completion support for Drush:
|
||||
# https://github.com/drush-ops/drush
|
||||
#
|
||||
# Originally from:
|
||||
# http://github.com/drush-ops/drush/blob/master/drush.complete.sh
|
||||
|
||||
# Ensure drush is available.
|
||||
which drush &> /dev/null || alias drush &> /dev/null || return
|
||||
|
||||
__drush_ps1() {
|
||||
f="${TMPDIR:-/tmp/}/drush-env/drush-drupal-site-$$"
|
||||
if [ -f $f ]
|
||||
then
|
||||
__DRUPAL_SITE=$(cat "$f")
|
||||
else
|
||||
__DRUPAL_SITE="$DRUPAL_SITE"
|
||||
fi
|
||||
|
||||
[[ -n "$__DRUPAL_SITE" ]] && printf "${1:- (%s)}" "$__DRUPAL_SITE"
|
||||
}
|
||||
|
||||
# Completion function, uses the "drush complete" command to retrieve
|
||||
# completions for a specific command line COMP_WORDS.
|
||||
_drush_completion() {
|
||||
# Set IFS to newline (locally), since we only use newline separators, and
|
||||
# need to retain spaces (or not) after completions.
|
||||
local IFS=$'\n'
|
||||
# The '< /dev/null' is a work around for a bug in php libedit stdin handling.
|
||||
# Note that libedit in place of libreadline in some distributions. See:
|
||||
# https://bugs.launchpad.net/ubuntu/+source/php5/+bug/322214
|
||||
COMPREPLY=( $(drush --early=includes/complete.inc "${COMP_WORDS[@]}" < /dev/null 2> /dev/null) )
|
||||
}
|
||||
|
||||
# Register our completion function. We include common short aliases for Drush.
|
||||
complete -o bashdefault -o default -o nospace -F _drush_completion d dr drush drush5 drush6 drush6 drush.php
|
133
completions/fabric-completion.sh
Normal file
133
completions/fabric-completion.sh
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Bash completion support for Fabric (http://fabfile.org/)
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2011 by Konstantin Bakulin
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
# Thanks to:
|
||||
# - Adam Vandenberg,
|
||||
# https://github.com/adamv/dotfiles/blob/master/completion_scripts/fab_completion.bash
|
||||
#
|
||||
# - Enrico Batista da Luz,
|
||||
# https://github.com/ricobl/dotfiles/blob/master/bin/fab_bash_completion
|
||||
#
|
||||
|
||||
|
||||
# Use cache files for fab tasks or not.
|
||||
# If set to "false" command "fab --shortlist" will be executed every time.
|
||||
export FAB_COMPLETION_CACHE_TASKS=true
|
||||
|
||||
# File name where tasks cache will be stored (in current dir).
|
||||
export FAB_COMPLETION_CACHED_TASKS_FILENAME=".fab_tasks~"
|
||||
|
||||
|
||||
# Set command to get time of last file modification as seconds since Epoch
|
||||
case `uname` in
|
||||
Darwin|FreeBSD)
|
||||
__FAB_COMPLETION_MTIME_COMMAND="stat -f '%m'"
|
||||
;;
|
||||
*)
|
||||
__FAB_COMPLETION_MTIME_COMMAND="stat -c '%Y'"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
#
|
||||
# Get time of last fab cache file modification as seconds since Epoch
|
||||
#
|
||||
function __fab_chache_mtime() {
|
||||
${__FAB_COMPLETION_MTIME_COMMAND} \
|
||||
$FAB_COMPLETION_CACHED_TASKS_FILENAME | xargs -n 1 expr
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Get time of last fabfile file/module modification as seconds since Epoch
|
||||
#
|
||||
function __fab_fabfile_mtime() {
|
||||
local f="fabfile"
|
||||
if [[ -e "$f.py" ]]; then
|
||||
${__FAB_COMPLETION_MTIME_COMMAND} "$f.py" | xargs -n 1 expr
|
||||
else
|
||||
# Suppose that it's a fabfile dir
|
||||
find $f/*.py -exec ${__FAB_COMPLETION_MTIME_COMMAND} {} + \
|
||||
| xargs -n 1 expr | sort -n -r | head -1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Completion for "fab" command
|
||||
#
|
||||
function __fab_completion() {
|
||||
# Return if "fab" command doesn't exists
|
||||
[[ -e `which fab 2> /dev/null` ]] || return 0
|
||||
|
||||
# Variables to hold the current word and possible matches
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
local opts=()
|
||||
|
||||
# Generate possible matches and store them in variable "opts"
|
||||
case "${cur}" in
|
||||
-*)
|
||||
if [[ -z "${__FAB_COMPLETION_LONG_OPT}" ]]; then
|
||||
export __FAB_COMPLETION_LONG_OPT=$(
|
||||
fab --help | egrep -o "\-\-[A-Za-z_\-]+\=?" | sort -u)
|
||||
fi
|
||||
opts="${__FAB_COMPLETION_LONG_OPT}"
|
||||
;;
|
||||
|
||||
# Completion for short options is not nessary.
|
||||
# It's left here just for history.
|
||||
# -*)
|
||||
# if [[ -z "${__FAB_COMPLETION_SHORT_OPT}" ]]; then
|
||||
# export __FAB_COMPLETION_SHORT_OPT=$(
|
||||
# fab --help | egrep -o "^ +\-[A-Za-z_\]" | sort -u)
|
||||
# fi
|
||||
# opts="${__FAB_COMPLETION_SHORT_OPT}"
|
||||
# ;;
|
||||
|
||||
*)
|
||||
# If "fabfile.py" or "fabfile" dir with "__init__.py" file exists
|
||||
local f="fabfile"
|
||||
if [[ -e "$f.py" || (-d "$f" && -e "$f/__init__.py") ]]; then
|
||||
# Build a list of the available tasks
|
||||
if $FAB_COMPLETION_CACHE_TASKS; then
|
||||
# If use cache
|
||||
if [[ ! -s ${FAB_COMPLETION_CACHED_TASKS_FILENAME} ||
|
||||
$(__fab_fabfile_mtime) -gt $(__fab_chache_mtime) ]]; then
|
||||
fab --shortlist > ${FAB_COMPLETION_CACHED_TASKS_FILENAME} \
|
||||
2> /dev/null
|
||||
fi
|
||||
opts=$(cat ${FAB_COMPLETION_CACHED_TASKS_FILENAME})
|
||||
else
|
||||
# Without cache
|
||||
opts=$(fab --shortlist 2> /dev/null)
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Set possible completions
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
}
|
||||
complete -o default -o nospace -F __fab_completion fab
|
41
completions/gem.completion.sh
Normal file
41
completions/gem.completion.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# Completion for gem
|
||||
|
||||
_installcomp() {
|
||||
if [ -z "$REMOTE_GEMS" ]
|
||||
then
|
||||
REMOTE_GEMS=( $(gem list --remote --no-versions | tr '\n' ' ') )
|
||||
fi
|
||||
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
COMPREPLY=( $(compgen -W "${REMOTE_GEMS[*]}" -- $cur) )
|
||||
}
|
||||
|
||||
_uninstallcomp() {
|
||||
if [ -z "$LOCAL_GEMS" ]
|
||||
then
|
||||
LOCAL_GEMS=( $(gem list --no-versions | sed 's/\*\*\* LOCAL GEMS \*\*\*//' | tr '\n' ' ') )
|
||||
fi
|
||||
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
COMPREPLY=( $(compgen -W "${LOCAL_GEMS[*]}" -- $cur) )
|
||||
}
|
||||
|
||||
_gem() {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
local prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
case $prev in
|
||||
install)
|
||||
_installcomp
|
||||
return 0
|
||||
;;
|
||||
uninstall)
|
||||
_uninstallcomp
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
local commands=(build cert check cleanup contents dependency environment fetch generate_index help install list lock outdated owner pristine push query rdoc search server sources specification stale uninstall unpack update which)
|
||||
COMPREPLY=( $(compgen -W "${commands[*]}" -- $cur) )
|
||||
}
|
||||
|
||||
complete -F _gem gem
|
366
completions/gh.completion.sh
Normal file
366
completions/gh.completion.sh
Normal file
@@ -0,0 +1,366 @@
|
||||
# hub tab-completion script for bash.
|
||||
# This script complements the completion script that ships with git.
|
||||
|
||||
# Check that git tab completion is available
|
||||
if declare -F _git > /dev/null; then
|
||||
# Duplicate and rename the 'list_all_commands' function
|
||||
eval "$(declare -f __git_list_all_commands | \
|
||||
sed 's/__git_list_all_commands/__git_list_all_commands_without_hub/')"
|
||||
|
||||
# Wrap the 'list_all_commands' function with extra hub commands
|
||||
__git_list_all_commands() {
|
||||
cat <<-EOF
|
||||
alias
|
||||
pull-request
|
||||
fork
|
||||
create
|
||||
browse
|
||||
compare
|
||||
ci-status
|
||||
release
|
||||
issue
|
||||
update
|
||||
EOF
|
||||
__git_list_all_commands_without_hub
|
||||
}
|
||||
|
||||
# Ensure cached commands are cleared
|
||||
__git_all_commands=""
|
||||
|
||||
##########################
|
||||
# hub command completions
|
||||
##########################
|
||||
|
||||
# hub alias [-s] [SHELL]
|
||||
_git_alias() {
|
||||
local i c=2 s=-s sh shells="bash zsh sh ksh csh fish"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-s)
|
||||
unset s
|
||||
;;
|
||||
*)
|
||||
for sh in $shells; do
|
||||
if [ "$sh" = "$i" ]; then
|
||||
unset shells
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
__gitcomp "$s $shells"
|
||||
}
|
||||
|
||||
# hub browse [-u] [--|[USER/]REPOSITORY] [SUBPAGE]
|
||||
_git_browse() {
|
||||
local i c=2 u=-u repo subpage
|
||||
local subpages_="commits issues tree wiki pulls branches stargazers
|
||||
contributors network network/ graphs graphs/"
|
||||
local subpages_network="members"
|
||||
local subpages_graphs="commit-activity code-frequency punch-card"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-u)
|
||||
unset u
|
||||
;;
|
||||
*)
|
||||
if [ -z "$repo" ]; then
|
||||
repo=$i
|
||||
else
|
||||
subpage=$i
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -z "$repo" ]; then
|
||||
__gitcomp "$u -- $(__hub_github_repos '\p')"
|
||||
elif [ -z "$subpage" ]; then
|
||||
case "$cur" in
|
||||
*/*)
|
||||
local pfx="${cur%/*}" cur_="${cur#*/}"
|
||||
local subpages_var="subpages_$pfx"
|
||||
__gitcomp "${!subpages_var}" "$pfx/" "$cur_"
|
||||
;;
|
||||
*)
|
||||
__gitcomp "$u ${subpages_}"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
__gitcomp "$u"
|
||||
fi
|
||||
}
|
||||
|
||||
# hub compare [-u] [USER[/REPOSITORY]] [[START...]END]
|
||||
_git_compare() {
|
||||
local i c=$((cword - 1)) u=-u user remote owner repo arg_repo rev
|
||||
while [ $c -gt 1 ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-u)
|
||||
unset u
|
||||
;;
|
||||
*)
|
||||
if [ -z "$rev" ]; then
|
||||
# Even though the logic below is able to complete both user/repo
|
||||
# and revision in the right place, when there is only one argument
|
||||
# (other than -u) in the command, that argument will be taken as
|
||||
# revision. For example:
|
||||
# $ hub compare -u upstream
|
||||
# > https://github.com/USER/REPO/compare/upstream
|
||||
if __hub_github_repos '\p' | grep -Eqx "^$i(/[^/]+)?"; then
|
||||
arg_repo=$i
|
||||
else
|
||||
rev=$i
|
||||
fi
|
||||
elif [ -z "$arg_repo" ]; then
|
||||
arg_repo=$i
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
((c--))
|
||||
done
|
||||
|
||||
# Here we want to find out the git remote name of user/repo, in order to
|
||||
# generate an appropriate revision list
|
||||
if [ -z "$arg_repo" ]; then
|
||||
user=$(__hub_github_user)
|
||||
if [ -z "$user" ]; then
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
if [ "$remote" = origin ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
owner=${repo%%/*}
|
||||
if [ "$user" = "$owner" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
else
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
owner=${repo%%/*}
|
||||
case "$arg_repo" in
|
||||
"$repo"|"$owner")
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
local pfx cur_="$cur"
|
||||
case "$cur_" in
|
||||
*..*)
|
||||
pfx="${cur_%%..*}..."
|
||||
cur_="${cur_##*..}"
|
||||
__gitcomp_nl "$(__hub_revlist $remote)" "$pfx" "$cur_"
|
||||
;;
|
||||
*)
|
||||
if [ -z "${arg_repo}${rev}" ]; then
|
||||
__gitcomp "$u $(__hub_github_repos '\o\n\p') $(__hub_revlist $remote)"
|
||||
elif [ -z "$rev" ]; then
|
||||
__gitcomp "$u $(__hub_revlist $remote)"
|
||||
else
|
||||
__gitcomp "$u"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# hub create [NAME] [-p] [-d DESCRIPTION] [-h HOMEPAGE]
|
||||
_git_create() {
|
||||
local i c=2 name repo flags="-p -d -h"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-d|-h)
|
||||
((c++))
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
-p)
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
*)
|
||||
name=$i
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -z "$name" ]; then
|
||||
repo=$(basename "$(pwd)")
|
||||
fi
|
||||
case "$prev" in
|
||||
-d|-h)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
-p|*)
|
||||
__gitcomp "$repo $flags"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# hub fork [--no-remote]
|
||||
_git_fork() {
|
||||
local i c=2 remote=yes
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
--no-remote)
|
||||
unset remote
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -n "$remote" ]; then
|
||||
__gitcomp "--no-remote"
|
||||
fi
|
||||
}
|
||||
|
||||
# hub pull-request [-f] [-m <MESSAGE>|-F <FILE>|-i <ISSUE>|<ISSUE-URL>] [-b <BASE>] [-h <HEAD>]
|
||||
_git_pull_request() {
|
||||
local i c=2 flags="-f -m -F -i -b -h"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-m|-F|-i|-b|-h)
|
||||
((c++))
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
-f)
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
case "$prev" in
|
||||
-i)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
-b|-h)
|
||||
# (Doesn't seem to need this...)
|
||||
# Uncomment the following line when 'owner/repo:[TAB]' misbehaved
|
||||
#_get_comp_words_by_ref -n : cur
|
||||
__gitcomp_nl "$(__hub_heads)"
|
||||
# __ltrim_colon_completions "$cur"
|
||||
;;
|
||||
-F)
|
||||
COMPREPLY=( "$cur"* )
|
||||
;;
|
||||
-f|*)
|
||||
__gitcomp "$flags"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
###################
|
||||
# Helper functions
|
||||
###################
|
||||
|
||||
# __hub_github_user [HOST]
|
||||
# Return $GITHUB_USER or the default github user defined in hub config
|
||||
# HOST - Host to be looked-up in hub config. Default is "github.com"
|
||||
__hub_github_user() {
|
||||
if [ -n "$GITHUB_USER" ]; then
|
||||
echo $GITHUB_USER
|
||||
return
|
||||
fi
|
||||
local line h k v host=${1:-github.com} config=${HUB_CONFIG:-~/.config/gh}
|
||||
if [ -f "$config" ]; then
|
||||
while read line; do
|
||||
if [ "$line" = "---" ]; then
|
||||
continue
|
||||
fi
|
||||
k=${line%%:*}
|
||||
v=${line#*:}
|
||||
if [ -z "$v" ]; then
|
||||
if [ "$h" = "$host" ]; then
|
||||
break
|
||||
fi
|
||||
h=$k
|
||||
continue
|
||||
fi
|
||||
k=${k#* }
|
||||
v=${v#* }
|
||||
if [ "$h" = "$host" ] && [ "$k" = "user" ]; then
|
||||
echo "$v"
|
||||
break
|
||||
fi
|
||||
done < "$config"
|
||||
fi
|
||||
}
|
||||
|
||||
# __hub_github_repos [FORMAT]
|
||||
# List all github hosted repository
|
||||
# FORMAT - Format string contains multiple of these:
|
||||
# \m remote
|
||||
# \p owner/repo
|
||||
# \o owner
|
||||
# escaped characters (\n, \t ...etc) work
|
||||
# If omitted, prints all github repos in the format of "remote:owner/repo"
|
||||
__hub_github_repos() {
|
||||
local f format=$1
|
||||
if [ -z "$(__gitdir)" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -z "$format" ]; then
|
||||
format='\1:\2'
|
||||
else
|
||||
format=${format//\m/\1}
|
||||
format=${format//\p/\2}
|
||||
format=${format//\o/\3}
|
||||
fi
|
||||
command git config --get-regexp 'remote\.[^.]*\.url' |
|
||||
grep -E ' ((https?|git)://|git@)github\.com[:/][^:/]+/[^/]+$' |
|
||||
sed -E 's#^remote\.([^.]+)\.url +.+[:/](([^/]+)/[^.]+)(\.git)?$#'"$format"'#'
|
||||
}
|
||||
|
||||
# __hub_heads
|
||||
# List all local "branch", and remote "owner/repo:branch"
|
||||
__hub_heads() {
|
||||
local i remote repo branch dir=$(__gitdir)
|
||||
if [ -d "$dir" ]; then
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/heads/"
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/remotes/${remote}/" | while read branch; do
|
||||
echo "${repo}:${branch#${remote}/}"
|
||||
done
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# __hub_revlist [REMOTE]
|
||||
# List all tags, and branches under REMOTE, without the "remote/" prefix
|
||||
# REMOTE - Remote name to search branches from. Default is "origin"
|
||||
__hub_revlist() {
|
||||
local i remote=${1:-origin} dir=$(__gitdir)
|
||||
if [ -d "$dir" ]; then
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/remotes/${remote}/" | while read i; do
|
||||
echo "${i#${remote}/}"
|
||||
done
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/tags/"
|
||||
fi
|
||||
}
|
||||
|
||||
# Enable completion for hub even when not using the alias
|
||||
complete -o bashdefault -o default -o nospace -F _git gh 2>/dev/null \
|
||||
|| complete -o default -o nospace -F _git gh
|
||||
fi
|
||||
|
2776
completions/git.completion.sh
Normal file
2776
completions/git.completion.sh
Normal file
File diff suppressed because it is too large
Load Diff
177
completions/git_flow.completion.sh
Normal file
177
completions/git_flow.completion.sh
Normal file
@@ -0,0 +1,177 @@
|
||||
#!bash
|
||||
#
|
||||
# git-flow-completion
|
||||
# ===================
|
||||
#
|
||||
# Bash completion support for [git-flow](http://github.com/nvie/gitflow)
|
||||
#
|
||||
# The contained completion routines provide support for completing:
|
||||
#
|
||||
# * git-flow init and version
|
||||
# * feature, hotfix and release branches
|
||||
# * remote feature branch names (for `git-flow feature track`)
|
||||
#
|
||||
#
|
||||
# Installation
|
||||
# ------------
|
||||
#
|
||||
# To achieve git-flow completion nirvana:
|
||||
#
|
||||
# 0. Install git-completion.
|
||||
#
|
||||
# 1. Install this file. Either:
|
||||
#
|
||||
# a. Place it in a `bash-completion.d` folder:
|
||||
#
|
||||
# * /etc/bash-completion.d
|
||||
# * /usr/local/etc/bash-completion.d
|
||||
# * ~/bash-completion.d
|
||||
#
|
||||
# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in
|
||||
# your .bashrc:
|
||||
#
|
||||
# source ~/.git-flow-completion.sh
|
||||
#
|
||||
# 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant
|
||||
# $command case in _git:
|
||||
#
|
||||
# flow) _git_flow ;;
|
||||
#
|
||||
#
|
||||
# The Fine Print
|
||||
# --------------
|
||||
#
|
||||
# Copyright (c) 2010 [Justin Hileman](http://justinhileman.com)
|
||||
#
|
||||
# Distributed under the [MIT License](http://creativecommons.org/licenses/MIT/)
|
||||
|
||||
_git_flow ()
|
||||
{
|
||||
local subcommands="init feature release hotfix"
|
||||
local subcommand="$(__git_find_subcommand "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
feature)
|
||||
__git_flow_feature
|
||||
return
|
||||
;;
|
||||
release)
|
||||
__git_flow_release
|
||||
return
|
||||
;;
|
||||
hotfix)
|
||||
__git_flow_hotfix
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_feature ()
|
||||
{
|
||||
local subcommands="list start finish publish track diff rebase checkout pull"
|
||||
local subcommand="$(__git_find_subcommand "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
pull)
|
||||
__gitcomp "$(__git_remotes)"
|
||||
return
|
||||
;;
|
||||
checkout|finish|diff|rebase)
|
||||
__gitcomp "$(__git_flow_list_features)"
|
||||
return
|
||||
;;
|
||||
publish)
|
||||
__gitcomp "$(comm -23 <(__git_flow_list_features) <(__git_flow_list_remote_features))"
|
||||
return
|
||||
;;
|
||||
track)
|
||||
__gitcomp "$(__git_flow_list_remote_features)"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_list_features ()
|
||||
{
|
||||
git flow feature list 2> /dev/null | tr -d ' |*'
|
||||
}
|
||||
|
||||
__git_flow_list_remote_features ()
|
||||
{
|
||||
git branch -r 2> /dev/null | grep "origin/$(__git_flow_feature_prefix)" | awk '{ sub(/^origin\/$(__git_flow_feature_prefix)/, "", $1); print }'
|
||||
}
|
||||
|
||||
__git_flow_feature_prefix ()
|
||||
{
|
||||
git config gitflow.prefix.feature 2> /dev/null || echo "feature/"
|
||||
}
|
||||
|
||||
__git_flow_release ()
|
||||
{
|
||||
local subcommands="list start finish"
|
||||
local subcommand="$(__git_find_subcommand "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
finish)
|
||||
__gitcomp "$(__git_flow_list_releases)"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
__git_flow_list_releases ()
|
||||
{
|
||||
git flow release list 2> /dev/null
|
||||
}
|
||||
|
||||
__git_flow_hotfix ()
|
||||
{
|
||||
local subcommands="list start finish"
|
||||
local subcommand="$(__git_find_subcommand "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
finish)
|
||||
__gitcomp "$(__git_flow_list_hotfixes)"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_list_hotfixes ()
|
||||
{
|
||||
git flow hotfix list 2> /dev/null
|
||||
}
|
||||
|
||||
# temporarily wrap __git_find_on_cmdline() for backwards compatibility
|
||||
if [ -z "`type -t __git_find_subcommand`" ]; then
|
||||
alias __git_find_subcommand=__git_find_on_cmdline
|
||||
fi
|
510
completions/git_flow_avh.completion.sh
Normal file
510
completions/git_flow_avh.completion.sh
Normal file
@@ -0,0 +1,510 @@
|
||||
#!bash
|
||||
#
|
||||
# git-flow-completion
|
||||
# ===================
|
||||
#
|
||||
# Bash completion support for [git-flow (AVH Edition)](http://github.com/petervanderdoes/gitflow)
|
||||
#
|
||||
# The contained completion routines provide support for completing:
|
||||
#
|
||||
# * git-flow init and version
|
||||
# * feature, hotfix and release branches
|
||||
# * remote feature, hotfix and release branch names
|
||||
#
|
||||
#
|
||||
# Installation
|
||||
# ------------
|
||||
#
|
||||
# To achieve git-flow completion nirvana:
|
||||
#
|
||||
# 0. Install git-completion.
|
||||
#
|
||||
# 1. Install this file. Either:
|
||||
#
|
||||
# a. Place it in a `bash-completion.d` folder:
|
||||
#
|
||||
# * /etc/bash-completion.d
|
||||
# * /usr/local/etc/bash-completion.d
|
||||
# * ~/bash-completion.d
|
||||
#
|
||||
# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in
|
||||
# your .bashrc:
|
||||
#
|
||||
# source ~/.git-flow-completion.sh
|
||||
#
|
||||
# 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant
|
||||
# $command case in _git:
|
||||
#
|
||||
# flow) _git_flow ;;
|
||||
#
|
||||
#
|
||||
# The Fine Print
|
||||
# --------------
|
||||
#
|
||||
# Author:
|
||||
# Copyright 2012-2013 Peter van der Does.
|
||||
#
|
||||
# Original Author:
|
||||
# Copyright (c) 2011 [Justin Hileman](http://justinhileman.com)
|
||||
#
|
||||
# Distributed under the [MIT License](http://creativecommons.org/licenses/MIT/)
|
||||
|
||||
__git_flow_config_file_options="
|
||||
--local --global --system --file=
|
||||
"
|
||||
|
||||
_git_flow ()
|
||||
{
|
||||
local subcommands="init feature release hotfix support help version config finish delete publish rebase"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
init)
|
||||
__git_flow_init
|
||||
return
|
||||
;;
|
||||
feature)
|
||||
__git_flow_feature
|
||||
return
|
||||
;;
|
||||
release)
|
||||
__git_flow_release
|
||||
return
|
||||
;;
|
||||
hotfix)
|
||||
__git_flow_hotfix
|
||||
return
|
||||
;;
|
||||
support)
|
||||
__git_flow_support
|
||||
return
|
||||
;;
|
||||
config)
|
||||
__git_flow_config
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_init ()
|
||||
{
|
||||
local subcommands="help"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
fi
|
||||
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nodefaults --defaults
|
||||
--noforce --force
|
||||
$__git_flow_config_file_options
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_feature ()
|
||||
{
|
||||
local subcommands="list start finish publish track diff rebase checkout pull help delete"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
pull)
|
||||
__gitcomp_nl "$(__git_remotes)"
|
||||
return
|
||||
;;
|
||||
checkout)
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
delete)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--noforce --force
|
||||
--noremote --remote
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
finish)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
--norebase --rebase
|
||||
--nopreserve-merges --preserve-merges
|
||||
--nokeep --keep
|
||||
--keepremote
|
||||
--keeplocal
|
||||
--noforce_delete --force_delete
|
||||
--nosquash --squash
|
||||
--no-ff
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
diff)
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
rebase)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nointeractive --interactive
|
||||
--nopreserve-merges --preserve-merges
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
publish)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
track)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'feature')"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_release ()
|
||||
{
|
||||
local subcommands="list start finish track publish help delete"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
finish)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
--sign
|
||||
--signingkey
|
||||
--message
|
||||
--nomessagefile --messagefile=
|
||||
--nopush --push
|
||||
--nokeep --keep
|
||||
--keepremote
|
||||
--keeplocal
|
||||
--noforce_delete --force_delete
|
||||
--notag --tag
|
||||
--nonobackmerge --nobackmerge
|
||||
--nosquash --squash
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'release')"
|
||||
return
|
||||
;;
|
||||
rebase)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nointeractive --interactive
|
||||
--nopreserve-merges --preserve-merges
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'release')"
|
||||
return
|
||||
;;
|
||||
delete)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--noforce --force
|
||||
--noremote --remote
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'release')"
|
||||
return
|
||||
;;
|
||||
publish)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'release')"
|
||||
return
|
||||
;;
|
||||
track)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'release')"
|
||||
return
|
||||
;;
|
||||
start)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
__git_flow_hotfix ()
|
||||
{
|
||||
local subcommands="list start finish track publish help delete"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
finish)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
--sign
|
||||
--signingkey
|
||||
--message
|
||||
--nomessagefile --messagefile=
|
||||
--nopush --push
|
||||
--nokeep --keep
|
||||
--keepremote
|
||||
--keeplocal
|
||||
--noforce_delete --force_delete
|
||||
--notag --tag
|
||||
--nonobackmerge --nobackmerge
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'hotfix')"
|
||||
return
|
||||
;;
|
||||
rebase)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nointeractive --interactive
|
||||
--nopreserve-merges --preserve-merges
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'hotfix')"
|
||||
return
|
||||
;;
|
||||
delete)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--noforce --force
|
||||
--noremote --remote
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'hotfix')"
|
||||
return
|
||||
;;
|
||||
publish)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'hotfix')"
|
||||
return
|
||||
;;
|
||||
track)
|
||||
__gitcomp_nl "$(__git_flow_list_branches 'hotfix')"
|
||||
return
|
||||
;;
|
||||
start)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_support ()
|
||||
{
|
||||
local subcommands="list start help"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
start)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nofetch --fetch
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
return
|
||||
;;
|
||||
rebase)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
--nointeractive --interactive
|
||||
--nopreserve-merges --preserve-merges
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches 'support')"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_config ()
|
||||
{
|
||||
local subcommands="list set base"
|
||||
local subcommand="$(__git_find_on_cmdline "$subcommands")"
|
||||
if [ -z "$subcommand" ]; then
|
||||
__gitcomp "$subcommands"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$subcommand" in
|
||||
set)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
$__git_flow_config_file_options
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp "
|
||||
master develop
|
||||
feature hotfix release support
|
||||
versiontagprefix
|
||||
"
|
||||
return
|
||||
;;
|
||||
base)
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "
|
||||
set get
|
||||
"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
__gitcomp_nl "$(__git_flow_list_local_branches)"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_prefix ()
|
||||
{
|
||||
case "$1" in
|
||||
feature|release|hotfix|support)
|
||||
git config "gitflow.prefix.$1" 2> /dev/null || echo "$1/"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__git_flow_list_local_branches ()
|
||||
{
|
||||
if [ -n "$1" ]; then
|
||||
local prefix="$(__git_flow_prefix $1)"
|
||||
git for-each-ref --shell --format="ref=%(refname:short)" refs/heads/$prefix | \
|
||||
while read -r entry; do
|
||||
eval "$entry"
|
||||
ref="${ref#$prefix}"
|
||||
echo "$ref"
|
||||
done | sort
|
||||
else
|
||||
git for-each-ref --format="ref=%(refname:short)" refs/heads/ | sort
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
__git_flow_list_remote_branches ()
|
||||
{
|
||||
local prefix="$(__git_flow_prefix $1)"
|
||||
local origin="$(git config gitflow.origin 2> /dev/null || echo "origin")"
|
||||
git for-each-ref --shell --format='%(refname:short)' refs/remotes/$origin/$prefix | \
|
||||
while read -r entry; do
|
||||
eval "$entry"
|
||||
ref="${ref##$prefix}"
|
||||
echo "$ref"
|
||||
done | sort
|
||||
}
|
||||
|
||||
__git_flow_list_branches ()
|
||||
{
|
||||
local origin="$(git config gitflow.origin 2> /dev/null || echo "origin")"
|
||||
if [ -n "$1" ]; then
|
||||
local prefix="$(__git_flow_prefix $1)"
|
||||
git for-each-ref --shell --format="ref=%(refname:short)" refs/heads/$prefix refs/remotes/$origin/$prefix | \
|
||||
while read -r entry; do
|
||||
eval "$entry"
|
||||
ref="${ref##$prefix}"
|
||||
echo "$ref"
|
||||
done | sort
|
||||
else
|
||||
git for-each-ref --format="%(refname:short)" refs/heads/ refs/remotes/$origin | sort
|
||||
fi
|
||||
}
|
||||
|
||||
# alias __git_find_on_cmdline for backwards compatibility
|
||||
if [ -z "`type -t __git_find_on_cmdline`" ]; then
|
||||
alias __git_find_on_cmdline=__git_find_subcommand
|
||||
fi
|
281
completions/go.completion.sh
Normal file
281
completions/go.completion.sh
Normal file
@@ -0,0 +1,281 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# bash completion for go tool
|
||||
# https://github.com/thomasf/go-bash-completion
|
||||
|
||||
# install in /etc/bash_completion.d/ or your personal directory
|
||||
|
||||
complete -f -X '!*.8' 8l
|
||||
complete -f -X '!*.6' 6l
|
||||
complete -f -X '!*.5' 5l
|
||||
complete -f -X '!*.go' 8g 6g 5g gofmt gccgo
|
||||
|
||||
_go_clear_cache() {
|
||||
unset _go_imports
|
||||
}
|
||||
_go_importpath_cache() {
|
||||
if [ -z "$_go_imports" ]; then
|
||||
_go_imports=$(go list all 2>/dev/null)
|
||||
export _go_imports
|
||||
fi
|
||||
}
|
||||
|
||||
_go_importpath()
|
||||
{
|
||||
echo "$(compgen -W "$_go_imports" -- "$1")"
|
||||
}
|
||||
|
||||
_go()
|
||||
{
|
||||
# TODO: Only allow flags before other arguments. run already does
|
||||
# this.
|
||||
|
||||
local cur=`_get_cword`
|
||||
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
local cmd="${COMP_WORDS[1]}"
|
||||
|
||||
local cmds="build clean doc env fix fmt get
|
||||
install list run test tool version vet"
|
||||
local addhelp="gopath importpath remote
|
||||
testflag testfunc"
|
||||
local other="help"
|
||||
local env_vars="GOARCH GOBIN GOEXE GOHOSTARCH GOHOSTOS GOOS GOPATH GORACE
|
||||
GOROOT GOTOOLDIR GO15VENDOREXPERIMENT CC GOGCCFLAGS CXX CGO_ENABLED"
|
||||
|
||||
if [ "$COMP_CWORD" == 1 ]; then
|
||||
for opt in $cmds; do
|
||||
if [[ "$opt" == "$cmd" ]]; then
|
||||
COMPREPLY=("$opt")
|
||||
return
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
case "$cmd" in
|
||||
'build')
|
||||
case "$prev" in
|
||||
'-o')
|
||||
_filedir
|
||||
;;
|
||||
'-p')
|
||||
;;
|
||||
*)
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-a -n -o -p -v -x" -- "$cur"))
|
||||
else
|
||||
local found=0
|
||||
for ((i=0; i < ${#COMP_WORDS[@]}; i++)); do
|
||||
case "$i" in
|
||||
0|1|"$COMP_CWORD")
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
local opt="${COMP_WORDS[i]}"
|
||||
if [[ "$opt" != -* ]]; then
|
||||
if [[ "$opt" == *.go && -f "$opt" ]]; then
|
||||
found=1
|
||||
break
|
||||
else
|
||||
found=2
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
case "$found" in
|
||||
0)
|
||||
_filedir go
|
||||
_go_importpath_cache
|
||||
COMPREPLY+=(`_go_importpath "$cur"`)
|
||||
;;
|
||||
1)
|
||||
_filedir go
|
||||
;;
|
||||
2)
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'clean')
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-i -r -n -x" -- "$cur"))
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
'doc')
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
;;
|
||||
'env')
|
||||
COMPREPLY=($(compgen -W "$env_vars" -- "$cur"))
|
||||
;;
|
||||
'fix')
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
;;
|
||||
'fmt')
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
;;
|
||||
'get')
|
||||
case "$prev" in
|
||||
'-p')
|
||||
;;
|
||||
*)
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-a -d -fix -n -p -u -v -x" -- "$cur"))
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'install')
|
||||
case "$prev" in
|
||||
'-p')
|
||||
;;
|
||||
*)
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-a -n -p -v -x" -- "$cur"))
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'list')
|
||||
case "$prev" in
|
||||
'-f')
|
||||
;;
|
||||
*)
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-e -f -json" -- "$cur"))
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'run')
|
||||
if [[ "$cur" == -* && "$prev" != *.go ]]; then
|
||||
COMPREPLY=($(compgen -W "-a -n -x" -- "$cur"))
|
||||
else
|
||||
_filedir
|
||||
fi
|
||||
;;
|
||||
'test') # TODO: Support for testflags.
|
||||
case "$prev" in
|
||||
'-file')
|
||||
_filedir go
|
||||
;;
|
||||
'-p')
|
||||
;;
|
||||
*)
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "-c -file -i -p -x" -- "$cur"))
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'tool')
|
||||
if [ "$COMP_CWORD" == 2 ]; then
|
||||
COMPREPLY=($(compgen -W "$(go tool)" -- "$cur"))
|
||||
else
|
||||
case "${COMP_WORDS[2]}" in
|
||||
[568]a) # TODO: Implement something.
|
||||
#_go_tool_568a
|
||||
;;
|
||||
[568]c) # TODO: Implement something.
|
||||
#_go_tool_568c
|
||||
;;
|
||||
[568]g) # TODO: Implement something.
|
||||
#_go_tool_568g
|
||||
;;
|
||||
[568]l) # TODO: Implement something.
|
||||
#_go_tool_568l
|
||||
;;
|
||||
'api') # TODO: Implement something.
|
||||
#_go_tool_api
|
||||
;;
|
||||
'cgo') # TODO: Implement something.
|
||||
#_go_tool_cgo
|
||||
;;
|
||||
'cov') # TODO: Implement something.
|
||||
#_go_tool_cov
|
||||
;;
|
||||
'dist') # TODO: Implement something.
|
||||
#_go_tool_dist
|
||||
;;
|
||||
'ebnflint') # TODO: Implement something.
|
||||
#_go_tool_ebnflint
|
||||
;;
|
||||
'fix') # TODO: Implement something.
|
||||
#_go_tool_fix
|
||||
;;
|
||||
'gotype') # TODO: Implement something.
|
||||
#_go_tool_gotype
|
||||
;;
|
||||
'nm') # TODO: Implement something.
|
||||
#_go_tool_nm
|
||||
;;
|
||||
'pack') # TODO: Implement something.
|
||||
#_go_tool_pack
|
||||
;;
|
||||
'pprof') # TODO: Implement something.
|
||||
#_go_tool_pprof
|
||||
;;
|
||||
'prof') # TODO: Implement something.
|
||||
#_go_tool_prof
|
||||
;;
|
||||
'vet') # TODO: Implement something.
|
||||
#_go_tool_vet
|
||||
;;
|
||||
'yacc') # TODO: Implement something.
|
||||
#_go_tool_yacc
|
||||
;;
|
||||
esac
|
||||
if [[ "$cur" == -* ]]; then
|
||||
COMPREPLY=($(compgen -W "${COMPREPLY[*]} -h" -- "$cur"))
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
'version')
|
||||
;;
|
||||
'vet')
|
||||
if [[ "$cur" == -* ]]; then
|
||||
:
|
||||
else
|
||||
_go_importpath_cache
|
||||
COMPREPLY=(`_go_importpath "$cur"`)
|
||||
fi
|
||||
;;
|
||||
'help')
|
||||
if [ "$COMP_CWORD" == 2 ]; then
|
||||
COMPREPLY=($(compgen -W "$cmds $addhelp" -- "$cur"))
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [ "$COMP_CWORD" == 1 ]; then
|
||||
COMPREPLY=($(compgen -W "$cmds $other" -- "$cur"))
|
||||
else
|
||||
_filedir
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
complete $filenames -F _go go
|
||||
|
||||
# vim:ts=2 sw=2 et syn=sh
|
50
completions/gradle.completion.sh
Normal file
50
completions/gradle.completion.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
function __gradle {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
local tasks=''
|
||||
local cache_dir="$HOME/.gradle/completion_cache"
|
||||
|
||||
case $OSTYPE in
|
||||
darwin*)
|
||||
local checksum_command="find . -name build.gradle -print0 | xargs -0 md5 -q | md5 -q"
|
||||
;;
|
||||
*)
|
||||
local checksum_command="find . -name build.gradle -print0 | xargs -0 md5sum | md5sum | cut -d ' ' -f 1"
|
||||
;;
|
||||
esac
|
||||
local parsing_command="gradle --console=plain --quiet tasks | grep -v Rules | sed -nE -e 's/^([a-zA-Z]+)($| - .+)/\1/p'"
|
||||
|
||||
mkdir -p "${cache_dir}"
|
||||
|
||||
local gradle_files_checksum='no_cache_file'
|
||||
if [[ -f build.gradle ]]; then
|
||||
gradle_files_checksum="$(eval "${checksum_command}")"
|
||||
if [[ -f "${cache_dir}/${gradle_files_checksum}" ]]; then
|
||||
newest_gradle_file="$(find . -type f -name build.gradle -newer "${cache_dir}/${gradle_files_checksum}")"
|
||||
if [ -n "${newest_gradle_file}" ]; then
|
||||
tasks="$(eval "${parsing_command}")"
|
||||
[[ -n "${tasks}" ]] && echo "${tasks}" > "${cache_dir}/${gradle_files_checksum}"
|
||||
else
|
||||
tasks="$(cat "${cache_dir}/${gradle_files_checksum}")"
|
||||
touch "${cache_dir}/${gradle_files_checksum}"
|
||||
fi
|
||||
else
|
||||
tasks="$(eval "${parsing_command}")"
|
||||
[[ -n "${tasks}" ]] && echo "${tasks}" > "${cache_dir}/${gradle_files_checksum}"
|
||||
fi
|
||||
else
|
||||
tasks="$(eval "${parsing_command}")"
|
||||
[[ -n "${tasks}" ]] && echo "${tasks}" > "${cache_dir}/${gradle_files_checksum}"
|
||||
fi
|
||||
COMPREPLY=( $(compgen -W "${tasks}" -- "${cur}") )
|
||||
}
|
||||
|
||||
function __clear_gradle_cache {
|
||||
local cache_dir="$HOME/.gradle/completion_cache"
|
||||
[[ -d "${cache_dir}" ]] && find "${cache_dir}" -type f -mtime +7 -exec rm -f {} \;
|
||||
}
|
||||
|
||||
__clear_gradle_cache
|
||||
|
||||
complete -F __gradle gradle
|
||||
complete -F __gradle gradlew
|
||||
complete -F __gradle ./gradlew
|
49
completions/grunt.completion.sh
Normal file
49
completions/grunt.completion.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
# grunt-cli
|
||||
# http://gruntjs.com/
|
||||
#
|
||||
# Copyright (c) 2012 Tyler Kellen, contributors
|
||||
# Licensed under the MIT license.
|
||||
# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||
|
||||
# Usage:
|
||||
#
|
||||
# To enable bash <tab> completion for grunt, add the following line (minus the
|
||||
# leading #, which is the bash comment character) to your ~/.bashrc file:
|
||||
#
|
||||
# eval "$(grunt --completion=bash)"
|
||||
|
||||
# Search the current directory and all parent directories for a gruntfile.
|
||||
function _grunt_gruntfile() {
|
||||
local curpath="$PWD"
|
||||
while [[ "$curpath" ]]; do
|
||||
for gruntfile in "$curpath/"{G,g}runtfile.{js,coffee}; do
|
||||
if [[ -e "$gruntfile" ]]; then
|
||||
echo "$gruntfile"
|
||||
return
|
||||
fi
|
||||
done
|
||||
curpath="${curpath%/*}"
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# Enable bash autocompletion.
|
||||
function _grunt_completions() {
|
||||
# The currently-being-completed word.
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
# The current gruntfile, if it exists.
|
||||
local gruntfile="$(_grunt_gruntfile)"
|
||||
# The current grunt version, available tasks, options, etc.
|
||||
local gruntinfo="$(grunt --version --verbose 2>/dev/null)"
|
||||
# Options and tasks.
|
||||
local opts="$(echo "$gruntinfo" | awk '/Available options: / {$1=$2=""; print $0}')"
|
||||
local compls="$(echo "$gruntinfo" | awk '/Available tasks: / {$1=$2=""; print $0}')"
|
||||
# Only add -- or - options if the user has started typing -
|
||||
[[ "$cur" == -* ]] && compls="$compls $opts"
|
||||
# Tell complete what stuff to show.
|
||||
COMPREPLY=($(compgen -W "$compls" -- "$cur"))
|
||||
}
|
||||
|
||||
complete -o default -F _grunt_completions grunt
|
23
completions/gulp.completion.sh
Normal file
23
completions/gulp.completion.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# Borrowed from grunt-cli
|
||||
# http://gruntjs.com/
|
||||
#
|
||||
# Copyright (c) 2012 Tyler Kellen, contributors
|
||||
# Licensed under the MIT license.
|
||||
# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||
# Usage:
|
||||
#
|
||||
# To enable bash <tab> completion for gulp, add the following line (minus the
|
||||
# leading #, which is the bash comment character) to your ~/.bashrc file:
|
||||
#
|
||||
# eval "$(gulp --completion=bash)"
|
||||
# Enable bash autocompletion.
|
||||
function _gulp_completions() {
|
||||
# The currently-being-completed word.
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
#Grab tasks
|
||||
local compls=$(gulp --tasks-simple)
|
||||
# Tell complete what stuff to show.
|
||||
COMPREPLY=($(compgen -W "$compls" -- "$cur"))
|
||||
}
|
||||
complete -o default -F _gulp_completions gulp
|
60
completions/homesick.completion.sh
Normal file
60
completions/homesick.completion.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
# Bash completion script for homesick
|
||||
#
|
||||
# The homebrew bash completion script was used as inspiration.
|
||||
# Originally from https://github.com/liborw/homesick-completion
|
||||
|
||||
_homesick_complete()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
local options="--skip --force --pretend --quiet"
|
||||
local actions="cd clone commit destroy diff generate help list open pull push rc show_path status symlink track unlink version"
|
||||
local repos=$(\ls ~/.homesick/repos)
|
||||
|
||||
# Subcommand list
|
||||
[[ ${COMP_CWORD} -eq 1 ]] && {
|
||||
COMPREPLY=( $(compgen -W "${options} ${actions}" -- ${cur}) )
|
||||
return
|
||||
}
|
||||
|
||||
# Find the first non-switch word
|
||||
local prev_index=1
|
||||
local prev="${COMP_WORDS[prev_index]}"
|
||||
while [[ $prev == -* ]]; do
|
||||
prev_index=$((++prev_index))
|
||||
prev="${COMP_WORDS[prev_index]}"
|
||||
done
|
||||
|
||||
# Find the number of non-"--" commands
|
||||
local num=0
|
||||
for word in ${COMP_WORDS[@]}
|
||||
do
|
||||
if [[ $word != -* ]]; then
|
||||
num=$((++num))
|
||||
fi
|
||||
done
|
||||
|
||||
case "$prev" in
|
||||
# Commands that take a castle
|
||||
cd|commit|destroy|diff|open|pull|push|rc|show_path|status|symlink|unlink)
|
||||
COMPREPLY=( $(compgen -W "${repos}" -- ${cur}) )
|
||||
return
|
||||
;;
|
||||
# Commands that take command
|
||||
help)
|
||||
COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) )
|
||||
return
|
||||
;;
|
||||
# Track command take file and repo
|
||||
track)
|
||||
if [[ "$num" -eq 2 ]]; then
|
||||
COMPREPLY=( $(compgen -X -f ${cur}) )
|
||||
elif [[ "$num" -ge 3 ]]; then
|
||||
COMPREPLY=( $(compgen -W "${repos}" -- ${cur}) )
|
||||
fi
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
complete -o bashdefault -o default -F _homesick_complete homesick
|
||||
|
367
completions/hub.completion.sh
Normal file
367
completions/hub.completion.sh
Normal file
@@ -0,0 +1,367 @@
|
||||
# hub tab-completion script for bash.
|
||||
# This script complements the completion script that ships with git.
|
||||
|
||||
# If there is no git tab completion, but we have the _completion loader try to load it
|
||||
if ! declare -F _git > /dev/null && declare -F _completion_loader > /dev/null; then
|
||||
_completion_loader git
|
||||
fi
|
||||
|
||||
# Check that git tab completion is available
|
||||
if declare -F _git > /dev/null; then
|
||||
# Duplicate and rename the 'list_all_commands' function
|
||||
eval "$(declare -f __git_list_all_commands | \
|
||||
sed 's/__git_list_all_commands/__git_list_all_commands_without_hub/')"
|
||||
|
||||
# Wrap the 'list_all_commands' function with extra hub commands
|
||||
__git_list_all_commands() {
|
||||
cat <<-EOF
|
||||
alias
|
||||
pull-request
|
||||
fork
|
||||
create
|
||||
browse
|
||||
compare
|
||||
ci-status
|
||||
EOF
|
||||
__git_list_all_commands_without_hub
|
||||
}
|
||||
|
||||
# Ensure cached commands are cleared
|
||||
__git_all_commands=""
|
||||
|
||||
##########################
|
||||
# hub command completions
|
||||
##########################
|
||||
|
||||
# hub alias [-s] [SHELL]
|
||||
_git_alias() {
|
||||
local i c=2 s=-s sh shells="bash zsh sh ksh csh fish"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-s)
|
||||
unset s
|
||||
;;
|
||||
*)
|
||||
for sh in $shells; do
|
||||
if [ "$sh" = "$i" ]; then
|
||||
unset shells
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
__gitcomp "$s $shells"
|
||||
}
|
||||
|
||||
# hub browse [-u] [--|[USER/]REPOSITORY] [SUBPAGE]
|
||||
_git_browse() {
|
||||
local i c=2 u=-u repo subpage
|
||||
local subpages_="commits issues tree wiki pulls branches stargazers
|
||||
contributors network network/ graphs graphs/"
|
||||
local subpages_network="members"
|
||||
local subpages_graphs="commit-activity code-frequency punch-card"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-u)
|
||||
unset u
|
||||
;;
|
||||
*)
|
||||
if [ -z "$repo" ]; then
|
||||
repo=$i
|
||||
else
|
||||
subpage=$i
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -z "$repo" ]; then
|
||||
__gitcomp "$u -- $(__hub_github_repos '\p')"
|
||||
elif [ -z "$subpage" ]; then
|
||||
case "$cur" in
|
||||
*/*)
|
||||
local pfx="${cur%/*}" cur_="${cur#*/}"
|
||||
local subpages_var="subpages_$pfx"
|
||||
__gitcomp "${!subpages_var}" "$pfx/" "$cur_"
|
||||
;;
|
||||
*)
|
||||
__gitcomp "$u ${subpages_}"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
__gitcomp "$u"
|
||||
fi
|
||||
}
|
||||
|
||||
# hub compare [-u] [USER[/REPOSITORY]] [[START...]END]
|
||||
_git_compare() {
|
||||
local i c=$((cword - 1)) u=-u user remote owner repo arg_repo rev
|
||||
while [ $c -gt 1 ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-u)
|
||||
unset u
|
||||
;;
|
||||
*)
|
||||
if [ -z "$rev" ]; then
|
||||
# Even though the logic below is able to complete both user/repo
|
||||
# and revision in the right place, when there is only one argument
|
||||
# (other than -u) in the command, that argument will be taken as
|
||||
# revision. For example:
|
||||
# $ hub compare -u upstream
|
||||
# > https://github.com/USER/REPO/compare/upstream
|
||||
if __hub_github_repos '\p' | grep -Eqx "^$i(/[^/]+)?"; then
|
||||
arg_repo=$i
|
||||
else
|
||||
rev=$i
|
||||
fi
|
||||
elif [ -z "$arg_repo" ]; then
|
||||
arg_repo=$i
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
((c--))
|
||||
done
|
||||
|
||||
# Here we want to find out the git remote name of user/repo, in order to
|
||||
# generate an appropriate revision list
|
||||
if [ -z "$arg_repo" ]; then
|
||||
user=$(__hub_github_user)
|
||||
if [ -z "$user" ]; then
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
if [ "$remote" = origin ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
owner=${repo%%/*}
|
||||
if [ "$user" = "$owner" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
else
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
owner=${repo%%/*}
|
||||
case "$arg_repo" in
|
||||
"$repo"|"$owner")
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
local pfx cur_="$cur"
|
||||
case "$cur_" in
|
||||
*..*)
|
||||
pfx="${cur_%%..*}..."
|
||||
cur_="${cur_##*..}"
|
||||
__gitcomp_nl "$(__hub_revlist $remote)" "$pfx" "$cur_"
|
||||
;;
|
||||
*)
|
||||
if [ -z "${arg_repo}${rev}" ]; then
|
||||
__gitcomp "$u $(__hub_github_repos '\o\n\p') $(__hub_revlist $remote)"
|
||||
elif [ -z "$rev" ]; then
|
||||
__gitcomp "$u $(__hub_revlist $remote)"
|
||||
else
|
||||
__gitcomp "$u"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# hub create [NAME] [-p] [-d DESCRIPTION] [-h HOMEPAGE]
|
||||
_git_create() {
|
||||
local i c=2 name repo flags="-p -d -h"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-d|-h)
|
||||
((c++))
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
-p)
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
*)
|
||||
name=$i
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -z "$name" ]; then
|
||||
repo=$(basename "$(pwd)")
|
||||
fi
|
||||
case "$prev" in
|
||||
-d|-h)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
-p|*)
|
||||
__gitcomp "$repo $flags"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# hub fork [--no-remote]
|
||||
_git_fork() {
|
||||
local i c=2 remote=yes
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
--no-remote)
|
||||
unset remote
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
if [ -n "$remote" ]; then
|
||||
__gitcomp "--no-remote"
|
||||
fi
|
||||
}
|
||||
|
||||
# hub pull-request [-f] [-m <MESSAGE>|-F <FILE>|-i <ISSUE>|<ISSUE-URL>] [-b <BASE>] [-h <HEAD>] [-a <USER>] [-M <MILESTONE>] [-l <LABELS>]
|
||||
_git_pull_request() {
|
||||
local i c=2 flags="-f -m -F -i -b -h -a -M -l"
|
||||
while [ $c -lt $cword ]; do
|
||||
i="${words[c]}"
|
||||
case "$i" in
|
||||
-m|-F|-i|-b|-h|-a|-M|-l)
|
||||
((c++))
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
-f)
|
||||
flags=${flags/$i/}
|
||||
;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
case "$prev" in
|
||||
-i)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
-b|-h|-a|-M|-l)
|
||||
# (Doesn't seem to need this...)
|
||||
# Uncomment the following line when 'owner/repo:[TAB]' misbehaved
|
||||
#_get_comp_words_by_ref -n : cur
|
||||
__gitcomp_nl "$(__hub_heads)"
|
||||
# __ltrim_colon_completions "$cur"
|
||||
;;
|
||||
-F)
|
||||
COMPREPLY=( "$cur"* )
|
||||
;;
|
||||
-f|*)
|
||||
__gitcomp "$flags"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
###################
|
||||
# Helper functions
|
||||
###################
|
||||
|
||||
# __hub_github_user [HOST]
|
||||
# Return $GITHUB_USER or the default github user defined in hub config
|
||||
# HOST - Host to be looked-up in hub config. Default is "github.com"
|
||||
__hub_github_user() {
|
||||
if [ -n "$GITHUB_USER" ]; then
|
||||
echo $GITHUB_USER
|
||||
return
|
||||
fi
|
||||
local line h k v host=${1:-github.com} config=${HUB_CONFIG:-~/.config/hub}
|
||||
if [ -f "$config" ]; then
|
||||
while read line; do
|
||||
if [ "$line" = "---" ]; then
|
||||
continue
|
||||
fi
|
||||
k=${line%%:*}
|
||||
v=${line#*:}
|
||||
if [ -z "$v" ]; then
|
||||
if [ "$h" = "$host" ]; then
|
||||
break
|
||||
fi
|
||||
h=$k
|
||||
continue
|
||||
fi
|
||||
k=${k#* }
|
||||
v=${v#* }
|
||||
if [ "$h" = "$host" ] && [ "$k" = "user" ]; then
|
||||
echo "$v"
|
||||
break
|
||||
fi
|
||||
done < "$config"
|
||||
fi
|
||||
}
|
||||
|
||||
# __hub_github_repos [FORMAT]
|
||||
# List all github hosted repository
|
||||
# FORMAT - Format string contains multiple of these:
|
||||
# \m remote
|
||||
# \p owner/repo
|
||||
# \o owner
|
||||
# escaped characters (\n, \t ...etc) work
|
||||
# If omitted, prints all github repos in the format of "remote:owner/repo"
|
||||
__hub_github_repos() {
|
||||
local f format=$1
|
||||
if [ -z "$(__gitdir)" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -z "$format" ]; then
|
||||
format='\1:\2'
|
||||
else
|
||||
format=${format//\m/\1}
|
||||
format=${format//\p/\2}
|
||||
format=${format//\o/\3}
|
||||
fi
|
||||
command git config --get-regexp 'remote\.[^.]*\.url' |
|
||||
grep -E ' ((https?|git)://|git@)github\.com[:/][^:/]+/[^/]+$' |
|
||||
sed -E 's#^remote\.([^.]+)\.url +.+[:/](([^/]+)/[^.]+)(\.git)?$#'"$format"'#'
|
||||
}
|
||||
|
||||
# __hub_heads
|
||||
# List all local "branch", and remote "owner/repo:branch"
|
||||
__hub_heads() {
|
||||
local i remote repo branch dir=$(__gitdir)
|
||||
if [ -d "$dir" ]; then
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/heads/"
|
||||
for i in $(__hub_github_repos); do
|
||||
remote=${i%%:*}
|
||||
repo=${i#*:}
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/remotes/${remote}/" | while read branch; do
|
||||
echo "${repo}:${branch#${remote}/}"
|
||||
done
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# __hub_revlist [REMOTE]
|
||||
# List all tags, and branches under REMOTE, without the "remote/" prefix
|
||||
# REMOTE - Remote name to search branches from. Default is "origin"
|
||||
__hub_revlist() {
|
||||
local i remote=${1:-origin} dir=$(__gitdir)
|
||||
if [ -d "$dir" ]; then
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/remotes/${remote}/" | while read i; do
|
||||
echo "${i#${remote}/}"
|
||||
done
|
||||
command git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
|
||||
"refs/tags/"
|
||||
fi
|
||||
}
|
||||
|
||||
# Enable completion for hub even when not using the alias
|
||||
complete -o bashdefault -o default -o nospace -F _git hub 2>/dev/null \
|
||||
|| complete -o default -o nospace -F _git hub
|
||||
fi
|
141
completions/jboss7.completion.sh
Normal file
141
completions/jboss7.completion.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
# Completions for JBoss Application Server 7 (EAP 6)
|
||||
# VERSION: 0.6
|
||||
# DATE: 2012-10-30
|
||||
# rparree-at-edc4it-dot-com
|
||||
|
||||
|
||||
|
||||
|
||||
_serverProfiles(){
|
||||
if [[ $COMP_WORDS == *standalone.sh* ]]
|
||||
then
|
||||
serverdir="../standalone/configuration/"
|
||||
else
|
||||
# assume is domain.sh
|
||||
serverdir="../domain/configuration/"
|
||||
fi
|
||||
|
||||
for i in ${!COMP_WORDS[*]}
|
||||
do
|
||||
if [[ "${COMP_WORDS[i]}" == "-Djboss.server.base.dir" || "${COMP_WORDS[i]}" == "-Djboss.domain.base.dir" ]]; then
|
||||
serverdir="${COMP_WORDS[i+2]}/configuration"
|
||||
fi
|
||||
|
||||
done
|
||||
if [ -d "${serverdir}" ]
|
||||
then
|
||||
|
||||
IFS=$'\n' tmp="$(ls "${serverdir}" | grep xml)"
|
||||
local fls="${tmp[@]// /\ }"
|
||||
unset IFS
|
||||
COMPREPLY=( $(compgen -W "${fls} initial boot last v" -- "$cur" ))
|
||||
fi
|
||||
}
|
||||
|
||||
_bindingAddress(){
|
||||
# from /etc/bash_completion.d/ssh
|
||||
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \
|
||||
"0.0.0.0 $( PATH="$PATH:/sbin" ifconfig -a | \
|
||||
sed -ne 's/.*addr:\([^[:space:]]*\).*/\1/p' \
|
||||
-ne 's/.*inet[[:space:]]\{1,\}\([^[:space:]]*\).*/\1/p' )" \
|
||||
-- "$cur" ) )
|
||||
}
|
||||
|
||||
_jboss(){
|
||||
|
||||
local cur prev words cword
|
||||
COMPREPLY=()
|
||||
_get_comp_words_by_ref -n = cur prev words cword
|
||||
|
||||
case $cur in
|
||||
|
||||
-Djboss.socket.binding.port-offset=*)
|
||||
cur=${cur#*=}
|
||||
#static list of common bindings sets
|
||||
local bindings="100 200 300 400 10000 20000 30000 40000"
|
||||
COMPREPLY=( $(compgen -W "${bindings}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
-Djboss.default.jgroups.stack=*)
|
||||
cur=${cur#*=}
|
||||
#static list of standard JGroups stacks
|
||||
local stacks="udp udp-async udp-sync tcp tcp-sync"
|
||||
COMPREPLY=( $(compgen -W "${stacks}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
|
||||
-Dorg.jboss.ejb3.remoting.IsLocalInterceptor.passByRef=*|-Dcom.sun.management.jmxremote.authenticate=*|-Dcom.sun.management.jmxremote.ssl=*)
|
||||
cur=${cur#*=}
|
||||
local booleans="true false"
|
||||
COMPREPLY=( $(compgen -W "${booleans}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
|
||||
-Djboss.server.base.dir=*|-Djboss.home.dir=*|-Djboss.domain.base.dir=*)
|
||||
cur=${cur#*=}
|
||||
_filedir -d
|
||||
return 0
|
||||
;;
|
||||
|
||||
-Djboss.domain.master.address=*|-Djboss.bind.address*=*)
|
||||
cur=${cur#*=}
|
||||
_bindingAddress
|
||||
return 0
|
||||
;;
|
||||
--server-config=*|-c=|--host-config=*)
|
||||
cur=${cur#*=}
|
||||
_serverProfiles
|
||||
return 0
|
||||
|
||||
|
||||
esac
|
||||
|
||||
|
||||
case $prev in
|
||||
-u)
|
||||
# a few from RFC 2365 IPv4 Local Scope ()
|
||||
local addresses="239.255.0.1 239.255.0.2 239.255.0.3"
|
||||
COMPREPLY=( $(compgen -W "${addresses}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
-b*)
|
||||
_bindingAddress
|
||||
return 0
|
||||
;;
|
||||
-c)
|
||||
_serverProfiles
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
# *** from jboss5 ********************
|
||||
# *** -modulepath -c -m -g -l -d -p -n -B -L -C -Djboss.platform.mbeanserver -Djboss.server.base.directory
|
||||
# *** -Djboss.Domain -Djboss.modcluster.proxyList -Djboss.jvmRoute -Djboss.default.jgroups.stack -Dorg.jboss.ejb3.remoting.IsLocalInterceptor.passByRef -Djboss.platform.mbeanserver -Dcom.sun.management.jmxremote.port -Dcom.sun.management.jmxremote.ssl
|
||||
# *************************************
|
||||
|
||||
# standard commands for standalone and domain mode
|
||||
local commandsWithoutEqualSign='-b -bmanagement -bunsecure -bpublic --admin-only -h -help -u -version -V -v'
|
||||
local commandsWithEqualSign='-P -Djboss.node.name -Djboss.home.dir -Djboss.socket.binding.port-offset -Djboss.bind.address.management -Djboss.bind.address -Djboss.bind.address.unsecure'
|
||||
|
||||
if [[ $COMP_WORDS == *standalone.sh* ]]
|
||||
then
|
||||
commandsWithoutEqualSign="${commandsWithoutEqualSign} -c"
|
||||
commandsWithEqualSign="${commandsWithEqualSign} --server-config -Djboss.server.base.dir -c"
|
||||
else
|
||||
# assume is domain.sh
|
||||
commandsWithoutEqualSign="${commandsWithoutEqualSign} --backup --cached-dc"
|
||||
commandsWithEqualSign="${commandsWithEqualSign} -Djboss.domain.master.address --host-config -Djboss.domain.master.port -Djboss.domain.base.dir "
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
COMPREPLY=( $( compgen -W "$commandsWithoutEqualSign" -- "$cur" )
|
||||
$( compgen -W "$commandsWithEqualSign" -S '=' -- "$cur" ) )
|
||||
return 0
|
||||
|
||||
|
||||
}
|
||||
complete -o nospace -F _jboss standalone.sh
|
||||
complete -o nospace -F _jboss domain.sh
|
1
completions/jungle.completion.sh
Normal file
1
completions/jungle.completion.sh
Normal file
@@ -0,0 +1 @@
|
||||
[[ -x "$(which jungle)" ]] &>/dev/null && eval "$(_JUNGLE_COMPLETE=source jungle)"
|
1
completions/kontena.completion.sh
Normal file
1
completions/kontena.completion.sh
Normal file
@@ -0,0 +1 @@
|
||||
which kontena &> /dev/null && . "$( kontena whoami --bash-completion-path )"
|
8
completions/kubectl.completion.sh
Normal file
8
completions/kubectl.completion.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# kubectl (Kubernetes CLI) completion
|
||||
|
||||
if command -v kubectl &>/dev/null
|
||||
then
|
||||
eval "$(kubectl completion bash)"
|
||||
fi
|
3
completions/makefile.completion.sh
Normal file
3
completions/makefile.completion.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
# Add completion for Makefile
|
||||
# see http://stackoverflow.com/a/38415982/1472048
|
||||
complete -W "\`grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' Makefile | sed 's/[^a-zA-Z0-9_-]*$//'\`" make
|
36
completions/maven.completion.sh
Normal file
36
completions/maven.completion.sh
Normal file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash Maven completion
|
||||
|
||||
_mvn()
|
||||
{
|
||||
local cmds cur colonprefixes
|
||||
cmds="clean validate compile test package integration-test \
|
||||
verify install deploy test-compile site generate-sources \
|
||||
process-sources generate-resources process-resources \
|
||||
eclipse:eclipse eclipse:add-maven-repo eclipse:clean \
|
||||
idea:idea -DartifactId= -DgroupId= -Dmaven.test.skip=true \
|
||||
-Declipse.workspace= -DarchetypeArtifactId= \
|
||||
netbeans-freeform:generate-netbeans-project \
|
||||
tomcat:run tomcat:run-war tomcat:deploy jboss-as:deploy \
|
||||
versions:display-dependency-updates \
|
||||
versions:display-plugin-updates dependency:analyze \
|
||||
dependency:analyze-dep-mgt dependency:resolve \
|
||||
dependency:sources dependency:tree release:prepare \
|
||||
release:rollback release:perform --batch-mode"
|
||||
|
||||
COMPREPLY=()
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
# Work-around bash_completion issue where bash interprets a colon
|
||||
# as a separator.
|
||||
# Work-around borrowed from the darcs work-around for the same
|
||||
# issue.
|
||||
colonprefixes=${cur%"${cur##*:}"}
|
||||
COMPREPLY=( $(compgen -W '$cmds' -- $cur))
|
||||
local i=${#COMPREPLY[*]}
|
||||
while [ $((--i)) -ge 0 ]; do
|
||||
COMPREPLY[$i]=${COMPREPLY[$i]#"$colonprefixes"}
|
||||
done
|
||||
|
||||
return 0
|
||||
} &&
|
||||
complete -F _mvn mvn
|
9
completions/npm.completion.sh
Normal file
9
completions/npm.completion.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# npm (Node Package Manager) completion
|
||||
# https://docs.npmjs.com/cli/completion
|
||||
|
||||
if command -v npm &>/dev/null
|
||||
then
|
||||
eval "$(npm completion)"
|
||||
fi
|
8
completions/nvm.completion.sh
Normal file
8
completions/nvm.completion.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# nvm (Node Version Manager) completion
|
||||
|
||||
if [ "$NVM_DIR" ] && [ -r "$NVM_DIR"/bash_completion ];
|
||||
then
|
||||
. "$NVM_DIR"/bash_completion
|
||||
fi
|
164
completions/packer.completion.sh
Normal file
164
completions/packer.completion.sh
Normal file
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Packer (http://www.packer.io) bash completion
|
||||
#
|
||||
# This script provides bash completion for packer and supports:
|
||||
#
|
||||
# - template filename completion (*.json) in cwd
|
||||
# - support for basic options (i.e.. -debug)
|
||||
# - support for complex options (i.e. -parallel=[true|false]
|
||||
#
|
||||
# The scirpt has been successfully tested with packer-0.6.0 and the
|
||||
# following OS:
|
||||
#
|
||||
# - OS X 10.9
|
||||
# - CentOS-6.5
|
||||
# - Ubuntu 12.04 Server
|
||||
#
|
||||
# The script technically is heavily inspired by the git-completion.bash
|
||||
# script. Kudos to Shawn O. Pearce <spearce@spearce.org> and all other
|
||||
# contributors for the inspiration and especially to the bash-completion
|
||||
# team in general.
|
||||
#
|
||||
# Copyright (c) 2014 IT Services Department, University of Bern
|
||||
#
|
||||
# This script is licensed under the MIT License (MIT)
|
||||
# For licsense details see the LICENSE file included in the repository
|
||||
# or read the license text at http://opensource.org/licenses/MIT.
|
||||
#
|
||||
|
||||
# Generates completion reply, appending a space to possible completion words,
|
||||
# if necessary.
|
||||
# It accepts 2 arguments though the second is optional:
|
||||
# 1: List of possible completion words.
|
||||
# 2: Generate possible completion matches for this word (optional).
|
||||
__packercomp ()
|
||||
{
|
||||
local cur_="${2-$cur}"
|
||||
|
||||
case "$cur_" in
|
||||
-*=)
|
||||
;;
|
||||
*)
|
||||
local c i=0 IFS=$' \t\n'
|
||||
for c in $1; do
|
||||
if [[ $c == "$cur_"* ]]; then
|
||||
case $c in
|
||||
-*=*|*.) ;;
|
||||
*) c="$c " ;;
|
||||
esac
|
||||
COMPREPLY[i++]="$c"
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Generates completion reply for template files in cwd.
|
||||
__packercomp_template_file ()
|
||||
{
|
||||
local IFS=$'\n'
|
||||
|
||||
COMPREPLY=($(compgen -S " " -A file -X '!*.json' -- "${cur}"))
|
||||
}
|
||||
|
||||
# Generates completion for the build command.
|
||||
__packer_build ()
|
||||
{
|
||||
local builders="
|
||||
amazon-ebs amazon-instance amazon-chroot digitalocean docker
|
||||
googlecompute openstack parallels-iso parallels-pvm qemu
|
||||
virtualbox-iso virtualbox-ovf vmware-iso vmware-vmx"
|
||||
|
||||
case "$cur" in
|
||||
-parallel=*)
|
||||
__packercomp "false true" "${cur##-parallel=}"
|
||||
return
|
||||
;;
|
||||
-except=*)
|
||||
__packercomp "$builders" "${cur##-except=}"
|
||||
return
|
||||
;;
|
||||
-only=*)
|
||||
__packercomp "$builders" "${cur##-only=}"
|
||||
return
|
||||
;;
|
||||
-*)
|
||||
__packercomp "-debug -force -machine-readable -except= -only= -parallel= -var -var-file"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
esac
|
||||
|
||||
__packercomp_template_file
|
||||
}
|
||||
|
||||
# Generates completion for the fix command.
|
||||
__packer_fix ()
|
||||
{
|
||||
__packercomp_template_file
|
||||
}
|
||||
|
||||
# Generates completion for the inspect command.
|
||||
__packer_inspect ()
|
||||
{
|
||||
case "$cur" in
|
||||
-*)
|
||||
__packercomp "-machine-readable"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
esac
|
||||
|
||||
__packercomp_template_file
|
||||
}
|
||||
|
||||
# Generates completion for the validate command.
|
||||
__packer_validate ()
|
||||
{
|
||||
__packercomp_template_file
|
||||
}
|
||||
|
||||
# Main function for packer completion.
|
||||
#
|
||||
# Searches for a command in $COMP_WORDS. If one is found
|
||||
# the appropriate function from above is called, if not
|
||||
# completion for global options is done.
|
||||
_packer_completion ()
|
||||
{
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
# Words containing an equal sign get split into tokens in bash > 4, which
|
||||
# doesn't come in handy here.
|
||||
# This is handled here. bash < 4 does not split.
|
||||
declare -f _get_comp_words_by_ref >/dev/null && _get_comp_words_by_ref -n = cur
|
||||
|
||||
COMPREPLY=()
|
||||
local i c=1 command
|
||||
|
||||
while [ $c -lt $COMP_CWORD ]; do
|
||||
i="${COMP_WORDS[c]}"
|
||||
case "$i" in
|
||||
-*) ;;
|
||||
*) command="$i"; break ;;
|
||||
esac
|
||||
((c++))
|
||||
done
|
||||
|
||||
if [ -z $command ]; then
|
||||
case "$cur" in
|
||||
'-'*)
|
||||
__packercomp "-machine-readable --help --version"
|
||||
;;
|
||||
*)
|
||||
__packercomp "build fix inspect validate"
|
||||
;;
|
||||
esac
|
||||
return
|
||||
fi
|
||||
|
||||
local completion_func="__packer_${command}"
|
||||
declare -f $completion_func >/dev/null && $completion_func
|
||||
}
|
||||
|
||||
complete -o nospace -F _packer_completion packer
|
||||
|
11
completions/pip.completion.sh
Normal file
11
completions/pip.completion.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
# pip bash completion start
|
||||
_pip_completion()
|
||||
{
|
||||
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
|
||||
COMP_CWORD=$COMP_CWORD \
|
||||
PIP_AUTO_COMPLETE=1 $1 ) )
|
||||
}
|
||||
complete -o default -F _pip_completion pip
|
||||
# pip bash completion end
|
||||
|
11
completions/pip3.completion.sh
Normal file
11
completions/pip3.completion.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
# pip bash completion start
|
||||
_pip_completion()
|
||||
{
|
||||
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
|
||||
COMP_CWORD=$COMP_CWORD \
|
||||
PIP_AUTO_COMPLETE=1 $1 ) )
|
||||
}
|
||||
complete -o default -F _pip_completion pip3
|
||||
# pip bash completion end
|
||||
|
39
completions/projects.completion.sh
Normal file
39
completions/projects.completion.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
_pj() {
|
||||
[ -z "$PROJECT_PATHS" ] && return
|
||||
shift
|
||||
[ "$1" == "open" ] && shift
|
||||
|
||||
local cur prev words cword
|
||||
_init_completion || return
|
||||
|
||||
local IFS=$'\n' i j k
|
||||
|
||||
compopt -o filenames
|
||||
|
||||
local -r mark_dirs=$(_rl_enabled mark-directories && echo y)
|
||||
local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y)
|
||||
|
||||
for i in ${PROJECT_PATHS//:/$'\n'}; do
|
||||
# create an array of matched subdirs
|
||||
k="${#COMPREPLY[@]}"
|
||||
for j in $( compgen -d $i/$cur ); do
|
||||
if [[ ( $mark_symdirs && -h $j || $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then
|
||||
j+="/"
|
||||
fi
|
||||
COMPREPLY[k++]=${j#$i/}
|
||||
done
|
||||
done
|
||||
|
||||
if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
|
||||
i=${COMPREPLY[0]}
|
||||
if [[ "$i" == "$cur" && $i != "*/" ]]; then
|
||||
COMPREPLY[0]="${i}/"
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _pj -o nospace pj
|
||||
complete -F _pj -o nospace pjo
|
||||
|
17
completions/rake.completion.sh
Normal file
17
completions/rake.completion.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash completion support for Rake, Ruby Make.
|
||||
|
||||
export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}
|
||||
|
||||
_rakecomplete() {
|
||||
if [ -f Rakefile ]; then
|
||||
recent=`ls -t .rake_tasks~ Rakefile **/*.rake 2> /dev/null | head -n 1`
|
||||
if [[ $recent != '.rake_tasks~' ]]; then
|
||||
rake --silent --tasks | cut -d " " -f 2 > .rake_tasks~
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "`cat .rake_tasks~`" -- ${COMP_WORDS[COMP_CWORD]}))
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _rakecomplete rake
|
329
completions/salt.completion.sh
Normal file
329
completions/salt.completion.sh
Normal file
@@ -0,0 +1,329 @@
|
||||
# written by David Pravec
|
||||
# - feel free to /msg alekibango on IRC if you want to talk about this file
|
||||
|
||||
# TODO: check if --config|-c was used and use configured config file for queries
|
||||
# TODO: solve somehow completion for salt -G pythonversion:[tab]
|
||||
# (not sure what to do with lists)
|
||||
# TODO: --range[tab] -- how?
|
||||
# TODO: --compound[tab] -- how?
|
||||
# TODO: use history to extract some words, esp. if ${cur} is empty
|
||||
# TODO: TEST EVERYTHING a lot
|
||||
# TODO: cache results of some functions? where? how long?
|
||||
# TODO: is it ok to use '--timeout 2' ?
|
||||
|
||||
|
||||
_salt_get_grains(){
|
||||
if [ "$1" = 'local' ] ; then
|
||||
salt-call --out=txt -- grains.ls | sed 's/^.*\[//' | tr -d ",']" |sed 's:\([a-z0-9]\) :\1\: :g'
|
||||
else
|
||||
salt '*' --timeout 2 --out=txt -- grains.ls | sed 's/^.*\[//' | tr -d ",']" |sed 's:\([a-z0-9]\) :\1\: :g'
|
||||
fi
|
||||
}
|
||||
|
||||
_salt_get_grain_values(){
|
||||
if [ "$1" = 'local' ] ; then
|
||||
salt-call --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$'
|
||||
else
|
||||
salt '*' --timeout 2 --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$'
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
_salt(){
|
||||
local cur prev opts _salt_grains _salt_coms pprev ppprev
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
if [ ${COMP_CWORD} -gt 2 ]; then
|
||||
pprev="${COMP_WORDS[COMP_CWORD-2]}"
|
||||
fi
|
||||
if [ ${COMP_CWORD} -gt 3 ]; then
|
||||
ppprev="${COMP_WORDS[COMP_CWORD-3]}"
|
||||
fi
|
||||
|
||||
opts="-h --help -d --doc --documentation --version --versions-report -c \
|
||||
--config-dir= -v --verbose -t --timeout= -s --static -b --batch= \
|
||||
--batch-size= -E --pcre -L --list -G --grain --grain-pcre -N \
|
||||
--nodegroup -R --range -C --compound -I --pillar \
|
||||
--return= -a --auth= --eauth= --extended-auth= -T --make-token -S \
|
||||
--ipcidr --out=pprint --out=yaml --out=overstatestage --out=json \
|
||||
--out=raw --out=highstate --out=key --out=txt --no-color --out-indent= "
|
||||
|
||||
if [[ "${cur}" == -* ]] ; then
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 2 special cases for filling up grain values
|
||||
case "${pprev}" in
|
||||
-G|--grain|--grain-pcre)
|
||||
if [ "${cur}" = ":" ]; then
|
||||
COMPREPLY=($(compgen -W "`_salt_get_grain_values ${prev}`" ))
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
case "${ppprev}" in
|
||||
-G|--grain|--grain-pcre)
|
||||
if [ "${prev}" = ":" ]; then
|
||||
COMPREPLY=( $(compgen -W "`_salt_get_grain_values ${pprev}`" -- ${cur}) )
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then
|
||||
cur=""
|
||||
fi
|
||||
if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then
|
||||
prev="${pprev}"
|
||||
fi
|
||||
|
||||
case "${prev}" in
|
||||
|
||||
-c|--config)
|
||||
COMPREPLY=($(compgen -f -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
salt)
|
||||
COMPREPLY=($(compgen -W "\'*\' ${opts} `salt-key --no-color -l acc`" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-E|--pcre)
|
||||
COMPREPLY=($(compgen -W "`salt-key --no-color -l acc`" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-G|--grain|--grain-pcre)
|
||||
COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-C|--compound)
|
||||
COMPREPLY=() # TODO: finish this one? how?
|
||||
return 0
|
||||
;;
|
||||
-t|--timeout)
|
||||
COMPREPLY=($( compgen -W "1 2 3 4 5 6 7 8 9 10 15 20 30 40 60 90 120 180" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-b|--batch|--batch-size)
|
||||
COMPREPLY=($(compgen -W "1 2 3 4 5 6 7 8 9 10 15 20 30 40 50 60 70 80 90 100 120 150 200"))
|
||||
return 0
|
||||
;;
|
||||
-N|--nodegroup)
|
||||
MASTER_CONFIG='/etc/salt/master'
|
||||
COMPREPLY=($(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
_salt_coms="$(salt '*' --timeout 2 --out=txt -- sys.list_functions | sed 's/^.*\[//' | tr -d ",']" )"
|
||||
all="${opts} ${_salt_coms}"
|
||||
COMPREPLY=( $(compgen -W "${all}" -- ${cur}) )
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _salt salt
|
||||
|
||||
|
||||
_saltkey(){
|
||||
local cur prev opts prev pprev
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
opts="-c --config-dir= -h --help --version --versions-report -q --quiet \
|
||||
-y --yes --gen-keys= --gen-keys-dir= --keysize= --key-logfile= \
|
||||
-l --list= -L --list-all -a --accept= -A --accept-all \
|
||||
-r --reject= -R --reject-all -p --print= -P --print-all \
|
||||
-d --delete= -D --delete-all -f --finger= -F --finger-all \
|
||||
--out=pprint --out=yaml --out=overstatestage --out=json --out=raw \
|
||||
--out=highstate --out=key --out=txt --no-color --out-indent= "
|
||||
if [ ${COMP_CWORD} -gt 2 ]; then
|
||||
pprev="${COMP_WORDS[COMP_CWORD-2]}"
|
||||
fi
|
||||
if [ ${COMP_CWORD} -gt 3 ]; then
|
||||
ppprev="${COMP_WORDS[COMP_CWORD-3]}"
|
||||
fi
|
||||
if [[ "${cur}" == -* ]] ; then
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then
|
||||
cur=""
|
||||
fi
|
||||
if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then
|
||||
prev="${pprev}"
|
||||
fi
|
||||
|
||||
case "${prev}" in
|
||||
-a|--accept)
|
||||
COMPREPLY=($(compgen -W "$(salt-key -l un --no-color; salt-key -l rej --no-color)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-r|--reject)
|
||||
COMPREPLY=($(compgen -W "$(salt-key -l acc --no-color)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-d|--delete)
|
||||
COMPREPLY=($(compgen -W "$(salt-key -l acc --no-color; salt-key -l un --no-color; salt-key -l rej --no-color)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-c|--config)
|
||||
COMPREPLY=($(compgen -f -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
--keysize)
|
||||
COMPREPLY=($(compgen -W "2048 3072 4096 5120 6144" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
--gen-keys)
|
||||
return 0
|
||||
;;
|
||||
--gen-keys-dir)
|
||||
COMPREPLY=($(compgen -d -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-p|--print)
|
||||
COMPREPLY=($(compgen -W "$(salt-key -l acc --no-color; salt-key -l un --no-color; salt-key -l rej --no-color)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-l|--list)
|
||||
COMPREPLY=($(compgen -W "pre un acc accepted unaccepted rej rejected all" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
--accept-all)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=($(compgen -W "${opts} " -- ${cur}))
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _saltkey salt-key
|
||||
|
||||
_saltcall(){
|
||||
local cur prev opts _salt_coms pprev ppprev
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
opts="-h --help -d --doc --documentation --version --versions-report \
|
||||
-m --module-dirs= -g --grains --return= --local -c --config-dir= -l --log-level= \
|
||||
--out=pprint --out=yaml --out=overstatestage --out=json --out=raw \
|
||||
--out=highstate --out=key --out=txt --no-color --out-indent= "
|
||||
if [ ${COMP_CWORD} -gt 2 ]; then
|
||||
pprev="${COMP_WORDS[COMP_CWORD-2]}"
|
||||
fi
|
||||
if [ ${COMP_CWORD} -gt 3 ]; then
|
||||
ppprev="${COMP_WORDS[COMP_CWORD-3]}"
|
||||
fi
|
||||
if [[ "${cur}" == -* ]] ; then
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "${cur}" = "=" ] && [[ ${prev} == --* ]]; then
|
||||
cur=""
|
||||
fi
|
||||
if [ "${prev}" = "=" ] && [[ ${pprev} == --* ]]; then
|
||||
prev="${pprev}"
|
||||
fi
|
||||
|
||||
case ${prev} in
|
||||
-m|--module-dirs)
|
||||
COMPREPLY=( $(compgen -d ${cur} ))
|
||||
return 0
|
||||
;;
|
||||
-l|--log-level)
|
||||
COMPREPLY=( $(compgen -W "info none garbage trace warning error debug" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-g|grains)
|
||||
return 0
|
||||
;;
|
||||
salt-call)
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
_salt_coms="$(salt-call --out=txt -- sys.list_functions|sed 's/^.*\[//' | tr -d ",']" )"
|
||||
COMPREPLY=( $(compgen -W "${opts} ${_salt_coms}" -- ${cur} ))
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _saltcall salt-call
|
||||
|
||||
|
||||
_saltcp(){
|
||||
local cur prev opts target prefpart postpart helper filt pprev ppprev
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
opts="-t --timeout= -s --static -b --batch= --batch-size= \
|
||||
-h --help --version --versions-report -c --config-dir= \
|
||||
-E --pcre -L --list -G --grain --grain-pcre -N --nodegroup \
|
||||
-R --range -C --compound -I --pillar \
|
||||
--out=pprint --out=yaml --out=overstatestage --out=json --out=raw \
|
||||
--out=highstate --out=key --out=txt --no-color --out-indent= "
|
||||
if [[ "${cur}" == -* ]] ; then
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then
|
||||
cur=""
|
||||
fi
|
||||
if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then
|
||||
prev=${pprev}
|
||||
fi
|
||||
|
||||
case ${prev} in
|
||||
salt-cp)
|
||||
COMPREPLY=($(compgen -W "${opts} `salt-key -l acc --no-color`" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-t|--timeout)
|
||||
# those numbers are just a hint
|
||||
COMPREPLY=($(compgen -W "2 3 4 8 10 15 20 25 30 40 60 90 120 180 240 300" -- ${cur} ))
|
||||
return 0
|
||||
;;
|
||||
-E|--pcre)
|
||||
COMPREPLY=($(compgen -W "`salt-key -l acc --no-color`" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
-L|--list)
|
||||
# IMPROVEMENTS ARE WELCOME
|
||||
prefpart="${cur%,*},"
|
||||
postpart=${cur##*,}
|
||||
filt="^\($(echo ${cur}| sed 's:,:\\|:g')\)$"
|
||||
helper=($(salt-key -l acc --no-color | grep -v "${filt}" | sed "s/^/${prefpart}/"))
|
||||
COMPREPLY=($(compgen -W "${helper[*]}" -- ${cur}))
|
||||
|
||||
return 0
|
||||
;;
|
||||
-G|--grain|--grain-pcre)
|
||||
COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
# FIXME
|
||||
-R|--range)
|
||||
# FIXME ??
|
||||
return 0
|
||||
;;
|
||||
-C|--compound)
|
||||
# FIXME ??
|
||||
return 0
|
||||
;;
|
||||
-c|--config)
|
||||
COMPREPLY=($(compgen -f -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# default is using opts:
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
}
|
||||
|
||||
complete -F _saltcp salt-cp
|
||||
|
61
completions/sdkman.completion.sh
Normal file
61
completions/sdkman.completion.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
_sdkman_complete()
|
||||
{
|
||||
local CANDIDATES
|
||||
local CANDIDATE_VERSIONS
|
||||
|
||||
COMPREPLY=()
|
||||
|
||||
if [ $COMP_CWORD -eq 1 ]; then
|
||||
COMPREPLY=( $(compgen -W "install uninstall rm list ls use current outdated version default selfupdate broadcast offline help flush" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
elif [ $COMP_CWORD -eq 2 ]; then
|
||||
case "${COMP_WORDS[COMP_CWORD-1]}" in
|
||||
"install" | "uninstall" | "rm" | "list" | "ls" | "use" | "current" | "outdated" )
|
||||
CANDIDATES=$(echo "${SDKMAN_CANDIDATES_CSV}" | tr ',' ' ')
|
||||
COMPREPLY=( $(compgen -W "$CANDIDATES" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
;;
|
||||
"offline" )
|
||||
COMPREPLY=( $(compgen -W "enable disable" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
;;
|
||||
"selfupdate" )
|
||||
COMPREPLY=( $(compgen -W "force" -P "[" -S "]" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
;;
|
||||
"flush" )
|
||||
COMPREPLY=( $(compgen -W "candidates broadcast archives temp" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
elif [ $COMP_CWORD -eq 3 ]; then
|
||||
case "${COMP_WORDS[COMP_CWORD-2]}" in
|
||||
"install" | "uninstall" | "rm" | "use" | "default" )
|
||||
_sdkman_candidate_versions ${COMP_WORDS[COMP_CWORD-1]}
|
||||
COMPREPLY=( $(compgen -W "$CANDIDATE_VERSIONS" -- ${COMP_WORDS[COMP_CWORD]}) )
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
_sdkman_candidate_versions(){
|
||||
|
||||
CANDIDATE_LOCAL_VERSIONS=$(__sdkman_cleanup_local_versions $1)
|
||||
if [ "$SDKMAN_OFFLINE_MODE" = "true" ]; then
|
||||
CANDIDATE_VERSIONS=$CANDIDATE_LOCAL_VERSIONS
|
||||
else
|
||||
CANDIDATE_ONLINE_VERSIONS="$(curl -s "${SDKMAN_SERVICE}/candidates/$1" | tr ',' ' ')"
|
||||
CANDIDATE_VERSIONS="$(echo $CANDIDATE_ONLINE_VERSIONS $CANDIDATE_LOCAL_VERSIONS |sort | uniq ) "
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
__sdkman_cleanup_local_versions(){
|
||||
|
||||
__sdkman_build_version_csv $1
|
||||
echo $CSV | tr ',' ' '
|
||||
|
||||
}
|
||||
|
||||
complete -F _sdkman_complete sdk
|
35
completions/ssh.completion.sh
Normal file
35
completions/ssh.completion.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash completion support for ssh.
|
||||
|
||||
export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}
|
||||
|
||||
_sshcomplete() {
|
||||
local CURRENT_PROMPT="${COMP_WORDS[COMP_CWORD]}"
|
||||
if [[ ${CURRENT_PROMPT} == *@* ]] ; then
|
||||
local OPTIONS="-P ${CURRENT_PROMPT/@*/}@ -- ${CURRENT_PROMPT/*@/}"
|
||||
else
|
||||
local OPTIONS=" -- ${CURRENT_PROMPT}"
|
||||
fi
|
||||
|
||||
|
||||
# parse all defined hosts from .ssh/config
|
||||
if [ -r "$HOME/.ssh/config" ]; then
|
||||
COMPREPLY=($(compgen -W "$(grep ^Host "$HOME/.ssh/config" | awk '{for (i=2; i<=NF; i++) print $i}' )" ${OPTIONS}) )
|
||||
fi
|
||||
|
||||
# parse all hosts found in .ssh/known_hosts
|
||||
if [ -r "$HOME/.ssh/known_hosts" ]; then
|
||||
if grep -v -q -e '^ ssh-rsa' "$HOME/.ssh/known_hosts" ; then
|
||||
COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$( awk '{print $1}' "$HOME/.ssh/known_hosts" | grep -v ^\| | cut -d, -f 1 | sed -e 's/\[//g' | sed -e 's/\]//g' | cut -d: -f1 | grep -v ssh-rsa)" ${OPTIONS}) )
|
||||
fi
|
||||
fi
|
||||
|
||||
# parse hosts defined in /etc/hosts
|
||||
if [ -r /etc/hosts ]; then
|
||||
COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$( grep -v '^[[:space:]]*$' /etc/hosts | grep -v '^#' | awk '{for (i=2; i<=NF; i++) print $i}' )" ${OPTIONS}) )
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _sshcomplete ssh scp
|
1514
completions/svn.completion.sh
Normal file
1514
completions/svn.completion.sh
Normal file
File diff suppressed because it is too large
Load Diff
27
completions/system.completion.sh
Normal file
27
completions/system.completion.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Loads the system's Bash completion modules.
|
||||
# If Homebrew is installed (OS X), its Bash completion modules are loaded.
|
||||
|
||||
if [ -f /etc/bash_completion ]; then
|
||||
. /etc/bash_completion
|
||||
fi
|
||||
|
||||
# Some distribution makes use of a profile.d script to import completion.
|
||||
if [ -f /etc/profile.d/bash_completion.sh ]; then
|
||||
. /etc/profile.d/bash_completion.sh
|
||||
fi
|
||||
|
||||
|
||||
if [ $(uname) = "Darwin" ] && command -v brew &>/dev/null ; then
|
||||
BREW_PREFIX=$(brew --prefix)
|
||||
|
||||
if [ -f "$BREW_PREFIX"/etc/bash_completion ]; then
|
||||
. "$BREW_PREFIX"/etc/bash_completion
|
||||
fi
|
||||
|
||||
# homebrew/versions/bash-completion2 (required for projects.completion.bash) is installed to this path
|
||||
if [ -f "$BREW_PREFIX"/share/bash-completion/bash_completion ]; then
|
||||
. "$BREW_PREFIX"/share/bash-completion/bash_completion
|
||||
fi
|
||||
fi
|
26
completions/terraform.completion.sh
Normal file
26
completions/terraform.completion.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Bash Terraform completion
|
||||
|
||||
_terraform()
|
||||
{
|
||||
local cmds cur colonprefixes
|
||||
cmds="apply destroy fmt get graph import init \
|
||||
output plan push refresh remote show taint \
|
||||
untaint validate version state"
|
||||
|
||||
COMPREPLY=()
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
# Work-around bash_completion issue where bash interprets a colon
|
||||
# as a separator.
|
||||
# Work-around borrowed from the darcs work-around for the same
|
||||
# issue.
|
||||
colonprefixes=${cur%"${cur##*:}"}
|
||||
COMPREPLY=( $(compgen -W '$cmds' -- $cur))
|
||||
local i=${#COMPREPLY[*]}
|
||||
while [ $((--i)) -ge 0 ]; do
|
||||
COMPREPLY[$i]=${COMPREPLY[$i]#"$colonprefixes"}
|
||||
done
|
||||
|
||||
return 0
|
||||
} &&
|
||||
complete -F _terraform terraform
|
31
completions/test_kitchen.completion.sh
Normal file
31
completions/test_kitchen.completion.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
__kitchen_instance_list () {
|
||||
# cache to .kitchen.list.yml
|
||||
if [[ .kitchen.yml -nt .kitchen.list.yml || .kitchen.local.yml -nt .kitchen.list.yml ]]; then
|
||||
# update list if config has updated
|
||||
kitchen list --bare > .kitchen.list.yml
|
||||
fi
|
||||
cat .kitchen.list.yml
|
||||
}
|
||||
|
||||
__kitchen_options () {
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
COMPREPLY=()
|
||||
|
||||
case $prev in
|
||||
converge|create|destroy|diagnose|list|login|setup|test|verify)
|
||||
COMPREPLY=( $(compgen -W "$(__kitchen_instance_list)" -- ${cur} ))
|
||||
return 0
|
||||
;;
|
||||
driver)
|
||||
COMPREPLY=( $(compgen -W "create discover help" -- ${cur} ))
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=( $(compgen -W "console converge create destroy driver help init list login setup test verify version" -- ${cur} ))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
complete -F __kitchen_options kitchen
|
||||
|
188
completions/tmux.completion.sh
Normal file
188
completions/tmux.completion.sh
Normal file
@@ -0,0 +1,188 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# tmux completion
|
||||
# See: http://www.debian-administration.org/articles/317 for how to write more.
|
||||
# Usage: Put "source bash_completion_tmux.sh" into your .bashrc
|
||||
# Based upon the example at http://paste-it.appspot.com/Pj4mLycDE
|
||||
|
||||
_tmux_expand ()
|
||||
{
|
||||
[ "$cur" != "${cur%\\}" ] && cur="$cur"'\';
|
||||
if [[ "$cur" == \~*/* ]]; then
|
||||
eval cur=$cur;
|
||||
else
|
||||
if [[ "$cur" == \~* ]]; then
|
||||
cur=${cur#\~};
|
||||
COMPREPLY=($( compgen -P '~' -u $cur ));
|
||||
return ${#COMPREPLY[@]};
|
||||
fi;
|
||||
fi
|
||||
}
|
||||
|
||||
_tmux_filedir ()
|
||||
{
|
||||
local IFS='
|
||||
';
|
||||
_tmux_expand || return 0;
|
||||
if [ "$1" = -d ]; then
|
||||
COMPREPLY=(${COMPREPLY[@]} $( compgen -d -- $cur ));
|
||||
return 0;
|
||||
fi;
|
||||
COMPREPLY=(${COMPREPLY[@]} $( eval compgen -f -- \"$cur\" ))
|
||||
}
|
||||
|
||||
function _tmux_complete_client() {
|
||||
local IFS=$'\n'
|
||||
local cur="${1}"
|
||||
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-clients 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
|
||||
}
|
||||
function _tmux_complete_session() {
|
||||
local IFS=$'\n'
|
||||
local cur="${1}"
|
||||
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions 2>/dev/null | cut -f 1 -d ':')" -- "${cur}") )
|
||||
}
|
||||
function _tmux_complete_window() {
|
||||
local IFS=$'\n'
|
||||
local cur="${1}"
|
||||
local session_name="$(echo "${cur}" | sed 's/\\//g' | cut -d ':' -f 1)"
|
||||
local sessions
|
||||
|
||||
sessions="$(tmux -q list-sessions 2>/dev/null | sed -re 's/([^:]+:).*$/\1/')"
|
||||
if [[ -n "${session_name}" ]]; then
|
||||
sessions="${sessions}
|
||||
$(tmux -q list-windows -t "${session_name}" 2>/dev/null | sed -re 's/^([^:]+):.*$/'"${session_name}"':\1/')"
|
||||
fi
|
||||
cur="$(echo "${cur}" | sed -e 's/:/\\\\:/')"
|
||||
sessions="$(echo "${sessions}" | sed -e 's/:/\\\\:/')"
|
||||
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${sessions}" -- "${cur}") )
|
||||
}
|
||||
|
||||
_tmux() {
|
||||
local cur prev
|
||||
local i cmd cmd_index option option_index
|
||||
local opts=""
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
if [ ${prev} == -f ]; then
|
||||
_tmux_filedir
|
||||
else
|
||||
# Search for the command
|
||||
local skip_next=0
|
||||
for ((i=1; $i<=$COMP_CWORD; i++)); do
|
||||
if [[ ${skip_next} -eq 1 ]]; then
|
||||
#echo "Skipping"
|
||||
skip_next=0;
|
||||
elif [[ ${COMP_WORDS[i]} != -* ]]; then
|
||||
cmd="${COMP_WORDS[i]}"
|
||||
cmd_index=${i}
|
||||
break
|
||||
elif [[ ${COMP_WORDS[i]} == -f ]]; then
|
||||
skip_next=1
|
||||
fi
|
||||
done
|
||||
|
||||
# Search for the last option command
|
||||
skip_next=0
|
||||
for ((i=1; $i<=$COMP_CWORD; i++)); do
|
||||
if [[ ${skip_next} -eq 1 ]]; then
|
||||
#echo "Skipping"
|
||||
skip_next=0;
|
||||
elif [[ ${COMP_WORDS[i]} == -* ]]; then
|
||||
option="${COMP_WORDS[i]}"
|
||||
option_index=${i}
|
||||
if [[ ${COMP_WORDS[i]} == -- ]]; then
|
||||
break;
|
||||
fi
|
||||
elif [[ ${COMP_WORDS[i]} == -f ]]; then
|
||||
skip_next=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $COMP_CWORD -le $cmd_index ]]; then
|
||||
# The user has not specified a command yet
|
||||
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux start-server \; list-commands | cut -d' ' -f1)" -- "${cur}") )
|
||||
else
|
||||
case ${cmd} in
|
||||
attach-session|attach)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
*) options="-t -d" ;;
|
||||
esac ;;
|
||||
detach-client|detach)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_client "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
lock-client|lockc)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_client "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
lock-session|locks)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
*) options="-t -d" ;;
|
||||
esac ;;
|
||||
new-session|new)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
-[n|d|s]) options="-d -n -s -t --" ;;
|
||||
*)
|
||||
if [[ ${COMP_WORDS[option_index]} == -- ]]; then
|
||||
_command_offset ${option_index}
|
||||
else
|
||||
options="-d -n -s -t --"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
refresh-client|refresh)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_client "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
rename-session|rename)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
source-file|source) _tmux_filedir ;;
|
||||
has-session|has|kill-session)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
suspend-client|suspendc)
|
||||
case "$prev" in
|
||||
-t) _tmux_complete_client "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
switch-client|switchc)
|
||||
case "$prev" in
|
||||
-c) _tmux_complete_client "${cur}" ;;
|
||||
-t) _tmux_complete_session "${cur}" ;;
|
||||
*) options="-l -n -p -c -t" ;;
|
||||
esac ;;
|
||||
|
||||
send-keys|send)
|
||||
case "$option" in
|
||||
-t) _tmux_complete_window "${cur}" ;;
|
||||
*) options="-t" ;;
|
||||
esac ;;
|
||||
esac # case ${cmd}
|
||||
fi # command specified
|
||||
fi # not -f
|
||||
|
||||
if [[ -n "${options}" ]]; then
|
||||
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "${options}" -- "${cur}") )
|
||||
fi
|
||||
|
||||
return 0
|
||||
|
||||
}
|
||||
complete -F _tmux tmux
|
||||
|
||||
# END tmux completion
|
||||
|
70
completions/todo.completion.sh
Normal file
70
completions/todo.completion.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
# link: https://github.com/ginatrapani/todo.txt-cli/blob/master/todo_completion
|
||||
|
||||
_todo()
|
||||
{
|
||||
local cur prev opts
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
local -r OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x"
|
||||
local -r COMMANDS="\
|
||||
add a addto addm append app archive command del \
|
||||
rm depri dp do help list ls listaddons listall lsa listcon \
|
||||
lsc listfile lf listpri lsp listproj lsprj move \
|
||||
mv prepend prep pri p replace report shorthelp"
|
||||
local -r MOVE_COMMAND_PATTERN='^(move|mv)$'
|
||||
|
||||
local _todo_sh=${_todo_sh:-todo.sh}
|
||||
local completions
|
||||
if [ $COMP_CWORD -eq 1 ]; then
|
||||
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS"
|
||||
elif [[ $COMP_CWORD -gt 2 && ( \
|
||||
"${COMP_WORDS[COMP_CWORD-2]}" =~ $MOVE_COMMAND_PATTERN || \
|
||||
"${COMP_WORDS[COMP_CWORD-3]}" =~ $MOVE_COMMAND_PATTERN ) ]]; then
|
||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile)
|
||||
else
|
||||
case "$prev" in
|
||||
command)
|
||||
completions=$COMMANDS;;
|
||||
help)
|
||||
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons)";;
|
||||
addto|listfile|lf)
|
||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile);;
|
||||
-*) completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS";;
|
||||
*) case "$cur" in
|
||||
+*) completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listproj)
|
||||
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||
[ ${#COMPREPLY[@]} -gt 0 ] && return 0
|
||||
completions=$(eval 'TODOTXT_VERBOSE=0 TODOTXT_SOURCEVAR=\$DONE_FILE' $_todo_sh command listproj)
|
||||
;;
|
||||
@*) completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listcon)
|
||||
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||
[ ${#COMPREPLY[@]} -gt 0 ] && return 0
|
||||
completions=$(eval 'TODOTXT_VERBOSE=0 TODOTXT_SOURCEVAR=\$DONE_FILE' $_todo_sh command listcon)
|
||||
;;
|
||||
*) if [[ "$cur" =~ ^[0-9]+$ ]]; then
|
||||
local todo=$( \
|
||||
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
|
||||
sed -e 's/^ *[0-9]\{1,\} //' -e 's/^\((.) \)\{0,1\}[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
|
||||
-e 's/^\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
|
||||
-e 's/[[:space:]]*$//' \
|
||||
-e '1q' \
|
||||
)
|
||||
[ "$todo" ] && COMPREPLY[0]="$cur # $todo"
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _todo todo.sh
|
||||
complete -F _todo t
|
147
completions/vagrant.completion.sh
Normal file
147
completions/vagrant.completion.sh
Normal file
@@ -0,0 +1,147 @@
|
||||
#!/bin/bash
|
||||
|
||||
# (The MIT License)
|
||||
#
|
||||
# Copyright (c) 2014 Kura
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the 'Software'), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
|
||||
__pwdln() {
|
||||
pwdmod="${PWD}/"
|
||||
itr=0
|
||||
until [[ -z "$pwdmod" ]];do
|
||||
itr=$(($itr+1))
|
||||
pwdmod="${pwdmod#*/}"
|
||||
done
|
||||
echo -n $(($itr-1))
|
||||
}
|
||||
|
||||
__vagrantinvestigate() {
|
||||
if [ -f "${PWD}/.vagrant" -o -d "${PWD}/.vagrant" ];then
|
||||
echo "${PWD}/.vagrant"
|
||||
return 0
|
||||
else
|
||||
pwdmod2="${PWD}"
|
||||
for (( i=2; i<=$(__pwdln); i++ ));do
|
||||
pwdmod2="${pwdmod2%/*}"
|
||||
if [ -f "${pwdmod2}/.vagrant" -o -d "${pwdmod2}/.vagrant" ];then
|
||||
echo "${pwdmod2}/.vagrant"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
_vagrant() {
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
commands="snapshot box connect destroy docker-logs docker-run global-status halt help init list-commands login package plugin provision rdp reload resume rsync rsync-auto share ssh ssh-config status suspend up version"
|
||||
|
||||
if [ $COMP_CWORD == 1 ]
|
||||
then
|
||||
COMPREPLY=($(compgen -W "${commands}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ $COMP_CWORD == 2 ]
|
||||
then
|
||||
case "$prev" in
|
||||
"init")
|
||||
local box_list=$(find "$HOME/.vagrant.d/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//')
|
||||
COMPREPLY=($(compgen -W "${box_list}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"up")
|
||||
vagrant_state_file=$(__vagrantinvestigate) || return 1
|
||||
if [[ -d $vagrant_state_file ]]
|
||||
then
|
||||
vm_list=$(find $vagrant_state_file/machines -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)
|
||||
fi
|
||||
local up_commands="--no-provision"
|
||||
COMPREPLY=($(compgen -W "${up_commands} ${vm_list}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"ssh"|"provision"|"reload"|"halt"|"suspend"|"resume"|"ssh-config")
|
||||
vagrant_state_file=$(__vagrantinvestigate) || return 1
|
||||
if [[ -f $vagrant_state_file ]]
|
||||
then
|
||||
running_vm_list=$(grep 'active' $vagrant_state_file | sed -e 's/"active"://' | tr ',' '\n' | cut -d '"' -f 2 | tr '\n' ' ')
|
||||
else
|
||||
running_vm_list=$(find $vagrant_state_file -type f -name "id" | awk -F"/" '{print $(NF-2)}')
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "${running_vm_list}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"box")
|
||||
box_commands="add help list remove repackage"
|
||||
COMPREPLY=($(compgen -W "${box_commands}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"plugin")
|
||||
plugin_commands="install license list uninstall update"
|
||||
COMPREPLY=($(compgen -W "${plugin_commands}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"help")
|
||||
COMPREPLY=($(compgen -W "${commands}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
"snapshot")
|
||||
snapshot_commands="back delete go list take"
|
||||
COMPREPLY=($(compgen -W "${snapshot_commands}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ $COMP_CWORD == 3 ]
|
||||
then
|
||||
action="${COMP_WORDS[COMP_CWORD-2]}"
|
||||
case "$action" in
|
||||
"up")
|
||||
if [ "$prev" == "--no-provision" ]; then
|
||||
COMPREPLY=($(compgen -W "${vm_list}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
"box")
|
||||
case "$prev" in
|
||||
"remove"|"repackage")
|
||||
local box_list=$(find "$HOME/.vagrant.d/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//')
|
||||
COMPREPLY=($(compgen -W "${box_list}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
esac
|
||||
;;
|
||||
"snapshot")
|
||||
if [ "$prev" == "go" ]; then
|
||||
local snapshot_list=$(vagrant snapshot list | awk '/Name:/ { print $2 }')
|
||||
COMPREPLY=($(compgen -W "${snapshot_list}" -- ${cur}))
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
complete -F _vagrant vagrant
|
51
completions/vault.completion.sh
Normal file
51
completions/vault.completion.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# vault-bash-completion
|
||||
#
|
||||
# This adds bash completions for [HashiCorp Vault](https://www.vaultproject.io/)
|
||||
#
|
||||
# see https://github.com/iljaweis/vault-bash-completion
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
function _vault_mounts() {
|
||||
(
|
||||
set -euo pipefail
|
||||
if ! vault mounts 2> /dev/null | awk 'NR > 1 {print $1}'; then
|
||||
echo "secret"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
function _vault() {
|
||||
local VAULT_COMMANDS=$(vault 2>&1 | egrep '^ +' | awk '{print $1}')
|
||||
|
||||
local cur
|
||||
local prev
|
||||
|
||||
if [ $COMP_CWORD -gt 0 ]; then
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
fi
|
||||
|
||||
local line=${COMP_LINE}
|
||||
|
||||
if [[ $prev =~ ^(policies|policy-write|policy-delete) ]]; then
|
||||
local policies=$(vault policies 2> /dev/null)
|
||||
COMPREPLY=($(compgen -W "$policies" -- $cur))
|
||||
elif [ "$(echo $line | wc -w)" -le 2 ]; then
|
||||
if [[ "$line" =~ ^vault\ (read|write|delete|list)\ $ ]]; then
|
||||
COMPREPLY=($(compgen -W "$(_vault_mounts)" -- ''))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$VAULT_COMMANDS" -- $cur))
|
||||
fi
|
||||
elif [[ "$line" =~ ^vault\ (read|write|delete|list)\ (.*)$ ]]; then
|
||||
path=${BASH_REMATCH[2]}
|
||||
if [[ "$path" =~ ^([^ ]+)/([^ /]*)$ ]]; then
|
||||
list=$(vault list -format=yaml ${BASH_REMATCH[1]} 2> /dev/null | awk '{ print $2 }')
|
||||
COMPREPLY=($(compgen -W "$list" -P "${BASH_REMATCH[1]}/" -- ${BASH_REMATCH[2]}))
|
||||
else
|
||||
COMPREPLY=($(compgen -W "$(_vault_mounts)" -- $path))
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _vault vault
|
222
completions/virtualbox.completion.sh
Normal file
222
completions/virtualbox.completion.sh
Normal file
@@ -0,0 +1,222 @@
|
||||
#!/usr/bin/bash
|
||||
_vboxmanage_realopts() {
|
||||
echo $(vboxmanage|grep -i vboxmanage|cut -d' ' -f2|grep '\['|tr -s '[\[\|\]\n' ' ')
|
||||
echo " "
|
||||
}
|
||||
|
||||
__vboxmanage_startvm() {
|
||||
RUNNING=$(vboxmanage list runningvms | cut -d' ' -f1 | tr -d '"')
|
||||
TOTAL=$(vboxmanage list vms | cut -d' ' -f1 | tr -d '"')
|
||||
|
||||
AVAILABLE=""
|
||||
for VM in $TOTAL; do
|
||||
MATCH=0;
|
||||
for RUN in $RUNNING "x"; do
|
||||
if [ "$VM" == "$RUN" ]; then
|
||||
MATCH=1
|
||||
fi
|
||||
done
|
||||
(( $MATCH == 0 )) && AVAILABLE="$AVAILABLE $VM "
|
||||
done
|
||||
echo $AVAILABLE
|
||||
}
|
||||
|
||||
__vboxmanage_list() {
|
||||
INPUT=$(vboxmanage list | tr -s '[\[\]\|\n]' ' ' | cut -d' ' -f4-)
|
||||
|
||||
PRUNED=""
|
||||
if [ "$1" == "long" ]; then
|
||||
for WORD in $INPUT; do
|
||||
[ "$WORD" == "-l" ] && continue;
|
||||
[ "$WORD" == "--long" ] && continue;
|
||||
|
||||
PRUNED="$PRUNED $WORD"
|
||||
done
|
||||
else
|
||||
PRUNED=$INPUT
|
||||
fi
|
||||
|
||||
echo $PRUNED
|
||||
}
|
||||
|
||||
|
||||
__vboxmanage_list_vms() {
|
||||
VMS=""
|
||||
if [ "x$1" == "x" ]; then
|
||||
SEPARATOR=" "
|
||||
else
|
||||
SEPARATOR=$1
|
||||
fi
|
||||
|
||||
for VM in $(vboxmanage list vms | cut -d' ' -f1 | tr -d '"'); do
|
||||
[ "$VMS" != "" ] && VMS="${VMS}${SEPARATOR}"
|
||||
VMS="${VMS}${VM}"
|
||||
done
|
||||
|
||||
echo $VMS
|
||||
}
|
||||
|
||||
__vboxmanage_list_runningvms() {
|
||||
VMS=""
|
||||
if [ "$1" == "" ]; then
|
||||
SEPARATOR=" "
|
||||
else
|
||||
SEPARATOR=$1
|
||||
fi
|
||||
|
||||
for VM in $(vboxmanage list runningvms | cut -d' ' -f1 | tr -d '"'); do
|
||||
[ "$VMS" != "" ] && VMS="${VMS}${SEPARATOR}"
|
||||
VMS="${VMS}${VM}"
|
||||
done
|
||||
|
||||
echo $VMS
|
||||
|
||||
}
|
||||
|
||||
__vboxmanage_controlvm() {
|
||||
echo "pause resume reset poweroff savestate acpipowerbutton"
|
||||
echo "acpisleepbutton keyboardputscancode guestmemoryballoon"
|
||||
echo "gueststatisticsinterval usbattach usbdetach vrde vrdeport"
|
||||
echo "vrdeproperty vrdevideochannelquality setvideomodehint"
|
||||
echo "screenshotpng setcredentials teleport plugcpu unplugcpu"
|
||||
echo "cpuexecutioncap"
|
||||
|
||||
# setlinkstate<1-N>
|
||||
# nic<1-N> null|nat|bridged|intnet|hostonly|generic
|
||||
# [<devicename>] |
|
||||
# nictrace<1-N> on|off
|
||||
# nictracefile<1-N> <filename>
|
||||
# nicproperty<1-N> name=[value]
|
||||
# natpf<1-N> [<rulename>],tcp|udp,[<hostip>],
|
||||
# <hostport>,[<guestip>],<guestport>
|
||||
# natpf<1-N> delete <rulename>
|
||||
|
||||
}
|
||||
|
||||
__vboxmanage_default() {
|
||||
realopts=$(_vboxmanage_realopts)
|
||||
opts=$realopts$(vboxmanage | grep -i vboxmanage | cut -d' ' -f2 | grep -v '\[' | sort | uniq)
|
||||
pruned=""
|
||||
|
||||
# echo ""
|
||||
# echo "DEBUG: cur: $cur, prev: $prev"
|
||||
# echo "DEBUG: default: |$p1|$p2|$p3|$p4|"
|
||||
case ${cur} in
|
||||
-*)
|
||||
echo $opts
|
||||
# COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
esac;
|
||||
|
||||
for WORD in $opts; do
|
||||
MATCH=0
|
||||
for OPT in ${COMP_WORDS[@]}; do
|
||||
# opts=$(echo ${opts} | grep -v $OPT);
|
||||
if [ "$OPT" == "$WORD" ]; then
|
||||
MATCH=1
|
||||
break;
|
||||
fi
|
||||
if [ "$OPT" == "-v" ] && [ "$WORD" == "--version" ]; then
|
||||
MATCH=1
|
||||
break;
|
||||
fi
|
||||
if [ "$OPT" == "--version" ] && [ "$WORD" == "-v" ]; then
|
||||
MATCH=1
|
||||
break;
|
||||
fi
|
||||
if [ "$OPT" == "-q" ] && [ "$WORD" == "--nologo" ]; then
|
||||
MATCH=1
|
||||
break;
|
||||
fi
|
||||
if [ "$OPT" == "--nologo" ] && [ "$WORD" == "-q" ]; then
|
||||
MATCH=1
|
||||
break;
|
||||
fi
|
||||
done
|
||||
(( $MATCH == 1 )) && continue;
|
||||
pruned="$pruned $WORD"
|
||||
|
||||
done
|
||||
|
||||
# COMPREPLY=($(compgen -W "${pruned}" -- ${cur}))
|
||||
echo $pruned
|
||||
return 0
|
||||
}
|
||||
|
||||
_vboxmanage() {
|
||||
# vboxmanage | grep -i vboxmanage | cut -d' ' -f2 | sort | uniq
|
||||
local cur p1 p2 p3 p4 opts
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
# echo "cur: |$cur|"
|
||||
# echo "prev: |$prev|"
|
||||
|
||||
# In case current is complete command
|
||||
case $cur in
|
||||
startvm|list|controlvm)
|
||||
COMPREPLY=($(compgen -W "$cur "))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
case $prev in
|
||||
-v|--version)
|
||||
return 0
|
||||
;;
|
||||
|
||||
-l|--long)
|
||||
opts=$(__vboxmanage_list "long")
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
startvm|list)
|
||||
opts=$(__vboxmanage_$prev)
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
--type)
|
||||
COMPREPLY=($(compgen -W "gui headless" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
gui|headless)
|
||||
# Done. no more completion possible
|
||||
return 0
|
||||
;;
|
||||
vboxmanage|-q|--nologo)
|
||||
# echo "Got vboxmanage"
|
||||
opts=$(__vboxmanage_default)
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
controlvm)
|
||||
opts=$(__vboxmanage_list_vms)
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
for VM in $(__vboxmanage_list_vms); do
|
||||
if [ "$VM" == "$prev" ]; then
|
||||
pprev=${COMP_WORDS[COMP_CWORD-2]}
|
||||
# echo "previous: $pprev"
|
||||
case $pprev in
|
||||
startvm)
|
||||
opts="--type"
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0
|
||||
;;
|
||||
controlvm)
|
||||
opts=$(__vboxmanage_controlvm)
|
||||
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
|
||||
return 0;
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
# echo "Got to end withoug completion"
|
||||
}
|
||||
complete -F _vboxmanage vboxmanage
|
Reference in New Issue
Block a user