mercurial/color.py
changeset 31689 57a22f699179
parent 31521 44c591f63458
child 31716 439a387ca6f1
equal deleted inserted replaced
31688:c5fe0c7dad94 31689:57a22f699179
   236     if realmode == 'win32':
   236     if realmode == 'win32':
   237         ui._terminfoparams.clear()
   237         ui._terminfoparams.clear()
   238         if not w32effects:
   238         if not w32effects:
   239             modewarn()
   239             modewarn()
   240             return None
   240             return None
   241         _effects.update(w32effects)
       
   242     elif realmode == 'ansi':
   241     elif realmode == 'ansi':
   243         ui._terminfoparams.clear()
   242         ui._terminfoparams.clear()
   244     elif realmode == 'terminfo':
   243     elif realmode == 'terminfo':
   245         _terminfosetup(ui, mode)
   244         _terminfosetup(ui, mode)
   246         if not ui._terminfoparams:
   245         if not ui._terminfoparams:
   269                     ui.warn(_("ignoring unknown color/effect %r "
   268                     ui.warn(_("ignoring unknown color/effect %r "
   270                               "(configured in color.%s)\n")
   269                               "(configured in color.%s)\n")
   271                             % (e, status))
   270                             % (e, status))
   272             ui._styles[status] = ' '.join(good)
   271             ui._styles[status] = ' '.join(good)
   273 
   272 
       
   273 def _activeeffects(ui):
       
   274     '''Return the effects map for the color mode set on the ui.'''
       
   275     if ui._colormode == 'win32':
       
   276         return w32effects
       
   277     elif ui._colormode is not None:
       
   278         return _effects
       
   279     return {}
       
   280 
   274 def valideffect(ui, effect):
   281 def valideffect(ui, effect):
   275     'Determine if the effect is valid or not.'
   282     'Determine if the effect is valid or not.'
   276     return ((not ui._terminfoparams and effect in _effects)
   283     return ((not ui._terminfoparams and effect in _activeeffects(ui))
   277              or (effect in ui._terminfoparams
   284              or (effect in ui._terminfoparams
   278                  or effect[:-11] in ui._terminfoparams))
   285                  or effect[:-11] in ui._terminfoparams))
   279 
   286 
   280 def _effect_str(ui, effect):
   287 def _effect_str(ui, effect):
   281     '''Helper function for render_effects().'''
   288     '''Helper function for render_effects().'''
   322     if ui._terminfoparams:
   329     if ui._terminfoparams:
   323         start = ''.join(_effect_str(ui, effect)
   330         start = ''.join(_effect_str(ui, effect)
   324                         for effect in ['none'] + effects.split())
   331                         for effect in ['none'] + effects.split())
   325         stop = _effect_str(ui, 'none')
   332         stop = _effect_str(ui, 'none')
   326     else:
   333     else:
   327         start = [str(_effects[e]) for e in ['none'] + effects.split()]
   334         activeeffects = _activeeffects(ui)
       
   335         start = [str(activeeffects[e]) for e in ['none'] + effects.split()]
   328         start = '\033[' + ';'.join(start) + 'm'
   336         start = '\033[' + ';'.join(start) + 'm'
   329         stop = '\033[' + str(_effects['none']) + 'm'
   337         stop = '\033[' + str(activeeffects['none']) + 'm'
   330     return _mergeeffects(text, start, stop)
   338     return _mergeeffects(text, start, stop)
   331 
   339 
   332 _ansieffectre = re.compile(br'\x1b\[[0-9;]*m')
   340 _ansieffectre = re.compile(br'\x1b\[[0-9;]*m')
   333 
   341 
   334 def stripeffects(text):
   342 def stripeffects(text):