diff --git a/lib/templates/shell b/lib/templates/shell index bb136a0..f43ee55 100755 --- a/lib/templates/shell +++ b/lib/templates/shell @@ -12,6 +12,12 @@ OPTIONS Indiquer, le cas échéant, le modèle de fichier à utiliser pour la génération. Les valeurs valides sont: ${TEMPLATES[*]} + -T TYPE + Pour un script exécutable, indiquer le type de script à générer: + system-or-local, sl -- utilise ulib/auto et genparse() + default, d -- utilise /etc/ulibauto et genparse() + manual, m -- utilise /etc/ulib et parse_opts() + vanilla, v -- script simple -e, --edit -g, --no-edit Editer (resp. ne pas éditer) le fichier après l'avoir généré. @@ -66,35 +72,43 @@ function generate_shell() { check_overwrite "$1" || return + case "$type" in + system-or-local|sol|sl|u) type=system-or-local;; + default|def|d) type=default;; + manual|man|m) type=manual;; + vanilla|van|v) type=vanilla;; + esac + local modeline="# -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding" if [ -n "$executable" ]; then etitle "$(ppath "$file")" - local type= - if [ -d "$dir/ulib" ]; then - ask_yesno "\ + if [ -z "$type" ]; then + if [ -d "$dir/ulib" ]; then + ask_yesno "\ Le type de script 'system-or-local' a été sélectionné automatiquement Une librairie ulib locale est présente. En chargeant ulib/auto, la librairie système /etc/ulib sera utilisée si elle est disponible. Sinon, la librairie locale ulib/ulib sera utilisée. Voulez-vous générer un script avec cette configuration?" X && - type=system-or-local - elif [ -f /etc/ulibauto ]; then - ask_yesno "\ + type=system-or-local + elif [ -f /etc/ulibauto ]; then + ask_yesno "\ Le type de script 'default' a été sélectionné automatiquement En chargeant /etc/ulibauto, la librairie ulib système sera utilisée, et les paramètres par défaut seront utilisés. Voulez-vous générer un script avec cette configuration?" X && - type=default - else - ask_yesno "\ + type=default + else + ask_yesno "\ Le type de script 'manual' a été sélectionné automatiquement Une vieille version de nutools est installée. Il faut charger /etc/ulib et définir manuellement les paramètres à utiliser. Voulez-vous générer un script avec cette configuration?" X && - type=manual + type=manual + fi fi - if [ -z "$type" ]; then + if [ -z "$type" ] && check_interaction -c; then enote "Plusieurs type de scripts peuvent être générés: - Avec le type 'system-or-local', on assume qu'une librairie ulib locale est présente. Le fichier ulib/auto est chargé, ce qui a pour conséquence que la @@ -114,17 +128,29 @@ Voulez-vous générer un script avec cette configuration?" X && -m "Veuillez choisir le type de script à générer" \ -d manual fi + if [ -z "$type" ]; then + if [ -d "$dir/ulib" ]; then + enote "Le type de script 'system-or-local' a été sélectionné automatiquement" + type=system-or-local + elif [ -f /etc/ulibauto ]; then + enote "Le type de script 'default' a été sélectionné automatiquement" + type=default + else + enote "Le type de script 'manual' a été sélectionné automatiquement" + type=manual + fi + fi if [ "$type" == system-or-local ]; then echo >"$file" '#!/bin/bash '"$modeline"' -source "$(dirname "$0")/ulib/auto" +source "$(dirname "$0")/ulib/auto" || exit 1 eval "$(genparse)" ' elif [ "$type" == default ]; then echo >"$file" '#!/bin/bash '"$modeline"' -source /etc/ulibauto +source /etc/ulibauto || exit 1 eval "$(genparse)" ' elif [ "$type" == manual ]; then @@ -163,6 +189,7 @@ $modeline" } template= +type= edit=1 overwrite= encoding= @@ -170,6 +197,7 @@ executable=1 parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -t:,--template: template= \ + -T:,--type: type= \ -e,--edit edit=1 \ -g,--no-edit edit= \ -f,--overwrite overwrite=1 \ diff --git a/utempl b/utempl index df77dfd..b37df0d 100755 --- a/utempl +++ b/utempl @@ -12,8 +12,10 @@ Avant le nom du nouveau fichier, les options suivantes peuvent être utilisées: -t TEMPLATE Spécifier le modèle de fichier à utiliser. Par défaut, le modèle à utiliser est déduit de l'extension ou du nom du fichier. - -e - Editer le fichier après l'avoir créé. + -e, --edit + Editer le fichier après l'avoir créé + -g, --no-edit + Ne pas éditer le fichier après l'avoir créé Après le nom du fichier, toutes les options sont spécifiques au modèle utilisé pour créer le nouveau fichier. Utiliser l'option --help pour @@ -25,7 +27,7 @@ urequire DEFAULTS || exit 1 template= -edit= +edit=auto overwrite= encoding=auto executable=auto @@ -34,12 +36,12 @@ parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -t:,--template: template= \ -e,--edit edit=1 \ - --no-edit edit= \ + -g,--no-edit edit= \ -f,--overwrite overwrite=1 \ -E:,--encoding: encoding= \ -x,--executable executable=1 \ -n,--no-executable executable= \ - -a,-b,-c,-d,-g,-h,-i,-j,-k,-l,-m,-o,-p,-q,-r,-s,-u,-v,-w,-y,-z,-A,-B,-C,-D,-F,-G,-H,-I,-J,-K,-L,-M,-N,-O,-P,-Q,-R,-S,-T,-U,-V,-W,-X,-Y,-Z '$array_add opts "$option_"' \ + -a,-b,-c,-d,-h,-i,-j,-k,-l,-m,-o,-p,-q,-r,-s,-u,-v,-w,-y,-z,-A,-B,-C,-D,-F,-G,-H,-I,-J,-K,-L,-M,-N,-O,-P,-Q,-R,-S,-T,-U,-V,-W,-X,-Y,-Z '$array_add opts "$option_"' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" [ -n "$template" ] || template=auto @@ -87,7 +89,14 @@ fi args=() [ "$template" != "auto" ] && args=("${args[@]}" --template "$template") -args=("${args[@]}" ${edit:+--edit} ${overwrite:+--overwrite}) +if [ "$edit" != "auto" ]; then + if [ -n "$edit" ]; then + args=("${args[@]}" --edit) + else + args=("${args[@]}" --no-edit) + fi +fi +args=("${args[@]}" ${overwrite:+--overwrite}) [ "$encoding" != "auto" ] && args=("${args[@]}" --encoding "$encoding") if [ "$executable" != "auto" ]; then if [ -n "$executable" ]; then @@ -96,5 +105,4 @@ if [ "$executable" != "auto" ]; then args=("${args[@]}" --no-executable) fi fi -array_extend args opts -exec "$templ" "${args[@]}" "$file" "$@" +exec "$templ" "$file" "${args[@]}" "${opts[@]}" "$@"