1
0
mirror of https://github.com/zplug/zplug synced 2025-04-05 23:29:10 +02:00
zplug/autoload/commands/__help__
2018-05-15 01:06:50 +09:00

90 lines
1.9 KiB
Bash

#!/usr/bin/env zsh
# Description:
# Display the help message
local f arg
local -a fs args
local -A opts cmds
local obj opt cmd
local -i max=0
while (( $# > 0 ))
do
arg="$1"
case "$arg" in
-*|--*)
break
;;
"")
;;
*)
fs=( "$(echo $ZPLUG_HOME/doc/man/man(1|5)/(zplug-|)${arg}.(1|5)(N))" )
# Non-existing man page
if [[ $fs[1] == "" ]]; then
__zplug::io::print::f \
--die \
--zplug \
"$arg: no such subcommand or tag\n"
return 1
fi
# List all hits pages
for f in "${fs[@]}"
do
if [[ -f $f ]]; then
args+=( "$f" )
fi
done
;;
esac
shift
done
if (( $#args > 0 )); then
man "${args[@]}"
return $status
fi
# Measure max length
{
cmds=( "${(kv)_zplug_commands[@]}" )
for opt in "${(k)_zplug_options[@]}"
do
opts[--$opt]="$_zplug_options[$opt]"
done
for obj in "${(k)cmds[@]}" "${(k)opts[@]}"
do
if (( $#obj > $max )); then
max=$#obj
fi
done
}
# Help message format
{
printf "usage: zplug [OPTIONS] [COMMANDS [options] [args]]\n"
printf " zplug is a next-generation plugin manager for zsh\n"
for obj in \
OPTIONS "${(k)opts[@]}" \
COMMANDS "${(k)cmds[@]}"; do \
case "$obj" in
OPTIONS | COMMANDS)
printf "\n$obj:\n"
;;
*)
desc="(None)"
[[ -n $opts[$obj] ]] && desc="$opts[$obj]"
[[ -n $cmds[$obj] ]] && desc="$cmds[$obj]"
printf " %-${max}s %s\n" \
"$obj" \
"$desc"
;;
esac
done
printf "\n"
} >&2
return 0