-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
48 changed files
with
750 additions
and
191 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
Manifest-Version: 1.0 | ||
Main-Class: com.theapache64.gpm.MainKt | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,262 @@ | ||
#!/usr/bin/env bash | ||
# | ||
# gpm Bash Completion | ||
# ======================= | ||
# | ||
# Bash completion support for the `gpm` command, | ||
# generated by [picocli](http://picocli.info/) version 4.2.0. | ||
# | ||
# Installation | ||
# ------------ | ||
# | ||
# 1. Source all completion scripts in your .bash_profile | ||
# | ||
# cd $YOUR_APP_HOME/bin | ||
# for f in $(find . -name "*_completion"); do line=". $(pwd)/$f"; grep "$line" ~/.bash_profile || echo "$line" >> ~/.bash_profile; done | ||
# | ||
# 2. Open a new bash console, and type `gpm [TAB][TAB]` | ||
# | ||
# 1a. Alternatively, if you have [bash-completion](https://github.com/scop/bash-completion) installed: | ||
# Place this file in a `bash-completion.d` folder: | ||
# | ||
# * /etc/bash-completion.d | ||
# * /usr/local/etc/bash-completion.d | ||
# * ~/bash-completion.d | ||
# | ||
# Documentation | ||
# ------------- | ||
# The script is called by bash whenever [TAB] or [TAB][TAB] is pressed after | ||
# 'gpm (..)'. By reading entered command line parameters, | ||
# it determines possible bash completions and writes them to the COMPREPLY variable. | ||
# Bash then completes the user input if only one entry is listed in the variable or | ||
# shows the options if more than one is listed in COMPREPLY. | ||
# | ||
# References | ||
# ---------- | ||
# [1] http://stackoverflow.com/a/12495480/1440785 | ||
# [2] http://tiswww.case.edu/php/chet/bash/FAQ | ||
# [3] https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html | ||
# [4] http://zsh.sourceforge.net/Doc/Release/Options.html#index-COMPLETE_005fALIASES | ||
# [5] https://stackoverflow.com/questions/17042057/bash-check-element-in-array-for-elements-in-another-array/17042655#17042655 | ||
# [6] https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html#Programmable-Completion | ||
# [7] https://stackoverflow.com/questions/3249432/can-a-bash-tab-completion-script-be-used-in-zsh/27853970#27853970 | ||
# | ||
|
||
if [ -n "$BASH_VERSION" ]; then | ||
# Enable programmable completion facilities when using bash (see [3]) | ||
shopt -s progcomp | ||
elif [ -n "$ZSH_VERSION" ]; then | ||
# Make alias a distinct command for completion purposes when using zsh (see [4]) | ||
setopt COMPLETE_ALIASES | ||
alias compopt=complete | ||
|
||
# Enable bash completion in zsh (see [7]) | ||
autoload -U +X compinit && compinit | ||
autoload -U +X bashcompinit && bashcompinit | ||
fi | ||
|
||
# CompWordsContainsArray takes an array and then checks | ||
# if all elements of this array are in the global COMP_WORDS array. | ||
# | ||
# Returns zero (no error) if all elements of the array are in the COMP_WORDS array, | ||
# otherwise returns 1 (error). | ||
function CompWordsContainsArray() { | ||
declare -a localArray | ||
localArray=("$@") | ||
local findme | ||
for findme in "${localArray[@]}"; do | ||
if ElementNotInCompWords "$findme"; then return 1; fi | ||
done | ||
return 0 | ||
} | ||
function ElementNotInCompWords() { | ||
local findme="$1" | ||
local element | ||
for element in "${COMP_WORDS[@]}"; do | ||
if [[ "$findme" = "$element" ]]; then return 1; fi | ||
done | ||
return 0 | ||
} | ||
|
||
# The `currentPositionalIndex` function calculates the index of the current positional parameter. | ||
# | ||
# currentPositionalIndex takes three parameters: | ||
# the command name, | ||
# a space-separated string with the names of options that take a parameter, and | ||
# a space-separated string with the names of boolean options (that don't take any params). | ||
# When done, this function echos the current positional index to std_out. | ||
# | ||
# Example usage: | ||
# local currIndex=$(currentPositionalIndex "mysubcommand" "$ARG_OPTS" "$FLAG_OPTS") | ||
function currentPositionalIndex() { | ||
local commandName="$1" | ||
local optionsWithArgs="$2" | ||
local booleanOptions="$3" | ||
local previousWord | ||
local result=0 | ||
|
||
for i in $(seq $((COMP_CWORD - 1)) -1 0); do | ||
previousWord=${COMP_WORDS[i]} | ||
if [ "${previousWord}" = "$commandName" ]; then | ||
break | ||
fi | ||
if [[ "${optionsWithArgs}" =~ ${previousWord} ]]; then | ||
((result-=2)) # Arg option and its value not counted as positional param | ||
elif [[ "${booleanOptions}" =~ ${previousWord} ]]; then | ||
((result-=1)) # Flag option itself not counted as positional param | ||
fi | ||
((result++)) | ||
done | ||
echo "$result" | ||
} | ||
|
||
# Bash completion entry point function. | ||
# _complete_gpm finds which commands and subcommands have been specified | ||
# on the command line and delegates to the appropriate function | ||
# to generate possible options and subcommands for the last specified subcommand. | ||
function _complete_gpm() { | ||
local cmds0=(install) | ||
local cmds1=(i) | ||
local cmds2=(uninstall) | ||
local cmds3=(u) | ||
local cmds4=(docs) | ||
local cmds5=(d) | ||
|
||
if CompWordsContainsArray "${cmds5[@]}"; then _picocli_gpm_d; return $?; fi | ||
if CompWordsContainsArray "${cmds4[@]}"; then _picocli_gpm_docs; return $?; fi | ||
if CompWordsContainsArray "${cmds3[@]}"; then _picocli_gpm_u; return $?; fi | ||
if CompWordsContainsArray "${cmds2[@]}"; then _picocli_gpm_uninstall; return $?; fi | ||
if CompWordsContainsArray "${cmds1[@]}"; then _picocli_gpm_i; return $?; fi | ||
if CompWordsContainsArray "${cmds0[@]}"; then _picocli_gpm_install; return $?; fi | ||
|
||
# No subcommands were specified; generate completions for the top-level command. | ||
_picocli_gpm; return $?; | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `gpm` command. | ||
function _picocli_gpm() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="install i uninstall u docs d" | ||
local flag_opts="-h --help -V --version" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `install` subcommand. | ||
function _picocli_gpm_install() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="-S --save -D --save-dev -DA --save-dev-android" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `i` subcommand. | ||
function _picocli_gpm_i() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="-S --save -D --save-dev -DA --save-dev-android" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `uninstall` subcommand. | ||
function _picocli_gpm_uninstall() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="-S --save -D --save-dev -DA --save-dev-android" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `u` subcommand. | ||
function _picocli_gpm_u() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="-S --save -D --save-dev -DA --save-dev-android" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `docs` subcommand. | ||
function _picocli_gpm_docs() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Generates completions for the options and subcommands of the `d` subcommand. | ||
function _picocli_gpm_d() { | ||
# Get completion data | ||
local curr_word=${COMP_WORDS[COMP_CWORD]} | ||
|
||
local commands="" | ||
local flag_opts="" | ||
local arg_opts="" | ||
|
||
if [[ "${curr_word}" == -* ]]; then | ||
COMPREPLY=( $(compgen -W "${flag_opts} ${arg_opts}" -- "${curr_word}") ) | ||
else | ||
local positionals="" | ||
COMPREPLY=( $(compgen -W "${commands} ${positionals}" -- "${curr_word}") ) | ||
fi | ||
} | ||
|
||
# Define a completion specification (a compspec) for the | ||
# `gpm`, `gpm.sh`, and `gpm.bash` commands. | ||
# Uses the bash `complete` builtin (see [6]) to specify that shell function | ||
# `_complete_gpm` is responsible for generating possible completions for the | ||
# current word on the command line. | ||
# The `-o default` option means that if the function generated no matches, the | ||
# default Bash completions and the Readline default filename completions are performed. | ||
complete -F _complete_gpm -o default gpm gpm.sh gpm.bash |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,15 @@ | ||
package com.theapache64.gpm | ||
|
||
fun main(args: Array<String>) { | ||
import com.theapache64.gpm.commands.gpm.Gpm | ||
import picocli.CommandLine | ||
import kotlin.system.exitProcess | ||
|
||
fun main(args: Array<String>) { | ||
val cmd = CommandLine(Gpm(false)) | ||
if (args.isEmpty()) { | ||
cmd.usage(System.out) | ||
} else { | ||
val exitCode = cmd.execute(*args) | ||
exitProcess(exitCode) | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.