diff --git a/local/recipes/system/redbear-power/source/src/app.rs b/local/recipes/system/redbear-power/source/src/app.rs index e8bd3afbd6..c9bd67c18c 100644 --- a/local/recipes/system/redbear-power/source/src/app.rs +++ b/local/recipes/system/redbear-power/source/src/app.rs @@ -251,6 +251,7 @@ pub struct App { pub toast_expires: Option, pub bench_line: String, pub interval_input: Option, + pub process_filter_input: Option, pub current_tab: TabId, pub bench_start_time: Option, pub collector_stats: crate::collector::CollectorStats, @@ -432,6 +433,7 @@ impl App { toast_expires: None, bench_line: String::new(), interval_input: None, + process_filter_input: None, current_tab: TabId::PerCpu, bench_start_time: None, meminfo: crate::meminfo::read_meminfo(), diff --git a/local/recipes/system/redbear-power/source/src/main.rs b/local/recipes/system/redbear-power/source/src/main.rs index 4bc6e5308c..991a3e5956 100644 --- a/local/recipes/system/redbear-power/source/src/main.rs +++ b/local/recipes/system/redbear-power/source/src/main.rs @@ -420,7 +420,10 @@ fn main() -> io::Result<()> { } app.interval_input = interval_input.clone(); if let Some(buf) = process_filter_input.as_ref() { + app.process_filter_input = Some(buf.clone()); app.process_filter = buf.clone(); + } else { + app.process_filter_input = None; } terminal.draw(|f| { let full = f.area(); diff --git a/local/recipes/system/redbear-power/source/src/render.rs b/local/recipes/system/redbear-power/source/src/render.rs index ace32b16c8..5b434d5155 100644 --- a/local/recipes/system/redbear-power/source/src/render.rs +++ b/local/recipes/system/redbear-power/source/src/render.rs @@ -2122,6 +2122,25 @@ pub fn render_cpu_table<'a>( pub fn render_keybar<'a>(app: &'a App) -> Paragraph<'a> { let theme = &app.theme; + if let Some(ref buf) = app.process_filter_input { + let line = format!( + "Filter: {} ({} match{}) Enter:apply Esc:clear ↑↓:select", + if buf.is_empty() { + "" + } else { + buf.as_str() + }, + app.visible_processes().len(), + if app.visible_processes().len() == 1 { + "" + } else { + "es" + } + ); + return Paragraph::new(line) + .style(theme.value_warm) + .block(Block::default().borders(Borders::NONE)); + } let gov = format!(" g:{}", app.cpufreq.active.as_str()); let interval = format!(" [/]:{}ms", app.poll_ms); let tab_hints: &str = if app.current_tab == crate::app::TabId::Process {