2021-12-24 11:01:42 +07:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
_omb_module_require lib:utils
|
2021-12-24 11:01:42 +07:00
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
function _omb_cmd_help {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_changelog {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_plugin {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_pull {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_reload {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_theme {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_update {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
function _omb_cmd_version {
|
|
|
|
|
echo 'Not yet implemented'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function omb {
|
|
|
|
|
if (($# == 0)); then
|
|
|
|
|
_omb_cmd_help
|
|
|
|
|
return 2
|
|
|
|
|
fi
|
2021-12-24 11:01:42 +07:00
|
|
|
|
|
|
|
|
# Subcommand functions start with _ so that they don't
|
|
|
|
|
# appear as completion entries when looking for `omb`
|
2022-01-15 11:18:05 +09:00
|
|
|
if ! _omb_util_function_exists "_omb_cmd_$1"; then
|
|
|
|
|
_omb_cmd_help
|
|
|
|
|
return 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_omb_cmd_"$@"
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-24 11:01:42 +07:00
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
_omb_module_require lib:utils
|
|
|
|
|
|
|
|
|
|
_omb_lib_cli__init_shopt=
|
|
|
|
|
_omb_util_get_shopt -v _omb_lib_cli__init_shopt extglob
|
|
|
|
|
shopt -s extglob
|
|
|
|
|
|
|
|
|
|
function _comp_cmd_omb__describe {
|
|
|
|
|
eval "set -- $1 \"\${$2[@]}\""
|
|
|
|
|
local type=$1; shift
|
|
|
|
|
local word desc words iword=0
|
|
|
|
|
for word; do
|
|
|
|
|
desc="($type) ${word#*:}" # unused
|
|
|
|
|
word=${word%%:*}
|
|
|
|
|
words[iword++]=$word
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
local -a filtered
|
|
|
|
|
_omb_util_split_lines filtered "$(compgen -W '"${words[@]}"' -- "${COMP_WORDS[COMP_CWORD]}")"
|
|
|
|
|
COMPREPLY+=("${filtered[@]}")
|
2021-12-24 11:01:42 +07:00
|
|
|
}
|
|
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
function _comp_cmd_omb__get_available_plugins {
|
|
|
|
|
available_plugins=()
|
|
|
|
|
|
|
|
|
|
local -a plugin_files
|
|
|
|
|
_omb_util_glob_expand plugin_files '{"$OSH","$OSH_CUSTOM"}/plugins/*/{_*,*.plugin.{bash,sh}}'
|
|
|
|
|
|
|
|
|
|
local plugin
|
|
|
|
|
for plugin in "${plugin_files[@]##*/}"; do
|
|
|
|
|
case $plugin in
|
|
|
|
|
*.plugin.bash) plugin=${plugin%.plugin.bash} ;;
|
|
|
|
|
*.plugin.sh) plugin=${plugin%.plugin.sh} ;;
|
|
|
|
|
*) plugin=${plugin#_} ;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
_omb_util_array_contains available_plugins "$plugin" ||
|
|
|
|
|
available_plugins+=("$plugin")
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function _comp_cmd_omb__get_available_themes {
|
|
|
|
|
available_themes=()
|
|
|
|
|
|
|
|
|
|
local -a theme_files
|
|
|
|
|
_omb_util_glob_expand theme_files '{"$OSH","$OSH_CUSTOM"}/themes/*/{_*,*.theme.{bash,sh}}'
|
|
|
|
|
|
|
|
|
|
local theme
|
|
|
|
|
for theme in "${theme_files[@]##*/}"; do
|
|
|
|
|
case $theme in
|
|
|
|
|
*.theme.bash) theme=${theme%.theme.bash} ;;
|
|
|
|
|
*.theme.sh) theme=${theme%.theme.sh} ;;
|
|
|
|
|
*) theme=${theme#_} ;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
_omb_util_array_contains available_themes "$theme" ||
|
|
|
|
|
available_themes+=("$theme")
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## @fn _comp_cmd_omb__get_valid_plugins type
|
|
|
|
|
function _comp_cmd_omb__get_valid_plugins {
|
|
|
|
|
if [[ $1 == disable ]]; then
|
|
|
|
|
# if command is "disable", only offer already enabled plugins
|
|
|
|
|
valid_plugins=("${plugins[@]}")
|
|
|
|
|
else
|
|
|
|
|
local -a available_plugins
|
|
|
|
|
_comp_cmd_omb__get_available_plugins
|
|
|
|
|
valid_plugins=("${available_plugins[@]}")
|
|
|
|
|
|
|
|
|
|
# if command is "enable", remove already enabled plugins
|
|
|
|
|
if [[ ${COMP_WORDS[2]} == enable ]]; then
|
|
|
|
|
_omb_util_array_remove valid_plugins "${plugins[@]}"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function _comp_cmd_omb {
|
|
|
|
|
local shopt
|
|
|
|
|
_omb_util_get_shopt extglob
|
|
|
|
|
shopt -s extglob
|
|
|
|
|
|
|
|
|
|
if ((COMP_CWORD == 1)); then
|
|
|
|
|
local -a cmds=(
|
|
|
|
|
'changelog:Print the changelog'
|
|
|
|
|
'help:Usage information'
|
|
|
|
|
'plugin:Manage plugins'
|
|
|
|
|
'pr:Manage Oh My Bash Pull Requests'
|
|
|
|
|
'reload:Reload the current bash session'
|
|
|
|
|
'theme:Manage themes'
|
|
|
|
|
'update:Update Oh My Bash'
|
|
|
|
|
'version:Show the version'
|
|
|
|
|
)
|
|
|
|
|
_comp_cmd_omb__describe 'command' cmds
|
|
|
|
|
elif ((COMP_CWORD ==2)); then
|
|
|
|
|
case "${COMP_WORDS[1]}" in
|
|
|
|
|
changelog)
|
|
|
|
|
local -a refs
|
|
|
|
|
_omb_util_split_lines refs "$(command git -C "$OSH" for-each-ref --format="%(refname:short):%(subject)" refs/heads refs/tags)"
|
|
|
|
|
_comp_cmd_omb__describe 'command' refs ;;
|
|
|
|
|
plugin)
|
|
|
|
|
local -a subcmds=(
|
2021-12-24 11:01:42 +07:00
|
|
|
'disable:Disable plugin(s)'
|
|
|
|
|
'enable:Enable plugin(s)'
|
|
|
|
|
'info:Get plugin information'
|
|
|
|
|
'list:List plugins'
|
|
|
|
|
'load:Load plugin(s)'
|
|
|
|
|
)
|
2022-01-15 11:18:05 +09:00
|
|
|
_comp_cmd_omb__describe 'command' subcmds ;;
|
|
|
|
|
pr)
|
|
|
|
|
local -a subcmds=(
|
|
|
|
|
'clean:Delete all Pull Request branches'
|
|
|
|
|
'test:Test a Pull Request'
|
|
|
|
|
)
|
|
|
|
|
_comp_cmd_omb__describe 'command' subcmds ;;
|
|
|
|
|
theme)
|
|
|
|
|
local -a subcmds=(
|
|
|
|
|
'list:List themes'
|
|
|
|
|
'set:Set a theme in your .zshrc file'
|
|
|
|
|
'use:Load a theme'
|
|
|
|
|
)
|
|
|
|
|
_comp_cmd_omb__describe 'command' subcmds ;;
|
2021-12-24 11:01:42 +07:00
|
|
|
esac
|
2022-01-15 11:18:05 +09:00
|
|
|
elif ((COMP_CWORD == 3)); then
|
|
|
|
|
case "${COMP_WORDS[1]}::${COMP_WORDS[2]}" in
|
|
|
|
|
plugin::@(disable|enable|load))
|
|
|
|
|
local -a valid_plugins
|
|
|
|
|
_comp_cmd_omb__get_valid_plugins "${COMP_WORDS[2]}"
|
|
|
|
|
_comp_cmd_omb__describe 'plugin' valid_plugins ;;
|
|
|
|
|
plugin::info)
|
|
|
|
|
local -a available_plugins
|
|
|
|
|
_comp_cmd_omb__get_available_plugins
|
|
|
|
|
_comp_cmd_omb__describe 'plugin' available_plugins ;;
|
|
|
|
|
theme::@(set|use))
|
|
|
|
|
local -a available_themes
|
|
|
|
|
_comp_cmd_omb__get_available_themes
|
|
|
|
|
_comp_cmd_omb__describe 'theme' available_themes ;;
|
2021-12-24 11:01:42 +07:00
|
|
|
esac
|
2022-01-15 11:18:05 +09:00
|
|
|
elif ((COMP_CWORD > 3)); then
|
|
|
|
|
case "${COMP_WORDS[1]}::${COMP_WORDS[2]}" in
|
|
|
|
|
plugin::@(enable|disable|load))
|
|
|
|
|
local -a valid_plugins
|
|
|
|
|
_comp_cmd_omb__get_valid_plugins "${COMP_WORDS[2]}"
|
|
|
|
|
|
|
|
|
|
# Remove plugins already passed as arguments
|
|
|
|
|
# NOTE: $((COMP_CWORD - 1)) is the last plugin argument completely passed, i.e. that which
|
|
|
|
|
# has a space after them. This is to avoid removing plugins partially passed, which makes
|
|
|
|
|
# the completion not add a space after the completed plugin.
|
|
|
|
|
_omb_util_array_remove valid_plugins "${COMP_WORDS[@]:3:COMP_CWORD-3}"
|
|
|
|
|
|
|
|
|
|
_comp_cmd_omb__describe 'plugin' valid_plugins ;;
|
2021-12-24 11:01:42 +07:00
|
|
|
esac
|
|
|
|
|
fi
|
|
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
[[ :$shopt: == *:exptglob:* ]] || shopt -u extglob
|
2021-12-24 11:01:42 +07:00
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-15 11:18:05 +09:00
|
|
|
complete -F _comp_cmd_omb omb
|
|
|
|
|
|
|
|
|
|
[[ :$_omb_lib_cli__init_shopt: == *:exptglob:* ]] || shopt -u extglob
|
|
|
|
|
unset -v _omb_lib_cli__init_shopt
|