hgext/color.py
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
Wed, 05 Aug 2009 15:00:44 +0200
changeset 9311 e37e9904bf10
parent 9255 acfbb88c6ced
child 9374 ad73f6986ef5
permissions -rw-r--r--
color: simplify & improve colorization of qseries Use 'repo.mq.series' to obtain patch names, instead of deriving them from the qseries output. This is both simpler and more robust, and fixes colorization of patches without a message with -s/--summary.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     1
# color.py color output for the status and qseries commands
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     2
#
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     3
# Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.com>
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     4
#
5792
956e01c31914 color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents: 5787
diff changeset
     5
# This program is free software; you can redistribute it and/or modify it
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     6
# under the terms of the GNU General Public License as published by the
5792
956e01c31914 color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents: 5787
diff changeset
     7
# Free Software Foundation; either version 2 of the License, or (at your
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     8
# option) any later version.
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
     9
#
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    10
# This program is distributed in the hope that it will be useful, but
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    11
# WITHOUT ANY WARRANTY; without even the implied warranty of
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    13
# Public License for more details.
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    14
#
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    15
# You should have received a copy of the GNU General Public License along
5792
956e01c31914 color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents: 5787
diff changeset
    16
# with this program; if not, write to the Free Software Foundation, Inc.,
956e01c31914 color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents: 5787
diff changeset
    17
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    18
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8866
diff changeset
    19
'''colorize output from some commands
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    20
9255
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    21
This extension modifies the status command to add color to its output
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    22
to reflect file status, the qseries command to add color to reflect
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    23
patch status (applied, unapplied, missing), and to diff-related
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    24
commands to highlight additions, removals, diff headers, and trailing
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    25
whitespace.
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
    26
9255
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    27
Other effects in addition to color, like bold and underlined text, are
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    28
also available. Effects are rendered with the ECMA-48 SGR control
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    29
function (aka ANSI escape codes). This module also provides the
acfbb88c6ced color: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9206
diff changeset
    30
render_text function, which can be used to add effects to any text.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    31
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    32
Default effects may be overridden from the .hgrc file::
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    33
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    34
  [color]
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    35
  status.modified = blue bold underline red_background
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    36
  status.added = green bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    37
  status.removed = red bold blue_background
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    38
  status.deleted = cyan bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    39
  status.unknown = magenta bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    40
  status.ignored = black bold
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    41
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    42
  # 'none' turns off all effects
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    43
  status.clean = none
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    44
  status.copied = none
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    45
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    46
  qseries.applied = blue bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    47
  qseries.unapplied = black bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    48
  qseries.missing = red bold
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
    49
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    50
  diff.diffline = bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    51
  diff.extended = cyan bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    52
  diff.file_a = red bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    53
  diff.file_b = green bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    54
  diff.hunk = magenta
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    55
  diff.deleted = red
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    56
  diff.inserted = green
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    57
  diff.changed = white
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
    58
  diff.trailingwhitespace = bold red_background
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    59
'''
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    60
8623
0c159aa7b329 color: replace re.split with ui.configlist
Martin Geisler <mg@lazybytes.net>
parents: 8622
diff changeset
    61
import os, sys
9311
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
    62
import itertools
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    63
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
    64
from mercurial import cmdutil, commands, extensions, error
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    65
from mercurial.i18n import _
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    66
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    67
# start and stop parameters for effects
7459
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    68
_effect_params = {'none': 0,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    69
                  'black': 30,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    70
                  'red': 31,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    71
                  'green': 32,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    72
                  'yellow': 33,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    73
                  'blue': 34,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    74
                  'magenta': 35,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    75
                  'cyan': 36,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    76
                  'white': 37,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    77
                  'bold': 1,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    78
                  'italic': 3,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    79
                  'underline': 4,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    80
                  'inverse': 7,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    81
                  'black_background': 40,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    82
                  'red_background': 41,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    83
                  'green_background': 42,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    84
                  'yellow_background': 43,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    85
                  'blue_background': 44,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    86
                  'purple_background': 45,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    87
                  'cyan_background': 46,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    88
                  'white_background': 47}
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    89
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
    90
def render_effects(text, effects):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    91
    'Wrap text in commands to turn on each effect.'
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
    92
    start = [str(_effect_params[e]) for e in ['none'] + effects]
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    93
    start = '\033[' + ';'.join(start) + 'm'
7459
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    94
    stop = '\033[' + str(_effect_params['none']) + 'm'
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    95
    return ''.join([start, text, stop])
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    96
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
    97
def colorstatus(orig, ui, repo, *pats, **opts):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    98
    '''run the status command with colored output'''
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    99
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   100
    delimiter = opts['print0'] and '\0' or '\n'
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   101
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   102
    nostatus = opts.get('no_status')
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   103
    opts['no_status'] = False
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   104
    # run status and capture its output
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   105
    ui.pushbuffer()
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   106
    retval = orig(ui, repo, *pats, **opts)
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   107
    # filter out empty strings
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   108
    lines_with_status = [ line for line in ui.popbuffer().split(delimiter) if line ]
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   109
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   110
    if nostatus:
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   111
        lines = [l[2:] for l in lines_with_status]
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   112
    else:
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   113
        lines = lines_with_status
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   114
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   115
    # apply color to output and display it
8624
2b3dec0ef3ae replace xrange(0, n) with xrange(n)
Martin Geisler <mg@lazybytes.net>
parents: 8623
diff changeset
   116
    for i in xrange(len(lines)):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   117
        status = _status_abbreviations[lines_with_status[i][0]]
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   118
        effects = _status_effects[status]
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   119
        if effects:
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   120
            lines[i] = render_effects(lines[i], effects)
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   121
        ui.write(lines[i] + delimiter)
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   122
    return retval
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   123
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   124
_status_abbreviations = { 'M': 'modified',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   125
                          'A': 'added',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   126
                          'R': 'removed',
5796
7705d308eb5e Fix status char in color extension for deleted (missing) files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5792
diff changeset
   127
                          '!': 'deleted',
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   128
                          '?': 'unknown',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   129
                          'I': 'ignored',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   130
                          'C': 'clean',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   131
                          ' ': 'copied', }
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   132
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   133
_status_effects = { 'modified': ['blue', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   134
                    'added': ['green', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   135
                    'removed': ['red', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   136
                    'deleted': ['cyan', 'bold', 'underline'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   137
                    'unknown': ['magenta', 'bold', 'underline'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   138
                    'ignored': ['black', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   139
                    'clean': ['none'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   140
                    'copied': ['none'], }
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   141
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   142
def colorqseries(orig, ui, repo, *dummy, **opts):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   143
    '''run the qseries command with colored output'''
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   144
    ui.pushbuffer()
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   145
    retval = orig(ui, repo, **opts)
9311
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
   146
    patchlines = ui.popbuffer().splitlines()
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
   147
    patchnames = repo.mq.series
6855
09db2b8236ec Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents: 6854
diff changeset
   148
9311
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
   149
    for patch, patchname in itertools.izip(patchlines, patchnames):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   150
        if opts['missing']:
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   151
            effects = _patch_effects['missing']
6855
09db2b8236ec Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents: 6854
diff changeset
   152
        # Determine if patch is applied.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   153
        elif [ applied for applied in repo.mq.applied
6855
09db2b8236ec Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents: 6854
diff changeset
   154
               if patchname == applied.name ]:
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   155
            effects = _patch_effects['applied']
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   156
        else:
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   157
            effects = _patch_effects['unapplied']
9017
c24c9ce0cdcf color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8963
diff changeset
   158
c24c9ce0cdcf color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8963
diff changeset
   159
        patch = patch.replace(patchname, render_effects(patchname, effects), 1)
c24c9ce0cdcf color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8963
diff changeset
   160
        ui.write(patch + '\n')
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   161
    return retval
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   162
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   163
_patch_effects = { 'applied': ['blue', 'bold', 'underline'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   164
                   'missing': ['red', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   165
                   'unapplied': ['black', 'bold'], }
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   166
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   167
def colorwrap(orig, s):
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   168
    '''wrap ui.write for colored diff output'''
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   169
    lines = s.split('\n')
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   170
    for i, line in enumerate(lines):
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   171
        stripline = line
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   172
        if line and line[0] in '+-':
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   173
            # highlight trailing whitespace, but only in changed lines
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   174
            stripline = line.rstrip()
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   175
        for prefix, style in _diff_prefixes:
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   176
            if stripline.startswith(prefix):
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   177
                lines[i] = render_effects(stripline, _diff_effects[style])
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   178
                break
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   179
        if line != stripline:
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
   180
            lines[i] += render_effects(
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   181
                line[len(stripline):], _diff_effects['trailingwhitespace'])
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   182
    orig('\n'.join(lines))
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   183
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   184
def colorshowpatch(orig, self, node):
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   185
    '''wrap cmdutil.changeset_printer.showpatch with colored output'''
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   186
    oldwrite = extensions.wrapfunction(self.ui, 'write', colorwrap)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   187
    try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   188
        orig(self, node)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   189
    finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   190
        self.ui.write = oldwrite
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   191
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   192
def colordiff(orig, ui, repo, *pats, **opts):
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   193
    '''run the diff command with colored output'''
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   194
    oldwrite = extensions.wrapfunction(ui, 'write', colorwrap)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   195
    try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   196
        orig(ui, repo, *pats, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   197
    finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   198
        ui.write = oldwrite
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   199
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   200
_diff_prefixes = [('diff', 'diffline'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   201
                  ('copy', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   202
                  ('rename', 'extended'),
7539
92c373f8135f color: fix colorization of the 'old mode' git diff metadata
Gilles Moris <gilles.moris@free.fr>
parents: 7459
diff changeset
   203
                  ('old', 'extended'),
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   204
                  ('new', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   205
                  ('deleted', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   206
                  ('---', 'file_a'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   207
                  ('+++', 'file_b'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   208
                  ('@', 'hunk'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   209
                  ('-', 'deleted'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   210
                  ('+', 'inserted')]
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   211
8630
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   212
_diff_effects = {'diffline': ['bold'],
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   213
                 'extended': ['cyan', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   214
                 'file_a': ['red', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   215
                 'file_b': ['green', 'bold'],
8630
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   216
                 'hunk': ['magenta'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   217
                 'deleted': ['red'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   218
                 'inserted': ['green'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   219
                 'changed': ['white'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   220
                 'trailingwhitespace': ['bold', 'red_background']}
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   221
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   222
_ui = None
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   223
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   224
def uisetup(ui):
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   225
    '''Initialize the extension.'''
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   226
    global _ui
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   227
    _ui = ui
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   228
    _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   229
    _setupcmd(ui, 'incoming', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   230
    _setupcmd(ui, 'log', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   231
    _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   232
    _setupcmd(ui, 'tip', commands.table, None, _diff_effects)
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   233
    _setupcmd(ui, 'status', commands.table, colorstatus, _status_effects)
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   234
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   235
def extsetup():
8278
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   236
    try:
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   237
        mq = extensions.find('mq')
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   238
        try:
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   239
            # If we are loaded after mq, we must wrap commands.table
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   240
            _setupcmd(_ui, 'qdiff', commands.table, colordiff, _diff_effects)
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   241
            _setupcmd(_ui, 'qseries', commands.table, colorqseries, _patch_effects)
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   242
        except error.UnknownCommand:
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   243
            # Otherwise we wrap mq.cmdtable
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   244
            _setupcmd(_ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects)
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
   245
            _setupcmd(_ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects)
8278
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   246
    except KeyError:
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   247
        # The mq extension is not enabled
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   248
        pass
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   249
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   250
def _setupcmd(ui, cmd, table, func, effectsmap):
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   251
    '''patch in command to command table and load effect map'''
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   252
    def nocolor(orig, *args, **opts):
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   253
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   254
        if (opts['no_color'] or opts['color'] == 'never' or
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   255
            (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb'
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   256
                                          or not sys.__stdout__.isatty()))):
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   257
            return orig(*args, **opts)
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   258
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   259
        oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer,
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   260
                                               'showpatch', colorshowpatch)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   261
        try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   262
            if func is not None:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   263
                return func(orig, *args, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   264
            return orig(*args, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   265
        finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   266
            cmdutil.changeset_printer.showpatch = oldshowpatch
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   267
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   268
    entry = extensions.wrapcommand(table, cmd, nocolor)
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   269
    entry[1].extend([
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   270
        ('', 'color', 'auto', _("when to colorize (always, auto, or never)")),
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   271
        ('', 'no-color', None, _("don't colorize output")),
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   272
    ])
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   273
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   274
    for status in effectsmap:
8945
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   275
        configkey = cmd + '.' + status
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   276
        effects = ui.configlist('color', configkey)
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   277
        if effects:
8945
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   278
            good = []
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   279
            for e in effects:
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   280
                if e in _effect_params:
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   281
                    good.append(e)
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   282
                else:
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   283
                    ui.warn(_("ignoring unknown color/effect %r "
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   284
                              "(configured in color.%s)\n")
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   285
                            % (e, configkey))
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   286
            effectsmap[status] = good