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