Mercurial > hg
changeset 31091:ad074f900907
color: move 'write' logic to the core ui class
One more step, the support for writing color is not directly in core. No
behavior change for the default case ('_colormode' = None).
Here are the details of what we have to change to the core method:
* apply to 'self.label' to input in the buffered case
* dispatch to 'win32print' when applicable
* apply to 'self.label' to input when applicable
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Mon, 20 Feb 2017 12:31:39 +0100 |
parents | e9f96ccf36a6 |
children | cb759f7f940d |
files | hgext/color.py mercurial/ui.py |
diffstat | 2 files changed, 21 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/color.py Fri Feb 24 19:27:00 2017 +0100 +++ b/hgext/color.py Mon Feb 20 12:31:39 2017 +0100 @@ -297,21 +297,6 @@ return None class colorui(uimod.ui): - def write(self, *args, **opts): - if self._colormode is None: - return super(colorui, self).write(*args, **opts) - - label = opts.get('label', '') - if self._buffers and not opts.get('prompt', False): - if self._bufferapplylabels: - self._buffers[-1].extend(self.label(a, label) for a in args) - else: - self._buffers[-1].extend(args) - elif self._colormode == 'win32': - color.win32print(super(colorui, self).write, *args, **opts) - else: - return super(colorui, self).write( - *[self.label(a, label) for a in args], **opts) def write_err(self, *args, **opts): if self._colormode is None:
--- a/mercurial/ui.py Fri Feb 24 19:27:00 2017 +0100 +++ b/mercurial/ui.py Mon Feb 20 12:31:39 2017 +0100 @@ -779,24 +779,35 @@ 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 being written 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 controlled 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': + # windows color printing is its own can of crab, defer to + # the color module and that is it. + color.win32print(self._write, *args, **opts) else: - self._write(*args, **opts) + msgs = args + if self._colormode is not None: + label = opts.get('label', '') + msgs = [self.label(a, label) for a in args] + self._write(*msgs, **opts) def _write(self, *msgs, **opts): self._progclear()