Show More
@@ -296,6 +296,23 b' def _effect_str(ui, effect):' | |||||
296 | else: |
|
296 | else: | |
297 | return curses.tparm(curses.tigetstr('setaf'), val) |
|
297 | return curses.tparm(curses.tigetstr('setaf'), val) | |
298 |
|
298 | |||
|
299 | def _mergeeffects(text, start, stop): | |||
|
300 | """Insert start sequence at every occurrence of stop sequence | |||
|
301 | ||||
|
302 | >>> s = _mergeeffects('cyan', '[C]', '|') | |||
|
303 | >>> s = _mergeeffects(s + 'yellow', '[Y]', '|') | |||
|
304 | >>> s = _mergeeffects('ma' + s + 'genta', '[M]', '|') | |||
|
305 | >>> s = _mergeeffects('red' + s, '[R]', '|') | |||
|
306 | >>> s | |||
|
307 | '[R]red[M]ma[Y][C]cyan|[R][M][Y]yellow|[R][M]genta|' | |||
|
308 | """ | |||
|
309 | parts = [] | |||
|
310 | for t in text.split(stop): | |||
|
311 | if not t: | |||
|
312 | continue | |||
|
313 | parts.extend([start, t, stop]) | |||
|
314 | return ''.join(parts) | |||
|
315 | ||||
299 | def _render_effects(ui, text, effects): |
|
316 | def _render_effects(ui, text, effects): | |
300 | 'Wrap text in commands to turn on each effect.' |
|
317 | 'Wrap text in commands to turn on each effect.' | |
301 | if not text: |
|
318 | if not text: | |
@@ -308,7 +325,7 b' def _render_effects(ui, text, effects):' | |||||
308 | start = [str(_effects[e]) for e in ['none'] + effects.split()] |
|
325 | start = [str(_effects[e]) for e in ['none'] + effects.split()] | |
309 | start = '\033[' + ';'.join(start) + 'm' |
|
326 | start = '\033[' + ';'.join(start) + 'm' | |
310 | stop = '\033[' + str(_effects['none']) + 'm' |
|
327 | stop = '\033[' + str(_effects['none']) + 'm' | |
311 | return ''.join([start, text, stop]) |
|
328 | return _mergeeffects(text, start, stop) | |
312 |
|
329 | |||
313 | def colorlabel(ui, msg, label): |
|
330 | def colorlabel(ui, msg, label): | |
314 | """add color control code according to the mode""" |
|
331 | """add color control code according to the mode""" |
@@ -3348,6 +3348,12 b' color effect can be specified without qu' | |||||
3348 | $ hg log --color=always -l 1 --template '{label(red, "text\n")}' |
|
3348 | $ hg log --color=always -l 1 --template '{label(red, "text\n")}' | |
3349 | \x1b[0;31mtext\x1b[0m (esc) |
|
3349 | \x1b[0;31mtext\x1b[0m (esc) | |
3350 |
|
3350 | |||
|
3351 | color effects can be nested (issue5413) | |||
|
3352 | ||||
|
3353 | $ hg debugtemplate --color=always \ | |||
|
3354 | > '{label(red, "red{label(magenta, "ma{label(cyan, "cyan")}{label(yellow, "yellow")}genta")}")}\n' | |||
|
3355 | \x1b[0;31mred\x1b[0;35mma\x1b[0;36mcyan\x1b[0m\x1b[0;31m\x1b[0;35m\x1b[0;33myellow\x1b[0m\x1b[0;31m\x1b[0;35mgenta\x1b[0m (esc) | |||
|
3356 | ||||
3351 | label should be no-op if color is disabled: |
|
3357 | label should be no-op if color is disabled: | |
3352 |
|
3358 | |||
3353 | $ hg log --color=never -l 1 --template '{label(red, "text\n")}' |
|
3359 | $ hg log --color=never -l 1 --template '{label(red, "text\n")}' |
@@ -23,6 +23,7 b' def testmod(name, optionflags=0, testtar' | |||||
23 |
|
23 | |||
24 | testmod('mercurial.changegroup') |
|
24 | testmod('mercurial.changegroup') | |
25 | testmod('mercurial.changelog') |
|
25 | testmod('mercurial.changelog') | |
|
26 | testmod('mercurial.color') | |||
26 | testmod('mercurial.config') |
|
27 | testmod('mercurial.config') | |
27 | testmod('mercurial.dagparser', optionflags=doctest.NORMALIZE_WHITESPACE) |
|
28 | testmod('mercurial.dagparser', optionflags=doctest.NORMALIZE_WHITESPACE) | |
28 | testmod('mercurial.dispatch') |
|
29 | testmod('mercurial.dispatch') |
General Comments 0
You need to be logged in to leave comments.
Login now