#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 function display_help() { uecho "$scriptname: Créer un nouveau fichier à partir d'un modèle USAGE $scriptname [options] file [template options] OPTIONS 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, --edit Editer le fichier après l'avoir créé -g, --no-edit Ne pas éditer le fichier après l'avoir créé --no-fndate Désactiver le support du marqueur ~~ pour dater le fichier. Par défaut, utiliser 'fndate -c $scriptname' si le nom du fichier contient le marqueur ~~ 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 avoir une description des options disponibles." } template= edit=auto fndate=1 overwrite= encoding=auto executable=auto opts=() # options non reconnues passées au template parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -t:,--template: template= \ -e,--edit edit=1 \ --no-fndate fndate= \ -g,--no-edit edit= \ -f,--overwrite overwrite=1 \ -E:,--encoding: encoding= \ -x,--executable executable=1 \ -n,--no-executable executable= \ -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 TEMPLATES=() TEMPLS=() templdir="$scriptdir/lib/templates" if [ -f "$templdir/templates.conf" ]; then source "$templdir/templates.conf" for at in "${TEMPLATES[@]}"; do splitpair "$at" a t if [ "$template" == "$a" ]; then template="$t" break fi done fi array_lsfiles templs "$templdir" file="$1"; shift found=1 templ="$templdir/$template" if [ ! -f "$templ" ]; then found= for at in "${TEMPLS[@]}"; do splitpair "$at" a t if [ "$template" == "$a" ]; then templ="$templdir/$t" found=1 break fi [ -n "$found" ] || templ= done if [ -z "$found" ]; then for templ in "${templs[@]}"; do if [ -x "$templ" ] && "$templ" --matches-template "$template"; then found=1 break fi done [ -n "$found" ] || templ= fi fi [ -n "$found" -a -x "$templ" ] || die "$file: Impossible de trouver le template $template${templ:+ ($(basename "$templ"))}" if [ -n "$fndate" ]; then # n'utiliser fndate que si le marqueur est présent setx filename=basename -- "$file" [[ "$filename" == *~~* ]] || fndate= fi args=() [ "$template" != "auto" ] && args=("${args[@]}" --template "$template") 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 args=("${args[@]}" --executable) else args=("${args[@]}" --no-executable) fi fi cmd=("$templ" "$file" "${args[@]}" "${opts[@]}" "$@") [ -n "$fndate" ] && cmd=("$scriptdir/fndate" -c --cmd-quiet -- "${cmd[@]}") exec "${cmd[@]}"