Mercurial > hg
view hgext/beautifygraph.py @ 49325:bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
They are content using the same keys. Using differents object for access open
the gates for confusion in the code using them (this is already the case). So we
start fusing their usages to make the parameters more useful.
More work will be needed to make them really useful, but the first step is
here: not throwing the value away.
However this is still not making the previously introduced test useful because
currently, the default config value overwrite the one from the bundlespec. We
will fix this in the coming changesets.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 17 May 2022 16:36:32 +0100 |
parents | d44e3c45f0e4 |
children | caa0a25f7243 |
line wrap: on
line source
# -*- coding: UTF-8 -*- # beautifygraph.py - improve graph output by using Unicode characters # # Copyright 2018 John Stiles <johnstiles@gmail.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. '''beautify log -G output by using Unicode characters (EXPERIMENTAL) A terminal with UTF-8 support and monospace narrow text are required. ''' from mercurial.i18n import _ from mercurial import ( encoding, extensions, graphmod, templatekw, ) # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should # be specifying the version(s) of Mercurial they are tested with, or # leave the attribute unspecified. testedwith = b'ships-with-hg-core' def prettyedge(before, edge, after): if edge == b'~': return b'\xE2\x95\xA7' # U+2567 ╧ if edge == b'/': return b'\xE2\x95\xB1' # U+2571 ╱ if edge == b'-': return b'\xE2\x94\x80' # U+2500 ─ if edge == b'|': return b'\xE2\x94\x82' # U+2502 │ if edge == b':': return b'\xE2\x94\x86' # U+2506 ┆ if edge == b'\\': return b'\xE2\x95\xB2' # U+2572 ╲ if edge == b'+': if before == b' ' and not after == b' ': return b'\xE2\x94\x9C' # U+251C ├ if after == b' ' and not before == b' ': return b'\xE2\x94\xA4' # U+2524 ┤ return b'\xE2\x94\xBC' # U+253C ┼ return edge def convertedges(line): line = b' %s ' % line pretty = [] for idx in range(len(line) - 2): pretty.append( prettyedge( line[idx : idx + 1], line[idx + 1 : idx + 2], line[idx + 2 : idx + 3], ) ) return b''.join(pretty) def getprettygraphnode(orig, *args, **kwargs): node = orig(*args, **kwargs) if node == b'o': return b'\xE2\x97\x8B' # U+25CB ○ if node == b'@': return b'\xE2\x97\x89' # U+25C9 ◉ if node == b'%': return b'\xE2\x97\x8D' # U+25CE ◎ if node == b'*': return b'\xE2\x88\x97' # U+2217 ∗ if node == b'x': return b'\xE2\x97\x8C' # U+25CC ◌ if node == b'_': return b'\xE2\x95\xA4' # U+2564 ╤ return node def outputprettygraph(orig, ui, graph, *args, **kwargs): (edges, text) = zip(*graph) graph = zip([convertedges(e) for e in edges], text) return orig(ui, graph, *args, **kwargs) def extsetup(ui): if ui.plain(b'graph'): return if encoding.encoding != b'UTF-8': ui.warn(_(b'beautifygraph: unsupported encoding, UTF-8 required\n')) return if 'A' in encoding._wide: ui.warn( _( b'beautifygraph: unsupported terminal settings, ' b'monospace narrow text required\n' ) ) return extensions.wrapfunction(graphmod, b'outputgraph', outputprettygraph) extensions.wrapfunction(templatekw, b'getgraphnode', getprettygraphnode)