tracexec_tui/
theme.rs

1use std::sync::LazyLock;
2
3use ratatui::{
4  style::{
5    Modifier,
6    Style,
7    Stylize,
8  },
9  text::Span,
10};
11
12pub struct Theme {
13  // Color for UI Elements
14  pub inactive_border: Style,
15  pub active_border: Style,
16  #[allow(unused)]
17  pub popup_border: Style,
18  pub app_title: Style,
19  pub help_popup: Style,
20  pub inline_timestamp: Style,
21  // Color for help items
22  pub cli_flag: Style,
23  pub help_key: Style,
24  pub help_desc: Style,
25  pub fancy_help_desc: Style,
26  // Tracer Event
27  pub pid_success: Style,
28  pub pid_failure: Style,
29  pub pid_enoent: Style,
30  pub pid_in_msg: Style,
31  pub comm: Style,
32  pub tracer_info: Style,
33  pub tracer_warning: Style,
34  pub tracer_error: Style,
35  pub new_child_pid: Style,
36  pub tracer_event: Style,
37  pub inline_tracer_error: Style,
38  pub filename: Style,
39  pub modified_fd_in_cmdline: Style,
40  pub removed_fd_in_cmdline: Style,
41  pub cloexec_fd_in_cmdline: Style,
42  pub added_fd_in_cmdline: Style,
43  pub arg0: Style,
44  pub cwd: Style,
45  pub deleted_env_var: Style,
46  pub modified_env_var: Style,
47  pub added_env_var: Style,
48  pub argv: Style,
49  // Search & Filter
50  pub search_match: Style,
51  pub query_no_match: Style,
52  pub query_match_current_no: Style,
53  pub query_match_total_cnt: Style,
54  // Details Popup
55  pub empty_field: Style,
56  pub uid_gid_name: Style,
57  pub uid_gid_value: Style,
58  pub exec_result_success: Style,
59  pub exec_result_failure: Style,
60  pub value_unknown: Style,
61  pub fd_closed: Style,
62  pub plus_sign: Style,
63  pub minus_sign: Style,
64  pub equal_sign: Style,
65  pub added_env_key: Style,
66  pub added_env_val: Style,
67  pub removed_env_key: Style,
68  pub removed_env_val: Style,
69  pub unchanged_env_key: Style,
70  pub unchanged_env_val: Style,
71  pub fd_label: Style,
72  pub fd_number_label: Style,
73  pub sublabel: Style,
74  pub selected_label: Style,
75  pub label: Style,
76  pub selection_indicator: Style,
77  pub open_flag_cloexec: Style,
78  pub open_flag_access_mode: Style,
79  pub open_flag_creation: Style,
80  pub open_flag_status: Style,
81  pub open_flag_other: Style,
82  pub visual_separator: Style,
83  // Info Popup
84  pub error_popup: Style,
85  pub info_popup: Style,
86  // Tabs
87  pub active_tab: Style,
88  // Process/Exec Status
89  pub status_process_running: Style,
90  pub status_process_paused: Style,
91  pub status_process_detached: Style,
92  pub status_exec_error: Style,
93  pub status_process_exited_normally: Style,
94  pub status_process_exited_abnormally: Style,
95  pub status_process_killed: Style,
96  pub status_process_terminated: Style,
97  pub status_process_interrupted: Style,
98  pub status_process_segfault: Style,
99  pub status_process_aborted: Style,
100  pub status_process_sigill: Style,
101  pub status_process_signaled: Style,
102  pub status_internal_failure: Style,
103  // Breakpoint Manager
104  pub breakpoint_title_selected: Style,
105  pub breakpoint_title: Style,
106  pub breakpoint_pattern_type_label: Style,
107  pub breakpoint_pattern: Style,
108  pub breakpoint_info_label: Style,
109  pub breakpoint_info_label_active: Style,
110  pub breakpoint_info_value: Style,
111  // Hit Manager
112  pub hit_entry_pid: Style,
113  pub hit_entry_plain_text: Style,
114  pub hit_entry_breakpoint_stop: Style,
115  pub hit_entry_breakpoint_pattern: Style,
116  pub hit_entry_no_breakpoint_pattern: Style,
117  pub hit_manager_default_command: Style,
118  pub hit_manager_no_default_command: Style,
119  // Backtrace
120  pub backtrace_parent_spawns: Span<'static>,
121  pub backtrace_parent_becomes: Span<'static>,
122  pub backtrace_parent_unknown: Span<'static>,
123}
124
125impl Default for Theme {
126  fn default() -> Self {
127    Self {
128      inactive_border: Style::default().white(),
129      active_border: Style::default().cyan(),
130      popup_border: Style::default(),
131      app_title: Style::default().bold(),
132      help_popup: Style::default().black().on_gray(),
133      inline_timestamp: Style::default().light_cyan(),
134      // -- Help Items --
135      cli_flag: Style::default().yellow().on_dark_gray().bold(),
136      help_key: Style::default().black().on_cyan().bold(),
137      help_desc: Style::default()
138        .light_green()
139        .on_dark_gray()
140        .italic()
141        .bold(),
142      fancy_help_desc: Style::default().red().on_light_yellow().bold().slow_blink(),
143      // -- Tracer Event --
144      pid_success: Style::default().light_green(),
145      pid_failure: Style::default().light_red(),
146      pid_enoent: Style::default().light_yellow(),
147      pid_in_msg: Style::default().light_magenta(),
148      comm: Style::default().cyan(),
149      tracer_info: Style::default().light_blue().bold(),
150      tracer_warning: Style::default().light_yellow().bold(),
151      tracer_error: Style::default().light_red().bold(),
152      new_child_pid: Style::default().yellow(),
153      tracer_event: Style::default().magenta(),
154      inline_tracer_error: Style::default().light_red().bold().slow_blink(),
155      filename: Style::default().light_blue(),
156      modified_fd_in_cmdline: Style::default().light_yellow().bold(),
157      removed_fd_in_cmdline: Style::default().light_red().bold(),
158      added_fd_in_cmdline: Style::default().light_green().bold(),
159      cloexec_fd_in_cmdline: Style::default().light_red().bold().italic(),
160      arg0: Style::default().white().italic(),
161      cwd: Style::default().light_cyan(),
162      deleted_env_var: Style::default().light_red(),
163      modified_env_var: Style::default().yellow(),
164      added_env_var: Style::default().green(),
165      argv: Style::default(),
166      // -- Search & Filter --
167      search_match: Style::default().add_modifier(Modifier::REVERSED),
168      query_no_match: Style::default().light_red(),
169      query_match_current_no: Style::default().light_cyan(),
170      query_match_total_cnt: Style::default().white(),
171      // -- Details Popup --
172      empty_field: Style::default().bold(),
173      uid_gid_name: Style::default().white().bold(),
174      uid_gid_value: Style::default().italic(),
175      exec_result_success: Style::default().green(),
176      exec_result_failure: Style::default().red(),
177      fd_closed: Style::default().light_red(),
178      value_unknown: Style::default().light_red().italic(),
179      plus_sign: Style::default().light_green(),
180      minus_sign: Style::default().light_red(),
181      equal_sign: Style::default().yellow().bold(),
182      added_env_key: Style::default().light_green().bold(),
183      added_env_val: Style::default().light_green(),
184      removed_env_key: Style::default().light_red().bold(),
185      removed_env_val: Style::default().light_red(),
186      unchanged_env_key: Style::default().white().bold(),
187      unchanged_env_val: Style::default().white(),
188      fd_label: Style::default().black().on_light_green().bold(),
189      fd_number_label: Style::default().white().on_light_magenta().bold(),
190      sublabel: Style::default().white().bold(),
191      label: Style::default().black().on_light_green().bold(),
192      selected_label: Style::default().white().on_light_magenta().bold(),
193      selection_indicator: Style::default().light_green().bold(),
194      open_flag_cloexec: Style::default().light_green().bold(),
195      open_flag_access_mode: Style::default().light_blue().bold(),
196      open_flag_creation: Style::default().light_cyan().bold(),
197      open_flag_status: Style::default().light_yellow().bold(),
198      open_flag_other: Style::default().light_red().bold(),
199      visual_separator: Style::default().light_green(),
200      // -- Info Popup --
201      error_popup: Style::default().white().on_red(),
202      info_popup: Style::default().black().on_white(),
203      // -- Tabs --
204      active_tab: Style::default().white().on_magenta(),
205      // -- Process/Exec Status --
206      status_process_running: Style::new().light_green().bold(),
207      status_process_paused: Style::new().yellow().bold(),
208      status_process_detached: Style::new().light_magenta().bold(),
209      status_exec_error: Style::new().light_red().bold(),
210      status_process_exited_normally: Style::new().green().bold(),
211      status_process_exited_abnormally: Style::new().light_yellow().bold(),
212      status_process_killed: Style::new().light_red().bold().italic(),
213      status_process_terminated: Style::new().light_red().bold().italic(),
214      status_process_interrupted: Style::new().light_red().bold().italic(),
215      status_process_segfault: Style::new().light_red().bold().italic(),
216      status_process_aborted: Style::new().light_red().bold().italic(),
217      status_process_sigill: Style::new().light_red().bold().italic(),
218      status_process_signaled: Style::new().light_red().bold().italic(),
219      status_internal_failure: Style::new().light_red().bold().italic(),
220      // -- Breakpoint Manager --
221      breakpoint_title_selected: Style::default().white().bold().on_magenta(),
222      breakpoint_title: Style::default().white().bold(),
223      breakpoint_pattern_type_label: Style::default().black().on_light_green(),
224      breakpoint_pattern: Style::default().cyan().bold(),
225      breakpoint_info_label: Style::default().black().on_light_yellow(),
226      breakpoint_info_label_active: Style::default().black().on_light_green(),
227      breakpoint_info_value: Style::default().black().bold().on_light_cyan(),
228      // -- Hit Manager --
229      hit_entry_pid: Style::default().light_magenta(),
230      hit_entry_plain_text: Style::default().bold().white(),
231      hit_entry_breakpoint_stop: Style::default().yellow().bold(),
232      hit_entry_breakpoint_pattern: Style::default().cyan().bold(),
233      hit_entry_no_breakpoint_pattern: Style::default().light_red().bold(),
234      hit_manager_default_command: Style::default().light_cyan().bold(),
235      hit_manager_no_default_command: Style::default().light_yellow().bold(),
236      // -- Backtrace --
237      backtrace_parent_spawns: Span::raw(" S ").on_gray().light_blue().bold(),
238      backtrace_parent_becomes: Span::raw(" B ").on_white().light_red().bold(),
239      backtrace_parent_unknown: Span::raw("   "),
240    }
241  }
242}
243
244pub static THEME: LazyLock<Theme> = LazyLock::new(Theme::default);