# HG changeset patch # User Durham Goode # Date 2014-01-17 08:16:48 # Node ID aa51392da50763f3e7b9ec40acc3a97682488b66 # Parent 9c6b86dd2ed20c105c9aa8fcf3a415f670402378 template: add pad function for padding output Adds a pad template function with the following signature: pad(text, width, fillchar=' ', right=False) This uses the standard python ljust and rjust functions to produce a string that is at least a certain width. This is useful for aligning variable length strings in log output (like user names or shortest(node) output). diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -245,6 +245,31 @@ def fill(context, mapping, args): return templatefilters.fill(text, width, initindent, hangindent) +def pad(context, mapping, args): + """usage: pad(text, width, fillchar=' ', right=False) + """ + if not (2 <= len(args) <= 4): + raise error.ParseError(_("pad() expects two to four arguments")) + + width = int(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: + fillchar = stringify(args[2][0](context, mapping, args[2][1])) + if len(args) > 3: + right = util.parsebool(args[3][1]) + + if right: + return text.rjust(width, fillchar) + else: + return text.ljust(width, fillchar) + def get(context, mapping, args): if len(args) != 2: # i18n: "get" is a keyword @@ -407,6 +432,7 @@ funcs = { "ifeq": ifeq, "join": join, "label": label, + "pad": pad, "rstdoc": rstdoc, "shortest": shortest, "strip": strip, diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -1637,3 +1637,17 @@ Test shortest(node) function: $ hg log --template '{shortest(node, 10)}\n' d97c383ae3 f7769ec2ab + +Test pad function + + $ hg log --template '{pad(rev, 20)} {author|user}\n' + 1 test + 0 test + + $ hg log --template '{pad(rev, 20, " ", True)} {author|user}\n' + 1 test + 0 test + + $ hg log --template '{pad(rev, 20, "-", False)} {author|user}\n' + 1------------------- test + 0------------------- test