tailor.py et chrono.py: améliorer l'affichage de l'aide
This commit is contained in:
parent
6f1d5e5947
commit
e4b7714799
55
chrono.py
55
chrono.py
|
@ -273,26 +273,55 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
Application(timeout, autostart).mainloop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
from argparse import ArgumentParser, RawTextHelpFormatter
|
||||
from argparse import ArgumentParser, HelpFormatter
|
||||
if sys.argv[1:2] == ['--compat']:
|
||||
# Avec l'argument --compat, désactiver la classe FancyHelpFormatter qui
|
||||
# se base sur une API non documentée
|
||||
sys.argv = sys.argv[0:1] + sys.argv[2:]
|
||||
FancyHelpFormatter = HelpFormatter
|
||||
else:
|
||||
class FancyHelpFormatter(HelpFormatter):
|
||||
"""Comme HelpFormatter, mais ne touche pas aux lignes qui commencent par les
|
||||
caractères '>>>'. Cela permet de mixer du texte formaté et du texte non
|
||||
formaté.
|
||||
"""
|
||||
def _fill_text(self, text, width, indent):
|
||||
return ''.join([indent + line for line in text.splitlines(True)])
|
||||
def _split_lines(self, text, width):
|
||||
lines = ['']
|
||||
for line in text.splitlines():
|
||||
if line.startswith('>>>'):
|
||||
lines.append(line)
|
||||
lines.append('')
|
||||
else:
|
||||
lines[-1] += '\n' + line
|
||||
lines = filter(None, lines)
|
||||
texts = []
|
||||
for line in lines:
|
||||
if line.startswith('>>>'):
|
||||
texts.append(line[3:])
|
||||
else:
|
||||
texts.extend(super(FancyHelpFormatter, self)._split_lines(line, width))
|
||||
return texts
|
||||
AP = ArgumentParser(
|
||||
formatter_class=RawTextHelpFormatter,
|
||||
usage=u"%(prog)s [options] [TIMEOUT]",
|
||||
description=u"Afficher un chronomètre",
|
||||
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement."
|
||||
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement.",
|
||||
formatter_class=FancyHelpFormatter,
|
||||
)
|
||||
AP.set_defaults(autostart=None, timeout=None)
|
||||
AP.add_argument('timeout', metavar='TIMEOUT', nargs='?',
|
||||
help=u"""\
|
||||
(valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
H:M:S (heures:minutes:secondes)
|
||||
ou M:S (minutes:secondes)
|
||||
ou M (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
@H[:M[:S]]
|
||||
minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure
|
||||
d'arrivée, et que la durée est calculée automatiquement""")
|
||||
>>> (valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
>>> H:M:S (heures:minutes:secondes)
|
||||
>>> ou M:S (minutes:secondes)
|
||||
>>> ou M (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
>>> @H[:M[:S]]
|
||||
minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure
|
||||
d'arrivée, et que la durée est calculée automatiquement""")
|
||||
AP.add_argument('-n', '--no-autostart', dest='autostart', action='store_false',
|
||||
help=u"Ne pas démarrer automatiquement le décompte même si TIMEOUT est spécifié.")
|
||||
AP.add_argument('-s', '--autostart', dest='autostart', action='store_true',
|
||||
|
|
44
tailor.py
44
tailor.py
|
@ -88,22 +88,58 @@ def run_tailor(inputfile=None, follow=False, patterns=None):
|
|||
sys.stdout.write('\n')
|
||||
|
||||
if __name__ == '__main__':
|
||||
from argparse import ArgumentParser
|
||||
from argparse import ArgumentParser, HelpFormatter
|
||||
if sys.argv[1:2] == ['--compat']:
|
||||
# Avec l'argument --compat, désactiver la classe FancyHelpFormatter qui
|
||||
# se base sur une API non documentée
|
||||
sys.argv = sys.argv[0:1] + sys.argv[2:]
|
||||
FancyHelpFormatter = HelpFormatter
|
||||
else:
|
||||
class FancyHelpFormatter(HelpFormatter):
|
||||
"""Comme HelpFormatter, mais ne touche pas aux lignes qui commencent par les
|
||||
caractères '>>>'. Cela permet de mixer du texte formaté et du texte non
|
||||
formaté.
|
||||
"""
|
||||
def _fill_text(self, text, width, indent):
|
||||
return ''.join([indent + line for line in text.splitlines(True)])
|
||||
def _split_lines(self, text, width):
|
||||
lines = ['']
|
||||
for line in text.splitlines():
|
||||
if line.startswith('>>>'):
|
||||
lines.append(line)
|
||||
lines.append('')
|
||||
else:
|
||||
lines[-1] += '\n' + line
|
||||
lines = filter(None, lines)
|
||||
texts = []
|
||||
for line in lines:
|
||||
if line.startswith('>>>'):
|
||||
texts.append(line[3:])
|
||||
else:
|
||||
texts.extend(super(FancyHelpFormatter, self)._split_lines(line, width))
|
||||
return texts
|
||||
AP = ArgumentParser(
|
||||
usage=u"%(prog)s [-f] [INPUTFILE]",
|
||||
description=__doc__,
|
||||
formatter_class=FancyHelpFormatter,
|
||||
)
|
||||
AP.set_defaults(inputfile=None, follow=False, patterns=None, defaults=True)
|
||||
pattern_help = u"""\
|
||||
Ajouter une spécification de pattern et le format dans lequel il doit être affiché.
|
||||
Le format par défaut est red.
|
||||
Les formats valides sont: %(formats)s""" % {
|
||||
Le format par défaut est red. Les formats valides sont:
|
||||
>>> %(formats)s""" % {
|
||||
'formats': ', '.join(FORMATS.keys()),
|
||||
}
|
||||
AP.add_argument('-e', '--pattern', action='append', dest='patterns', metavar='PATTERN:FORMAT',
|
||||
help=pattern_help)
|
||||
default_patterns = [u"%s:%s" % (p or '', f.__name__[:-1]) for (p, f) in DEFAULT_PATTERNS.items()]
|
||||
no_defaults_help = u"""\
|
||||
Ne pas ajouter les patterns par défaut. Sans cette option, les patterns par défaut sont:
|
||||
%(default_patterns)s""" % {
|
||||
'default_patterns': '\n'.join([u">>> %s" % pattern for pattern in default_patterns]),
|
||||
}
|
||||
AP.add_argument('-z', '--no-defaults', action='store_false', dest='defaults',
|
||||
help=u"Ne pas ajouter les patterns par défaut")
|
||||
help=no_defaults_help)
|
||||
AP.add_argument('-f', '--follow', action='store_true', dest='follow',
|
||||
help=u"Suivre le contenu du fichier spécifié")
|
||||
AP.add_argument('inputfile', metavar='INPUTFILE', nargs='?',
|
||||
|
|
Loading…
Reference in New Issue