afficher --help++ dans l'aide

This commit is contained in:
Jephté Clain 2024-03-05 21:57:51 +04:00
parent b7586b92d0
commit 9fea3c603b
2 changed files with 55 additions and 5 deletions

View File

@ -146,7 +146,9 @@ function parse_args() {
}
function __parse_args() {
## tout d'abord, construire la liste des options
local __popt __sopts __lopts __autohelp=1
local __AUTOHELP=1 # faut-il gérer automatiquement l'affichage de l'aide?
local __ADVHELP # y a-t-il des options avancées?
local __popt __sopts __lopts
local -a __defs
set -- "${__DEFS[@]}"
while [ $# -gt 0 ]; do
@ -181,17 +183,20 @@ function __parse_args() {
__def="${__def#-}"
__lopts="$__lopts${__lopts:+,}$__def$__witharg"
fi
[ "$__def" == help -o "$__def" == help++ ] && __autohelp=
[ "$__def" == help -o "$__def" == help++ ] && __AUTOHELP=
done
# sauter l'action
shift
# sauter la description le cas échéant
[ "${1#-}" == "$1" ] && shift
if [ "${1#-}" == "$1" ]; then
[ "${1#++}" != "$1" ] && __ADVHELP=1
shift
fi
done
# __sopts ne doit pas être vide, rajouter ? si aucune option courte n'est
# définie, indépendamment de la valeur de autohelp
[ -n "$__autohelp" ] && __lopts="$__lopts${__lopts:+,}help,help++"
[ -n "$__AUTOHELP" ] && __lopts="$__lopts${__lopts:+,}help,help++"
[ -n "$__sopts" ] || __sopts=?
__sopts="$__popt$__sopts"
@ -287,6 +292,11 @@ $prefix$usage"
if [ -n "$first" ]; then
first=
help="$help${nl}${nl}OPTIONS"
if [ -n "$__AUTOHELP" -a -n "$__ADVHELP" ]; then
help="$help
--help++
Afficher l'aide avancée"
fi
fi
# est-ce que l'option prend un argument?
__witharg=
@ -434,7 +444,7 @@ function __parse_opt() {
[ -n "$__found" ] && return 0
done
if [ -n "$__autohelp" ]; then
if [ -n "$__AUTOHELP" ]; then
if [ "$option_" == --help -o "$option" == -? ]; then
__action="showhelp@"
return 0

View File

@ -0,0 +1,40 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/../src/nulib.sh" || exit 1
#NULIB_NO_DISABLE_SET_X=1
args=("tester l'affichage de l'aide")
case "$1" in
s|std)
# NB: seul l'affichage standard est disponible...
args+=(
-h,--help,--hstd '$showhelp@' "afficher l'aide de base"
)
shift
;;
a|adv)
# NB: seul l'affichage avancé est disponible...
args+=(
-H,--help++,--hadv '$showhelp@ ++' "afficher l'aide avancée"
)
shift
;;
sa|std+adv)
args+=(
-h,--help,--hstd '$showhelp@' "afficher l'aide de base"
-H,--help++,--hadv '$showhelp@ ++' "afficher l'aide avancée"
)
shift
;;
esac
args+=(
-a,--std . "cette option apparait dans les options standards"
-b,--adv . "++cette option apparait dans les options avancées"
)
parse_args "$@"; set -- "${args[@]}"
enote "lancer le script
- avec --help pour afficher les options standards uniquement
- avec --help++ pour afficher toutes les options"