# HG changeset patch # User Pierre-Yves David # Date 2017-02-25 14:00:51 # Node ID 268caf97c38f4543c088e2e3938b9f33e55ff959 # Parent 7f056fdbe37eb59a1e4f5e93262917a50491e081 color: move the dict with terminfo parameters on the ui object This dictionnary is affected by the content of the config, so we should have one for each ui config. We rename the global dict to '_baseterminfoparams' to make the situation clearer. diff --git a/hgext/color.py b/hgext/color.py --- a/hgext/color.py +++ b/hgext/color.py @@ -212,7 +212,7 @@ def _debugdisplaycolor(ui): color._styles.clear() for effect in color._effects.keys(): color._styles[effect] = effect - if color._terminfo_params: + if ui._terminfoparams: for k, v in ui.configitems('color'): if k.startswith('color.'): color._styles[k] = k[6:] diff --git a/mercurial/color.py b/mercurial/color.py --- a/mercurial/color.py +++ b/mercurial/color.py @@ -19,7 +19,7 @@ try: import curses # Mapping from effect name to terminfo attribute name (or raw code) or # color number. This will also force-load the curses module. - _terminfo_params = { + _baseterminfoparams = { 'none': (True, 'sgr0', ''), 'standout': (True, 'smso', ''), 'underline': (True, 'smul', ''), @@ -41,7 +41,7 @@ try: } except ImportError: curses = None - _terminfo_params = {} + _baseterminfoparams = {} # allow the extensions to change the default _enabledbydefault = False @@ -140,35 +140,36 @@ def _terminfosetup(ui, mode): # Otherwise, see what the config file says. if mode not in ('auto', 'terminfo'): return + ui._terminfoparams.update(_baseterminfoparams) for key, val in ui.configitems('color'): if key.startswith('color.'): newval = (False, int(val), '') - _terminfo_params[key[6:]] = newval + ui._terminfoparams[key[6:]] = newval elif key.startswith('terminfo.'): newval = (True, '', val.replace('\\E', '\x1b')) - _terminfo_params[key[9:]] = newval + ui._terminfoparams[key[9:]] = newval try: curses.setupterm() except curses.error as e: - _terminfo_params.clear() + ui._terminfoparams.clear() return - for key, (b, e, c) in _terminfo_params.items(): + for key, (b, e, c) in ui._terminfoparams.items(): if not b: continue if not c and not curses.tigetstr(e): # Most terminals don't support dim, invis, etc, so don't be # noisy and use ui.debug(). ui.debug("no terminfo entry for %s\n" % e) - del _terminfo_params[key] + del ui._terminfoparams[key] if not curses.tigetstr('setaf') or not curses.tigetstr('setab'): # Only warn about missing terminfo entries if we explicitly asked for # terminfo mode. if mode == "terminfo": ui.warn(_("no terminfo entry for setab/setaf: reverting to " "ECMA-48 color\n")) - _terminfo_params.clear() + ui._terminfoparams.clear() def setup(ui): """configure color on a ui @@ -232,16 +233,16 @@ def _modesetup(ui): ui.warn(_('warning: failed to set color mode to %s\n') % mode) if realmode == 'win32': - _terminfo_params.clear() + ui._terminfoparams.clear() if not w32effects: modewarn() return None _effects.update(w32effects) elif realmode == 'ansi': - _terminfo_params.clear() + ui._terminfoparams.clear() elif realmode == 'terminfo': _terminfosetup(ui, mode) - if not _terminfo_params: + if not ui._terminfoparams: ## FIXME Shouldn't we return None in this case too? modewarn() realmode = 'ansi' @@ -270,9 +271,9 @@ def configstyles(ui): def valideffect(ui, effect): 'Determine if the effect is valid or not.' - return ((not _terminfo_params and effect in _effects) - or (effect in _terminfo_params - or effect[:-11] in _terminfo_params)) + return ((not ui._terminfoparams and effect in _effects) + or (effect in ui._terminfoparams + or effect[:-11] in ui._terminfoparams)) def _effect_str(ui, effect): '''Helper function for render_effects().''' @@ -282,7 +283,7 @@ def _effect_str(ui, effect): bg = True effect = effect[:-11] try: - attr, val, termcode = _terminfo_params[effect] + attr, val, termcode = ui._terminfoparams[effect] except KeyError: return '' if attr: @@ -299,7 +300,7 @@ def _render_effects(ui, text, effects): 'Wrap text in commands to turn on each effect.' if not text: return text - if _terminfo_params: + if ui._terminfoparams: start = ''.join(_effect_str(ui, effect) for effect in ['none'] + effects.split()) stop = _effect_str(ui, 'none') diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -157,6 +157,7 @@ class ui(object): self.logblockedtimes = False # color mode: see mercurial/color.py for possible value self._colormode = None + self._terminfoparams = {} if src: self.fout = src.fout @@ -174,6 +175,7 @@ class ui(object): self.callhooks = src.callhooks self.insecureconnections = src.insecureconnections self._colormode = src._colormode + self._terminfoparams = src._terminfoparams.copy() self.fixconfig()