|
@@ -23,17 +23,28 @@ function _omz {
|
|
|
local -a cmds subcmds
|
|
|
cmds=(
|
|
|
'help:Usage information'
|
|
|
+ 'plugin:Commands for Oh My Zsh plugins management'
|
|
|
+ 'pr:Commands for Oh My Zsh Pull Requests management'
|
|
|
+ 'theme:Commands for Oh My Zsh themes management'
|
|
|
'update:Update Oh My Zsh'
|
|
|
- 'pr:Commands for Oh My Zsh Pull Requests'
|
|
|
)
|
|
|
|
|
|
if (( CURRENT == 2 )); then
|
|
|
_describe 'command' cmds
|
|
|
elif (( CURRENT == 3 )); then
|
|
|
case "$words[2]" in
|
|
|
- pr) subcmds=( 'test:Test a Pull Request' 'clean:Delete all Pull Request branches' )
|
|
|
+ plugin) subcmds=('list:List plugins')
|
|
|
+ _describe 'command' subcmds ;;
|
|
|
+ pr) subcmds=('test:Test a Pull Request' 'clean:Delete all Pull Request branches')
|
|
|
+ _describe 'command' subcmds ;;
|
|
|
+ theme) subcmds=('use:Load a theme' 'list:List themes')
|
|
|
_describe 'command' subcmds ;;
|
|
|
esac
|
|
|
+ elif (( CURRENT == 4 )); then
|
|
|
+ case "$words[2]::$words[3]" in
|
|
|
+ theme::use) compadd "$ZSH"/themes/*.zsh-theme(.N:t:r) \
|
|
|
+ "$ZSH_CUSTOM"/**/*.zsh-theme(.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::) ;;
|
|
|
+ esac
|
|
|
fi
|
|
|
|
|
|
return 0
|
|
@@ -49,23 +60,40 @@ Usage: omz <command> [options]
|
|
|
Available commands:
|
|
|
|
|
|
help Print this help message
|
|
|
+ pr <command> Commands for Oh My Zsh Pull Requests management
|
|
|
+ theme <command> Commands for Oh My Zsh themes management
|
|
|
update Update Oh My Zsh
|
|
|
- pr <command> Commands for Oh My Zsh Pull Requests
|
|
|
|
|
|
EOF
|
|
|
}
|
|
|
|
|
|
+function _omz::confirm {
|
|
|
+ # If question supplied, ask it before reading the answer
|
|
|
+ # NOTE: uses the logname of the caller function
|
|
|
+ if [[ -n "$1" ]]; then
|
|
|
+ _omz::log prompt "$1" "${${functrace[1]#_}%:*}"
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Read one character
|
|
|
+ read -r -k 1
|
|
|
+
|
|
|
+ # If no newline entered, add a newline
|
|
|
+ if [[ "$REPLY" != $'\n' ]]; then
|
|
|
+ echo
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
function _omz::log {
|
|
|
# if promptsubst is set, a message with `` or $()
|
|
|
# will be run even if quoted due to `print -P`
|
|
|
setopt localoptions nopromptsubst
|
|
|
|
|
|
# $1 = info|warn|error|debug
|
|
|
- # $@ = text
|
|
|
+ # $2 = text
|
|
|
+ # $3 = (optional) name of the logger
|
|
|
|
|
|
local logtype=$1
|
|
|
- local logname=${${functrace[1]#_}%:*}
|
|
|
- shift
|
|
|
+ local logname=${3:-${${functrace[1]#_}%:*}}
|
|
|
|
|
|
# Don't print anything if debug is not active
|
|
|
if [[ $logtype = debug && -z $_OMZ_DEBUG ]]; then
|
|
@@ -74,14 +102,52 @@ function _omz::log {
|
|
|
|
|
|
# Choose coloring based on log type
|
|
|
case "$logtype" in
|
|
|
- prompt) print -Pn "%S%F{blue}$logname%f%s: $@" ;;
|
|
|
- debug) print -P "%F{white}$logname%f: $@" ;;
|
|
|
- info) print -P "%F{green}$logname%f: $@" ;;
|
|
|
- warn) print -P "%S%F{yellow}$logname%f%s: $@" ;;
|
|
|
- error) print -P "%S%F{red}$logname%f%s: $@" ;;
|
|
|
+ prompt) print -Pn "%S%F{blue}$logname%f%s: $2" ;;
|
|
|
+ debug) print -P "%F{white}$logname%f: $2" ;;
|
|
|
+ info) print -P "%F{green}$logname%f: $2" ;;
|
|
|
+ warn) print -P "%S%F{yellow}$logname%f%s: $2" ;;
|
|
|
+ error) print -P "%S%F{red}$logname%f%s: $2" ;;
|
|
|
esac >&2
|
|
|
}
|
|
|
|
|
|
+function _omz::plugin {
|
|
|
+ (( $# > 0 && $+functions[_omz::plugin::$1] )) || {
|
|
|
+ cat <<EOF
|
|
|
+Usage: omz plugin <command> [options]
|
|
|
+
|
|
|
+Available commands:
|
|
|
+
|
|
|
+ list List all available Oh My Zsh plugins
|
|
|
+
|
|
|
+EOF
|
|
|
+ return 1
|
|
|
+ }
|
|
|
+
|
|
|
+ local command="$1"
|
|
|
+ shift
|
|
|
+
|
|
|
+ _omz::plugin::$command "$@"
|
|
|
+}
|
|
|
+
|
|
|
+function _omz::plugin::list {
|
|
|
+ local -a custom_plugins builtin_plugins
|
|
|
+ custom_plugins=("$ZSH_CUSTOM"/plugins/*(/N:t))
|
|
|
+ builtin_plugins=("$ZSH"/plugins/*(/N:t))
|
|
|
+
|
|
|
+ (( ${#custom_plugins} )) && {
|
|
|
+ print -Pn "%U%BCustom plugins%b%u: "
|
|
|
+ print -l ${(q-)custom_plugins}
|
|
|
+ } | fmt -w $COLUMNS
|
|
|
+
|
|
|
+ (( ${#builtin_plugins} )) && {
|
|
|
+ # add a line of separation
|
|
|
+ (( ${#custom_plugins} )) && echo
|
|
|
+
|
|
|
+ print -Pn "%U%BBuilt-in plugins%b%u: "
|
|
|
+ print -l ${(q-)builtin_plugins}
|
|
|
+ } | fmt -w $COLUMNS
|
|
|
+}
|
|
|
+
|
|
|
function _omz::pr {
|
|
|
(( $# > 0 && $+functions[_omz::pr::$1] )) || {
|
|
|
cat <<EOF
|
|
@@ -107,6 +173,24 @@ function _omz::pr::clean {
|
|
|
set -e
|
|
|
builtin cd -q "$ZSH"
|
|
|
|
|
|
+ # Check if there are PR branches
|
|
|
+ local fmt branches
|
|
|
+ fmt="%(align:19,right)%(color:bold blue)%(refname:short)%(end)%(color:reset) %(color:dim bold red)%(objectname:short)%(color:reset) %(color:yellow)%(contents:subject)"
|
|
|
+ branches="$(command git for-each-ref --sort=-committerdate --color --format="$fmt" "refs/heads/ohmyzsh/pull-*")"
|
|
|
+
|
|
|
+ # Exit if there are no PR branches
|
|
|
+ if [[ -z "$branches" ]]; then
|
|
|
+ _omz::log info "there are no Pull Request branches to remove."
|
|
|
+ return
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Print found PR branches
|
|
|
+ echo "$branches\n"
|
|
|
+ # Confirm before removing the branches
|
|
|
+ _omz::confirm "do you want remove these Pull Request branches? [Y/n] "
|
|
|
+ # Only proceed if the answer is a valid yes option
|
|
|
+ [[ "$REPLY" != [yY$'\n'] ]] && return
|
|
|
+
|
|
|
_omz::log info "removing all Oh My Zsh Pull Request branches..."
|
|
|
command git branch --list 'ohmyzsh/pull-*' | while read branch; do
|
|
|
command git branch -D "$branch"
|
|
@@ -181,13 +265,9 @@ function _omz::pr::test {
|
|
|
command zsh -l
|
|
|
|
|
|
# After testing, go back to the previous HEAD if the user wants
|
|
|
- _omz::log prompt "do you want to go back to the previous branch? [Y/n] "
|
|
|
- read -r -k 1
|
|
|
-
|
|
|
- # If no newline entered, add a newline
|
|
|
- [[ "$REPLY" != $'\n' ]] && echo
|
|
|
- # If NO selected, do nothing else
|
|
|
- [[ "$REPLY" = [nN] ]] && return
|
|
|
+ _omz::confirm "do you want to go back to the previous branch? [Y/n] "
|
|
|
+ # Only proceed if the answer is a valid yes option
|
|
|
+ [[ "$REPLY" != [yY$'\n'] ]] && return
|
|
|
|
|
|
(
|
|
|
set -e
|
|
@@ -200,6 +280,64 @@ function _omz::pr::test {
|
|
|
)
|
|
|
}
|
|
|
|
|
|
+function _omz::theme {
|
|
|
+ (( $# > 0 && $+functions[_omz::theme::$1] )) || {
|
|
|
+ cat <<EOF
|
|
|
+Usage: omz theme <command> [options]
|
|
|
+
|
|
|
+Available commands:
|
|
|
+
|
|
|
+ list List all available Oh My Zsh themes
|
|
|
+ use <theme> Load an Oh My Zsh theme
|
|
|
+
|
|
|
+EOF
|
|
|
+ return 1
|
|
|
+ }
|
|
|
+
|
|
|
+ local command="$1"
|
|
|
+ shift
|
|
|
+
|
|
|
+ _omz::theme::$command "$@"
|
|
|
+}
|
|
|
+
|
|
|
+function _omz::theme::list {
|
|
|
+ local -a custom_themes builtin_themes
|
|
|
+ custom_themes=("$ZSH_CUSTOM"/**/*.zsh-theme(.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
|
|
+ builtin_themes=("$ZSH"/themes/*.zsh-theme(.N:t:r))
|
|
|
+
|
|
|
+ (( ${#custom_themes} )) && {
|
|
|
+ print -Pn "%U%BCustom themes%b%u: "
|
|
|
+ print -l ${(q-)custom_themes}
|
|
|
+ } | fmt -w $COLUMNS
|
|
|
+
|
|
|
+ (( ${#builtin_themes} )) && {
|
|
|
+ # add a line of separation
|
|
|
+ (( ${#custom_themes} )) && echo
|
|
|
+
|
|
|
+ print -Pn "%U%BBuilt-in themes%b%u: "
|
|
|
+ print -l ${(q-)builtin_themes}
|
|
|
+ } | fmt -w $COLUMNS
|
|
|
+}
|
|
|
+
|
|
|
+function _omz::theme::use {
|
|
|
+ if [[ -z "$1" ]]; then
|
|
|
+ echo >&2 "Usage: omz theme use <theme>"
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Respect compatibility with old lookup order
|
|
|
+ if [[ -f "$ZSH_CUSTOM/$1.zsh-theme" ]]; then
|
|
|
+ source "$ZSH_CUSTOM/$1.zsh-theme"
|
|
|
+ elif [[ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]]; then
|
|
|
+ source "$ZSH_CUSTOM/themes/$1.zsh-theme"
|
|
|
+ elif [[ -f "$ZSH/themes/$1.zsh-theme" ]]; then
|
|
|
+ source "$ZSH/themes/$1.zsh-theme"
|
|
|
+ else
|
|
|
+ _omz::log error "theme '$1' not found"
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
function _omz::update {
|
|
|
# Run update script
|
|
|
env ZSH="$ZSH" sh "$ZSH/tools/upgrade.sh"
|