121 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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[@]}"
 |