Skip to content

Commit 7bd8e6d

Browse files
committed
top: tui impl n # (max list display)
1 parent 320896e commit 7bd8e6d

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

src/uu/top/src/tui/input.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub(crate) enum InputMode {
1818
}
1919
#[derive(Eq, PartialEq, Copy, Clone)]
2020
pub(crate) enum InputEvent {
21+
MaxListDisplay,
2122
NumaNode,
2223
}
2324

@@ -80,6 +81,17 @@ pub fn handle_input(
8081
stat.memory_graph_mode = stat.memory_graph_mode.next();
8182
should_update.store(true, Ordering::Relaxed);
8283
}
84+
char!('n') => {
85+
let mut stat = tui_stat.write().unwrap();
86+
stat.input_label = format!(
87+
"Maximum tasks = {}, change to (0 is unlimited)",
88+
stat.max_list_display
89+
);
90+
stat.input_value.clear();
91+
stat.input_mode = InputMode::Input(InputEvent::MaxListDisplay);
92+
93+
should_update.store(true, Ordering::Relaxed);
94+
}
8395
char!('R') => {
8496
{
8597
let mut stat = tui_stat.write().unwrap();
@@ -147,6 +159,17 @@ pub fn handle_input(
147159
stat.cpu_column = stat.cpu_column % 8 + 1;
148160
should_update.store(true, Ordering::Relaxed);
149161
}
162+
char!('#') => {
163+
let mut stat = tui_stat.write().unwrap();
164+
stat.input_label = format!(
165+
"Maximum tasks = {}, change to (0 is unlimited)",
166+
stat.max_list_display
167+
);
168+
stat.input_value.clear();
169+
stat.input_mode = InputMode::Input(InputEvent::MaxListDisplay);
170+
171+
should_update.store(true, Ordering::Relaxed);
172+
}
150173
char!('<') => {
151174
{
152175
let mut stat = tui_stat.write().unwrap();
@@ -255,6 +278,21 @@ fn handle_input_value(
255278
should_update: &AtomicBool,
256279
) {
257280
match input_event {
281+
InputEvent::MaxListDisplay => {
282+
let input_value = { tui_stat.read().unwrap().input_value.parse::<usize>() };
283+
if input_value.is_err() {
284+
let mut stat = tui_stat.write().unwrap();
285+
stat.reset_input();
286+
stat.input_error = Some(" invalid number ".into());
287+
should_update.store(true, Ordering::Relaxed);
288+
return;
289+
}
290+
let input_value = input_value.unwrap();
291+
let mut stat = tui_stat.write().unwrap();
292+
stat.max_list_display = input_value;
293+
stat.reset_input();
294+
should_update.store(true, Ordering::Relaxed);
295+
}
258296
InputEvent::NumaNode => {
259297
let input_value = { tui_stat.read().unwrap().input_value.parse::<usize>() };
260298
let numa_nodes = get_numa_nodes();

src/uu/top/src/tui/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,11 @@ impl Widget for Tui<'_> {
497497

498498
self.render_header(layout[0], buf);
499499
self.render_input(layout[1], buf);
500-
self.render_list(layout[2], buf);
500+
let mut list_area = layout[2];
501+
if self.stat.max_list_display > 0 {
502+
let list_height = min(layout[2].height, self.stat.max_list_display as u16) + 1; // 1 for header
503+
list_area.height = list_height;
504+
}
505+
self.render_list(list_area, buf);
501506
}
502507
}

src/uu/top/src/tui/stat.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub(crate) struct TuiStat {
2020
pub cpu_column: u16,
2121
pub list_offset: usize,
2222
pub horizontal_offset: usize,
23+
pub max_list_display: usize,
2324
pub colorful: bool,
2425
pub full_command_line: bool,
2526
pub delay: Duration,
@@ -53,6 +54,7 @@ impl TuiStat {
5354
cpu_column: 2,
5455
list_offset: 0,
5556
horizontal_offset: 0,
57+
max_list_display: 0, // unlimited
5658
colorful: true,
5759
full_command_line: true,
5860
delay: Duration::from_millis(1500), // 1.5s

0 commit comments

Comments
 (0)