diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -14,6 +14,7 @@ import types from .i18n import _ from . import ( config, + encoding, error, minirst, parser, @@ -581,10 +582,13 @@ def pad(context, mapping, args): if len(args) > 3: left = evalboolean(context, mapping, args[3]) + fillwidth = width - encoding.colwidth(text) + if fillwidth <= 0: + return text if left: - return text.rjust(width, fillchar) + return fillchar * fillwidth + text else: - return text.ljust(width, fillchar) + return text + fillchar * fillwidth @templatefunc('indent(text, indentchars[, firstline])') def indent(context, mapping, args): 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 @@ -4115,6 +4115,11 @@ utf8 filter: abort: template filter 'utf8' is not compatible with keyword 'rev' [255] +pad width: + + $ HGENCODING=utf-8 hg debugtemplate "{pad('`cat utf-8`', 2, '-')}\n" + \xc3\xa9- (esc) + $ cd .. Test that template function in extension is registered as expected