author | Simon Sapin <simon.sapin@octobus.net> |
Thu, 10 Feb 2022 12:59:32 +0100 | |
changeset 48733 | 39c447e03dbc |
child 49914 | 58074252db3c |
permissions | -rw-r--r-- |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
1 |
use crate::ui::formatted; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
2 |
use crate::ui::plain; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
3 |
use format_bytes::write_bytes; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
4 |
use hg::config::Config; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
5 |
use hg::config::ConfigOrigin; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
6 |
use hg::errors::HgError; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
7 |
use std::collections::HashMap; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
8 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
9 |
pub type Effect = u32; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
10 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
11 |
pub type EffectsMap = HashMap<Vec<u8>, Vec<Effect>>; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
12 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
13 |
macro_rules! effects { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
14 |
($( $name: ident: $value: expr ,)+) => { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
15 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
16 |
#[allow(non_upper_case_globals)] |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
17 |
mod effects { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
18 |
$( |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
19 |
pub const $name: super::Effect = $value; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
20 |
)+ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
21 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
22 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
23 |
fn effect(name: &[u8]) -> Option<Effect> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
24 |
$( |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
25 |
if name == stringify!($name).as_bytes() { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
26 |
Some(effects::$name) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
27 |
} else |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
28 |
)+ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
29 |
{ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
30 |
None |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
31 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
32 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
33 |
}; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
34 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
35 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
36 |
effects! { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
37 |
none: 0, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
38 |
black: 30, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
39 |
red: 31, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
40 |
green: 32, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
41 |
yellow: 33, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
42 |
blue: 34, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
43 |
magenta: 35, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
44 |
cyan: 36, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
45 |
white: 37, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
46 |
bold: 1, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
47 |
italic: 3, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
48 |
underline: 4, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
49 |
inverse: 7, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
50 |
dim: 2, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
51 |
black_background: 40, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
52 |
red_background: 41, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
53 |
green_background: 42, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
54 |
yellow_background: 43, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
55 |
blue_background: 44, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
56 |
purple_background: 45, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
57 |
cyan_background: 46, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
58 |
white_background: 47, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
59 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
60 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
61 |
macro_rules! default_styles { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
62 |
($( $key: expr => [$($value: expr),*],)+) => { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
63 |
fn default_styles() -> EffectsMap { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
64 |
use effects::*; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
65 |
let mut map = HashMap::new(); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
66 |
$( |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
67 |
map.insert($key[..].to_owned(), vec![$( $value ),*]); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
68 |
)+ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
69 |
map |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
70 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
71 |
}; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
72 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
73 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
74 |
default_styles! { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
75 |
b"grep.match" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
76 |
b"grep.linenumber" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
77 |
b"grep.rev" => [blue], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
78 |
b"grep.sep" => [cyan], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
79 |
b"grep.filename" => [magenta], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
80 |
b"grep.user" => [magenta], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
81 |
b"grep.date" => [magenta], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
82 |
b"grep.inserted" => [green, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
83 |
b"grep.deleted" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
84 |
b"bookmarks.active" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
85 |
b"branches.active" => [none], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
86 |
b"branches.closed" => [black, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
87 |
b"branches.current" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
88 |
b"branches.inactive" => [none], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
89 |
b"diff.changed" => [white], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
90 |
b"diff.deleted" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
91 |
b"diff.deleted.changed" => [red, bold, underline], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
92 |
b"diff.deleted.unchanged" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
93 |
b"diff.diffline" => [bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
94 |
b"diff.extended" => [cyan, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
95 |
b"diff.file_a" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
96 |
b"diff.file_b" => [green, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
97 |
b"diff.hunk" => [magenta], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
98 |
b"diff.inserted" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
99 |
b"diff.inserted.changed" => [green, bold, underline], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
100 |
b"diff.inserted.unchanged" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
101 |
b"diff.tab" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
102 |
b"diff.trailingwhitespace" => [bold, red_background], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
103 |
b"changeset.public" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
104 |
b"changeset.draft" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
105 |
b"changeset.secret" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
106 |
b"diffstat.deleted" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
107 |
b"diffstat.inserted" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
108 |
b"formatvariant.name.mismatchconfig" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
109 |
b"formatvariant.name.mismatchdefault" => [yellow], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
110 |
b"formatvariant.name.uptodate" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
111 |
b"formatvariant.repo.mismatchconfig" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
112 |
b"formatvariant.repo.mismatchdefault" => [yellow], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
113 |
b"formatvariant.repo.uptodate" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
114 |
b"formatvariant.config.special" => [yellow], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
115 |
b"formatvariant.config.default" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
116 |
b"formatvariant.default" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
117 |
b"histedit.remaining" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
118 |
b"ui.addremove.added" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
119 |
b"ui.addremove.removed" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
120 |
b"ui.error" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
121 |
b"ui.prompt" => [yellow], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
122 |
b"log.changeset" => [yellow], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
123 |
b"patchbomb.finalsummary" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
124 |
b"patchbomb.from" => [magenta], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
125 |
b"patchbomb.to" => [cyan], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
126 |
b"patchbomb.subject" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
127 |
b"patchbomb.diffstats" => [], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
128 |
b"rebase.rebased" => [blue], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
129 |
b"rebase.remaining" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
130 |
b"resolve.resolved" => [green, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
131 |
b"resolve.unresolved" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
132 |
b"shelve.age" => [cyan], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
133 |
b"shelve.newest" => [green, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
134 |
b"shelve.name" => [blue, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
135 |
b"status.added" => [green, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
136 |
b"status.clean" => [none], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
137 |
b"status.copied" => [none], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
138 |
b"status.deleted" => [cyan, bold, underline], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
139 |
b"status.ignored" => [black, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
140 |
b"status.modified" => [blue, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
141 |
b"status.removed" => [red, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
142 |
b"status.unknown" => [magenta, bold, underline], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
143 |
b"tags.normal" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
144 |
b"tags.local" => [black, bold], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
145 |
b"upgrade-repo.requirement.preserved" => [cyan], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
146 |
b"upgrade-repo.requirement.added" => [green], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
147 |
b"upgrade-repo.requirement.removed" => [red], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
148 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
149 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
150 |
fn parse_effect(config_key: &[u8], effect_name: &[u8]) -> Option<Effect> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
151 |
let found = effect(effect_name); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
152 |
if found.is_none() { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
153 |
// TODO: have some API for warnings |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
154 |
// TODO: handle IO errors during warnings |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
155 |
let stderr = std::io::stderr(); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
156 |
let _ = write_bytes!( |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
157 |
&mut stderr.lock(), |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
158 |
b"ignoring unknown color/effect '{}' \ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
159 |
(configured in color.{})\n", |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
160 |
effect_name, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
161 |
config_key, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
162 |
); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
163 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
164 |
found |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
165 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
166 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
167 |
fn effects_from_config(config: &Config) -> EffectsMap { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
168 |
let mut styles = default_styles(); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
169 |
for (key, _value) in config.iter_section(b"color") { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
170 |
if !key.contains(&b'.') |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
171 |
|| key.starts_with(b"color.") |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
172 |
|| key.starts_with(b"terminfo.") |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
173 |
{ |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
174 |
continue; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
175 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
176 |
// `unwrap` shouldn’t panic since we just got this key from |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
177 |
// iteration |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
178 |
let list = config.get_list(b"color", key).unwrap(); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
179 |
let parsed = list |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
180 |
.iter() |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
181 |
.filter_map(|name| parse_effect(key, name)) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
182 |
.collect(); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
183 |
styles.insert(key.to_owned(), parsed); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
184 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
185 |
styles |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
186 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
187 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
188 |
enum ColorMode { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
189 |
// TODO: support other modes |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
190 |
Ansi, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
191 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
192 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
193 |
impl ColorMode { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
194 |
// Similar to _modesetup in mercurial/color.py |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
195 |
fn get(config: &Config) -> Result<Option<Self>, HgError> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
196 |
if plain(Some("color")) { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
197 |
return Ok(None); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
198 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
199 |
let enabled_default = b"auto"; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
200 |
// `origin` is only used when `!auto`, so its default doesn’t matter |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
201 |
let (enabled, origin) = config |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
202 |
.get_with_origin(b"ui", b"color") |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
203 |
.unwrap_or((enabled_default, &ConfigOrigin::CommandLineColor)); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
204 |
if enabled == b"debug" { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
205 |
return Err(HgError::unsupported("debug color mode")); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
206 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
207 |
let auto = enabled == b"auto"; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
208 |
let always; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
209 |
if !auto { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
210 |
let enabled_bool = config.get_bool(b"ui", b"color")?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
211 |
if !enabled_bool { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
212 |
return Ok(None); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
213 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
214 |
always = enabled == b"always" |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
215 |
|| *origin == ConfigOrigin::CommandLineColor |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
216 |
} else { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
217 |
always = false |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
218 |
}; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
219 |
let formatted = always |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
220 |
|| (std::env::var_os("TERM").unwrap_or_default() != "dumb" |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
221 |
&& formatted(config)?); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
222 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
223 |
let mode_default = b"auto"; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
224 |
let mode = config.get(b"color", b"mode").unwrap_or(mode_default); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
225 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
226 |
if formatted { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
227 |
match mode { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
228 |
b"ansi" | b"auto" => Ok(Some(ColorMode::Ansi)), |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
229 |
// TODO: support other modes |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
230 |
_ => Err(HgError::UnsupportedFeature(format!( |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
231 |
"color mode {}", |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
232 |
String::from_utf8_lossy(mode) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
233 |
))), |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
234 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
235 |
} else { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
236 |
Ok(None) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
237 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
238 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
239 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
240 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
241 |
pub struct ColorConfig { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
242 |
pub styles: EffectsMap, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
243 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
244 |
|
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
245 |
impl ColorConfig { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
246 |
// Similar to _modesetup in mercurial/color.py |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
247 |
pub fn new(config: &Config) -> Result<Option<Self>, HgError> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
248 |
Ok(match ColorMode::get(config)? { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
249 |
None => None, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
250 |
Some(ColorMode::Ansi) => Some(ColorConfig { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
251 |
styles: effects_from_config(config), |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
252 |
}), |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
253 |
}) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
254 |
} |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff
changeset
|
255 |
} |