annotate rust/rhg/src/color.rs @ 51243:0993a3520dc6

rust-discovery: encapsulated conversions to vec for instance methods This new `pyiter_to_vec` is pretty trivial, and only mildly reduces code duplication. The main advantage is that it encapsulates access to the `index` attribute, which will be changed when we replace the C index by the Rust index, given as `PySharedRef`.
author Georges Racinet <georges.racinet@octobus.net>
date Sun, 29 Oct 2023 11:21:18 +0100
parents fba29deebfe7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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";
49931
fba29deebfe7 rust-clippy: fix remaining warnings in `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 49914
diff changeset
208 let always = if !auto {
48733
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
209 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
210 if !enabled_bool {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
211 return Ok(None);
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
212 }
49931
fba29deebfe7 rust-clippy: fix remaining warnings in `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 49914
diff changeset
213 enabled == b"always" || *origin == ConfigOrigin::CommandLineColor
48733
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
214 } else {
49931
fba29deebfe7 rust-clippy: fix remaining warnings in `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 49914
diff changeset
215 false
48733
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
216 };
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
217 let formatted = always
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
218 || (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
219 && formatted(config)?);
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
220
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
221 let mode_default = b"auto";
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
222 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
223
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
224 if formatted {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
225 match mode {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
226 b"ansi" | b"auto" => Ok(Some(ColorMode::Ansi)),
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
227 // TODO: support other modes
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
228 _ => Err(HgError::UnsupportedFeature(format!(
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
229 "color mode {}",
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
230 String::from_utf8_lossy(mode)
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
231 ))),
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
232 }
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
233 } else {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
234 Ok(None)
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
235 }
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
236 }
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 pub struct ColorConfig {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
240 pub styles: EffectsMap,
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
241 }
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
242
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
243 impl ColorConfig {
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
244 // Similar to _modesetup in mercurial/color.py
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
245 pub fn new(config: &Config) -> Result<Option<Self>, HgError> {
49914
58074252db3c rust: run `cargo clippy`
Raphaël Gomès <rgomes@octobus.net>
parents: 48733
diff changeset
246 Ok(ColorMode::get(config)?.map(|ColorMode::Ansi| ColorConfig {
58074252db3c rust: run `cargo clippy`
Raphaël Gomès <rgomes@octobus.net>
parents: 48733
diff changeset
247 styles: effects_from_config(config),
58074252db3c rust: run `cargo clippy`
Raphaël Gomès <rgomes@octobus.net>
parents: 48733
diff changeset
248 }))
48733
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
249 }
39c447e03dbc rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
250 }