[PATCH 4 of 6] color: move 'write' logic to the core ui class
Yuya Nishihara
yuya at tcha.org
Thu Feb 23 09:11:20 EST 2017
On Wed, 22 Feb 2017 17:54:35 +0100, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
> # Date 1487590299 -3600
> # Mon Feb 20 12:31:39 2017 +0100
> # Node ID 0f2be97ca31046bbf9c9f37fcdacf7b406e94054
> # Parent 9a9e8b28b717e30ed43030cc64f115a4356193de
> # EXP-Topic color
> color: move 'write' logic to the core ui class
> --- a/mercurial/ui.py Mon Feb 20 12:31:24 2017 +0100
> +++ b/mercurial/ui.py Mon Feb 20 12:31:39 2017 +0100
> @@ -779,28 +779,40 @@ class ui(object):
> def write(self, *args, **opts):
> '''write args to output
>
> - By default, this method simply writes to the buffer or stdout,
> - but extensions or GUI tools may override this method,
> - write_err(), popbuffer(), and label() to style output from
> - various parts of hg.
> + By default, this method simply writes to the buffer or stdout.
> + Color mode can be set on the UI class to have the output decorated
> + with color modifier before behing writed to stdout.
>
> - An optional keyword argument, "label", can be passed in.
> - This should be a string containing label names separated by
> - space. Label names take the form of "topic.type". For example,
> - ui.debug() issues a label of "ui.debug".
> + The color used is controled by an optional keyword argument, "label".
> + This should be a string containing label names separated by space.
> + Label names take the form of "topic.type". For example, ui.debug()
> + issues a label of "ui.debug".
>
> When labeling output for a specific command, a label of
> "cmdname.type" is recommended. For example, status issues
> a label of "status.modified" for modified files.
> '''
> if self._buffers and not opts.get('prompt', False):
> - self._buffers[-1].extend(a for a in args)
> + if self._bufferapplylabels:
> + label = opts.get('label', '')
> + self._buffers[-1].extend(self.label(a, label) for a in args)
> + else:
> + self._buffers[-1].extend(args)
> + elif self._colormode == 'win32':
> + for a in args:
> + # windows color printing is its own can of crab, defer to
> + # the color module and that is it.
> + color.win32print(a, self.fout.write, **opts)
Nit: perhaps win32print() should be counted as a stdio_blocked section.
> else:
> + msgs = args
> + if self._colormode is not None:
> + label = opts.get('label', '')
> + msgs = [self.label(a, label) for a in args]
> self._progclear()
> # opencode timeblockedsection because this is a critical path
> starttime = util.timer()
> try:
> - for a in args:
> + for a in msgs:
> self.fout.write(a)
> finally:
> self._blockedtimes['stdio_blocked'] += \
More information about the Mercurial-devel
mailing list