[PATCH 2 of 2] template: add pad function for padding output
Augie Fackler
raf at durin42.com
Fri Jan 17 08:20:01 CST 2014
On Fri, Jan 17, 2014 at 02:41:36PM +0100, Mads Kiilerich wrote:
> On 01/17/2014 09:45 AM, Durham Goode wrote:
> ># HG changeset patch
> ># User Durham Goode <durham at fb.com>
> ># Date 1389946608 28800
> ># Fri Jan 17 00:16:48 2014 -0800
> ># Node ID 77cf62dd2af0b5631a2864744e720e61ad4cde6a
> ># Parent b18359a70b640d2aeb3f4afd1c8e47d775402b8e
> >template: add pad function for padding output
> >
> >Adds a pad template function with the following signature:
> >
> >pad(text, width, right=False, fillchar=' ')
>
> Nice. I have been missing some printf-ish functionality too.
>
> I kind of expected the 'fill' function to do this (or something very
> similar) ... especially for short strings. Having a separate "fill or
> overflow" function might make sense. Next on the feature creep list would be
> a fill that strips instead of overflowing. ;-)
>
> I thought it was possible to have filters with parameters. That would have
> seemed like a more obvious way of doing it to me. But apparently not. I
> wonder if it would be feasible to fix that ... but I assume that when/if
> that is fixed then it will be possible to use this as a filter.
>
> >This uses the standard python ljust and rjust functions to produce a string
> >that is at least a certain width. This is especially useful with the
> >introduction of a '{shortestnode}' keyword, since the output can be variable
> >length.
>
> True, but I know how to get hashes with a fixed width. It is much harder
> with usernames and branch names and commit messages ;-)
>
> >diff --git a/mercurial/templater.py b/mercurial/templater.py
> >--- a/mercurial/templater.py
> >+++ b/mercurial/templater.py
> >@@ -245,6 +245,31 @@
> > return templatefilters.fill(text, width, initindent, hangindent)
> >+def pad(context, mapping, args):
> >+ """usage: pad(text, width, right=False, fillchar=' ')
> >+ """
> >+ if not (2 <= len(args) <= 4):
> >+ raise error.ParseError(_("pad() expects two to four arguments"))
> >+
> >+ width = int(stringify(args[1][0](context, mapping, args[1][1])))
> >+
> >+ text = stringify(args[0][0](context, mapping, args[0][1]))
> >+ if args[0][0] == runstring:
> >+ text = stringify(runtemplate(context, mapping,
> >+ compiletemplate(text, context)))
> >+
> >+ right = False
> >+ fillchar = ' '
> >+ if len(args) > 2:
> >+ right = stringify(args[2][0](context, mapping, args[2][1])) == "True"
>
> Expecting a literal "True" would surprise me as a user. Most other boolean
> inputs use util.parsebool.
+1 on util.parsebool for consistency
>
> But I think I would suggest having a separate 'rpad' "filter" instead.
>
> /Mads
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list