hgext/color.py
author Martin Geisler <mg@lazybytes.net>
Sun, 13 Dec 2009 23:49:53 +0100
changeset 10065 a1ae0ed78d1a
parent 10046 0c23b0b3516b
child 10222 98f630e15d82
permissions -rw-r--r--
minirst: improve layout of field lists Before, we used the padding following the key to compute where to wrap the text. Long keys would thus give a big indentation. It also required careful alignment of the source text, making it cumbersome to items to the list. We now compute the maximum key length and use that for all items in the list. We also put a cap on the indentation: keys longer than 10 characters are put on their own line. This is similar to how rst2html handles large keys: it uses 14 as the cutoff point, but I felt that 10 was better for monospaced text in the console.
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
7988
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    21
This extension modifies the status command to add color to its output
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    22
to reflect file status, the qseries command to add color to reflect
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    23
patch status (applied, unapplied, missing), and to diff-related
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    24
commands to highlight additions, removals, diff headers, and trailing
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    25
whitespace.
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
    26
7988
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    27
Other effects in addition to color, like bold and underlined text, are
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    28
also available. Effects are rendered with the ECMA-48 SGR control
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
    29
function (aka ANSI escape codes). This module also provides the
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
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
10046
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
    59
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
    60
  bookmarks.current = green
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    61
'''
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    62
8623
0c159aa7b329 color: replace re.split with ui.configlist
Martin Geisler <mg@lazybytes.net>
parents: 8622
diff changeset
    63
import os, sys
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    64
8963
a4ceae3aa7be color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents: 8945
diff changeset
    65
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
    66
from mercurial.i18n import _
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    67
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    68
# 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
    69
_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
    70
                  'black': 30,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    71
                  'red': 31,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    72
                  'green': 32,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    73
                  'yellow': 33,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    74
                  'blue': 34,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    75
                  'magenta': 35,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    76
                  'cyan': 36,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    77
                  'white': 37,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    78
                  'bold': 1,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    79
                  'italic': 3,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    80
                  'underline': 4,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    81
                  'inverse': 7,
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
    82
                  '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
    83
                  '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
    84
                  '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
    85
                  '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
    86
                  '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
    87
                  '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
    88
                  '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
    89
                  'white_background': 47}
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    90
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
    91
def render_effects(text, effects):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    92
    '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
    93
    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
    94
    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
    95
    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
    96
    return ''.join([start, text, stop])
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
    97
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
    98
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
    99
    '''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
   100
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   101
    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
   102
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   103
    nostatus = opts.get('no_status')
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   104
    opts['no_status'] = False
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   105
    # 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
   106
    ui.pushbuffer()
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   107
    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
   108
    # filter out empty strings
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   109
    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
   110
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   111
    if nostatus:
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   112
        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
   113
    else:
7419
efe31fbe6cf0 color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents: 7418
diff changeset
   114
        lines = lines_with_status
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   115
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   116
    # 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
   117
    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
   118
        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
   119
        effects = _status_effects[status]
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   120
        if effects:
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   121
            lines[i] = render_effects(lines[i], effects)
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   122
        ui.write(lines[i] + delimiter)
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   123
    return retval
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   124
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   125
_status_abbreviations = { 'M': 'modified',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   126
                          'A': 'added',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   127
                          'R': 'removed',
5796
7705d308eb5e Fix status char in color extension for deleted (missing) files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5792
diff changeset
   128
                          '!': 'deleted',
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   129
                          '?': 'unknown',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   130
                          'I': 'ignored',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   131
                          'C': 'clean',
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   132
                          ' ': 'copied', }
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   133
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   134
_status_effects = { 'modified': ['blue', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   135
                    'added': ['green', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   136
                    'removed': ['red', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   137
                    'deleted': ['cyan', 'bold', 'underline'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   138
                    'unknown': ['magenta', 'bold', 'underline'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   139
                    'ignored': ['black', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   140
                    'clean': ['none'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   141
                    'copied': ['none'], }
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   142
10046
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   143
_bookmark_effects = { 'current': ['green'] }
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   144
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   145
def colorbookmarks(orig, ui, repo, *pats, **opts):
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   146
    def colorize(orig, s):
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   147
        lines = s.split('\n')
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   148
        for i, line in enumerate(lines):
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   149
            if line.startswith(" *"):
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   150
                lines[i] = render_effects(line, _bookmark_effects['current'])
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   151
        orig('\n'.join(lines))
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   152
    oldwrite = extensions.wrapfunction(ui, 'write', colorize)
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   153
    try:
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   154
        orig(ui, repo, *pats, **opts)
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   155
    finally:
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   156
        ui.write = oldwrite
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   157
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   158
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
   159
    '''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
   160
    ui.pushbuffer()
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   161
    retval = orig(ui, repo, **opts)
9311
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
   162
    patchlines = ui.popbuffer().splitlines()
e37e9904bf10 color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9255
diff changeset
   163
    patchnames = repo.mq.series
6855
09db2b8236ec Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents: 6854
diff changeset
   164
9374
ad73f6986ef5 color: no need for itertools, zip() is good enough
Patrick Mezard <pmezard@gmail.com>
parents: 9311
diff changeset
   165
    for patch, patchname in zip(patchlines, patchnames):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   166
        if opts['missing']:
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   167
            effects = _patch_effects['missing']
6855
09db2b8236ec Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents: 6854
diff changeset
   168
        # Determine if patch is applied.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   169
        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
   170
               if patchname == applied.name ]:
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   171
            effects = _patch_effects['applied']
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   172
        else:
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   173
            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
   174
c24c9ce0cdcf color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8963
diff changeset
   175
        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
   176
        ui.write(patch + '\n')
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   177
    return retval
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   178
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   179
_patch_effects = { 'applied': ['blue', 'bold', 'underline'],
9520
bcc27ee3a37b color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 8963
diff changeset
   180
                    'missing': ['red', 'bold'],
bcc27ee3a37b color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 8963
diff changeset
   181
                    'unapplied': ['black', 'bold'], }
9551
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   182
def colorwrap(orig, *args):
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   183
    '''wrap ui.write for colored diff output'''
9551
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   184
    def _colorize(s):
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   185
        lines = s.split('\n')
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   186
        for i, line in enumerate(lines):
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   187
            stripline = line
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   188
            if line and line[0] in '+-':
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   189
                # highlight trailing whitespace, but only in changed lines
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   190
                stripline = line.rstrip()
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   191
            for prefix, style in _diff_prefixes:
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   192
                if stripline.startswith(prefix):
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   193
                    lines[i] = render_effects(stripline, _diff_effects[style])
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   194
                    break
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   195
            if line != stripline:
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   196
                lines[i] += render_effects(
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   197
                    line[len(stripline):], _diff_effects['trailingwhitespace'])
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   198
        return '\n'.join(lines)
3e698434b990 color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents: 9550
diff changeset
   199
    orig(*[_colorize(s) for s in args])
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   200
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   201
def colorshowpatch(orig, self, node):
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   202
    '''wrap cmdutil.changeset_printer.showpatch with colored output'''
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   203
    oldwrite = extensions.wrapfunction(self.ui, 'write', colorwrap)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   204
    try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   205
        orig(self, node)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   206
    finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   207
        self.ui.write = oldwrite
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   208
9641
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   209
def colordiffstat(orig, s):
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   210
    lines = s.split('\n')
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   211
    for i, line in enumerate(lines):
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   212
        if line and line[-1] in '+-':
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   213
            name, graph = line.rsplit(' ', 1)
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   214
            graph = graph.replace('-',
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   215
                        render_effects('-', _diff_effects['deleted']))
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   216
            graph = graph.replace('+',
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   217
                        render_effects('+', _diff_effects['inserted']))
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   218
            lines[i] = ' '.join([name, graph])
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   219
    orig('\n'.join(lines))
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   220
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   221
def colordiff(orig, ui, repo, *pats, **opts):
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   222
    '''run the diff command with colored output'''
9641
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   223
    if opts.get('stat'):
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   224
        wrapper = colordiffstat
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   225
    else:
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   226
        wrapper = colorwrap
9b99f158348a color: colorize diff --stat
Brodie Rao <me+hg@dackz.net>
parents: 9551
diff changeset
   227
    oldwrite = extensions.wrapfunction(ui, 'write', wrapper)
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   228
    try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   229
        orig(ui, repo, *pats, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   230
    finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   231
        ui.write = oldwrite
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   232
10004
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   233
def colorchurn(orig, ui, repo, *pats, **opts):
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   234
    '''run the churn command with colored output'''
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   235
    if not opts.get('diffstat'):
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   236
        return orig(ui, repo, *pats, **opts)
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   237
    oldwrite = extensions.wrapfunction(ui, 'write', colordiffstat)
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   238
    try:
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   239
        orig(ui, repo, *pats, **opts)
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   240
    finally:
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   241
        ui.write = oldwrite
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   242
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   243
_diff_prefixes = [('diff', 'diffline'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   244
                  ('copy', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   245
                  ('rename', 'extended'),
7539
92c373f8135f color: fix colorization of the 'old mode' git diff metadata
Gilles Moris <gilles.moris@free.fr>
parents: 7459
diff changeset
   246
                  ('old', 'extended'),
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   247
                  ('new', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   248
                  ('deleted', 'extended'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   249
                  ('---', 'file_a'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   250
                  ('+++', 'file_b'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   251
                  ('@', 'hunk'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   252
                  ('-', 'deleted'),
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   253
                  ('+', 'inserted')]
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   254
8630
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   255
_diff_effects = {'diffline': ['bold'],
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   256
                 'extended': ['cyan', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   257
                 'file_a': ['red', 'bold'],
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
   258
                 'file_b': ['green', 'bold'],
8630
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   259
                 'hunk': ['magenta'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   260
                 'deleted': ['red'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   261
                 'inserted': ['green'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   262
                 'changed': ['white'],
8ff65f7e3273 color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
   263
                 'trailingwhitespace': ['bold', 'red_background']}
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   264
9711
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   265
def extsetup(ui):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   266
    '''Initialize the extension.'''
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   267
    _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   268
    _setupcmd(ui, 'incoming', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   269
    _setupcmd(ui, 'log', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   270
    _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   271
    _setupcmd(ui, 'tip', commands.table, None, _diff_effects)
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   272
    _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
   273
8278
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   274
    try:
1f9787de17d9 color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents: 7988
diff changeset
   275
        mq = extensions.find('mq')
9412
3a78bbc57660 color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents: 9374
diff changeset
   276
        _setupcmd(ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects)
3a78bbc57660 color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents: 9374
diff changeset
   277
        _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
   278
    except KeyError:
9711
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   279
        mq = None
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   280
9550
3bcb28131bab color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents: 9523
diff changeset
   281
    try:
3bcb28131bab color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents: 9523
diff changeset
   282
        rec = extensions.find('record')
3bcb28131bab color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents: 9523
diff changeset
   283
        _setupcmd(ui, 'record', rec.cmdtable, colordiff, _diff_effects)
3bcb28131bab color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents: 9523
diff changeset
   284
    except KeyError:
9711
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   285
        rec = None
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   286
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   287
    if mq and rec:
d29bd00bbc50 color: wrap qrecord
Martin Geisler <mg@lazybytes.net>
parents: 9641
diff changeset
   288
        _setupcmd(ui, 'qrecord', rec.cmdtable, colordiff, _diff_effects)
10004
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   289
    try:
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   290
        churn = extensions.find('churn')
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   291
        _setupcmd(ui, 'churn', churn.cmdtable, colorchurn, _diff_effects)
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   292
    except KeyError:
af04a3dea4cd color: add support for churn --diffstat
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9711
diff changeset
   293
        churn = None
9550
3bcb28131bab color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents: 9523
diff changeset
   294
10046
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   295
    try:
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   296
        bookmarks = extensions.find('bookmarks')
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   297
        _setupcmd(ui, 'bookmarks', bookmarks.cmdtable, colorbookmarks,
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   298
                  _bookmark_effects)
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   299
    except KeyError:
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   300
        # The bookmarks extension is not enabled
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   301
        pass
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
   302
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   303
def _setupcmd(ui, cmd, table, func, effectsmap):
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   304
    '''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
   305
    def nocolor(orig, *args, **opts):
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   306
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   307
        if (opts['no_color'] or opts['color'] == 'never' or
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   308
            (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb'
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   309
                                          or not sys.__stdout__.isatty()))):
10045
d1f9640e9a67 color: Do not pass --color, --no-color parameters to wrapped function
David Soria Parra <dsp@php.net>
parents: 10004
diff changeset
   310
            del opts['no_color']
d1f9640e9a67 color: Do not pass --color, --no-color parameters to wrapped function
David Soria Parra <dsp@php.net>
parents: 10004
diff changeset
   311
            del opts['color']
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   312
            return orig(*args, **opts)
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   313
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   314
        oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer,
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   315
                                               'showpatch', colorshowpatch)
10045
d1f9640e9a67 color: Do not pass --color, --no-color parameters to wrapped function
David Soria Parra <dsp@php.net>
parents: 10004
diff changeset
   316
        del opts['no_color']
d1f9640e9a67 color: Do not pass --color, --no-color parameters to wrapped function
David Soria Parra <dsp@php.net>
parents: 10004
diff changeset
   317
        del opts['color']
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   318
        try:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   319
            if func is not None:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   320
                return func(orig, *args, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   321
            return orig(*args, **opts)
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   322
        finally:
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
   323
            cmdutil.changeset_printer.showpatch = oldshowpatch
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   324
7216
292fb2ad2846 extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents: 7213
diff changeset
   325
    entry = extensions.wrapcommand(table, cmd, nocolor)
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   326
    entry[1].extend([
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   327
        ('', 'color', 'auto', _("when to colorize (always, auto, or never)")),
9478
32ec70799172 color: mark --no-color as deprecated (--color=never has the same effect)
Brodie Rao <me+hg@dackz.net>
parents: 9412
diff changeset
   328
        ('', 'no-color', None, _("don't colorize output (DEPRECATED)")),
7455
c9fd5474a707 color: add --color switch
Brodie Rao <me+hg@dackz.net>
parents: 7419
diff changeset
   329
    ])
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   330
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   331
    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
   332
        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
   333
        effects = ui.configlist('color', configkey)
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
   334
        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
   335
            good = []
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   336
            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
   337
                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
   338
                    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
   339
                else:
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
   340
                    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
   341
                              "(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
   342
                            % (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
   343
            effectsmap[status] = good